- #include <reg52.h>
- #include <intrins.h>
- sbit RS=P2^0;
- sbit RW=P2^1;
- sbit E=P1^2;
- sbit DQ=P1^4;
- sbit led1=P0^0;
- sbit led2=P0^1;
- sbit led3=P0^2;
- sbit led4=P0^3;
- sbit led5=P0^4;
- sbit led6=P0^5;
- sbit led7=P0^6;
- sbit led8=P0^7;
- sbit buzz=P0^6;
- unsigned char a,b,c,d,e,f,g,h;
- static int readtemp=0;
- unsigned char s[]={"Temp:"};
- unsigned char str[]={"0123456789"};
- //************************************************************************
- void delay(unsigned int n)//Ñó3ùoˉêy
- {
- 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)
- {
- char temp;
- init_ds18b20();
- Write_DS18B20(0xCC);
- Write_DS18B20(0x44);
- delay(100);
- init_ds18b20();
- Write_DS18B20(0xCC);
- Write_DS18B20(0xBE);
- delay(100);
- a = Read_DS18B20();
- b = Read_DS18B20();
- temp = ((b*256+a)>>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);
- }
- /*******************DòáDoÅ*************************************
- void disply18b20Rom(char Rom)
- {
- char h,l;
- l=Rom&0x0f;
- h=Rom&0xf0;
- h>>=4;
- if((h>=0x00)&&(h<=0x30))
- {
- writedat(h+0x30);
- }
- else
- writedat(h+0x37);
- if((l>=0x00)&&(l<=0x09))
- {
- writedat(l+0x30);
- }
- else
- writedat(l+0x37);
-
- }*/
- //*************oˉêy********************************************
- void display()//ÏÔê¾oˉêy
- {
- unsigned int temp0=0,temp1=0,temp2=0,i=0;
- temp0=readtemp/100+'0';
- temp1=(readtemp%100)/10+'0';
- temp2=readtemp%10+'0';
- writecom(0x80);
- delay(5);
- while(s[i]!='\0')
- {
- writedat(s[i]);
- delay(5);
- i++;
- }
-
- writecom(0x80+6);
- delay(5);
- writedat(' ');
- delay(5);
- writedat(str[temp0]);
- delay(5);
- writedat(str[temp1]);
- delay(5);
- writedat(str[temp2]);
- delay(5);
- writedat('.');
- delay(5);
- writedat('0');
- delay(5);
- writedat(0xDF);
- delay(5);
- writedat('C');
- delay(5);
- }
- void displayfu()
- {
- unsigned int temp0=0,temp1=0,temp2=0,i=0;
- temp0=~readtemp/100+'0';
- temp1=(~readtemp%100)/10+'0';
- temp2=~readtemp%10+'0';
- writecom(0x80);
- delay(5);
- while(s[i]!='\0')
- {
- writedat(s[i]);
- delay(5);
- i++;
- }
-
- writecom(0x80+6);
- delay(5);
- writedat('-');
- delay(5);
- writedat(str[temp0]);
- delay(5);
- writedat(str[temp1]);
- delay(5);
- writedat(str[temp2]);
- delay(5);
- writedat('.');
- delay(5);
- writedat('0');
- delay(5);
- writedat(0xDF);
- delay(5);
- writedat('C');
- delay(5);
- }
- //************************Ö÷oˉêy******************************
- void main()
- {
- int i;
- initlcd();/*
- void disply18b20Rom(char Rom);
- Write_DS18B20(0x33);
- delay(1);
- a =Read_DS18B20();
- b =Read_DS18B20();
- c=Read_DS18B20();
- d =Read_DS18B20();
- e=Read_DS18B20();
- f=Read_DS18B20();
- g =Read_DS18B20();
- h = Read_DS18B20();
- writecom(0x80+0x40);
- display18b20Rom(h);
- display18b20Rom(g);
- display18b20Rom(f);
- display18b20Rom(e);
- display18b20Rom(d);
- display18b20Rom(c);
- display18b20Rom(b);
- display18b20Rom(a);*/
- while(1)
- {
- if(Readtemp()==0)
- {
- writecom(0x01);
- readtemp=0;
- display();
- }
- else if(Readtemp()<150)
- {
- readtemp=Readtemp();
- display();
- }
- else
- {
- int a=0;
- a=Readtemp();
- readtemp=a-257;
- displayfu();
- }
- if((readtemp>=20)||(readtemp<=10))
- {
- for(i=0;1>0;i++)
- {
- led1=1;led2=1;led3=1;led4=1;led5=1;led6=1;led7=1;led8=1;
- buzz=1;
- delay(500);
- led1=0;led2=0;led3=0;led4=0;led5=0;led6=0;led7=0;led8=0;
- buzz=0;
- delay(500);
- }
- }
- }
- }
復制代碼
|