收藏 分享(赏)

51单片机单总线控制两个DS18B20.doc

上传人:HR专家 文档编号:11559777 上传时间:2020-06-24 格式:DOC 页数:6 大小:24KB
下载 相关 举报
51单片机单总线控制两个DS18B20.doc_第1页
第1页 / 共6页
51单片机单总线控制两个DS18B20.doc_第2页
第2页 / 共6页
51单片机单总线控制两个DS18B20.doc_第3页
第3页 / 共6页
51单片机单总线控制两个DS18B20.doc_第4页
第4页 / 共6页
51单片机单总线控制两个DS18B20.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、#include#define uchar unsigned char#define uint unsigned intsbit DQ=P10;sbit rs=P20;sbit rw=P21;sbit e=P22;uchar temp1,temp2; /定义两个存放温度的变量/uchar ID8; /存放DS18B20的64位序列号的数组uchar code ID_1=0x28,0x3a,0x24,0xc6,0x02,0x00,0x00,0xa4; /第一个DS18B20的序列号uchar code ID_2=0x28,0x66,0xa2,0xc1,0x02,0x00,0x00,0x26; /

2、第二个DS18B20的序列号uchar code table=0123456789;uchar code table_temp=tempreture:;uchar code table_0=C;/*/ void delay_50us(uint time); /50us的延时函数void write_com(uchar com); /LCD1602写指令void write_data(uchar dat); /LCD1602写数据void init_LCD1602(void); /LCD1602初始化函数 id init_ds18b20(void); /ds18b20初始化void delay(

3、uint t); /while(t-)延时函数void init_ds18b20(void); /DS18B20初始化函数void write_byte(char dat); /ds18b20写一个字节函数uchar read_byte(void); /ds18b20读一个字节函数uchar readtemp1(void); /第一个ds18b20读取温度函数uchar readtemp2(void);/第二个ds18b20读取温度函数void display(void); /LCD1602显示温度函数/*/*void readrom(void) /读取温度传感器的序列号子函数 init_ds

4、18b20();delay_50us(2);write_byte(0x33);ID0=read_byte();ID1=read_byte();ID2=read_byte();ID3=read_byte();ID4=read_byte();ID5=read_byte();ID6=read_byte();ID7=read_byte();/*/*void keep_rom(uchar *p) /存序列号函数uchar i;for(i=0;i8;i+) *p=IDi; p+;/*/*void display_rom(void) /显示序列号函数 uchar i; write_com(0x80); fo

5、r(i=0;i0;time-);for(j=19;j0;j+);/*/void write_com(uchar com) /LCD1602写指令e=0;rs=0;rw=0;P0=com;delay_50us(10);e=1;delay_50us(20);e=0;/*/void write_data(uchar dat) /LCD1602写数据e=0;rs=1;rw=0;P0=dat;delay_50us(10);e=1;delay_50us(20);e=0;/*/void init_LCD1602(void) /LCD1602初始化函数delay_50us(300);write_com(0x3

6、8);delay_50us(100);write_com(0x38);delay_50us(100);write_com(0x38);write_com(0x38);/显示模式设置write_com(0x08);/显示关闭write_com(0x01);/显示清屏write_com(0x06);/显示光标移动设置write_com(0x0c);/显示开及光标设置/*/void delay(uint t) while(t-);/*/void init_ds18b20(void)/初始化 uchar n; DQ=1; /默认为高电平 delay(8); DQ=0; delay(80);/12MHz

7、晶振下大约600微秒的延时 DQ=1; /释放总线 delay(8); n=DQ; delay(4); /*/void write_byte(char dat)/写一个字节 uchar i; for(i=0;i=1; delay(4); /*/uchar read_byte(void)/读一个字节 uchar i; uchar value; for(i=0;i=1; /判断8次,移位七次(起延时作用) DQ=1; if(DQ) /采样,判断DQ value|=0x80; /赋值,与0x80与一下 delay(4); return value;/*/uchar readtemp1(void) u

8、char a,b,i; /读一个高八位,一个低八位 init_ds18b20(); /readrom(); / keep_rom(IP_1); / display_rom(); write_byte(0x55); for(i=0;i8;i+) write_byte(ID_1i); write_byte(0x44); /启动温度测量 delay(300); init_ds18b20(); write_byte(0x55); for(i=0;i8;i+) write_byte(ID_1i); write_byte(0xbe); /读这个温度 a=read_byte(); /低位 b=read_by

9、te(); /高位 b4; /屏蔽低四位 return b;/*/uchar readtemp2(void) uchar a,b,i; /读一个高八位,一个低八位 init_ds18b20(); /readrom(); / keep_rom(IP_1); / display_rom(); write_byte(0x55); for(i=0;i8;i+) write_byte(ID_2i); write_byte(0x44); /启动温度测量 delay(300); init_ds18b20(); write_byte(0x55); for(i=0;i8;i+) write_byte(ID_2i

10、); write_byte(0xbe); /读这个温度 a=read_byte(); /低位 b=read_byte(); /高位 b4; /屏蔽低四位 return b;/*/void display(void) uchar i; write_com(0x80); for(i=0;i11;i+) write_data(table_tempi); /显示tempreturedelay_50us(1); write_com(0x80+0x40); /第一个温度值 write_data(tabletemp1/10); /显示温度十位 write_data(tabletemp1%10); /显示温度个位 write_data(table_00); write_data(table_01); write_com(0x80+0x47); /第二个温度值 write_data(tabletemp2/10); /显示温度十位 write_data(tabletemp2%10); /显示温度个位 write_data(table_00); write_data(table_01);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 计算机原理

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报