显示的都是0 我找不到问题的所在
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "usart.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
#include "pwm.h"
#include "lcd.h"
#include "rtc.h"
//#include "dht11.h"
const u8 *COMPILED_DATE=__DATE__;//获得编译日期
const u8 *COMPILED_TIME=__TIME__;//获得编译时间
const u8* Week[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
#define dht11 PBin(9)
unsigned char ly_dis[4];//定义显示缓冲区
u8 U8FLAG,k;
u8 U8count,U8temp;
u8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
u8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
u8 U8comdata;
void dht11_init(void) //配置IO口
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void COM(void)
{
u8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!dht11)&&U8FLAG++);
delay_us(30);
U8temp=0;
if(dht11)
U8temp=1;
U8FLAG=2;
while((dht11)&&U8FLAG++);
//超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
U8comdata<<=1;
U8comdata|=U8temp; //0
}
}
void RH(void)
{
dht11=0;
delay_ms(18);
dht11=1;
delay_us(40);
dht11=1;
if(!dht11)
{
U8FLAG=2;
while((!dht11)&&U8FLAG++);
U8FLAG=2;
while((dht11)&&U8FLAG++);
//数据接收状态
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
dht11=1;
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}
}
}
int main(void)
{
SystemInit();
delay_init(72); //延时初始化
NVIC_Configuration();
uart_init(9600);
LED_Init();
LCD_Init();
RTC_Init();
dht11_init();
  OINT_COLOR=RED;//设置字体为红色
LED0=1;
while(1)
{
RH(); //调用温湿度读取子程序
ly_dis[0]=U8RH_data_H/10; //数据转换,因DHT11小断部份是保留,所以这里只显示出整数部份
ly_dis[1]=U8RH_data_H%10;
ly_dis[2]=U8T_data_H/10;
ly_dis[3]=U8T_data_H%10;
LCD_ShowNum(108,162,ly_dis[0],1,16);
LCD_ShowNum(122,162,ly_dis[1],1,16);
LCD_ShowNum(136,162,ly_dis[2],1,16);
LCD_ShowNum(150,162,ly_dis[3],1,16);
delay_ms(1000);
delay_ms(1000);
LED0=!LED0;
}
}
|