找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 971|回复: 0
打印 上一主题 下一主题
收起左侧

温控风扇stm32c8t6单片机程序

[复制链接]
跳转到指定楼层
楼主
ID:1052505 发表于 2023-8-1 11:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当温度大于等于27°时,电机风扇以80%的占空比工作且进行高温预警蜂鸣器以0.5s为周期鸣叫,红色led以0.3s为周期交替闪烁,温度小于等于24°时风扇停转,绿色led常亮。其他温度以风扇以占空比50%工作,指示灯全灭。

单片机源程序如下:
  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;        //定时器计数变量
  10. uint8_t wendu=0;        //温度
  11. uint8_t shidu=0;        //湿度
  12. uint8_t Motor_Mode=3;        //电机模式
  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. }
复制代码
原理图:无
仿真:无
Keil代码下载: 程序.7z (185.62 KB, 下载次数: 19)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表