附(二):PCB板
24
附(三):程序
#include
#define uint unsigned int #define uchar unsigned char sbit BEEP=P3^4; uint tnum=0;
uchar num[10]=\
/*************************************************/ //DHT11温度传感器程序模块
/*************************************************/ sbit TRH=P1^4;//温湿度传感器DHT11数据接入 uint TH_data,TL_data,RH_data,RL_data,CK_data; uint TH_temp,TL_temp,RH_temp,RL_temp,CK_temp; uint com_data,untemp,temp;
uint respond,WEN,SHI; // 温度、湿度、?
/*************************************************/ //5us级延时程序
/*************************************************/ void delay_us() {
_nop_();_nop_();_nop_();_nop_();_nop_(); }
void delay_ms(unsigned x ) {
unsigned char i; while(x--) {
for(i = 0; i<250; i++) {
_nop_(); _nop_(); _nop_(); _nop_(); } } }
/************************************************/ //收发信号检测,数据读取????????
/*************************************************/ char receive() {
uint i;
com_data=0;
for(i=0;i<=7;i++) {
25
respond=2; //?
while((!TRH)&&respond++); //没数据接入就延时 delay_us(); delay_us(); delay_us();
if(TRH) //有数据接入 {
temp=1; respond=2;
while((TRH)&&respond++); } else temp=0;
com_data<<=1;
com_data|=temp; }
return(com_data); }
/********************************************/ //湿度读取子程序
//温度高8位== TL_data //温度低8位== TH_data //湿度高8位== RH_data //湿度低8位== RH_data //校验 8位 == CK_data
//调用的程序有 delay_ms();, Delay_5us();,RECEIVE(); /*******************************************/ void read_TRH() {
//主机拉低18ms TRH=0;
delay_ms(18); TRH=1;
//DATA总线由上拉电阻拉高 主机延时20us delay_us(); delay_us(); delay_us(); delay_us();
//主机设为输入 判断从机响应信号 TRH=1;
//判断DHT11是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!TRH) {
respond=2;
//判断DHT11发出 80us 的低电平响应信号是否结束 while((!TRH)&& respond++);
26
respond=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while(TRH && respond++); //数据接收状态 RH_temp = receive(); RL_temp = receive(); TH_temp = receive(); TL_temp = receive(); CK_temp = receive(); TRH=1; //数据校验
untemp=(RH_temp+RL_temp+TH_temp+TL_temp); if(untemp==CK_temp) {
RH_data = RH_temp; RL_data = RL_temp; TH_data = TH_temp; TL_data = TL_temp; CK_data = CK_temp; }
WEN=TH_data; SHI=RH_data; } }
/*************************************************/ //LCD12864液晶显示程序模块
/*************************************************/ sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2;
#define LCD_DATA P0 /*----写命令到 LCD---*/
void LCD_WriteCom(unsigned char command) {
RS=0; RW=0;
// delay_ms(1); E=1;
LCD_DATA=command;
delay_ms(1);//////////////////// 在数据写入的时候加入适当的延时 E=0;
// delay_ms(1); }
/*----写数据到 LCD---*/
void LCD_WriteDat(unsigned char date) {
27