硬件设计
链接:https://pan.baidu.com/s/1adijnDk8O81Jwgwz2uKf2Q
提取码:q3dp
仿真图如下所示:
程序设计
#include "stm32f4xx.h"
#include "PMW.h"
#include "sys.h"
#include "delay.h"
#include "ADC.h"
#include "beep.h"
#include <stdio.h>
#include "key.h"
#include "tim.h"
#include "dht11.h"
#include "seg.h"
#include "usart.h"
#include "lcd.h"
//*********************************************************************************************************//
//*********************************************************************************************************//
uint32_t s=50;
extern uint8_t dht11_data[5];
extern int seg2;
extern u8 num_select[];//={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int light_value;
int light_mv;
int light_value1;
int light_mv1;
char wendu[] = "Temperature:";
char shidu[] = "Humidity:";
//*********************************************************************************************************//
//*********************************************************************************************************//
int fputc(int ch,FILE *f)
{
USART_SendData(USART1,ch);
while(USART_GetFlagStatus( USART1,USART_FLAG_TXE )== RESET);
return ch;
}
void TIM2_IRQHandler(void)
{
uint8_t wen[2]={0,0};
uint8_t shi[2]={0,0};
int ret;
//检查中断是否真的被触发
if(TIM_GetITStatus(TIM2, TIM_IT_Update)== SET)
//执行功能
{
Delay_ms(1);
ret= dht11_readdata();
shi[0]=(dht11_data[0]/10)+0x30;
shi[1]=(dht11_data[0]%10)+0x30;
wen[0]=(dht11_data[2]/10)+0x30;
wen[1]=(dht11_data[2]%10)+0x30;
if(dht11_data[2]<10||dht11_data[2]>30||dht11_data[0]>80||dht11_data[0]<30)
{
beep_open();
}
else
{
beep_close();
}
if(ret== -1)
{
printf("出大错!\r\n");
beep_open();
}
else
{
printf("湿度:%d.%d 温度:%d.%d\r\n",dht11_data[0],dht11_data[1],dht11_data[2],dht11_data[3]);
LCD1602_Show_Str(12,0,(char*)wen);
LCD1602_Show_Str(10,2,(char*)shi);
}
// ADC_SoftwareStartConv(ADC1);
// //
// while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)== RESET);
// //
// light_value= ADC_GetConversionValue(ADC1);
// //
// printf("light_value=%d\r\n",light_value);
// //
// light_mv=light_value*3300/4096; //mW
//
// printf("light_mv=%dmv\r\n",light_mv);
// //TIM_SetCompare1(TIM4,light_mv/80);
}
//清楚中断标志
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
void EXTI0_IRQHandler(void) //按键1
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET)//功能
{
/* Toggle LED1 */
s+=10;
/* Clear the EXTI line 0 pending bit */
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
void EXTI1_IRQHandler(void) //按键2
{
if(EXTI_GetITStatus(EXTI_Line1) != RESET) //功能
{
/* Toggle LED1 */
s-=10;
/* Clear the EXTI line 0 pending bit */
EXTI_ClearITPendingBit(EXTI_Line1);
}
}
void EXTI2_IRQHandler(void) //按键3
{
if(EXTI_GetITStatus(EXTI_Line2) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line2);
}
}
.
.