温度传感器DS18B20ATC89S51单片机LCD1602液晶显示测温+可调时钟系统C程序完整.(DOC)

上传人:日度 文档编号:154564769 上传时间:2020-12-07 格式:DOC 页数:14 大小:81.50KB
返回 下载 相关 举报
温度传感器DS18B20ATC89S51单片机LCD1602液晶显示测温+可调时钟系统C程序完整.(DOC)_第1页
第1页 / 共14页
温度传感器DS18B20ATC89S51单片机LCD1602液晶显示测温+可调时钟系统C程序完整.(DOC)_第2页
第2页 / 共14页
温度传感器DS18B20ATC89S51单片机LCD1602液晶显示测温+可调时钟系统C程序完整.(DOC)_第3页
第3页 / 共14页
温度传感器DS18B20ATC89S51单片机LCD1602液晶显示测温+可调时钟系统C程序完整.(DOC)_第4页
第4页 / 共14页
温度传感器DS18B20ATC89S51单片机LCD1602液晶显示测温+可调时钟系统C程序完整.(DOC)_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《温度传感器DS18B20ATC89S51单片机LCD1602液晶显示测温+可调时钟系统C程序完整.(DOC)》由会员分享,可在线阅读,更多相关《温度传感器DS18B20ATC89S51单片机LCD1602液晶显示测温+可调时钟系统C程序完整.(DOC)(14页珍藏版)》请在金锄头文库上搜索。

1、基于ds18b20 STC89s51单片机测温系统LCD1602液晶可调时钟+温度显示(C程序完整版)温度传感器的种类众多,在应用与高精度、高可靠性的场合时 DALLAS(达拉斯)公司生产的 DS18B20 温度传感器当仁不让。超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强,使得 DS18B20 更受欢迎。对于我们普通的电子爱好者来说,DS18B20 的优势更是我们学习单片机技术和开发温度相关的小产品的不二选择。了解其工作原理和应用可以拓宽您对单片机开发的思路。如果要更全的资料请搜索“完整的ds18b20中文资料.pdf “。 DS18B20 的主要特征: 全数字温度转换及输出。

2、 先进的单总线数据通信。 最高 12 位分辨率,精度可达土 0.5摄氏度。 12 位分辨率时的最大工作周期为 750 毫秒。 可选择寄生工作方式。 检测温度范围为55C +125C (67F +257F) 内置 EEPROM,限温报警功能。 64 位光刻 ROM,内置产品序列号,方便多机挂接。 多样封装形式,适应不同硬件系统。 DS18B20 引脚功能: GND 电压地 DQ 单数据总线 VDD 电源电压 NC 空引脚 DS18B20 工作原理及应用: DS18B20 的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工

3、作流程之前我们有必要了解 18B20的内部存储器资源。18B20 共有2种形态的存储器资源,它们分别是: 1 ROM 只读存储器,用于存放 DS18B20ID 编码,其前 8 位是单线系列编码(DS18B20 的编码是19H) ,后面48 位是芯片唯一的序列号,最后 8位是以上 56的位的 CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20 共 64 位 ROM。 2 RAM 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20 共9 个字节 RAM,每个字节为 8 位。第1、2 个字节是温度转换后的数据值信息,第 3、4 个字节是用户 EEPROM(常用于温度

4、报警值储存)的镜像。在上电复位时其值将被刷新。第 5 个字节则是用户第 3 个 EEPROM的镜像。第 6、7、8 个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第 9 个字节为前 8个字节的 CRC码。EEPROM 非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据, DS18B20共3位EEPROM,并在 RAM 都存在镜像,以方便用户操作。C程序(独家专售):#include#define uchar unsigned char #define uint unsigned int#define LCDIO P2sb

5、it DQ=P37;/ds18b20与单片机连接口sbit rs=P30; sbit rd=P31;sbit lcden=P32;sbit s1=P13;sbit s2=P14;sbit s3=P15;uchar data disdata5;uint tvalue;/温度值uchar tflag;uchar count,s1num;char miao,shi,fen,day=18,mon=11,week=0;uint year=2010;uchar code table= 2010-11-18 THU;uchar code table1=00:00:00 000.0 C;uchar code

6、table2= THUFRISATSUNMONTUEWES;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)rs=0;rd=0;lcden=0;P2=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)rs=1;rd=0;lcden=0;P2=date;delay(5);lcden=1;delay(5);lcden=0;void init()uchar num;lcden=0;write_com(0x

7、38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num15;num+)write_date(tablenum);delay(5);write_com(0x80+0x40);for(num=0;num16;num+)write_date(table1num);delay(5);TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;void write_sfm(uchar add,uchar date)u

8、char shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);void write_md(uchar add,uchar date)uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);void write_year(uchar add,uint date)uchar qian,bai,shi,ge;qian=date

9、/1000;bai=date%1000/100;shi=date%1000%100/10;ge=date%1000%100%10;write_com(0x80+add);write_date(0x30+qian);write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);void write_week(uchar add,uchar date)uchar num;write_com(0x80+add);for(num=0;num3;num+) write_date(table2date);date+;delay(5);void

10、display() mon+;if(mon=13)mon=1;year+;write_year(1,year);write_md(6,mon);void keyscan()rd=0;if(s1=0)delay(5);if(s1=0) s1num+;/全局变量while(!s1);if(s1num=1)/调时间时/ TR0=0;/定时器停止/write_com(0x80+4); write_com(0x0f);/光标闪射/if(s1num=2)/调时间时/write_com(0x80+7);if(s1num=3)/调时间时/write_com(0x80+10);if(s1num=4)/调时间时/

11、write_com(0x80+14);if(s1num=5)/调时间时/write_com(0x80+0x40+1);if(s1num=6)/调时间分/write_com(0x80+0x40+4);if(s1num=7)/调时间秒write_com(0x80+0x40+7);/光标位置/ if(s1num=8)s1num=0;/s1num清零/write_com(0x0c);/光标不闪烁/TR0=1;/定时器又开始/ if(s1num!=0)if(s2=0)delay(5);if(s2=0)while(!s2);if(s1num=7)miao+;if(miao=60)miao=0;write_

12、sfm(6,miao);write_com(0x80+0x40+7);if(s1num=6)fen+;if(fen=60)fen=0;write_sfm(3,fen);write_com(0x80+0x40+4);if(s1num=5)shi+;if(shi=24)shi=0;write_sfm(0,shi);write_com(0x80+0x40+1);if(s1num=3)week=week+3;if(week=21) week=0; day+;if(mon=1)|(mon=3)|(mon=5)|(mon=7)|(mon=8)|(mon=10)|(mon=12)&(day=32) day=1; if(mon=4)|(mon=6)|(mon=9)|(mon=11)&(day=31)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号