带液晶显示的温度报警器田婷王洁王娟王君梅1、显示温度值画面2、显示走时画面3、显示温度上下限值画面1、报警功能2、按键功能3、画面切换4、附加功能功能任务与要求voidmain(){TMOD=0x01;TH0=15536/256;TL0=15536%256;TR0=1;EA=1;ET0=1;lcd_init();diy();while(1){key();anjian();read_temp;been();ds1820disp();}}主
函
关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函
数开始定时器初始化Lcd初始化自定义字符按键切换画面读取温度蜂鸣器模块显示温度采集温度处理送lcd显示显示温度值画面温度采集函数入口DS18B20复位存在否ROM操作命令(0xcc)RAM操作命令(0x44)延时等待DS18B20复位存在否ROM操作命令(0xcc)RAM操作命令(0xbe)数据传输YNYN温度采集函数入口read_temp(){uchara,b;ds1820rst();ds1820wr(0xcc);//*跳过读序列号*/ds1820wr(0x44);//*启动温度转换*/ds1820rst();ds1820wr(0xcc);//*跳过读序列号*/ds1820wr(0xbe);//*读取温度*/a=ds1820_read();b=ds1820_read();wendu=b;wendu<<=8;wendu=wendu|a;if(wendu<0x0fff)flag_zf=0;else{wendu=~wendu+1;flag_zf=1;}wendu=wendu*(0.625);//温度值扩大10倍,精确到1位小数return(wendu);}**读取温度值并转换**显示温度设置°CWendu/1000+0x30取百位数Wendu%1000/100+0x30取十位数wendu%1000/100/10+0x30取个位数设置小数点位wendu%10+0x30取十分位数显示wendu判断温度符号标志位==0Y不显示符号显示‘—’号百位数==0显示不显示0百位数==0显示不显示0YNNYN显示走时画面定时1s到秒加1秒是否到60秒清0分加1分是否=60分清0时加1时=24时间清0,日加1YNYNYNY返回N利用定时器实现1s定时,(定义标志位flag_1s来判断定时时间是否到),拆字voidchaifen(void){disbuf[0]=hou/10+48;disbuf[1]=hou%10+48;disbuf[2]=':';disbuf[3]=min/10+48;disbuf[4]=min%10+48;disbuf[5]=':';disbuf[6]=sec/10+48;disbuf[7]=sec%10+48;显示温度上下限值画面unsignedchardisbuf1[16]={"HIGHis:"};unsignedchardisbuf2[16]={"LOWis:"};keynum==1,进入此画面voiddisplay(){unsignedchari;wr_com(0x80);for(i=0;i<16;i++){if(keynum==1)wr_dat(disbuf1[i]);}wr_com(0xc0);for(i=0;i<16;i++){if(keynum==1)wr_dat(disbuf2[i]);}按键切换画面定义一变量unsignedcharkeynum,通过判断keynum的值来选择对应的画面Keynum==0进入开机画面Keynum==1进入温度显示画面Keynum==2进入时间显示画面Keynum==3进入温度上下限值画面Keynum==4进入结束画面;Keynum==0voidanjian(){if(!k2){high++;if(high>99){high=0;}}if(!k3){low++;if(low>20){low=0;}}}sbitk2=P3^3;sbitk3=P3^4;Ucharhigh=23^0;Ucharlow=10^0;按键自加上下限温度上限自加一判断K3是否按下上限值>99上限值清零判断K2是否按下下限自加一下限值>20下限值清零返回Keynum==2YYNN报警功能sbitsound=P2^0;voidbeen(){if(tvalue/10
high){sound=0;delay1ms(500);sound=1;}elsesound=1;蜂鸣器报警延时500ms判断温度是否过限蜂鸣器停止报警开始返回附加功能3、一轮结束画面1、开机画面2、校时校分wr_com(0x87);//显示位置for(num=0;num<3;num++){wr_dat(tab5[num]);}wr_com(0xc7);//显示位置for(num1=0;num1<3;num1++){wr_dat(tab6[num1]);}delay1ms(3000);unsignedcharcodetab1[]={0x00,0x06,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f,0x00,0x00,0x00,0x11,0x1b,0x1f,0x1f,0x1f,0x00,0x0c,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x0e,0x04,0x00,0x1e,0x1c,0x18,0x10,0x00,0x00,0x00,0x00};开机画面unsignedcharcodetab5[]={0x01,0x02,0x03};unsignedcharcodetab6[]={0x04,0x05,0x06};一轮结束画面unsignedcharcodedisbuf5[16]={"everyoneis"};unsignedcharcodedisbuf7[16]={"NO.one!"};keynum==4进入开机画面wr_com(0xc0);for(i=0;i<16;i++){if(keynum==4)wr_dat(disbuf5[i]);}unsignedchari;wr_com(0x80);for(i=0;i<16;i++){if(keynum==4)wr_dat(disbuf7[i]);}校时校分Keynum==3校时校分返回判断K2是否按下判断K3是否按下YYNNif(keynum==2){if(k2==0)delay1ms(15);if(k2==0){while(!k2);hou++;}if(k3==0)delay1ms(15);if(k3==0){while(!k2);min++;}}谢谢