《基于51的温度控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于51的温度控制系统设计.docx(13页珍藏版)》请在优知文库上搜索。
1、/*/*/*程序名称:温度监控系统/*程序功能:利用89C52单片机和DS18B20温度传感器实现环境*/*温度的实时测量和高、低温报警*/*程序版本:vl.0*/*作者:*/*编写时间:*/#includc#includc含_nop_()延时函数定义数据类型#defineucharunsignedchar#defineuintunsignedint定义端口#defineLEDPOsbitDQ=P32;段码输出口传感器数据口sbitSMG_q=PMO;定义数码管阳级控制脚(千位)sbitSMGj)=P。;定义数码管阳级控制脚(百位)sbitSMG-s=Pl2;定义数码管阳级控制脚(十位)sbi
2、tSMG_g=PD3;定义数码管阳级控制脚(个位)sbitbuzzer=P15;sbitIedJow=P26;sbitlcd_high=P27;蜂鸣器低温指示灯高温指示灯sbitlcd_ok=P25;温度正常指示灯sbitlcd_work=P24;sbitset=P37;sbitadd=P34;sbitdec=P35;定义变量和常量intcount=0;inth;uinttemp;ucharr;ucharhigh=35,low=20;共阳LED段码表工作指示灯设置按键加一按键减一按键按键次数存放器主函数用循环计数器温度值温度值整数形式上下限初值110IlIIl2”3456,yg“9”1”Ilu
3、charcodeLED_code12=OxcO,0xf9,0xa4,OxbO,0x99,0x92,0x82,0xf8,0x80,0x90;ucharcodeLED_codel=0x40,0x79,0x24,0x30,0x19,Ox12,0x02,0x78,0x(X),0x10);ucharcodeditabl6=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;小数局部转换码表uchardatatemp_data2=0x00,0x00;存储从传感器读出的温度值uchardatadp5=
4、0x00,0x00,0x00,0x00,0x00;显示单元数据,共4个数据和一个运算子函数声明voidds_reset();/DS18B20初始化函数voidds_write(uchards_wrdata);/DS18B20写数据函数uchards_read();read_temp();/DS18B20读数据函数读取温度函数voidchange_temp(uinttern);温度数据处理void void void void voidxianshi(int horl);display();keyscan();Warned();dclay(uint t);温度显示转换数码管显示函数按键查询函数超
5、限报警延时函数,单次25US/*主函数*/voidmain()(1.ED=OxOO;初始化显示端口Icdl=O;led2=0;led3=0;led4=0;for(h=0;h4;h+)dph=8;Iwhile(l)循环执行显示和温度读取(uchari;for(i=0;i0;i-)DQ=I;-11op-0;-110P-();DQ=O;_nop_();_nop_();_nop_();_nop_();DQ=ds_wrdata&0x01;最低位移出delay(6);ds_wrdata=ds_wrdata/2;右移1位DQ=I;delay(l);/*/*函数名称:ds_read()*/*函数功能:从DS1
6、8B20读数据*/*入口参数:无*/*输出参数:value*/*调用函数:delay();_nop_();*/*全局变量:*/*局部变量:i;ValUe;*/*木木*木*木*/uchards_read(void)uchari;ucharvalue=O;for(i=8;i0;i-)DQ=l;_nop_();_nop_();value=l;DQ=O;_nop_0;_nop_();_nop_();-nop-0;DQ=I;_nop_();-11op-0;_nop_0;_nop_();if(DQ)value=0x80;delay(6);DQ=I;return(value);)/*/*函数名称: *函数功
7、能: /*入口参数: /*输出参数: /*调用函数: /*/*全局变量: /*局部变量:read_temp()读温度数据数据无yempds_reset();ds_write();ds_read(); */delay。;temptemp-data;*/*/*/*/*/*/*/* */rcad_temp()(ds_reset();delay(200);ds_write(Oxcc);ds_write(0x44);ds_reset();delay(l);ds_write(Oxcc); ds_write(Oxbe);temp_dataO=ds_rcad(); temp-data 1 =ds_read()
8、; temp=tcmp_datal 1 ;temp6348)(tem=65536-tem;n=l;Idp4=tem&0x0f;dpO=ditabdp4;dp4=em4;dp3=dp4100;dpl=dp4%100;dp2=dpl10;dpl=dpl%10;r=dpl+dpf21*10+dpf3*100;if(!dp3)dp3=0x0a;if(!dp )(dp2=0x0a;I)if(n)dp3=0x0b;/温度值正负判断/负温度求补码标志位置1/取小数局部的值/存入小数局部显示值/取中间八位,即整数局部的值/取百位数据/取后两位数据/取十位数据/个位/实际温度值(十进制)符号位显示判断最高位为0时不显示次高位为0时不显示负温度时最高位显示”/*木*:*木*木*木*/*函数名称:xianshi()*/*函数功能:温度数据转换成显示所需LED段码*/*入口参数:horl*/*输出参数:dpj*/*调用函数:无*/*全局变量:dp;/*局部变量:n;*/voidxianshi(inthorl)intn=0;if(horl128)(horl=256-horl;n=l;Idp3=horl100;dp3=dp3fexf;dp=horl%10010;dpl=horl%10;d