|
- #include <reg52.h>
- #include <intrins.h>
- sbit RS=P2^0;
- sbit RW=P2^1;
- sbit E=P1^2;
- sbit DQ=P1^4;
- sbit buzz=P0^6;
- unsigned char temp0,temp1,temp2,readtemp;
- unsigned char s[]={"Temp:"};
- unsigned char str[]={0,1,2,3,4,5,6,7,8,9};
- //************************************************************************
- void delay(unsigned int n)
- {
- unsigned i=0,j=0;
- for(i=0;i<n;i++)
- {
- for(j=0;j<120;j++);
- }
- }
- //*************************ds18b20****************************************
- void Write_DS18B20(unsigned char dat)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- DQ = 0;
- DQ = dat&0x01;
- delay(5);
- DQ = 1;
- dat >>= 1;
- }
- delay(5);
- }
- unsigned char Read_DS18B20(void)
- {
- unsigned char i;
- unsigned char dat;
- for(i=0;i<8;i++)
- {
- DQ = 0;
- dat >>= 1;
- DQ = 1;
- if(DQ)
- {
- dat |= 0x80;
- }
- delay(5);
- }
- return dat;
- }
- bit init_ds18b20(void)
- {
- bit initflag = 0;
-
- DQ = 1;
- delay(12);
- DQ = 0;
- delay(80);
- DQ = 1;
- delay(10);
- initflag = DQ;
- delay(5);
- return initflag;
- }
- unsigned char Readtemp(void)
- {
- unsigned char low,high;
- char temp;
- init_ds18b20();
- Write_DS18B20(0xCC);
- Write_DS18B20(0x44);
- delay(200);
- init_ds18b20();
- Write_DS18B20(0xCC);
- Write_DS18B20(0xBE);
- low = Read_DS18B20();
- high = Read_DS18B20();
- temp = high<<4;
- temp |= (low>>4);
- return temp;
- }
- //*********************1602************************************
- void writedat(unsigned char dat)
- {
- RS=1;
- RW=0;
- E=0;
- P0=dat;
- delay(5);
- E=1;
- E=0;
- }
- void writecom(unsigned char com)
- {
- RS=0;
- RW=0;
- E=0;
- P0=com;
- delay(5);
- E=1;
- E=0;
- }
- void initlcd()
- {
- writecom(0x38);
- writecom(0x0c);
- writecom(0x06);
- writecom(0x01);
- }
- //*************************************************************
- void display()//ÏÔê¾oˉêy
- {
- unsigned int temp0=0,temp1=0,temp2=0,i=0;
- temp0=readtemp/100;
- temp1=(readtemp%100)/10;
- temp2=readtemp%10;
- writecom(0x80);
- delay(5);
- while(s[i]!='\0')
- {
- writedat(s[i]);
- delay(5);
- i++;
- }
-
- writecom(0x80+0x40+5);
- delay(5);
- writedat(str[temp0]);
- delay(5);
- writedat(str[temp1]);
- delay(5);
- writedat(str[temp2]);
- delay(5);
- writedat(0xDF);
- delay(5);
- writedat('C');
- delay(5);
- }
- void main()
- {
- initlcd();
- while(1)
- {
- readtemp=Readtemp();
- display();
- }
- }
復(fù)制代碼 |
|