《关于DS18B20的序列号读取程序.docx》由会员分享,可在线阅读,更多相关《关于DS18B20的序列号读取程序.docx(4页珍藏版)》请在三一办公上搜索。
1、关于DS18B20的序列号读取程序关于DS18B20的序列号读取程序,很多人都是半遮半掩,我在网上搜了半天也没有找到一个完好的程序,所以就用网上的程序修改了一个,本程序经本人实测绝对可用,各位网友只需修改一下端口就可以直接使用。 /以下是DS1820序列号读取程序 #include #define uchar unsigned char #define uint unsigned int sbit DS= P33; /根据实实际情况设定DS18B20端口 uchar code table=0123456789ABCDEF; /用于1602显示 uchar sn8; /4个器件的序列号,先读出单
2、个序列号后填上才可以读取温度 /*/ /*1602部分*/ sbit rs=P10; sbit rw=P11; sbit lcden=P12; void delay1602(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void write_com(uchar com)/写命令 rs=0; lcden=0; P2=com; delay1602(5); lcden=1; delay1602(5); lcden=0; void write_date(uchar date)/写数据 rs=1; lcden=0; P2=date; delay16
3、02(5); lcden=1; delay1602(5); lcden=0; void init_lcd /初始化 lcden=0; rw=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); /*/ /*DS18B20部分*/ void delayb(uint count) /延时 uint i; while(count) i=200; while(i0)i-; count-; void dsreset /DS18B20初始化 uint i; DS=0; i=103; w
4、hile(i0)i-; DS=1; i=4; while(i0)i-; bit readbit / 读一位 uint i; bit dat; DS=0;i+; /小延时一下 DS=1;i+;i+; dat=DS; i=8;while(i0)i-; return (dat); uchar readbyte /读一个字节 uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=readbit; dat=(j1); /读出的数据最低位在最前面,这样刚好一个字节在DAT里 return(dat); /将一个字节数据返回 void writebyte(uchar dat) /写一
5、个字节到DS18B20里 uint i; uchar j; bit testb; for(j=1;j1; if(testb) / 写1部分 DS=0; i+;i+; DS=1; i=8;while(i0)i-; else DS=0; /写0部分 i=8;while(i0)i-; DS=1; i+;i+; void rom /读取序列号 uchar i; dsreset; /复位 delayb(1); /延时 writebyte(0x33); /发送读序列号子程序 for(i=0;i8;i+) /因为是8个字节,所以要读取8次 sni=readbyte; /读取序列号 /*/ /*主程序及显示部分*/ main uchar i,c,l,h; init_lcd; /初始化1602 while(1) rom; /调用读序列号子程序 delayb(100); /如果是不断地读取的话可以不延时 for(i=0;i4; /获取低四位 h=sni&0x0f; /获取高四位 write_com(0x80+c); /显示位置 write_date(tablel); /显示低四位的16进制码 write_date(tableh); /显示高四位的16进制码 c+;c+; /每显示一个字节,显示位置右移两位 while(1);