无锡城市职业技术学院毕业设计(论文)
36
太阳能热水器监控仪设计
附录2 部分程序
DS18B20温度检测程序: #include
sbit dq = P1^3; //DS18b20 char data temp;
uchar code ds18_1[] = {0x28,0xFF,0x38,0x1B,0x01,0x00,0x00,0xF5}; uchar code ds18_2[] = {0x28,0xD3,0x2C,0x1B,0x01,0x00,0x00,0x5D}; uchar key;
unsigned char code disp_code[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf}; unsigned char code key_code[]={
0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d, 0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77 }; /*--us 延时--*/
//cyc=18。432 delay(10)=51us void delay(uint us) { }
/*--ms 延时--*/
//cyc=11。0592 ,j<28,1ms
37
///cyc=11.0592 时的延时时间
while(--us);
无锡城市职业技术学院毕业设计(论文)
//cyc=18。432 ,j<56,1ms void delay_ms (uint ms) {
uint data i,j; for(i=0;i SBUF=i; while(!TI); TI=0; } /***********ds18b20复位**************/ void ds_reset(void) { dq=1; _nop_(); dq=0; delay(150); _nop_(); dq=1; delay(30); dq = 1; } /***********ds18b20读一个字节**************/ uchar rd_ds18 (void) //读取单字节 { //从高到低 uchar i,u=0; for(i=0;i<8;i++) 38 太阳能热水器监控仪设计 { dq = 0; u >>= 1; dq = 1; if(dq==1) u |= 0x80; delay (8);// _nop_(); } return(u); } /*************ds18b20写一个字节****************/ void wr_ds18 (unsigned char wr) //单字节写入 { uchar i; //从低到高 for (i=0;i<8;i++) { dq = 0; _nop_(); dq=wr&0x01; delay(8); //delay 45 uS //5 8 _nop_(); _nop_(); dq=1; wr >>= 1; } } /**************读取ds18b20当前温度************/ char get_temp(void) { 39 无锡城市职业技术学院毕业设计(论文) uchar Low,Height,i,j,templs; ds_reset(); wr_ds18(0xcc); //skip rom wr_ds18(0x44); //start convert ds_reset(); wr_ds18(0xcc); //skip rom wr_ds18(0xbe); //read ram Low=rd_ds18(); Height=rd_ds18(); i=Low>>4; j=Height<<4; templs=i|j; // com(templs); return(templs); } /**************匹配ds18b20************/ void mach_ds() { uchar i; ds_reset(); wr_ds18(0x55); //mach rom for (i=0;i<8;i++) { wr_ds18(ds18_1[i]); } } /***********读DS器件ID号**************/ /*---*/ void rd_ds_id() uchar id; 40 //小数部分 //整数部分 //补码形式表示部分 {