#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar dht_num=0;
uchar dht_d1=0,dht_d2=0,dht_t1=0,dht_t2=0,dht_j=0;
uchar code table[]="室內溫度";
uchar code table1[]="室內濕度";
uchar code table2[]="℃";
uchar code table3[]="祝老師天天好心情";
uchar num[]="0123456789";
uchar i,t1,t2,d1,d2;
sbit lcdrs=P2^6; //液晶數據命令選擇
sbit lcdrw=P2^5; //讀寫
sbit lcden=P2^7; //使能
sbit lcdpsb=P1^2; //串行并行選擇
sbit lcdrst=P1^4; //復位
sbit dht_dat=P2^2;
sbit beep=P2^3;
sbit wela=P2^6;
void delay(uint z) //延時
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void delay10us() //誤差 -0.234375us
{
unsigned char a;
for(a=3;a>0;a--);
}
void init()
{
delay(1000);
dht_dat=1;
}
void write_cmd(uchar cmd)
{
lcdrs=0;
lcdrw=0;
lcden=0;
P0=cmd;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_dat(uchar dat)
{
lcdrs=1;
lcdrw=0;
lcden=0;
P0=dat;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void lcd_init() //液晶初始化
{
lcdpsb=1; //并口方式
write_cmd(0x30);
delay(2);
write_cmd(0x0c);
delay(2);
write_cmd(0x06);
delay(2);
write_cmd(0x01);
delay(2);
wela=0;
}
uchar read_date()
{
uchar i,dat;
for(i=0;i<8;i++)
{
dht_num=2;
while((dht_dat==0)&&(dht_num++));
delay10us();delay10us();
delay10us();delay10us();
dat=dat<<1;
if(dht_dat==1)
{
dht_num=2;
dat=dat|0x01;
while((dht_dat==1)&&(dht_num++));
}
}
return dat;
}
void get_temp()
{
dht_dat=0;
delay(25);
dht_dat=1;
delay10us();
delay10us();
delay10us();
delay10us();
dht_dat=1;
if(dht_dat==0)
{
dht_num=2;
while((dht_dat==0)&&(dht_num++));
dht_num=2;
while((dht_dat==1)&&(dht_num++));
dht_d1=read_date();
dht_d2=read_date();
dht_t1=read_date();
dht_t2=read_date();
dht_j=read_date();
}
dht_dat=1;
delay(100);
d1=dht_d1/10;
d2=dht_d1%10;
t1=dht_t1/10;
t2=dht_t1%10;
}
void di()
{
beep=0;
delay(50);
beep=1;
}
void main()
{
init();
lcd_init();
while(1)
{
get_temp();
write_cmd(0x80);
for(i=0;i<8;i++)
{
write_dat(table[i]);
}
write_dat(num[t1]);
write_dat(num[t2]);
for(i=0;i<2;i++)
{
write_dat(table2[i]);
}
write_cmd(0x90);
for(i=0;i<8;i++)
{
write_dat(table1[i]);
}
write_dat(num[d1]);
write_dat(num[d2]);
write_dat('%');
write_cmd(0x88);
for(i=0;i<16;i++)
{
write_dat(table3[i]);
}
}
}
|