(完整版)基于单片机的温度显示报警器_第1页
(完整版)基于单片机的温度显示报警器_第2页
(完整版)基于单片机的温度显示报警器_第3页
(完整版)基于单片机的温度显示报警器_第4页
(完整版)基于单片机的温度显示报警器_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 /3,南北数码管1voidsmg_we_switch(uchari)case0case0:smg_we1=smg_we4=1;break;case1:smg_we1=smg_we4=1;break;case2:smg_we1=smg_we4=1;break;case3:smg_we1=smg_we4=();break;switch(i)smg_we2=1;smg_we3smg_we2=0;smg_we3smg_we2=1;smg_we3smg_we2=1;smg_we3/*名称:delay_lms()*功能:延时1ms函数*输入:q*输出:无*voiddelay_lms(uintq)uint

2、i,j;for(i=0;iq;i+)for(j=0;j0;i一一)ETO=O;定时器中断关闭DQ=0;dat=l;/给脉冲信号DQ=1;if(DQ)/给脉冲信号dat|=0 x80;Delay_DS18B20(4);ETO二1;1/定时器中断打开return(dat);i/*写一个字节*/voidWriteOneChar(unsignedchardat)unsignedchari二0;for(i二8;i0;i一一)ETO二0;DQ二0;定时器中断关闭DQ二dat&OxOl;Delay_DS18B20(5);DQ=1;dat=l;ETO二1;定时器中断打开u8tempflag=O;负号显示*读取

3、温度*/unsignedintReadTemperature(void)unsignedchara二0;unsignedcharb二0;unsignedintt二0;u8tt=0;u8ttt=O;tt=(u8)(t4)tt=(u8)(t4);整数位ttt=(u8)(t%16)*0.0625*10);乘以10代表保留一位小数;if(tt&0 x80)Init_DS18B20();WriteOneChar(OxCC);WriteOneChar(0 x44);Init_DS18B20();WriteOneChar(OxCC);WriteOneChar(OxBE);a=ReadOneChar();b=

4、ReadOneChar();t=b;t=8;t=t|a.;节跳过读序号列号的操作/启动温度转换跳过读序号列号的操作读取温度寄存器/读低8位/读高8位/合并高低位为一个字得到/得到小数位;tempflag=l;/负号显示/实际温度值为读取值的补码elsetempflag=O;/正号显示t=tt*10+ttt;10倍return(t);放大/*校准温度*/ul6check_wendu(void)ul6c;c=ReadTemperature();去DS18B20的温漂误差returnc;/按键sbitKeyl=Pl5;sbitKey2二P33;sbitKey3二P34;SdefineKEY_SET1

5、SdefineKEY_ADDSdefineKEY_MINUSH=/获取温度值并减/设置键/加按键/减按键设置/加/减/函数:u8Key_Scan()/应用:temp=u8Key_Scan();/描述:按键扫描并返回按下的键值/参数:NONE/返回:按下的键值/版本:VER1.0/H期:2015-05-29/备注:该函数带松手检测,按下键返回一次键值后返回0,直至第二次按键按下H=u8Key_Scan()staticu8key_up=l;/按键按松开标志if(key_up&(Key101|Key201|Key30)delay_ms(10);/去抖动key_up=0;if(Keyl=0)retur

6、n1;elseif(Key20)return2;elseif(Key30)return3;elseif(Key1l&Key2l&Key31)key_up=l;return0;/无按键按下voidmain(void)u8key;wendu=check_wendu();取函数防止开机85Cdelay_ms(1000);wendu=check_wendu();取函数防止开机85CInit_TimerO();/初始化时调用温度读/初始化时调用温度读while(1)key=Key_Scan();if(ReadTempFlag1)ReadTempFlag=O;wendu=check_wendu();if(

7、key=KEY_SET)Mode+;/主循环按键扫描读取温度值switch(Mode)值判断模式的监控case0:监控模式if(tempflag)dis_smg0=DisplayOther2;elsedis_smgODisplayNumwendu/1000%10;dis_smgl=DisplayNumwendu/100%10;disusing2DisplayNumwendu/10%10&Display0therl;dis_smg3=DisplayNumwendu%10if(wendu=(yushe_wendu*10)/温度大于等于预设温度值时(为什么是大于预设值*10:因为我们要显示的温度是有

8、小数点后一位,是一个3位数,25.9C时实际读的数是259,所以判断预设值时将预设值*10)baojing=0;蜂鸣器报警LED_wendu=0;温度报警灯else/温度值小于预设值时LED_wendu=l;报警灯baojing=l;报警break;打开打开关闭停止case1:打开打开关闭停止dis_smgODisplayNumyushe_wendu/100%10;dis_smgDisplayNumyushe_wendu/10%10;dis_smg2DisplayNumyushe_wendu%10&Display0therl;dis_smg3=DisplayOther3;if(key=KEY_

9、ADD)加键按下yushe_wendu+;/预设温度值(阀值)加1if(yushe_wendu=99)/当阀值加到大于等于99时yushe_wendu=99;/阀值固定为99if(key=KEY_MINUS)减键按下if(yushe_wendu=l)/当温度上限值减小到1时固定yushe_wendu二1;固定为1yushe_wendu-;预设温度值减一,最小为0break;/执行后跳出switchdefaultMode二Mode二0;/恢复正常模式break;/*定时器初始化子程序voidInit_TimerO(void)TMOD|=0 x01;/使用模式1,16位定时器,使用符号可以在使用多个定时器时不受影响EA二1;/总中断打开ET0二1;/定时器中断打开TR0二1;/定时器开关打开/*定时器中断子程序*/voidTimerO_isr(void)i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论