void delay(uint i);
sbit DQ =P0^0; //DS18B20¶Ë¿Ú sbit RS=P2^0; //LCD¶Ë¿Ú sbit RW=P2^1; sbit E=P2^2;
sbit buzzer=P2^7; //¶¨Òå·äÃùÆ÷¶Ë¿Ú
union{ uchar c[2]; uint x; }temp; //ÁªºÏÌå
uchar flag; //¶¨ÒåζÈÕý¸ºÖµ±êÖ¾±äÁ¿£¬ÕýΪ'0'£¬¸ºÎª'1' int cc,xs;
/***************************************************************/ /*ÑÓʱº¯Êý */
/***************************************************************/
void delay(uint i) { for(;i>0;i--); }
/***************************************************************/ /*¸´Î»º¯Êý */
/***************************************************************/
uchar ow_reset(void) { uchar reset; DQ=0; delay(50); DQ=1; delay(3); reset=DQ; delay(25); return(reset); }
/***************************************************************/ /*³õʼ»¯DS18B20 */
17
/***************************************************************/
void initds18b20(void) {
ow_reset(); // write_byte(0xCC); write_byte(0x4E); write_byte(0x00); write_byte(0x00); write_byte(0x7F); }
/***************************************************************/ /*´Óµ¥×ÜÏ߶ÁÈ¡Ò»¸ö×Ö½Ú */ /***************************************************************/ uchar read_byte(void) { uchar i; uchar value=0; for (i=8;i>0;i--) { value>>=1; DQ=0; DQ=1; delay(1); if(DQ)value|=0x80; delay(6); } return(value); }
/***************************************************************/ /**Ïòµ¥×ÜÏßÉÏдһ¸ö×Ö½Ú */
/***************************************************************/
void write_byte(uchar val) { uchar i; for(i=8;i>0;i--) { DQ=0; DQ=val&0x01; delay(5); DQ=1; val=val/2;
18
} delay(5); }
/***************************************************************/ /**¶ÁÈ¡ÎÂ¶È */
/***************************************************************/ void Read_Temperature(void) { ow_reset(); write_byte(0xCC); write_byte(0x44); ow_reset(); write_byte(0xCC); write_byte(0xBE); temp.c[1]=read_byte(); temp.c[0]=read_byte(); }
/***************************************************************/ /**ζÈת»» */
/***************************************************************/
void temperature_cov(void) {
if (temp.c[0]>0xF8) //ÅжÏζÈÊÇÕýÊý»¹ÊǸºÊý { flag=1; //ζÈΪ¸ºÊýflagÖÃ1 temp.x=~temp.x+1; } xs=temp.x&0x0F; xs=xs*10; cc=temp.c[0]*256.0+temp.c[1]; //½«Î¶ȴÓÁ½¸ö°ËλÊý±íʾ³ÉÒ»¸öÊ®ÁùλÊý cc=cc*0.0625; xs=xs*0.0625; }
/***************************************************************/ /**ÏÔʾ */
/***************************************************************/ void display()
19
{ int i; // SP=0x50; // lcd_init(); lcd_wcmd(0x80); //дÈ뻺³åÇøÆðʼµØַΪµÚÒ»ÐеÚÒ»ÁÐ lcd_wdat(0x54); //ÏÔʾTEMPERATURE lcd_wdat(0x45); lcd_wdat(0x4d); lcd_wdat(0x50); lcd_wdat(0x45); lcd_wdat(0x52); lcd_wdat(0x41); lcd_wdat(0x54); lcd_wdat(0x55); lcd_wdat(0x52); lcd_wdat(0x45); lcd_wcmd(0xc0); lcd_wdat(0x44);lcd_wdat(0x51);lcd_wdat(0x59); lcd_wdat(0x20); buzzer=1; lcd_wcmd(0x8C); lcd_wdat(0x20); lcd_wdat(0x20); lcd_wdat(0x20); lcd_wdat(0x20); lcd_wcmd(0xc4); if(flag == 1) { lcd_wdat(0x2d); //Èç¹ûflagΪ1±íʾζÈΪ¸ºÖµ£¬ÏÔʾ¡®-¡¯·ûºÅ if(cc>=4) { buzzer = 0; lcd_wcmd(0x8C); lcd_wdat(0x4C); lcd_wdat(0x4F); lcd_wdat(0x57); lcd_wdat(0x21); lcd_wcmd(0xc4); } } if(cc>=29) { buzzer=0;
20