- #include "reg51.h"
- #include "intrins.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define out P0
- uchar seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- sbit smg1=P2^0;
- sbit smg2=P2^1;
- sbit smg3=P2^2;
- sbit DQ=P3^7;
- void delay5(uchar);
- void init_ds18b20(void);
- uchar readbyte(void);
- void writebyte(uchar);
- uchar retemp(void);
- void main(void)
- {
- uchar i,temp;
- delay5(1000);
- while(1)
- {
- temp=retemp();
- temp=temp&0xff;
- if(temp/128==1)
- {
- for(i=0;i<10;i++)
- {
- temp=!temp+1;
- temp=temp|0x80;
- out=0xbf;
- smg1=0;
- smg2=1;
- smg3=0;
- delay5(1000);
- out=seg[temp/10];
- smg1=0;
- smg2=0;
- smg3=1;
- delay5(1000);
- out=seg[temp%10];
- smg1=1;
- smg2=0;
- smg3=0;
- }
- }
- else
- {
- for(i=0;i<10;i++)
- {
- out=seg[temp/100];
- smg1=0;
- smg2=1;
- smg3=0;
- delay5(1000);
- out=seg[(temp/10)%10];
- smg1=0;
- smg2=0;
- smg3=1;
- delay5(1000);
- out=seg[temp%10];
- smg1=1;
- smg2=0;
- smg3=0;
- delay5(1000);
- }
- }
- }
- }
- void delay5(uchar n)
- {
- do
- {
- _nop_();
- _nop_();
- _nop_();
- n--;
- }
- while(n);
- }
- void init_ds18b20(void)
- {
- uchar x=0;
- DQ=0;
- delay5(120);
- DQ=1;
- delay5(16);
- delay5(80);
- }
- uchar readbyte(void)
- {
- uchar i=0;
- uchar date=0;
- for(i=8;i>0;i--)
- {
- DQ=0;
- delay5(1);
- DQ=1;
- date>>=1;
- if(DQ)
- date|=0x80;
- delay5(11);
- }
- return(date);
- }
- void writebyte(uchar dat)
- {
- uchar i=0;
- for(i=8;i>0;i--)
- {
- DQ=0;
- DQ=dat&0x01;
- delay5(12);
- DQ=1;
- dat>>=1;
- delay5(5);
- }
- }
- uchar retemp(void)
- {
- uchar a,b,tt;
- uint t;
- init_ds18b20();
- writebyte(0xcc);
- writebyte(0x44);
- init_ds18b20();
- writebyte(0xcc);
- writebyte(0xbe);
- a=readbyte();
- b=readbyte();
- t=b;
- t<<=8;
- t=t|a;
- tt=t*0.0625;
- return(tt);
- }
复制代码
|