*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_DISPLY18B20ROM?18B20
- #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;
- static unsigned char readtemp;
- unsigned char s[]={"Temp:"};
- unsigned char str[]={0,1,2,3,4,5,6,7,8,9};
- void disply18b20Rom(char Rom);
- //************************************************************************
- 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);
- }
- //******************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);
-
- }
- void display()
- {
- 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(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();
- }
- }
復制代碼 |