新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2020-5-9
- 在线时间
- 9 小时
|
5金钱
DHT传感器连接单片机PA7口(是IO口)连接后系统运行无反应 使用步进电机演示 电机功能正常 (LCD部分暂时不用)C文件
#include "stm32f10x.h"
#include "dht11.h"
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;
#define BOOL unsigned char
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
//Ñóê±oˉêy
void delay_ms(u16 nms)
{
u32 f=nms,k;
for (; f!=0; f--)
{
for(k=0x2fff; k!=0; k--);
}
}
//Ñóê±oˉêy 1us
void delay_us(u32 nus)
{
u32 i;
while(nus--)
{
i=10;
while(i--);
}
}
//ÅäÖÃDHT11ᬽóμÄGPIOÎaêä3öÄ£ê½
static void DHT11_DataPin_Configure_Output(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ÅäÖà A7½ÅÎaíÆíìêä3ö
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
//ÅäÖÃDHT11ᬽóμÄGPIOÎaêäèëÄ£ê½
static void DHT11_DataPin_Configure_Input(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//DataPin;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
//DHT11»ñè¡ò»¸öêy¾Yλ
BOOL DHT11_get_databit(void)
{
uint8_t val;
val = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7);
if(val == Bit_RESET){
return FALSE;
}else{
return TRUE;
}
}
//DHT11êä3öò»¸öêy¾Yλ
void DHT11_set_databit(BOOL level)
{
if(level == TRUE){
GPIO_SetBits(GPIOA, GPIO_Pin_7);
}else{
GPIO_ResetBits(GPIOA, GPIO_Pin_7);
}
}
void mdelay(u16 ms)
{
if(ms != 0){
delay_ms(ms);
}
}
void udelay(u16 us)
{
if(us != 0){
delay_us(us);
}
}
//DHT11¶áè¡ò»¸ö×Ö½úμÄêy¾Y
static uint8_t DHT11_read_byte(void)
{
uint8_t i;
uint8_t data = 0;
for(i = 0; i < 8; i++)
{
data <<= 1;
while((!DHT11_get_databit()));
udelay(10);
udelay(10);
udelay(10);
if(DHT11_get_databit()) {
data |= 0x1;
while(DHT11_get_databit());
} else{
}
}
return data;
}
//DHT11Æô¶ˉ×a»»
static uint8_t DHT11_start_sampling(void)
{
DHT11_DataPin_Configure_Output();
DHT11_set_databit(FALSE);
mdelay(18);
DHT11_set_databit(TRUE);
udelay(10);
udelay(10);
DHT11_set_databit(TRUE);
DHT11_DataPin_Configure_Input();
if(!DHT11_get_databit()) //T !
{
while((!DHT11_get_databit()));
while((DHT11_get_databit()));
return 1;
}
return 0;
}
//LCDÏÔê¾±3¾°é«
#define RED 0xf800
#define GREEN 0x07e0
#define BLUE 0x001f
#define WHITE 0xffff
#define BLACK 0x0000
#define YELLOW 0xFFE0
#define GRAY0 0xEF7D //»òé«0 3165 00110 001011 00101
#define GRAY1 0x8410 //»òé«1 00000 000000 00000
#define GRAY2 0x4208 //»òé«2 1111111111011111
char LCD_TEMP[8]; //ζèòo¾§»o′æ
char LCD_HUMI[8]; //êa¶èòo¾§»o′æ
void DHT11_get_data(void)
{
u8 temp;
if(DHT11_start_sampling()){
U8RH_data_H_temp = DHT11_read_byte();
U8RH_data_L_temp = DHT11_read_byte();
U8T_data_H_temp = DHT11_read_byte();
U8T_data_L_temp = DHT11_read_byte();
U8checkdata_temp = DHT11_read_byte();
/* Data transmission finishes, pull the bus high */
DHT11_DataPin_Configure_Output();
DHT11_set_databit(TRUE);
temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(temp==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;
LCD_TEMP[0] = U8T_data_H / 10 + 0x30;
LCD_TEMP[1] = U8T_data_H % 10 + 0x30;
LCD_TEMP[2] = 'C';
LCD_HUMI[0] = U8RH_data_H / 10 + 0x30;
LCD_HUMI[1] = U8RH_data_H % 10 + 0x30;
LCD_HUMI[2] = '%';
Gui_DrawFont_GBK24(10,20,GRAY0,BLUE,"Window Control");
Gui_DrawFont_GBK16(10,50,RED,BLUE,"Temp:"); //릏
Gui_DrawFont_GBK16(50,50,YELLOW,BLUE,&LCD_TEMP[0]);
Gui_DrawFont_GBK16(10,70,RED,BLUE,"Humi:"); //êa¶è
Gui_DrawFont_GBK16(50,70,YELLOW,BLUE,&LCD_HUMI[0]);
}else{
}
}else{
}
}
void DHT11_test()
{
DHT11_get_data();
}
头文件
#ifndef _DHT11_H
#define _DHT11_H
#include "stm32f10x.h"
#include "misc.h"
#define DHT11 rPA7 //PA7
#define DHT11_PORT GPIO_Pin_7
#endif
电机运行程序
if(U8RH_data_H > Hum_Thre)//êa¶è1y¸ß£¬ÏÂóêáË 1Ø′°
{
if(!Window_Close_Flag)
{
Window_Open_Flag = 0;Window_Close_Flag = 1;
Gui_DrawFont_GBK16(10,110,WHITE,BLUE,"wind close"); Motor_Ctrl_Func(2,3,2000);
}
}
|
|