基于STM32单片机的光强温湿度检测proteus仿真

硬件设计

链接: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);
   }
 }

.

.

  • 4
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值