/*ADC0831Âà´«µ{¦¡¡A½Ð½Õ¾ãºë±K¥iÅܹqªý,©Î¦³¥[¸Ë¨ä¥¦·P´ú¾¹(¦p¥ú±Ó¹qªý,Àã«×·P´ú¾¹,µ¥µ¥)¡A¬Ý¬Ý·|¦p¦óÅܤÆ*/ #include #include sbit DQ=P3^3; //©w¸qDS18B20¸ê®Æ½u sbit LCD_RS=P1^0; //LCM±µ¸}©w¸q sbit LCD_RW=P1^1; sbit LCD_E=P1^2; #define LCD_Data P2 void WriteDataLCD(char WDLCD); void WriteCommandLCD(char WCLCD); void LCDInit(void); void write_byte(char dat); unsigned char read_byte(void); void init_DS18B20(void); void delay(int t); // «Å§i©µ¿ð¨ç¦¡ void delay_us(int t) { while(t--); } unsigned char ad0831read(void); //©w¸q¸Ó¨ç¼Æ¬°Åª¨úADC0831ªº¸ê®Æ char code digit[] = "0112334456678899"; //¼Æ­È0~15¹ïÀ³¨ì0.0~0.9«× void main(void) //µ{¦¡¶}©l { unsigned char temp_low,temp_high,tmp; int temperature,temp_d; //Àx¦s·Å«×ª­È delay_us(20000); //­YLCM¤ÏÀ³¸ûºC¡A«Øij¹q·½±Ò°Ê«á»Ý¥ýµ¥¤@¬q®É¶¡¦A³W¹ºLCM¡ALCM¤~¥i¥¿±`°Ê§@ LCDInit(); //LCMªì©l¤Æ WriteCommandLCD(0x80+0x06); //´å¼Ð²¾¨ì²Ä¤@¦æ¶}ÀY´å¼Ð²¾¨ì²Ä6®æ WriteDataLCD(0xdf); WriteDataLCD('C'); //¥ýÅã¥Ü¡CC²Å¸¹ while(1) { WriteCommandLCD(0x80); //´å¼Ð²¾¨ì²Ä¤@¦æ¶}ÀY init_DS18B20(); write_byte(0xcc); write_byte(0x44); delay(1000); //µ¥·Å«×Âà´«§¹²¦,¦Ü¤Ö­n750 ms init_DS18B20(); write_byte(0xcc); write_byte(0xbe); temp_low = read_byte(); temp_high = read_byte(); temperature=temp_high*256 + temp_low; //±N2¦¸Åª¨ìªº¼Æ­ÈÂন¹ê»Ú·Å«× if (temperature < 0) { WriteDataLCD('-'); //Åã¥Ü·Å«×¬°­t temperature = -temperature; //±N·Å«×Âন¥¿­È } else WriteDataLCD(' '); // ·Å«×¥¿®É¸ÓÄæ¦ìÅã¥ÜªÅ¥Õ temp_d = temperature/16; //¨ú¥X·Å«×¾ã¼Æ³¡¤À,«e12¬°­ì¬°¾ã¼Æ­È, «á4¦ì¤¸¬°¤p¼Æ tmp = temp_d/100; //¨ú¥X¦Ê¦ì¼Æ if (tmp == 0) WriteDataLCD(' '); //¨ú¥X¦Ê¦ì¼Æ¬O0, «hÅã¥ÜªÅ¥Õ else WriteDataLCD('1'); //¨ú¥X¦Ê¦ì¼Æ¤£¬O0, «hÅã¥Ü1,¦]¤W­­¥u·|¶q¨ì125«× tmp = temp_d%100; WriteDataLCD(tmp/10+0x30); //¨ú¥X¤Q¦ì¼Æ¡A¨Ã§ï¦¨ASCII½X¡AÅã¥Ü©óLCD WriteDataLCD(tmp%10+0x30); //¨ú¥X­Ó¦ì¼Æ¡A¨Ã§ï¦¨ASCII½X¡AÅã¥Ü©óLCD WriteDataLCD('.'); //Åã¥Ü¤p¼ÆÂI WriteDataLCD(digit[temperature%16]); //Åã¥Ü¤p¼Æ­È } } void write_byte(char dat) //¼g¸ê®Æ¨ìds18b20, ±q³Ì§C¦ì¤¸¶}©l¼g { unsigned char i; bit testb; for(i=0;i<8;i++) { testb=dat&0x01; //Ū¨ú³Ì§C¦ì¤¸ dat=dat>>1; //±N¸ê®Æ¥k²¾¤@¦ì¤¸, µ¥«Ý¤U¦¸§PÂ_³Ì§C¦ì¤¸ DQ = 0; delay_us(10); //«ùÄò10 us,ªì©l°T¸¹ DQ = testb; delay_us(20); //«ùÄò20 us,µ¥«Ý¼g¤Jds18b20 DQ = 1; delay_us(35); //«ùÄò35 us,µ¥«Ýds18b20¦^´_ } } unsigned char read_byte(void) //±qds18b20Ū¨ú¤@¦ì¤¸²Õ°T¸¹, ±q³Ì§C¦ì¤¸¶}©lŪ { unsigned char i,j,tmp; tmp = 0; // for(i=0;i<8;i++) { DQ=0; delay_us(2); //°_©l°T¸¹, «ùÄò 2 us DQ=1; delay_us(10); //µ¥«Ý10 us«á¦AŪ°T¸¹°T¸¹ j = DQ; //§âŪ¨ìªº1¦ì¤¸¸ê®Æ©ñ¨ì j tmp=(j<<7)|(tmp>>1); //Ū¥Xªº¸ê®Æ³Ì§C¦ì¦b³Ì«e­±¡A­ì¨Óªº¸ê®Æ¦V¥k²¾¤@­Ó¦ì¤¸ delay_us(50); //«ùÄò50 us,µ¥«Ýds18b20¦^´_ } return tmp; } void init_DS18B20(void) { DQ = 0; delay_us(500); DQ = 1; delay_us(500); } void delay(int t) // ©µ¿ð¨ç¼Æ¶}©l { int i,j; // «Å§i¾ã¼ÆÅܼÆi,j for (i=0;i