单线挂载多个ds18b20源码,一份读取单个ds18b20 rom,一份挂载多个ds18b20的,程序里只挂载了两个,修改一下可以挂载多个,lcd1602显示读取的温度
单片机源程序如下:
- #include"ds18b20.h"
- uchar rom[2][8]={
- {0x28,0x6e,0xe4,0x4d,0x06,0x00,0x00,0xa7},
- {0x28,0xff,0xa3,0xfd,0xa4,0x16,0x05,0xc8}};
- int temp[2];
- void dsinit()
- {
- uchar i;
- dsport=0;
- i=90;
- while(i--);
- dsport=1;
- i++;
- i++;
- while(dsport);
- while(!dsport);
- i++;
- i++;
- }
- void dssendbit(bit x)
- {
- uchar i;
- dsport=0;
- i++;
- i++;
- dsport=x;
- i=9;
- while(i--);
- dsport=1;
- i++;
- i++;
- }
- bit dsreadbit()
- {
- uchar i;
- bit x=0;
- dsport=0;
- i++;
- i++;
- dsport=1;
- i++;
- i++;
- if(dsport)
- {
- x=1;
- }
- i=9;
- while(i--);
- return x;
- }
- void dssendbyte(uchar byte)
- {
- uchar n;
- for(n=0;n<8;n++)
- {
- dssendbit(byte&0x01);
- byte>>=1;
- }
- }
- uchar dsreadbyte()
- {
- uchar n,dat;
- for(n=0;n<8;n++)
- {
- dat>>=1;
- if(dsreadbit())
- {
- dat|=0x80;
- }
- }
- return dat;
- }
- /*void dsconvert()
- {
- uchar i;
- dsinit();
- dssendbyte(0xcc);
- dssendbyte(0x44);
- i++;
- i++;
- while(!dsport);
- i++;
- i++;
- }
- void dsreadtempcom()
- {
- dsinit();
- dssendbyte(0xcc);
- dssendbyte(0xbe);
- }*/
- void dsreadtemp()
- {
- uchar tml,tmh,n,v,i;
- for(n=0;n<2;n++)
- {
- dsinit();
- dssendbyte(0x55);
- for(v=0;v<8;v++)
- {
- dssendbyte(rom[n][v]);
- }
- dssendbyte(0x44);
- i++;
- i++;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
单线挂载多路ds18b20.zip
(75.52 KB, 下载次数: 70)
|