《电子温度计DS18B20程序电路图.doc》由会员分享,可在线阅读,更多相关《电子温度计DS18B20程序电路图.doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流电子温度计DS18B20程序电路图.精品文档.它的功能是:1.读出当前温度值。2.可通过按键调整报警温度上下限。按第一个键,进入温度上线调节模式,第二个键温度加,第三个键温度减,再按一下第一个键,进入温度下线调节模式,第二个键温度加,第三个键温度键,再按一下第一个键,正常显示当前温度。3.当进入报警温度上下限调节时,红灯亮,当显示当前温度是,绿灯亮。4.当当前温度超过上限温度时,或者低于下限温度时,蜂鸣器报警且黄灯闪烁。需要说明的是,一般情况下,DQ引脚应该有一个上拉电阻来拉高电平,但是我通过观察发现,初始状态下,89C52单片机的引脚都为高
2、电平,故我将上拉电阻去除,1820与单片机正常通信,加上上拉电阻,反而不能正常通信。#include #include#define uchar unsigned char#define uint unsigned intsbit DQ=P30;sbit Speak=P17;sbit Out=P32;sbit Button1=P14;sbit Button2=P15;sbit Button3=P16;sbit Ledblue=P10;sbit Ledred=P11;bit Point;uint T;int Up=980,Down=300,Tplace=0;code uchar Ledcode=
3、0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x8f; /*数码管显示的数字0123456789*/code uchar Ledcode_s=0xbf,0x86,0xdb,0xcf, /*带小数点数码管显示0123456789-*/ 0xe6,0xed,0xfd,0x87,0xff,0xef,0x40;code uchar Ledplace=0,0x1e,0x1d,0x1b,0x17,0x0f; /*数码管的位置1 2 3 4 5 位*/void Delay_2us(uchar num_us) /*可调度为2us,最大误差为6us,最大延
4、时510us*/while(-num_us)void Delay_8us(uint num_us) /*延时8微妙 最大误差263us*/while(-num_us);void Delay_ms(uint num_ms) /*延时 1毫秒*/uint i;while(num_ms-)for(i=0;i123;i+)void Speaker() /*蜂鸣器 响*/uint i=50;while(-i) Speak=Speak;Delay_8us(500);void Nospeaker() /*蜂鸣器 不响*/Speak=0;bit Reset() /*复位*/bit flag;DQ=1;_nop
5、_();DQ=0;Delay_8us(70);DQ=1;Delay_2us(20);flag=DQ;Delay_2us(70);DQ=1;Delay_2us(70);return flag;void Writedata(uchar dat) /*写数据*/uchar i;bit flag;for(i=0;i1;DQ=1;Delay_2us(2);Readdata() / *读数据*/uchar i=0,dat=0;bit flag=0;for(i=0;i1;if(flag)dat|=0x80;Delay_2us(3);Out=0;return dat;uint ReadTem() /*温度转换
6、*/uint High,Low;Reset();Writedata(0xcc);Writedata(0x44);Delay_8us(85);Reset();Writedata(0xcc);Writedata(0xbe);Delay_8us(85);Low=Readdata();High=Readdata();Point=High&0xf8;if(Point)T=(High8)|Low)+1)*0.625;elseT=(HighUp&Point=0)|(TDown&Point=1)Speaker();elseNospeaker();Out=1;main(void) /*主程序*/EA=1;EX0
7、=1;IT0=0;while(1)switch(Tplace) case 0: Ledblue=1;Ledred=0;Display(ReadTem();break;case 1: Ledred=1;Ledblue=0;Point=0;Display(Up);break;case 2: Ledred=1;Ledblue=0;Point=1;Display(Down);break;if(!Button1)Delay_ms(300);Tplace+;if(Tplace=3)Tplace=0;if(!Button2&Tplace=1)Delay_ms(300);Up=Up+10;if(Up990)Up=0;if(!Button3&Tplace=1)Delay_ms(300);Up=Up-10;if(Up0)Up=990;if(!Button2&Tplace=2)Delay_ms(300);Down=Down-10;if(Down550)Down=0;用ISIS模拟,显示正常,但是将模拟的电路焊出来,反而出现了几个问题:1. 必须去掉第五位数码管选择位管脚的三极管,数码管方能正常显示。2. 数码管显示的亮度不够亮。焊好的电路图如下:
限制150内