资源描述:
《ds18b20多路温度采集程序.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、本程序为ds18b20的多路温度采集程序,是我自己参考其他程序后改写而成,可显示4路正负温度值,并有上下限温度报警(声音、灯光报警)。亲测,更改端口即可使用。(主要器件:51单片机,ds18b20,lcd显示器)附有proteus仿真图,及序列号采集程序/****上限62度下限-20度****/#include#defineucharunsignedchar#defineuintunsignedintsbitds=P1^1;sbitrs=P1^4;sbite=P1^6;sbit
2、sp=P1^0;sbitd1=P1^2;sbitd2=P1^3;ucharlcdrom[4][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e},{0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9},{0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0},{0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7}};unsignedcharcodetable0[]={"TEM
3、PERARTURE:U"};unsignedcharcodetable1[]={"0123456789ABCDEF"};intf[4];inttvalue;floatftvalue;uintwarnl=320;uintwarnh=992;/****lcd程序****/voiddelayms(uintms)//延时{uinti,j;for(i=ms;i>0;i--)for(j=110;j>0;j--);}voidwrcom(ucharcom)//写指令{delayms(1);rs=0;P3=com
4、;delayms(1);e=1;delayms(1);e=0;}voidwrdat(uchardat)//写数据{rs=1;e=0;P3=dat;delayms(5);e=1;delayms(5);e=0;}voidlcdinit()//初始化lcd{delayms(15);wrcom(0x38);delayms(5);wrcom(0x0c);delayms(5);wrcom(0x06);delayms(5);wrcom(0x01);delayms(5);}voiddisplay(uchar*p
5、)//显示{while(*p!=' '){wrdat(*p);p++;delayms(1);}}displayinit()//初始化显示{lcdinit();wrcom(0x80);display(table0);}/****ds18b20程序****/voiddsrst()//ds18b20复位{uinti;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bitdsrd0()//读一位数据{uinti;bitdat;ds=0;i++;ds=1
6、;i++;i++;dat=ds;i=8;while(i>0)i--;return(dat);}uchardsrd()//读1个字节数据{uchari,j,dat;dat=0;for(i=8;i>0;i--){j=dsrd0();dat=(j<<7)
7、(dat>>1);}return(dat);}voiddswr(uchardat)//写数据{uinti;ucharj;bittestb;for(j=8;j>0;j--){testb=dat&0x01;dat=dat>>1;if(testb){ds=
8、0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0;i=8;while(i>0)i--;ds=1;i++;i++;}}}voidtmstart()//初始化ds18b20{sp=1;d1=1;d2=1;dsrst();delayms(1);dswr(0xcc);dswr(0x44);}voidread_dealtemp()//读取并处理温度{uchari,j,t;uchara,b;for(j=0;j<4;j++){dsrst();delayms(1);dswr
9、(0x55);for(i=0;i<8;i++){dswr(lcdrom[j][i]);//发送64位序列号}dswr(0xbe);a=dsrd();b=dsrd();tvalue=b;tvalue<<=8;tvalue=tvalue
10、a;if(tvalue<0){d1=1;tvalue=~tvalue+1;wrcom(0xc0);wrdat(0x2d);if(tvalue>warnl){d2=0;sp=0;}else{d2=1;sp=1;}}else{d2=1;wrcom(0xc0);wrdat