多路ds18b20温度传感器_protues仿真

上传人:ji****n 文档编号:44925914 上传时间:2018-06-14 格式:DOC 页数:8 大小:64KB
返回 下载 相关 举报
多路ds18b20温度传感器_protues仿真_第1页
第1页 / 共8页
多路ds18b20温度传感器_protues仿真_第2页
第2页 / 共8页
多路ds18b20温度传感器_protues仿真_第3页
第3页 / 共8页
多路ds18b20温度传感器_protues仿真_第4页
第4页 / 共8页
多路ds18b20温度传感器_protues仿真_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《多路ds18b20温度传感器_protues仿真》由会员分享,可在线阅读,更多相关《多路ds18b20温度传感器_protues仿真(8页珍藏版)》请在金锄头文库上搜索。

1、 /编程:武汉理工大学 XP /时间 2012/5/25 /版本:V1.0 /DS18B20 设置为 12 位精度 /#include“reg51.h“ unsigned char code table1=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09;/不带小数 点断码 unsigned char code table2=0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08; /带小数 点断码 unsigned char code string=“temperature“; unsigned c

2、har code numtable=“0123456789ABCDEF“; /液晶显示的字符 unsigned char code txttable=“-. “; /液晶显示的符号,负号,小数点,以及 空格 unsigned char code ROM_1=0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e; /U1 ROM 值 unsigned char code ROM_2=0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9; /U2 ROM 值 unsigned char code ROM_3=0x28,0x32,0xc5,0xb8

3、,0x00,0x00,0x00,0xe0; /U3 ROM 值 unsigned char code ROM_4=0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7; /U4 ROM 值 unsigned char ROM=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00; /初始化的 ROM 值, /用于装载读取的 DS18B20 的 ROM 值 sbit ds=P30; /总线 /定义的数码管接口 sbit qian=P20; /数码管千位 sbit bai=P21; /数码管百位 sbit shi=P22; /数码管十位 sbit

4、 ge=P23; /数码管个位 sbit E=P24; /液晶使能端口 sbit CONTROL_DATE=P25; /液晶写数据与写控制命令控制端 int temp,shuju5=0; /存放温度和温度数据处理后得到的液晶要显示的数 int flag=1; /温度正负标志位/延时函数/ void Delay(int z) int x; for(;z0;z-) for(x=110;x0;x-); /写入对液晶的控制命令/ void Lcd_write_control(char date) CONTROL_DATE=0; P1=date; Delay(50); E=1;Delay(50); E=

5、0; /写入要显示的数据/ void Lcd_write_date(char date) CONTROL_DATE=1; P1=date; Delay(10); E=1; Delay(10); E=0; /液晶初始化/ void LCD_INIT(void) E=0; Lcd_write_control(0x38); /设置 16*2 显示,5*7 点阵,8 为数据接口 Lcd_write_control(0x0c); /设置开显示,不显示光标 Lcd_write_control(0x06); /写一个字符后地址指针加一 Lcd_write_control(0x01); /显示清零,数据指针清

6、零 /DS18B20 初始化/ void DS_rest(void) int i; ds=0; i=103; while(i0) i-; ds=1; i=4; while(i0) i-; /读一位数据/ bit Temp_read_bit(void) int i; bit dat; ds=0;i+; ds=1; i+;i+; dat=ds; i=8; while(i0) i-; return dat; /读取一个字节的温度数据/ unsigned char Temp_read(void) unsigned char i,j,dat; dat=0; for(i=1;i1); return dat

7、; /向 DS18B20 写入一位数据/ void DS_writebyte(unsigned char dat) int i; unsigned char j; bit testb; for(j=1;j1; if(testb) ds=0; i+; i+; ds=1; i=8; while(i0) i-; else ds=0; i=8; while(i0) i-; ds=1; i+; i+; /匹配 DS18B20 的 ROM/ void MATCH_ROM(unsigned char *ROM_X) int i; DS_rest(); Delay(1); DS_writebyte(0x55)

8、; for(i=0;i=90) temp=(a+b*256+1); flag=0; else temp=a+b*256; flag=1; temp=temp*6.25; return temp; /液晶显示/ void Lcd_display(int t) int n=1,weishu1=0; static weishu2=0; Lcd_write_control(0x80+0x40); while(t0) shujun+=t%10; t/=10; weishu1=n-1; if(flag=0) Lcd_write_date(txttable0); if(weishu12;n-) Lcd_wr

9、ite_date(numtableshujun); Lcd_write_date(txttable1); while(n0) Lcd_write_date(numtableshujun); n-; if(weishu1weishu2) Lcd_write_date(txttable2); weishu2=weishu1; /读取 DS18B20 的 ROM 数据/ void READ_ROM(void) int i=0;DS_rest(); Delay(1); DS_writebyte(0x33); for(i=0;i8;i+) ROMi=Temp_read(); /显示 DS18B20 的

10、ROM 数据/ void DISPLAY_ROM(void) int i;unsigned char t;Lcd_write_control(0x80); for(i=0;i4;i+) t=ROMi;Lcd_write_date(numtablet/16);Lcd_write_date(numtableROMi%16);Lcd_write_date(0x20); Lcd_write_control(0x80+0x40); for(;i8;i+) t=ROMi;Lcd_write_date(numtablet/16);Lcd_write_date(numtableROMi%16);Lcd_wri

11、te_date(0x20); main() int t,i; LCD_INIT(); Lcd_write_control(0x80); for(i=0;i11;i+) Lcd_write_date(stringi);/循环显示温度 while(1) Temp_change(); t=Get_temp();Lcd_display(t); Delay(1000); /显示 DS18B20 的 ROM 值 /首先要用这个函数读取 DS18B20 的 ROM 值 /然后将 ROM 值写到 ROM数组中 /最后注释掉 ROM的显示,改为显示循环显示温度 /*while(1) READ_ROM(); DISPLAY_ROM(); */

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

最新文档


当前位置:首页 > 生活休闲 > 社会民生

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