|
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit ds=P2^2;
uint temp;
float f_temp;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //有小數(shù)點(diǎn)
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //無(wú)小數(shù)點(diǎn) (1:0x86 1000 0110 第一位為小數(shù)點(diǎn))
uchar dispuf[]={10,10,10,10,10,10,10,10};
uchar discom=0;
void display(void);
void delay(uchar i) //延時(shí)
{
i++;
}
bit inclear(void) //初始化
{ uchar dat=1;
ds=1;
delay(1);
ds=0;
delay(250);
ds=1;
dat=ds;
delay(100);
ds=1;
return(dat) ;
}
uchar read() //讀數(shù)據(jù)
{
uchar i,j,dat;
dat=0;
for(i=0;i<8;i++)
{
ds=1;
delay(1);
ds=0;
delay(3);
ds=1;
delay(2);
dat=(j<<7|dat>>1);
if(ds)
ds=(ds|0x80);
delay(10);
}
return(dat);
}
void write(uchar dat) //寫數(shù)據(jù)
{
uchar i,t;
for(i=0;i<8;i++)
{
ds=0;
delay(2);
dat=dat&0x01;
ds=1;
dat=dat>>1;
delay(10);
ds=1;
}
}
void tempchange()
{
//獲取溫度并轉(zhuǎn)換
inclear();
delay(1);
write(0xcc);
write(0x44);
}
uint temp_get()
{
uchar a,b;
inclear(); //讀取數(shù)據(jù)
delay(1);
write(0xcc);
write(0xbe); //讀
a=read(); //低八位
b=read(); //b=高八位
temp=b;
temp<<=8;
temp=temp|a; //合并a和b
f_temp=temp*0.0625;
temp=f_temp*10+0.5;
return temp;
}
void display(void)
{
P2 = ((P2&0x1f)|0xe0);
P0 = 0xff;
P2 &= 0x1f;
P2=((P2&0x1f)|0xc0);
P0 = (1<<discom);
P2=P2&0x1f;
P2=((P2&0x1f)|0xe0);
P0=~table[dispuf[discom]];
P2=P2&0x1f;
delay(2);
if(++discom==8)
discom=0;
}
void mian()
{
uchar i;
while(1)
{
tempchange();
for(i=10;i>0;i--)
{
display();
dispuf[5]=temp/100;
dispuf[6]=temp%100/10;
dispuf[7]=temp%100%10;
}
}
}
|
|