当温度大于等于27°时,电机风扇以80%的占空比工作且进行高温预警蜂鸣器以0.5s为周期鸣叫,红色led以0.3s为周期交替闪烁,温度小于等于24°时风扇停转,绿色led常亮。其他温度以风扇以占空比50%工作,指示灯全灭。
单片机源程序如下:
- #include "stm32f10x.h" // Device header
- #include "Delay.h"
- #include "OLED.h"
- #include "Timer.h"
- #include "dht11.h"
- #include "Motor.h"
- #include "PWM.h"
- #include "stdio.h"
- uint16_t Num=0; //定时器计数变量
- uint8_t wendu=0; //温度
- uint8_t shidu=0; //湿度
- uint8_t Motor_Mode=3; //电机模式
- uint8_t Motor_Speed=0; //占空比
- void Sys_Mode(uint8_t temp);
- int main(void)
- {
- OLED_Init();
- Timer_Init();
- DHT11_Init();
- Motor_Init();
-
- OLED_ShowCharacters(1, 1, 7);
- OLED_ShowCharacters(1, 3, 28);
- OLED_ShowCharacters(1, 5, 29);
- OLED_ShowCharacters(1, 7, 30);
-
- OLED_ShowCharacters(2, 1, 7);
- OLED_ShowCharacters(2, 2, 13);
- OLED_DisplayString(2, 5, ":");
- OLED_ShowCharacters(2, 5, 9);
-
- OLED_ShowCharacters(3, 1, 27);
- OLED_ShowCharacters(3, 2, 13);
- OLED_DisplayString(3, 5, ":");
- OLED_DisplayString(3, 8, "%");
- OLED_ShowCharacters(4, 1, 31);
- OLED_ShowCharacters(4, 2, 32);
- OLED_ShowCharacters(4, 3, 33);
- OLED_DisplayString(4, 7, ":");
- OLED_DisplayString(4, 10, "%");
-
- while (1)
- {
- DHT11_Read_Data(&wendu,&shidu);
-
- if(wendu>26) Sys_Mode(1);
- else if(wendu<25) Sys_Mode(3);
- else Sys_Mode(2);
-
- OLED_DisplayNum(2, 6, wendu, 2);
- OLED_DisplayNum(3, 6, shidu, 2);
- OLED_DisplayNum(4, 8, Motor_Speed, 2);
-
- PWM_SetCompare3(Motor_Speed);
-
- }
- }
- void Sys_Mode(uint8_t temp)
- {
- switch(temp)
- {
- case 1:
- Motor_Speed=80;
- if(Num%5==0)
- GPIO_ResetBits(GPIOA, GPIO_Pin_4);
- else GPIO_SetBits(GPIOA, GPIO_Pin_4);
- if(Num%3==0)
- GPIO_ResetBits(GPIOA, GPIO_Pin_5);
- else GPIO_SetBits(GPIOA, GPIO_Pin_5);
- GPIO_ResetBits(GPIOA, GPIO_Pin_6);//绿色LED灭
- break;
- case 2:
- Motor_Speed=50;
- GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6);//三输出引脚全部置低电平
- break;
- case 3:
- Motor_Speed=0;
- GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5);
- GPIO_SetBits(GPIOA, GPIO_Pin_6);//绿色LED常亮
- break;
- }
- }
- void TIM3_IRQHandler(void)
- {
- if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)
- {
- Num ++;
-
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
- }
- }
复制代码 原理图:无
仿真:无
Keil代码下载:
程序.7z
(185.62 KB, 下载次数: 21)
|