硬件设计
链接: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("出大错!rn");beep_open();}else{printf("湿度:%d.%d 温度:%d.%drn",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=%drn",light_value); // // // light_mv=light_value*3300/4096; //mW // // printf("light_mv=%dmvrn",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); } }
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124.
.