當溫度大于等于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)
2023-8-1 13:41 上傳
點擊文件名下載附件
程序代碼 下載積分: 黑幣 -5
|