温湿度传感器 sht11 仿真程序
sbit out =P3^0; //加热口
//sbit input =P1^1;//检测口
//sbit speek =P2^0;//报警
sbit clo =P3^7;//时钟
sbit ST =P3^5;//开始
sbit EOC =P3^6;//成功信号
sbit gwei =P3^4;//个位
sbit swei =P3^3;//十位
sbit bwei =P3^2;//百位
sbit qwei =P3^1;//千位
sbit speak =P0^0;//报警音
sbit bjled =P0^1;//报警灯
sbit zcled =P0^2;//正常LED
int count;
uchar xianzhi;//取转换结果
uchar seth;//高时间
uchar setl;//低时间
uchar seth_mi;//高时间
uchar setl_mi;//低时间
bit hlbz;//高低标志
bit clbz;
bit spbz;
///定时中断程序///
void t0 (void) interrupt 1 using 0
{
TH0=(65536-200)/256;//5ms*200=1000ms=1s
TL0=(65536-200)%256;
clo=!clo;//产生时钟
if(count>5000)
{
if(hlbz)
{
if(seth_mi==0){seth_mi=seth;hlbz=0;out=0;}
else seth_mi--;
}
if(!hlbz)
{
if(setl_mi==0){setl_mi=setl;hlbz=1;out=1;}
else setl_mi--;
}
count=0;
}
else count++;
}
/////////////
///////延时///////
delay(int i)
{
while(--i);
}
///////显示处理///////
xianshi()
{
int abcd=0;
int i;
for (i=0;i<5;i++)
{
abcd=xianzhi;
gwei=1;
swei=1;
bwei=1;
qwei=1;
P1=dispcode[abcd/1000];
qwei=0;
delay(70);
qwei=1;
abcd=abcd%1000;
P1=dispcode[abcd/100];
bwei=0;
delay(70);
bwei=1;
abcd=abcd%100;
P1=dispcode[abcd/10];
swei=0;
delay(70);
swei=1;
abcd=abcd%10;
P1=dispcode[abcd];
gwei=0;
delay(70);
gwei=1;
}
}
doing()
{
if(xianzhi>100)
{bjled=0;speak=1;zcled=1;}
else {bjled=1;speak=0;zcled=0;}
}
void main(void)
{
seth=60;//h60秒
setl=90;//l90秒
seth_mi=60;//h60秒
setl_mi=90;//l90秒
TMOD=0X01;//定时0 16位工作模式
TH0=(65536-200)/256;
TL0=(65536-200)%256;
TR0=1; //开始计时
ET0=1; //开定时0中断
EA=1; //开全中断
while(1)
{
ST=0;
_nop_();
ST=1;
_nop_();
ST=0;
// EOC=0;
xianshi();
while(!EOC)
{
xianshi();
}
xianzhi=P2;
xianshi();
doing();
}
}