#include <AT89X52.H>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char dispbuf[8]={0,0,0,0};
sbit CLOCK=P2^7; /*定义ADC0808时钟位 */
sbit ST=P2^4;
sbit EOC=P2^6;
sbit OE=P2^5;
sbit PWM=P3^7;
sbit ds=P2^0;
sbit de=P2^1;
sbit dy=P2^2;
sbit dl=P2^3;
sbit kk=P1^7;
unsigned char ADC;
unsigned char A,C;
int j;
void WAIT(void);
void DELAY(void) /*延时函数*/
{
unsigned char k,i;
for(k=20;k>0;k--)
for(i=A;i>0;i--);
}
void WAIT(void)
{ int s;
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
ADC=P0;
OE=0;
C=P0;
C=C/2.5;
s=C;
s=s*10; /*显示数据转换*/
dispbuf[3]=C/1000;
C=C%1000;
dispbuf[2]=C/100;
C=C%100;
dispbuf[1]=C/10;
dispbuf[0]=C%10;
PWM=1;
if(dispbuf[3]==1) /*判断温度是否到达一百度*/
WAIT();
A=ADC;
DELAY();
PWM=0;
A=255;
A=A-ADC;
DELAY();
WAIT();
}
void main() /*主函数*/
{
j=60;
TMOD=0x02;
TH0=0x20;
TL0=0x00;
TH1=0x3C;
TL1=0xB0;
IE=0x8A;
TR0=1;
TR1=1;
WAIT();
}
void t0(void) interrupt 1 using 0 /*定时器T0*/
{
CLOCK=~CLOCK;
}
void t1(void) interrupt 3 using 0 /*定时器T1*/
{
TH1=0x3C;
TL1=0xB0;
j--; /*判断是否5s*/
if(j>0)
return;
P1=dispcode[dispbuf[3]]; /*显示温度*/
ds=0;
ds=1;
ds=0;
P1=dispcode[dispbuf[2]];
de=0;
de=1;
de=0;
P1=dispcode[dispbuf[1]];
kk=1;
dy=0;
dy=1;
dy=0;
P1=dispcode[dispbuf[0]];
dl=0;
dl=1;
dl=0;
j=60;
return;
}