附录3 程序
# include //头文件 # include # include
//测温头文件
//液晶显示头文件
//上限温度报警信号
//超过上限温度,报警 //加1和减1标志
#include
unsigned char user_temper=37; 是0.25C unsigned
unsigned char t[2],*pt; 数组与主函数通信的
unsigned char TempBuffer1[17]={0x2b,0x20,0x30,0x30,0x2e,0x30,0x30,0x20,
0x53,0x45,0x2b,0x20,0x30,0x30,0x2e,0x30,'\\0'}; //显示实时温度,上电时显示+ 00.00 SET+ 00 0x54,0x4c,0x3a,0x2b,0x20,0x30,0x30,0x20,'\\0'}; //显示温度上下限,上电时显示TH:+ 00 TL:+ 00
//用来存放温度值,测温程序就是通过这个 //用户标定温度
unsigned char TH=30,TL=20,RS=0x3f; //上限温度50,下限20,分辨率10位,也就bit set_temper_flag;
bit set_temper_dot_flag;
//上限报警设置标志
//设置控制标志温度标志 //报警开关
unsigned char TempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x20,0x30,0x30,0x20,
unsigned char code dotcode[4]={0,25,50,75};
因显示分辨率为0.25,但小数运算比较麻烦,故采用查表的方法*
再将表值分离出十位和个位后送到十分位和百分位********************/ void sounddelay(); void tempsound();
23
/***********用户设定温度转换为LCD显示数据************** *功能:将用户设定温度user_temper,分离出符号位,百、十、个位 { 码
TempBuffer1[11]=temper/100+0x30;
//分离出temper的
百十个位
if( TempBuffer1[11]==0x30) TempBuffer1[11]=0xfe; //百位数消隐 TempBuffer1[12]=(temper0)/10+0x30; 位 }
/***************温度转换为LCD显示数据************
*功能:将报警温度,分离出符号位,百、十、个位,并将它们转化为ACSII码,送到液晶显示缓冲区
void alarm_LCD( unsigned char TH, unsigned char TL) {
TempBuffer0[3]=0x2b; if(TL>0x7f)
else TempBuffer0[11]=0x2b; //0x2B为\的ASCII码 TempBuffer0[4]=TH/100+0x30; 十个位
if( TempBuffer0[4]==0x30) TempBuffer0[4]=0xfe; //百位数消隐 TempBuffer0[5]=(TH0)/10+0x30; TempBuffer0[6]=(TH0)+0x30; TempBuffer0[12]=TL/100+0x30; 十个位
if( TempBuffer0[12]==0x30) TempBuffer0[12]=0xfe; / /百位数消隐 TempBuffer0[13]=(TL0)/10+0x30; TempBuffer0[14]=(TL0)+0x30;
//分离出十位 //分离出个位
//分离出十位 //分离出个位
//分离出TH的百
//0x2B为\的ASCII码
TempBuffer1[15]=user_dot_temper+0x30;
//分离出十位
//分离出个
TempBuffer1[13]=(temper0)+0x30;
TempBuffer1[10]=0x2b; / /0x2B为\的ASCII 并将它们转化为ACSII码,送到液晶显示缓冲区 void user_temper_LCD(unsigned char temper)
//分离出TL的百
24
}
/**********温度转换为LCD显示数据**************** *功能:将两个字节的温度值,分离出符号位,整数及小数 {
unsigned char x=0x00,y=0x00; t[0]=*pt; pt++; t[1]=*pt; }
else TempBuffer1[0]=0x2b; t[1]<<=4; 位
t[1]=t[1]&0x70; 个有效数字位 x=t[0]; 还要用到它 x>>=4; 右移4位 x=x&0x0f; 位代表小数 t[1]=t[1]|x; 成一个字节 soundvalue1=t[1];
if(t[1]>user_temper) {dc_motor_run=1;} //如果温度高于用户标定温度,则报警
else {dc_motor_run=0;} TempBuffer1[1]=t[1]/100+0x30; ASCII码
if( TempBuffer1[1]==0x30) TempBuffer1[1]=0xfe; //百位数消隐 TempBuffer1[2]=(t[1]0)/10+0x30; TempBuffer1[3]=(t[1]0)+0x30; t[0]=t[0]&0x0c;
//分离出十位 //分离出个位
//+0x30 为变 0~9
//将高低字节的有效值的整数部分拼
//和前面两句就是取出t[0]的高四位,t[0]的低四
//
//将t[0]暂存到X,因为取小数部分 //取出高字节的3
//0xfe为变\的ASCII码
//将高字节左移4
并将它们转化为ACSII码,送到液晶显示缓冲区 void temper_LCD(void)
//取有效的两位小数
25
t[0]>>=2; x=t[0];
//左移两位,以便查表
//查表换算成实际的小数
//分离出十分位 //分离出百分位
y=dotcode[x]; soundvalue2=y;
TempBuffer1[5]=y/10+0x30; }
TempBuffer1[6]=y+0x30;
26