1、II高温指示灯led_ok = P2A5;II温度正常指示灯led_work =戸2八4;II工作指示灯set =戸3八7;设置按键add = P3A4;II加一按键dec = P3A5;II减一按键定义变量和常量 int count = 0;存器/按键次数寄int h;/主函数用循环计数器uint temp; uchar r;数形式uchar high = 35,low = 20;/温度值温度值整/上下限初值共阳LED段码表3 456701289不亮uchar code LED_code12= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x 9
2、0;uchar code LED_code1= 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0 x10;uchar code ditab16= 0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0 X06,0X06,0X07,0X08,0X08,0X09,0X09;小数部分转 换码表uchar data temp_data2 = 0x00,0x00;/存 储从传感器读出的温度值uchar data dp5 = 0x00,0x00,0x00,0x00,0x00;/显示单元数据,共4个数据和一个运算子函数声明vo
3、id ds_reset();始化函数一/DS18B20 初void ds write(uchar ds wrdata); 数据函数/DS18B20 写uchar ds read();读数据函数/DS18B20read temp();/读取温度函数void change_temp(uint tem);/温度数据处理void xianshi(int horl);/温度显示转换void display。;/数码管显示void keyscan();/按键查询void warn_led();/超限报警void delay(uint t); 单次25us/延时函数,*void main()LED=0x00
4、;口led1=0;Ied2=0;Ied3=0;Ied4=0;for(h=0;h4;h+) dph=8;while温度读取 uchar i; for(i=0;i0;i-) DQ=0;DQ=ds_wrdata&0X01; II 最低位移出delay(6);ds_wrdata=ds_wrdata/2; II 右移 1 位 一 一delay(1);I*函数名称:ds_read()I*函数功能:从 DS18B20读数据I*入口参数:I*输出参数:valueI*调用函数:i;value;帰*/ uchar ds_read(void) _ uchar value=0; value=1;if(DQ)value
5、|=0x80; return(value);/* 函数名称:read_temp()读温度数据数据/*输出参数:yempds_reset();ds_write();ds_read(); */temptemp_data;/传感器初始/发跳过读取/发温度转换读18B20中/读温度值的两字节合成/返回温度值化_delay(200); ds_write(0xcc);序列号命令ds_write(0x44);命令ds_write(0xcc);ds_write(0xbe);存储器temp_data0=ds_read();低字节命令temp_data1=ds_read();高字节一 一temp=temp_dat
6、a1; tempvv=8; temp=temp|temp_data0;一个整型变量return temp;chang_temp()将温度传感器中独到的数据进行转 换 */temdp/* 全局变量:dp;ditab;r;*/ void change_temp(uint tem)/温度值正uchar n=0;if(tem6348)负判断tem=65536-tem;/负温度求补码n=1;标志位置1dp4=tem&0x0f;分的值dp0=ditabdp4;分显示值dp4=tem位,即整数部分的值dp3=dp4/100;dp1=dp4%100;数据dp2=dp1/10;dp1=dp1%10;r=dp1+
7、dp2*10+dp3*100;(十进制)if(!dp3)断 dp3=0x0a;不显示dp2) dp2=0x0a;/取小数部/存入小数部/取中间八/取百位数据/取后两位/取十位数据/个位/实际温度值/符号位显示判/最高位为0时/次高位为0时不显示if何 dp3=0x0b; /负温度时最高位显示II IIxianshi()温度数据转换成显示所需 LED段码horldp;n;void xianshi(int horl) int n=0; if(horl128) horl=256-horl; n=1; dp3=horl/100; dp3=dp3 & dp2=horl%100/10; dp1=horl%
8、10; dp0=0;dp3) dp3=0x0a; if(!dp2) dp2=0x0a; if(n) /负数补码转换/百位十位小数位/高位为零不显示负数最高位显示dp3=0x0b;display。数码管显示delay()LED_code;LED_code1;*/ /*Ied1;led2;led3;led4;j;f*/ void display。 int j;for(j=0;j=3) /set键按下三次回到温度显示状态count=0; break;warned()工作情况指示灯控制void warn_led() _ if(rhigh) led_low=1; led_high=0; led_ok =1; buzzer = 0; else if(rt-);/*/程序结束
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1