#include<reg51.h>
#include<absacc.h rel='nofollow' onclick='return false;'>
#include<intrins.h>
#include <ctype.h>
sbit clk=P1^0;
sbit cs=P1^1;
sbit din=P1^2;
sbit busy=P1^3;
sbit dout=P1^4;
sbit ledl=P1^6;//温度显示上极限
sbit ledh=P1^7;//温度显示下极限
unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned int t=0;
unsigned char result[4];//温度各位存放表
unsigned char a=0;
void delay(unsigned int t)//延时程序
{
unsigned int i;
for(i=0;i<t;i++);
}
void Timer0() interrupt 1 //定时扫描显示
{
TH0 = 0xf6;
TL0 = 0x3b;
switch(a)
{
case(0):
{a=1;
P2 = 0x01;
P0=led[result[0]];
break;}
case(1):
{a=2;
P2 = 0x02;
P0=led[result[1]];
break;}
case(2):
{a=3;
P2 = 0x04;
P0=led[result[2]];
break;}
case(3):
{a=0;
P2 = 0x08;
P0=led[result[3]];
break;}
default:
break;
}
}
main()
{
float tempreture;
unsigned int adresult;
ledl=0;
ledh=0;
P2 = 0x00;
P0=0x00; //LED
TMOD=0x01;
TH0=0xf6;//5ms
TL0=0x3b;
IE=0x82; //51中断初始化
TR0=1;
clk=0; //ads7841初始化
cs=1;
din=0;
dout=1;
busy=0;
while(1)
{
unsigned char control=0x97;
unsigned char i;
cs = 0;
_nop_();
for(i=0;i<8;i++) //控制命令传送
{
clk=0;
_nop_();
if((control&0x80)==0x80)
din=1;
else
din=0;
clk=1;
_nop_();
control<<=1;
}
clk = 0;
_nop_();
/*读ADS7841的转换数据*/
while(busy)
{
clk=0;
_nop_();
clk=1;
_nop_();
}; /*当BUSY脚由高变为低时,则开始数据输出*/
for(i=0;i<12;i++)//数据传送
{
clk=1;
_nop_();
clk=0;
_nop_();
adresult<<=1;
adresult=adresult|(unsigned int)dout;
}
for(i=0;i<4;i++)
{
clk=0;
_nop_();
clk=1;
_nop_();
}
clk=0;
cs=1;
delay(50000);
tempreture= adresult*0.0244;//转换成温度
t=tempreture;
//t=t*10;
result[0]=(t/10)%10;
result[1]=t%10;
result[2]=0;
result[3]=0;
if(result[0]==9) //温度报警
ledh=1;
else ledh=0;
if(result[0]==0)
ledl=1;
else ledl=0;
}
}