DS18B20的温度读取和液晶显示_第1页
DS18B20的温度读取和液晶显示_第2页
DS18B20的温度读取和液晶显示_第3页
DS18B20的温度读取和液晶显示_第4页
DS18B20的温度读取和液晶显示_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

1、TX-1 开发板 DS18B20 的温度读取和液晶显示#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code digit10="0123456789"uchar code error="Error!Check!"uchar time;uchar TL,TH,TN,TD;sbit dula=P2A6;sbit wela=P2A7;sbit lcdrs=P3A5;sbit lcden=P3A4;

2、sbit DQ=P2A2;void delayus(uint z);void delay1ms();void delaynms(uchar n);void lcd_init();void lcd_wc(uchar com);void lcd_wd(uchar dat);bit Init_DS18B20();void display_error();void display_dot();void display_temp1(uchar x);void display_temp2(uchar x);WriteOneChar(uchar dat);uchar ReadOneChar(void);vo

3、id ReadyReadTemp();void main()lcd_init();delaynms(5);display_dot();while(Init_DS18B20()=1)display_error();不断检测并显示温度读温度准备 先读的是温度值低位 接着读的是温度值高位while(1)/delaynms(100);ReadyReadTemp(); /TL=ReadOneChar(); / TH=ReadOneChar(); /TN=TH*16+TL/16;/ 实际温度值 =(TH*256+TL)/16, 即: TH*16+TL/16 / 这样得出的是温度的整数部分, 小数部分被丢弃

4、了TD=(TL%16)*10/16; / 计算温度的小数部分, 将余数乘以 10再除以 16 取整, /这样得到的是温度小数部分的第一位数字( 保留 1 位小数 )display_temp1(TN); /显示温度的整数部分display_temp2(TD); /显示温度的小数部分delaynms(10);void lcd_init()dula=0;wela=0;lcd_wc(0x38);delaynms(5);lcd_wc(0x38);/ 写两次以确保初始化成功lcd_wc(0x01);lcd_wc(0x0e);lcd_wc(0x06);lcd_wc(0x80);void lcd_wc(uch

5、ar com)lcdrs=0;P0=com;delaynms(3);lcden=1;delaynms(6);lcden=0;void lcd_wd(uchar dat)lcdrs=1;P0=dat;delaynms(3);lcden=1;delaynms(6);lcden=0;void delay1ms()unsigned char i,j;for(i=0;i<10;i+)for(j=0;j<33;j+);void delaynms(uchar n) unsigned char i;for(i=0;i<n;i+)delay1ms();bit Init_DS18B20()bit

6、 flag;DQ = 1;/for(time=0;time<2;time+); /DQ = 0;/for(time=0;time<200;time+);/480960us 的低电平复位脉冲 )DQ = 1;/for(time=0;time<20;time+);输出存在脉冲)flag=DQ;/for(time=0;time<200;time+);/return(flag);/先将数据线拉高略微延时约6 微秒再将数据线从高拉低,要求保持 480960us略微延时约 600 微 ?( 以向 DS18B20 发出一持续释放数据线(将数据线拉高)/延时约30us (释放总线后需等

7、待1560us让DS18B20让单片机检测是否输出了存在脉冲(DQ=0表示存在)延时足够长时间,等待存在脉冲输出完毕返回检测成功标志void display_error()uchar i;lcd_wc(0x80);/i = 0;/写显示地址,将在第 1 行第 1 列开始显示从第一个字符开始显示while(errori != '0')/只要没有写到结束标志,就继续写lcd_wd(errori); /i+;/delaynms(100); /while(1); /将字符常量写入 LCD指向下一个字符延时100ms较长时间,以看清关于显示的说明进入死循环,等待查明原因void disp

8、lay_dot() lcd_wc(0x49+0x80);/ lcd_wd('.');/写显示地址,将在第 2 行第 10 列开始显示将小数点的字符常量写入 LCD延时1ms给硬件一点反应时间delaynms(50); / void display_temp1(uchar x)uchar j,k,l; /j,k,l分别储存温度的百位、十位和个位j=x/100;/取百位k=(x%100)/10;/ 取十位l=x%10;/ 取个位lcd_wc(0x46+0x80);/ lcd_wd(digitj); / lcd_wd(digitk); / lcd_wd(digitl); /写显示地址

9、 , 将在第 2 行第 7 列开始显示将百位数字的字符常量写入LCD将十位数字的字符常量写入LCDdelaynms(50);/延时1ms给硬件一点反应时间void display_temp2(uchar x)lcd_wc(0x4a+0x80); / lcd_wd(digitx); / delaynms(50); /写显示地址, 将在第 2 行第 11 列开始显示将小数部分的第一位数字字符常量写入 LCD延时1ms给硬件一点反应时间WriteOneChar(uchar dat)uchar i=0;for(i=0;i<8;i+)DQ =1;/_nop_();/DQ=0;/DQ=dat&

10、;0x01; /线上等待DS18B20采样先将数据线拉高 等待一个机器周期 将数据线从高拉低时即启动写时序 利用与运算取出要写的某位二进制数据,/ 并将其送到数据for(time=0;time<10;time+);/ 延时约 30us, DS18B20在拉低后的约 1560us期间从数据线上采样DQ=1;/释放数据线for(time=0;time<1;time+);/ 延时 3us, 两个写时序间至少需要 1us 的恢复期dat>>=1;/将 dat 中的各二进制位数据右移 1 位for(time=0;time<4;time+); /uchar ReadOneCh

11、ar()稍作延时 , 给硬件一点反应时间unsigned char i=0;unsigned char dat; / for (i=0;i<8;i+)储存读出的一个字节数据DQ =1;_nop_();DQ = 0;/先将数据线拉高等待一个机器周期单片机从DS18B2a卖书据时,将数据线从高拉低即启动读时序将个位数字的字符常量写入LCDdat>>=1;_nop_();/等待一个机器周期DQ = 1;/将数据线for(time=0;time<2;time+);/ if(DQ=1) dat|=0x80;/elsedat|=0x00;/for(time=0;time<8;time+);/ 期 return(dat);/void ReadyReadTemp() Init_DS18B20();/WriteOneChar(0xCC);/WriteOneChar(0x44);/for(time=0;time<100;time+);/ Init_DS18B20();/WriteOneChar(0xCC);/WriteOneChar(0xBE);/一个机器周期号线"人为"拉高,为单片机检测 DS18B20的输出电平作准备延时约6us,使主机在15us内采样如果读到的数据是1 ,则将1 存入dat如果读到的数据是0

温馨提示

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

最新文档

评论

0/150

提交评论