用数码管与DS18B20设计温度报警器_第1页
用数码管与DS18B20设计温度报警器_第2页
用数码管与DS18B20设计温度报警器_第3页
用数码管与DS18B20设计温度报警器_第4页
用数码管与DS18B20设计温度报警器_第5页
全文预览已结束

下载本文档

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

文档简介

#include#include#define uchar unsigned char#define uint unsigned intsbit dq=P3 6;sbit BEEP=P3 7;sbit hi _ led=P1 4;sbit lo _ led=P1 5;Bit HI_Alarm=0,LO _ Alarm=0;bit ds 18 b20 _ IS _ OK=1;Uchar code dsy _ code =0x3f,0x06,0xx5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f/数码管常用阴极段代码Uchar code df _ table =0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9/温度小数点比较表uchar current=0;/温度整数部分Uchardisplay _ digit =0,0,0 ;/数码管要显示的温度Uchar Temp_Value=0x00,0x 00 ;/DS0832读取的温度值Uint Time0 _ Count=0/计时器中断数Char Alarm_Temp_HL2=70,-20 ;/* * * * * * * * *计划延迟* * * * * * * * * * * * * * * */Void Delay(uint x)while(-x);/* * * * * * * *初始化ds 18 b20 * * * * * * * * * * */Uchar Init_DS18B20()Uchar statusDQ=1;delay(8);DQ=0;delay(90);DQ=1;delay(8);Status=DQdelay(100);DQ=1;Return status/* * * * * * * * ds18b 20读字节* * * * * * * * * */Uchar ReadOneByte()Uchar i,dat=0;DQ=1;_ nop _();for(I=0);i8;I)DQ=0;dat=1;DQ=1;_ nop _();_ nop _();if(DQ)dat |=0x 80;delay(30);DQ=1;Return dat/* * * * * * * * ds18b 20写字节* * * * * * * * * */Void WriteOneByte(uchar dat)uchar I;for(I=0);i8;I)DQ=0;DQ=dat0x01delay(5);DQ=1;dat=1;/* * * * * * * * *从DS18B20读取温度* * * * * * * * * * */Void Read_Temperature()if(Init _ ds 18 b20()=1)ds 18 b20 _ IS _ OK=0;ElseWriteOneByte(0x cc);WriteOneByte(0x44);init _ ds 18 b20();WriteOneByte(0x cc);WriteOneByte(0x be);temp _ Value0=readone byte();temp _ Value1=ReadOneByte();ds 18 b20 _ IS _ OK=1;/* * * * * * * * * *设置DS18B20的预警值* * * * * * * * * */Void Set_Alarm_Temp_Value()init _ ds 18 b20();WriteOneByte(0x cc);/跳过序列号WriteOneByte(0x4e);/将设置的温度警报值写入DS18B20WriteOneByte(Alarm _ Temp _ HL0);/写入THWriteOneByte(Alarm _ Temp _ HL1);/TL写入WriteOneByte(0x7f);/12位精度init _ ds 18 b20();WriteOneByte(0x cc);/跳过序列号WriteOneByte(0x 48);/将温度警报值存储在DS18B20中/* * * * * * * * * * * * * * * * * * * * * * * * * * * * *Void Display_Temperature() /显示温度uchar I;Uchar t=150/延迟值Uchar ng=0,NP=0;/负数标签和负号显示位置Char Signed _ Current _ Temp如果if(temp _ value10x F8)=0x F8)/负值,则反向添加1。设定负数标示和负数符号显示位置Temp _ Value1= Temp _ Value1;Temp _ Value0= Temp _ Value01;if(temp _ value0=0x 00)temp _ value1;ng=1;Np=0xfddisplay _ digit0=df _ tabletemp _ value00x0f;/代码表显示温度小数位数current=(temp _ value00x 0)4)|(temp _ value10x 07)4);Signed_Current_Temp=ng?-current : currentt;hi _ alarm=signed _ current _ temp=alarm _ temp _ HL0?1:0;lo _ alarm=signed _ current _ temp=alarm _ temp _ HL1?1:0;display _ digit3=current/100;display _ digit2=current 0/10;display _ digit1=current;If(Display_Digit3=0) /高值为0,不现实,负号在后面移动 Display _ Digit3=10;Np=0xfbIf(Display_Digit2=0)display _ Digit2=10;Np=0xf7for(I=0);I30I )/显示数码管刷新温度值P0=0X39P2=0X7Fdelay(t);P2=0XFFP0=0X63P2=0XBFdelay(t);P2=0XFFP0=DSY _ CODEDisplay _ Digit0;P2=0XDFdelay(t);P2=0XFFP0=(dsy _ codedisplay _ digit1)|0x 80;P2=0XEFdelay(t);P2=0XFFP0=DSY _ CODEDisplay _ Digit2;P2=0XF7delay(t);P2=0XFFP0=DSY _ CODEDisplay _ Digit3;P2=0XFBdelay(t);P2=0XFFIf(ng) P0=0X40P2=npdelay(t);P2=0XFF/* * * * * * * * * * * *计时器0中断,控制报警声* * * * * * * * * * * */Void T0_INT()interrupt 1TH0=-1000/256;TL0=-1000% 6;非=!BEEPIf(Time0_Count=400)Time0 _ Count=0if(HI _ Alarm)HI _ LED= HI _ LED;else HI _ LED=1;if(LO _ Alarm)LO _ LED= LO _ LED;else LO _ LED=1;Void main()IE=0X82TMOD=0X01/方法1计数TH0=-1000/256;TL0=-1000% 6;TR0=0;HI _ LED=1;LO _ LED=1;set _ Alarm _ Temp _ Value();read _ Temp

温馨提示

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

评论

0/150

提交评论