|
#include<reg51.h>
#include<intrins.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
sbit io=P1^0; //DHT11数据I/O
sbit lcdrs=P3^3; //低电平为写
sbit ledwr=P3^4; //WR
sbit lcden=P3^5;//使能
sbit cs=P1^1;
sbit clk=P1^2;
sbit dio=P1^3;
uchar num;
uchar RH,RL,TH,TL;
uchar data_byte;
/*****************延时********************/
void delay(uint ms)
{
uchar i;
while(ms--)
for(i=110;i>0;i--);
}
void delay1(uchar ms) //8uS
{
uchar i;
for(i=0;i<ms;i++);
}
/*********************LED****************/
void write_com(uchar com)
{
lcdrs=0;//低电平
P0=com;//写指令
delay(5);
lcden=1; //高脉冲
delay(5);
lcden=0;
}
void write_byte(uchar date)
{
lcdrs=1;
P0=date;//写数据
lcden=0;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_addr(uchar addr)
{
write_com(addr|0x80);
}
void init()
{
ledwr=0;
lcden=0;
write_com(0x38); //16x2显示,5x7点阵,8位数据接口
write_com(0x0c);//开显示,不显示光标,光标不显示
write_com(0x06);//读写第一个字符后光标加一,当写第一个字符后屏幕不移动
write_com(0x01);//显示清零,数据指针清零
}
void display(uchar addr,uchar q)
{
delay(10);
write_addr(addr);
write_byte(q);
delay(20);
}
/********************DHT11***************/
void star()
{
io=1;
delay1(1);
io=0;
delay(25);
io=1;
delay1(3);
}
uchar receive_byte()
{
uchar i,temp;
for(i=0;i<8;i++)
{
while(!io);
delay1(4);
temp=0;
if(io==1)
temp=1;
while(io);
data_byte<<=1;
data_byte|=temp;
}
return data_byte;
}
void receive()
{
uchar T_H,T_L,R_H,R_L,check,num_check;
star();
io=1;
if(!io)
{
while(!io);
while(io);
R_H=receive_byte();
R_L=receive_byte();
T_H=receive_byte();
T_L=receive_byte();
check=receive_byte();
io=0;
delay1(7);
io=1;
num_check=R_H+R_L+T_H+T_L;
if(num_check==check)
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
check=num_check;
}
}
}
/***************A/D***********************/
uchar Get_AD(uchar channel)
{
uchar i,dat1=0,dat2=0;
cs=0; //先拉低
clk=0;
dio=1;_nop_();_nop_();//拉高启动ADC
clk=1;_nop_();_nop_();//clk为时钟
clk=0;dio=1;_nop_();_nop_(); //SGL/Dif拉高
clk=1;_nop_();_nop_();
clk=0; dio=channel;_nop_();_nop_();//CH0单端输出
clk=1; dio=1; _nop_();_nop_();
for(i=0;i<8;i++)
{
clk=1; _nop_();_nop_();
clk=0; _nop_();_nop_();
dat1=dat1<<1 | dio; //左移一位
}
for(i=0;i<8;i++)
{
dat2=dat2|((uchar)(dio)<<i);//左移i位
clk=1;_nop_();_nop_();
clk=0;_nop_();_nop_();
}
cs=1;dio=1;clk=1;
return dat1;
}
/********************MAIN****************/
void DHT11MAIN()
{
receive();
delay(100);
display(0x00,'R');
display(0x01,':');
display(0x02,RH/10+0x30);
display(0x03,RH%10+0x30);
display(0x04,'%');
display(0x40,'T');
display(0x41,':');
display(0x42,TH/10+0x30);
display(0x43,TH%10+0x30);
display(0x44,0xdf);
display(0x45,0x43);
}
void YW()
{
uint d;
d=Get_AD(1);
d=d*200/255;
delay(100);
display(0x47,'Y');
display(0x48,':');
display(0x49,d/10+0x30);
display(0x4A,d%10+0x30);
display(0x4B,'%');
}
void GM()
{
uint d;
d=Get_AD(0);
d=d*270/255;
delay(100);
display(0x06,'G');
display(0x07,':');
display(0x08,(10-d/10)+0x30);
display(0x09,(10-d%10)+0x30);
display(0x0A,'%');
}
void main()
{
init();
delay(10);
while(1)
{
DHT11MAIN();
GM();
YW();
}
}
|
-
-
4.rar
1.32 KB, 下载次数: 28, 下载积分: 黑币 -5
5
|