嵌入式温度调节系统+方框图+C语言程序+流程图
温度调节系统总体方案设计 温度调节系统框图:
图1 温度调节系统框图2、硬件电路设计 2.1 A/D转换器的选择与接口设计
图2模拟量采样电路原理图
模拟量输入采用串行A/D转换芯片完成,串行芯片占用单片机口线较少,由于温度变化缓慢,所以转换速度完全可以满足要求。
2.2 键盘显示电路温度的设定与测量结果通过键盘和数码管显示电路完成。4位数码管,用来显
示温度的给定值和温度的测量值。键盘由16个键组成,其中0~9数字键用于各种参数的设定。键盘显示电路如图所示。
图3 键盘显示电路3、软件设计
软件设计采用C语言,模块化结构设计。包括初始化程序、主程序、A/D转换和数据采集程序、键盘显示程序等。
3.1主程序框图
3.2 程序代码
(1)模块以串口为例
串行口通信模块程序:串行通讯中断主要是实现单片机和外部的串行通讯。
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
#define ReSendStatusR SCI0SR1
#define ReTestBit 5
#define SendTestBit 7
#define ReSendDataR SCI0DRL
void SCIInit(void);
void SCISend1(char o);
void SCISendN(char n,char ch[]);
char SCIRe1(char *p);
char SCIReN(char n,char ch[]);
void SCIInit(void);
void SCISend1(char o);
本文来自优~文*论/文|网
char SCIReN(char n,char ch[]);
void SCIInit(void)
{ char t;
//定义波特率Bt=9600,SCI0BD=fBUS/(16*Bt)
SCI0BDL = 0x34; //须先给低8位赋值
SCI0BDH = 0x00; //再给高8位赋值
SCI0CR1 = 0x00; //设置允许SCI,正常码输出,8位数据,无校验
t = SCI0DRL; //读数据寄存器(清0)
t = SCI0SR1; //读状态寄存器(清0)
SCI0CR2 = 0x0C; //允许SCI0接收和发送 查询方式
}
void SCISend1(char o)
{ //判断ReStatusR的第SendTestBit位是否为1,是1可以发送
while (1)
if ((ReSendStatusR & (1<<SendTestBit)) != 0)
毕业论文http://www.youerw.com
for (i=0; i<n; i++)
SCISend1(ch[i]);
}
charSCIRe1(char *p)
{ int k;
char i;
//ReStatusR第ReTestBit位为1表示可接收数据
for (k=0; k<0xfbbb; k++)
if ((ReSendStatusR & (1<<ReTestBit)) != 0)
{ i = ReSendDataR;
*p = 0x00;
break;
}
//接收失败
if (k >= 0xfbbb)
{ i=0xff;
*p=0x01;
}
return i; //返回接收到的数据
}
//SCIReN:HC08串行接收N个字节-----------------------------------------------*
//功 能:接收N个字节数据,并存放在ch数组中 *
//参 数:n=待接收的数据字节数,ch=存放待接收数据的数组首地址 *
//返 回:接收标志=0收到数据,=1未收到数据 *
//内部调用函数:SCIRe1 *
//-------------------------------------------------------------------------*
charr SCIReN(char n,char ch[])
{ char m;
char fp;
m = 0;
//接收n个数据
while (m<n)
{ ch[m] = SCIRe1(&fp);
if (fp == 1) return 1; //只要有1个字节数据没接收到就返回报错
m++;
} return 0;1473