




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DS18B20多点测温(读序列,匹配序列, 51 C程序,1602显示) 由于本人在前两天找 DS18B20多点测温(51 C程序),网上下载了很多,但是都不是很理 想,后来,自己总结前人的知识,重新写了这个程序。其中包括程序一:单个读序列号。程 序二,匹配并且读两个DS18B20,当然,读多个与读两个基本原理一样,只要加上其序列号等即可。本程序所有显示都是用 LCD1602 显示。程序一:度序列号,并用 1602 显示, 1602 从左到右分别是低到高位。#include<reg51.h>#define uchar unsigned char#define uint unsign
2、ed intsbit DQ=P3A7;/ds18b20 与单片机连接口sbit RS=P3A0;sbit RW=P3A1;sbit EN=P3A2;unsigned char code str1=""unsigned char code str2=""uchar fCode8;uchar data disdata5;uint tvalue;/ 温度值uchar tflag;/温度正负标志 void delay1ms(unsigned int ms)/ 延时 1 毫秒(不够精确的)lcd1602程序 *unsigned int i,j;for(i=0;i&
3、lt;ms;i+)for(j=0;j<100;j+);void wr_com(unsigned char com)/ 写指令 / delay1ms(1);RS=0;RW=0;EN=0;P2=com;delay1ms(1);EN=1;delay1ms(1);EN=0;void wr_dat(unsigned char dat)/ 写数据 / delay1ms(1);RS=1;RW=0;EN=0;P2=dat;delay1ms(1);EN=1;delay1ms(1);EN=0;void lcd_init()/ 初始化设置 /delay1ms(15);wr_com(0x38);delay1ms
4、(5);wr_com(0x08);delay1ms(5);wr_com(0x01);delay1ms(5);wr_com(0x06);delay1ms(5);wr_com(0x0c);delay1ms(5);void display(unsigned char *p)/ 显示 /while(*p!='0')wr_dat(*p);p+;delay1ms(1);void init_play()/ 初始化显示 lcd_init();wr_com(0x80);display(str1);wr_com(0xc0);display(str2);/* *ds1820 * void delay
5、_18B20(unsigned int i)/ 延时 1 微秒 while(i-);void ds1820rst()/*ds1820 复位 */ uchar x=0;DQ = 1;/DQ 复位delay_18B20(4); / 延时DQ = 0;/DQ 拉低delay_18B20(100); / 精确延时大于 480usDQ = 1; / 拉高 delay_18B20(40);uchar ds1820rd()/* 读数据 */ uchar i=0;uchar dat = 0;for (i=8;i>0;i-) DQ = 0; / 给脉冲信号dat>>=1;DQ = 1; /给脉
6、冲信号 if(DQ) dat|=0x80;delay_18B20(10);return(dat);void ds1820wr(uchar wdata)/* 写数据 */ uchar i=0;for (i=8; i>0; i-) DQ = 0;DQ = wdata&0x01; delay_18B20(10);DQ = 1;wdata>>=1;read_temp()/* 读取温度值并转换 */ uchar a,b;ds1820rst();ds1820wr(0xcc);/* 跳过读序列号 */ ds1820wr(0x44);/* 启动温度转换 */ ds1820rst();
7、ds1820wr(0xcc);/* 跳过读序列号 */ ds1820wr(0xbe);/* 读取温度 */ a=ds1820rd();b=ds1820rd();tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0x0fff)tflag=0;elsetvalue=tvalue+1;tflag=1;tvalue=tvalue*(0.625);/ 温度值扩大 10 倍,精确到 1 位小数 return(tvalue);/*/void ds1820disp()/ 温度值显示uchar flagdat;disdata0=tvalue/1000+
8、0x30;/ 百位数 disdata1=tvalue%1000/100+0x30;/ 十位数 disdata2=tvalue%100/10+0x30;/ 个位数 disdata3=tvalue%10+0x30;/ 小数位 if(tflag=0)flagdat=0x20;/ 正温度不显示符号elseflagdat=0x2d;/ 负温度显示负号 :-if(disdata0=0x30)disdata0=0x20;/ 如果百位为 0,不显示if(disdata1=0x30)disdata1=0x20;/ 如果百位为 0,十位为 0 也不显示 wr_com(0xc0);wr_dat(flagdat);/
9、 显示符号位wr_com(0xc1);wr_dat(disdata0);/ 显示百位 wr_com(0xc2);wr_dat(disdata1);/ 显示十位 wr_com(0xc3);wr_dat(disdata2);/ 显示个位wr_com(0xc4);wr_dat(0x2e);/ 显示小数点wr_com(0xc5);wr_dat(disdata3);/ 显示小数位void DispCode()unsigned char i,temp;ds1820rst(); ds1820wr(0x33);for (i=0;i<8;i+) fCodei=ds1820rd();wr_com(0x80+
10、0x40);for (i=0;i<8;i+)temp = fCodei>>4; / 显示高四位 if (temp<10)wr_dat(temp + 0x30);elsewr_dat(temp + 0x37);temp = fCodei&0x0f;/ 显示低四位 if (temp<10)wr_dat(temp+ 0x30);else wr_dat(temp + 0x37);主程序 *void main()init_play();/ 初始化显示DispCode(); / 系列号显示 delay1ms(1000);while(1)/read_temp();/ 读
11、取温度/ ds1820disp();/ 显示; 程序二:匹配序列号,并读温度。#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit RS=P3A0;sbit RW=P3A1;sbit EN=P3A2;sbit DQ=P3A7;uchar code str1=0x28,0x08,0xA7,0xBA,0x02,0x00,0x00,0x18;uchar code str2=0x28,0x0C,0xBA,0xBA,0x02,0x00,0x00,
12、0x54;uchar code table8=0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00;uchar data disdata5;uint tvalue;/ 温度值/ROM 1/ROM2/ 摄氏温度符号uchar tflag;/ 温度正负标志lcd1602程序 *void delay1ms(uint ms)/ 延时 1 毫秒(不够精确的) uint i,j;for(i=0;i<ms;i+)for(j=0;j<100;j+);void wr_com(uchar com)/ 写指令 / delay1ms(1);RS=0;RW=0;EN=0;P2=co
13、m;delay1ms(1);EN=1;delay1ms(1);EN=0;void wr_dat(uchar dat)/ 写数据 / delay1ms(1);RS=1;RW=0;EN=0;P2=dat;delay1ms(1);EN=1;delay1ms(1);EN=0;void wr_new()、 /写新字符uchar i;wr_com(0x40);for(i=0;i<8;i+)wr_dat(tablei);void lcd_init()/ 初始化设置 / delay1ms(15);wr_com(0x38);delay1ms(5);wr_com(0x08);delay1ms(5);wr_c
14、om(0x01);delay1ms(5);wr_com(0x06);delay1ms(5);wr_com(0x0c);delay1ms(5);wr_new();wr_com(0x80);wr_dat('A');wr_com(0x81);wr_dat(':');wr_com(0x89);wr_dat(0x00);wr_com(0x8a);wr_dat('C');wr_com(0xc9);wr_dat(0x00);、 /摄氏温度字符wr_com(0xca);wr_dat('C');wr_com(0xc0);wr_dat('B&
15、#39;);wr_com(0xc1);wr_dat(':');/* *ds1820 void delay_18B20(uint i)/ 延时 1 微秒 while(i-);程序 *void ds1820rst()/*ds1820 复位 */ uchar x=0;DQ = 1;/DQ 复位delay_18B20(4); / 延时DQ = 0;/DQ 拉低delay_18B20(100); / 精确延时大于 480usDQ = 1;/拉高delay_18B20(40);uchar ds1820rd()/* 读数据 */ uchar i=0;uchar dat = 0;for (i=
16、0;i<8;i+) DQ = 0; / 给脉冲信号 dat>>=1;DQ = 1; /给脉冲信号if(DQ) dat|=0x80;delay_18B20(10);return(dat);void ds1820wr(uchar dat)/* 写数据 */ uchar i=0;for (i=0; i<8; i+) DQ = 0;DQ = dat&0x01; delay_18B20(10);DQ = 1; dat>>=1;void b20_Matchrom(uchar a)/ 匹配 ROMchar j;ds1820wr(0x55);/发送匹配 ROM 命令
17、if(a=1)for(j=0;j<8;j+)ds1820wr(str1j);/ 发送 18B20 的序列号,先发送低字节if(a=2)for(j=0;j<8;j+)ds1820wr(str2j);/ 发送 18B20 的序列号,先发送低字节read_temp(uchar z)/* 读取温度值并转换 */ uchar a,b;float tt;ds1820rst();、 /读序列号/匹配 ROM 1/匹配 ROM2*/读序列号/匹配 ROM 1/ 匹配 ROM2ds1820wr(0xcc); ds1820rst();if(z=1)b20_Matchrom(1);if(z=2)b20_
18、Matchrom(2);ds1820wr(0x44);/* 启动温度转换 delay1ms(5);ds1820rst(); ds1820wr(0xcc);ds1820rst();if(z=1)b20_Matchrom(1);if(z=2)b20_Matchrom(2);ds1820wr(0xbe);/* 读取温度 */ a=ds1820rd();b=ds1820rd();tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else tvalue=tvalue+1;tflag=1;tt=tvalue*0.0625; tvalue=tt*10; return(tvalue);显示函数 *void ds1820disp(uchar z)/ 温度值显示 uchar flagdat;disdata0=tvalue/1000+0x30;/ 百位数 disdata1=tvalue%1000/100+0x30;/ 十位数 disdata2=tvalue%100/10+0x30;/ 个位数 disdata3=tvalue%10+0x30;/ 小数位if(tflag=0)flagdat=0x20;/ 正温度不显示符号elseflagdat=0x2d;/ 负温度显示负号 :-if(disdata0=0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026兴业银行南宁分行校园招聘笔试参考题库附答案解析
- 2025年临海市自然资源和规划局及下属事业单位公开选调工作人员2人笔试备考试题及答案解析
- 2025贵州印江自治县“银龄讲学计划”讲学教师招募12人笔试模拟试题及答案解析
- 2025年河北秦皇岛交警支队警务辅助岗位招聘劳务派遣人员50人笔试备考试题及答案解析
- 2026国家能源集团龙源电力陕西招聘岗位表(22人)笔试备考试题及答案解析
- 2025年公安医学突发疾病现场处理技能考核卷答案及解析
- 2025年安徽农业大学科研助理招聘2人笔试备考试题及答案解析
- 2025年急诊护理技能演练模拟试卷答案及解析
- 2025年精神科主要精神病症状识别与干预模拟卷答案及解析
- 2025年肿瘤内科肿瘤标志物检测及临床意义考核模拟测试卷答案及解析
- 规范格式的婚前财产协议格式6篇
- 2025年酒水行业精酿啤酒市场前景研究报告
- 2025年非高危行业安全生产管理能力考试练习题附答案
- 儿科常用急救技术
- IT运维服务合同(模板)7篇
- 仪器仪表安全培训课件
- 触电急救培训课件模板
- GB/T 9943-2025高速工具钢
- 猫咖设计案例解析与方案模板
- 《模拟电子技术(第三版)》全套教学课件
- 子宫破裂护理常规课件
评论
0/150
提交评论