找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1672|回復(fù): 0
收起左側(cè)

溫控風(fēng)扇stm32c8t6單片機(jī)程序

[復(fù)制鏈接]
ID:1052505 發(fā)表于 2023-8-1 11:26 | 顯示全部樓層 |閱讀模式
當(dāng)溫度大于等于27°時,電機(jī)風(fēng)扇以80%的占空比工作且進(jìn)行高溫預(yù)警蜂鳴器以0.5s為周期鳴叫,紅色led以0.3s為周期交替閃爍,溫度小于等于24°時風(fēng)扇停轉(zhuǎn),綠色led常亮。其他溫度以風(fēng)扇以占空比50%工作,指示燈全滅。

單片機(jī)源程序如下:
  1. #include "stm32f10x.h"                  // Device header
  2. #include "Delay.h"
  3. #include "OLED.h"
  4. #include "Timer.h"
  5. #include "dht11.h"
  6. #include "Motor.h"
  7. #include "PWM.h"
  8. #include "stdio.h"

  9. uint16_t Num=0;        //定時器計(jì)數(shù)變量
  10. uint8_t wendu=0;        //溫度
  11. uint8_t shidu=0;        //濕度
  12. uint8_t Motor_Mode=3;        //電機(jī)模式
  13. uint8_t Motor_Speed=0;        //占空比

  14. void Sys_Mode(uint8_t temp);

  15. int main(void)
  16. {

  17.         OLED_Init();
  18.         Timer_Init();
  19.         DHT11_Init();
  20.         Motor_Init();
  21.         
  22.         OLED_ShowCharacters(1, 1, 7);
  23.         OLED_ShowCharacters(1, 3, 28);
  24.         OLED_ShowCharacters(1, 5, 29);
  25.         OLED_ShowCharacters(1, 7, 30);
  26.         
  27.         OLED_ShowCharacters(2, 1, 7);
  28.         OLED_ShowCharacters(2, 2, 13);
  29.         OLED_DisplayString(2, 5, ":");
  30.         OLED_ShowCharacters(2, 5, 9);
  31.         
  32.         OLED_ShowCharacters(3, 1, 27);
  33.         OLED_ShowCharacters(3, 2, 13);
  34.         OLED_DisplayString(3, 5, ":");
  35.         OLED_DisplayString(3, 8, "%");

  36.         OLED_ShowCharacters(4, 1, 31);
  37.         OLED_ShowCharacters(4, 2, 32);
  38.         OLED_ShowCharacters(4, 3, 33);
  39.         OLED_DisplayString(4, 7, ":");
  40.         OLED_DisplayString(4, 10, "%");
  41.         
  42.         while (1)
  43.         {
  44.                 DHT11_Read_Data(&wendu,&shidu);
  45.         
  46.                 if(wendu>26) Sys_Mode(1);
  47.                 else if(wendu<25) Sys_Mode(3);
  48.                 else Sys_Mode(2);
  49.                
  50.                 OLED_DisplayNum(2, 6, wendu, 2);
  51.                 OLED_DisplayNum(3, 6, shidu, 2);
  52.                 OLED_DisplayNum(4, 8, Motor_Speed, 2);
  53.                
  54.                 PWM_SetCompare3(Motor_Speed);
  55.         
  56.         }
  57. }

  58. void Sys_Mode(uint8_t temp)
  59. {
  60.         switch(temp)
  61.         {
  62.                 case 1:
  63.                         Motor_Speed=80;
  64.                         if(Num%5==0)
  65.                         GPIO_ResetBits(GPIOA, GPIO_Pin_4);
  66.                         else GPIO_SetBits(GPIOA, GPIO_Pin_4);                        
  67.                         if(Num%3==0)
  68.                         GPIO_ResetBits(GPIOA, GPIO_Pin_5);
  69.                         else GPIO_SetBits(GPIOA, GPIO_Pin_5);
  70.                         GPIO_ResetBits(GPIOA, GPIO_Pin_6);//綠色LED滅
  71.                 break;
  72.                 case 2:
  73.                         Motor_Speed=50;
  74.                         GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6);//三輸出引腳全部置低電平
  75.                 break;
  76.                 case 3:
  77.                         Motor_Speed=0;
  78.                         GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5);
  79.                         GPIO_SetBits(GPIOA, GPIO_Pin_6);//綠色LED常亮
  80.                 break;
  81.         }
  82. }

  83. void TIM3_IRQHandler(void)
  84. {
  85.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)
  86.         {
  87.                 Num ++;
  88.                
  89.                 TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
  90.         }
  91. }
復(fù)制代碼
原理圖:無
仿真:無
Keil代碼下載: 程序.7z (185.62 KB, 下載次數(shù): 21)

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表