




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 小型多路温控采集系统设计 一 系统说明本系统采用51单片机作为控制器,控制温度采集及显示。温度传感器选用DS18B20,其单总线的通信方式可以减少系统的线路连接。DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路。内温范围55125,在-10+85时精度为±0.5可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。同时本系统选用LCD1602作为显示器件,能够同时显示16x02即32个字符(
2、16列2行)。其显示清晰,并可以显示阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,满足了系统要求。二系统电路图三、程序流程图四、程序解读注:程序分两部分。可以先用程序二读出各个器件的序列号,再将序列号填入程序一的SN48数组中,若要加入更多的器件可以扩大数组,并在程序中增加读显的循环次数。1.程序一:已知各个器件序列号读取温度 #include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar TMP4; /读取后的4个温度值uchar SN48=0x28,0x44,0x30,0xc5,0x
3、b8,0x00,0x00,0x12,0x28,0x15,0x30,0xc5,0xb8,0x00,0x00,0x0b,0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e,0x28,0x05,0x30,0xc5,0xb8,0x00,0x00,0x50;/4个器件的序列号,先读出单个序列号后填上才可以读取温度uint f4; /结果是否为负温,“0”为正温,“1”为负温。 sbit DQ=P37;/ds18b20与单片机连接口sbit RS=P30;sbit RW=P31;sbit EN=P32;unsigned char code str0="temperat
4、ure:U "unsigned char code str5=" "uchar data disdata5;uint tvalue;/温度值uchar tflag4;/温度正负标志/*LCD1602程序*/void delay1ms(unsigned int ms)/延时1毫秒(不够精确的)unsigned int i,j; for(i=0;i<ms;i+) for(j=0;j<100;j+);void wr_com(unsigned char com)/写指令/ delay1ms(1); RS=0; RW=0; EN=0; P2=com; delay
5、1ms(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(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);dela
6、y1ms(5);void display(unsigned char *p)/显示/while(*p!='0')wr_dat(*p);p+;delay1ms(1);init_play()/初始化显示 lcd_init(); wr_com(0x80);display(str0);wr_com(0xc0);display(str5); /*DS18B20程序*/void delay_18B20(unsigned int i)/延时1微秒 while(i-);void ds1820rst()/*ds1820复位*/ unsigned char x=0;DQ = 1; /DQ复位del
7、ay_18B20(4); /延时DQ = 0; /DQ拉低delay_18B20(100); /精确延时大于480usDQ = 1; /拉高delay_18B20(40); uchar ds1820rd()/*读数据*/ unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; /给脉冲信号 dat>>=1; DQ = 1; /给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); return(dat);void ds1820wr(uchar wdata)/*写数据*/unsi
8、gned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; /*发送ds1820 开始转换/*/tmstart (void) / /ds1820rst(); /复位 /delay1ms(1); /延时 /ds1820wr (0xcc); /跳过序列号命令,对所有器件有效 /ds1820wr (0x44); /发转换命令 44H, / /*/read_temp()/*读取温度值并转换*/ /uchar i,j; /uchar a,b; /fo
9、r(j=0;j<4;j+) / /ds1820rst(); /复位 /delay1ms(1); /延时 /ds1820wr(0x55); /发送ROM匹配命令 /for(i=0;i<8;i+) / /ds1820wr(SNji); /发送64位序列号 / /ds1820wr(0xbe);/*读取温度*/ a = ds1820rd (); /连续读取两位温度 /b = ds1820rd (); /tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0xf800) tflagj=0; else tvalue=tvalue+1;
10、tflagj=1; fj=tvalue*(0.625);/温度值扩大10倍,精确到1位小数/return(f4);/*/void ds1820disp()/温度值显示 uchar flagdat,i; for(i=0;i<4;i+) tvalue=fi ; disdata0=tvalue/1000+0x30;/百位数 disdata1=tvalue%1000/100+0x30;/十位数 disdata2=tvalue%100/10+0x30;/个位数 disdata3=tvalue%10/1+0x30;/小数位 if(tflagi=0) flagdat=0x20;/正温度不显示符号 el
11、se flagdat=0x2d;/负温度显示负号:- if(disdata0=0x30) disdata0=0x20;/如果百位为0,不显示 if(disdata1=0x30) disdata1=0x20;/如果百位为0,十位为0也不显示 if(i=0)wr_com(0x8d); /第一个传感器在LCD第一行第14字符显示“1”wr_dat('1');if(i=1)wr_com(0x8d);/第二个传感器在LCD第一行第14字符显示“2”wr_dat('2');if(i=2)wr_com(0x8d); /第三个传感器在LCD第一行第14字符显示“3”wr_dat
12、('3');if(i=3)wr_com(0x8d); /第四个传感器在LCD第一行第14字符显示“4”wr_dat('4'); wr_com(0xc0); /在LCD第二行第1个字符显示温度正负号 wr_dat(flagdat); /显示符号位 wr_com(0xc1); /在LCD第二行第2个字符显示百位温度值 wr_dat(disdata0);/显示百位 wr_com(0xc2); /在LCD第二行第3个字符显示十位温度值 wr_dat(disdata1);/显示十位 wr_com(0xc3); /在LCD第二行第4个字符显示个位温度值 wr_dat(dis
13、data2);/显示个位 wr_com(0xc4); /在LCD第二行第5个字符显示小数点 wr_dat(0x2e); /显示小数点 wr_com(0xc5); /在LCD第二行第6个字符显示小数位温度值 wr_dat(disdata3);/显示小数位delay1ms(1500); /*主程序*/void main() init_play();/初始化显示 while(1) tmstart();/开始转换 read_temp();/读取温度 ds1820disp();/显示/2.程序二:读取DS18B20序列号程序注:读ROM时,只能有一个器件与单片机通信。可以逐个相连来读出其ROM#incl
14、ude<reg51.h>#define uchar unsigned char#define uint unsigned intuint sn8=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10;sbit DQ=P37;/ds18b20与单片机连接口sbit RS=P30;sbit RW=P31;sbit EN=P32;void delay1ms(unsigned int ms)/延时1毫秒(不够精确的)unsigned int i,j; for(i=0;i<ms;i+) for(j=0;j<100;j+);void delay_18B20
15、(unsigned int i)/延时1微秒 while(i-);void ds1820rst()/*ds1820复位*/ unsigned char x=0;DQ = 1; /DQ复位delay_18B20(4); /延时DQ = 0; /DQ拉低delay_18B20(100); /精确延时大于480usDQ = 1; /拉高delay_18B20(40); uchar ds1820rd()/*读数据*/ unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; /给脉冲信号 dat>>=1; DQ = 1; /给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); return(dat);void ds1820wr(uchar wdata)/*写数据*/unsigned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; /读取器件序列号子程序/rom(void)ds1820rst(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 九年级历史下册 第一单元 殖民地人民的反抗与资本主义制度的扩展 第2课 俄国的改革教学设计设计(pdf) 新人教版
- Unit 2 My schoolbag Part B Let's talk Let's learn大单元整体教学设计表格式-2024-2025学年人教PEP版英语四年级上册
- 《习作:我有一个想法》教学设计-2024-2025学年统编版语文三年级上册
- 6 感官总动员 教学设计-2024-2025学年科学一年级上册苏教版
- 2024年九年级化学上册 根据化学式进行计算专题教学设计 (新版)沪教版
- 2024秋九年级语文上册 第三单元 12湖心亭看雪教学设计 新人教版
- 七年级英语下册 Module 8 Story time Unit 1 Once upon a time….第2课时教学设计(新版)外研版
- 蓝光治疗护理及注意事项
- 27 故事二则《扁鹊治病》(教学设计 )-2024-2025学年统编版语文四年级上册
- 2023六年级数学上册 三 分数除法 分数除法应用题教学设计 苏教版
- 品牌管理塑造、传播与维护课件 第7章 品牌传播管理
- 2025-2030羊肉产品入市调查研究报告
- 国家之间的合作发展-以“一带一路”为例 课件 2024-2025学年高二下学期 地理 鲁教版(2019)选择性必修2
- 2025年中国锻压机械行业市场发展分析及投资战略前景预测报告
- ESC急慢性心力衰竭诊断和治疗指南
- 周日值班制度
- 青少年心理咨询的特殊挑战试题及答案
- 湖南水泥仓施工方案
- 2025年中国人寿招聘笔试笔试参考题库附带答案详解
- 2024-2025学年高中化学上学期第十四周 化学反应速率教学实录
- 2025年初中地理中考押题卷(含解析)
评论
0/150
提交评论