初中生
最后登录1970-1-1
在线时间 小时
注册时间2018-4-26
|
#include <stm32f4xx.h>
#include <stdio.h>
unsigned int utime=0;
void SysTick_Handler()
{
if(utime)
utime--;
}
void Delays(unsigned int n)
{
utime=1*n;
while(utime);
}
void usart()
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitTypeDef gpio;
gpio.GPIO_Mode=GPIO_Mode_AF;
gpio.GPIO_OType=GPIO_OType_PP;
gpio.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;
gpio.GPIO_PuPd= GPIO_PuPd_NOPULL;
gpio.GPIO_Speed= GPIO_Low_Speed;
GPIO_Init(GPIOA,&gpio);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 ,ENABLE);
USART_InitTypeDef usart;
usart.USART_BaudRate=9600;
usart.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
usart.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
usart.USART_Parity=USART_Parity_No ;
usart.USART_StopBits=1;
usart.USART_WordLength=8;
USART_Cmd(USART1,ENABLE);
USART_Init(USART1,&usart);
}
int fputc(int ch,FILE*fp)
{
USART_SendData( USART1, ch );
while( USART_GetFlagStatus( USART1, USART_FLAG_TXE ) == RESET );
return ch;
}
char Temper_H;//ÎÂÕû
char Temper_L;//ÎÂD¡
char Humid_H;//êaÕû
char Humid_L;//êaD¡
void GL5516_Input()
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitTypeDef gpio;
gpio.GPIO_Mode=GPIO_Mode_IN;
gpio.GPIO_OType=GPIO_OType_PP;
gpio.GPIO_Pin=GPIO_Pin_4;
gpio.GPIO_PuPd= GPIO_PuPd_NOPULL;
gpio.GPIO_Speed=GPIO_Fast_Speed ;
GPIO_Init(GPIOA,&gpio);
}
void DHT11_Out()
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
GPIO_InitTypeDef gpio;
gpio.GPIO_Mode=GPIO_Mode_OUT;
gpio.GPIO_OType=GPIO_OType_PP;
gpio.GPIO_Pin=GPIO_Pin_2;
gpio.GPIO_PuPd= GPIO_PuPd_NOPULL;
gpio.GPIO_Speed=GPIO_Fast_Speed ;
GPIO_Init(GPIOE,&gpio);
}
void DHT11_Input()
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
GPIO_InitTypeDef gpio;
gpio.GPIO_Mode=GPIO_Mode_IN;
gpio.GPIO_OType=GPIO_OType_PP;
gpio.GPIO_Pin=GPIO_Pin_2;
gpio.GPIO_PuPd= GPIO_PuPd_NOPULL;
gpio.GPIO_Speed=GPIO_Fast_Speed ;
GPIO_Init(GPIOE,&gpio);
}
void DHT11_Init()
{
DHT11_Out();
Temper_H=0;
Temper_L=0;
Humid_H=0;
Humid_L=0;
}
int DHT11_Readbyte()
{
int data=0;
int i;
int cout;
for(i=0;i<8;i++)
{
cout=1;
printf("111");
while((!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2))&&cout);
Delays(40);
printf("222");
data=data<<1;
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)==1)
{
data=data|1;
}
cout=1;
while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)&&cout);
}
return data;
printf("%d\n",data);
}
int DHT11_Readdata()
{
unsigned int cout = 1;
unsigned int T_a, T_b, H_a, H_b, jy;
DHT11_Out();
GPIO_SetBits(GPIOE,GPIO_Pin_2);
GPIO_ResetBits(GPIOE,GPIO_Pin_2);
//*(unsigned int *)(0x40021000 + 0x14 ) &= ~(1<<2);
Delays(30000);
GPIO_SetBits(GPIOE,GPIO_Pin_2);
// *(unsigned int *)(0x40021000 + 0x14 ) |= 1<<2;
Delays(40);
DHT11_Input();
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)==0)
{
cout=1;
while((!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2))&&cout++);
printf("444");
cout=1;
while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)&&cout++);
printf("555");
T_a=DHT11_Readbyte();
T_b=DHT11_Readbyte();
H_a=DHT11_Readbyte();
H_b=DHT11_Readbyte();
printf("%d\n",T_a);
jy=DHT11_Readbyte();
GPIO_SetBits(GPIOE,GPIO_Pin_2);
if(jy==T_a+T_b+H_a+H_b)
{
Temper_H=T_a;
Temper_L=T_b;
Humid_H=H_a;
Humid_L=H_b;
return 1;
}
else{
return 0 ;
}
}
return 0;
}
unsigned char get_humidity()
{
return Humid_H << 8 | Humid_L;
}
unsigned char get_temperature()
{
return Temper_H << 8 | Temper_L;
}
int main()
{
SysTick_Config(180);
usart();
while(1)
{
DHT11_Init();
if(DHT11_Readdata())
{
char temper=get_temperature();
char humid=get_humidity();
printf("ζè :%d.%d êa¶è: %d.%d \n", \
temper/256, temper%256, \
humid/256, humid%256);
}
Delays(100000);
}
}
|
|