久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 131|回復: 0
打印 上一主題 下一主題
收起左側

基于stm32單片機的溫控風扇代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:1155874 發表于 2025-7-4 08:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
按鍵1 用于切換模式
按鍵2 用于模式2調速
模式1 為溫控模式

單片機源程序如下:
  1. #include "stm32f10x.h"                 // Device header
  2. #include "OLED.h"
  3. #include "Delay.h"
  4. #include "Key.h"
  5. #include "dht11.h"
  6. #include "motor.h"
  7. #include "pwm.h"
  8. #include "encoder.h"
  9. #include "Timer.h"


  10. uint8_t Key_num,Key_down,Key_up,Key_old;//模式控制按鍵       PB1數為1,PB11數為2
  11. uint8_t jishu = 0;//按鍵控制電機
  12. u8 temp;//溫度
  13. u8 humi;//濕度
  14. u8 mode = 0;//模式 0-關機 1-溫控風扇 2-按鍵控制
  15. u8 check = 0;
  16. u8 i;
  17. u16 t;
  18. u16 Speed;


  19. //void TIM2_IRQHandler(void)
  20. //{
  21. //        if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
  22. //        {
  23. //                                Speed = Encoder3_Get();       
  24. //                TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  25. //        }
  26. //}

  27. //電機A4高A5低
  28. int main(void)
  29. {
  30. //        PWM2_Init();
  31.         Key_Init();//按鍵初始化
  32.         OLED_Init();//顯示屏初始化
  33.         Motor_Init();//電機初始化
  34.         Encoder_Init();
  35.         Encoder4_Init();
  36. //        Timer_Init();                       
  37.        
  38.         OLED_ShowString(1,1,"T:");
  39.         OLED_ShowString(2,1,"S:");
  40.         OLED_ShowString(3,1,"mode:");
  41.         OLED_ShowString(4,1,"Gear:");
  42.                 while(DHT11_Init())//初始化DHT11的IO口 DQ 同時檢測DHT11的存在
  43.         {
  44. //                Delay_ms(200);
  45.                 OLED_ShowString(3,5,"error");
  46.         }
  47.        
  48.         while(1)
  49.         {
  50.                 Key_num = Key_GetNum();
  51. //                Key_down = Key_num & (Key_old ^ Key_num);//下降沿輸出
  52. //                Key_up = Key_num & (Key_old ^ Key_num);//上升沿輸出
  53. //                Key_old = Key_num;//長按
  54. //               
  55.                

  56.                 check = DHT11_Read_Data(&temp,&humi);
  57.                
  58.                 if(check == 1)                
  59.                 {
  60.                         OLED_ShowString(2,5,"error");
  61.                        
  62.                 } //溫度范圍檢查
  63.                
  64. //                t = Encoder3_Get();
  65.                        
  66.                 Delay_ms(500);               
  67.                 OLED_ShowNum(1,3,temp,2);//溫度值顯示
  68.                 OLED_ShowNum(2,3,humi,2);//濕度值顯示
  69.                 OLED_ShowNum(3,6,mode,1);//模式顯示
  70.                 OLED_ShowNum(1,6,Encoder3_Get(),5);
  71.                 OLED_ShowNum(2,6,Encoder4_Get(),5);               
  72.                 if(Key_num == 1)
  73.                 {
  74.                         if(++mode == 3) mode = 0; //模式切換

  75.                 }
  76. //                if(mode == 1)
  77. //                        Motor_SetSpeed(humi);//溫控
  78. //                else if(mode == 2)
  79. //                {

  80. //                                Motor_SetSpeed(jishu*10);
  81. //                               
  82. //                        if(Key_num == 2)
  83. //                        {
  84. //                                if(++jishu == 11) jishu = 1;
  85. //                        }//按鍵控制
  86. ////                          OLED_ShowNum(4,6,jishu,2);//模式二檔位
  87. //                }
  88.                 switch(mode)
  89.                 {
  90.                         case 0:
  91.                                         jishu = 0;
  92.                                         Motor_SetSpeed(0);
  93.                                         OLED_ShowNum(4,6,jishu,2);
  94. //                                        PWM_SetCompare1(0);
  95.                                         for (i = 0; i <= Encoder3_Get()/10; i++)
  96.                                                 {
  97.                                                         PWM_SetCompare1(i);                        //依次將定時器的CCR寄存器設置為0~100,PWM占空比逐漸增大,LED逐漸變亮
  98.                                                         Delay_ms(10);
  99.                                                 }
  100.                                         for (i = 0; i <= Encoder3_Get()/10; i++)
  101.                                                 {
  102.                                                         PWM_SetCompare1(100 - i);        //依次將定時器的CCR寄存器設置為100~0,PWM占空比逐漸減小,LED逐漸變暗
  103.                                                         Delay_ms(10);
  104.                                                 }
  105.                         break; //模式0——關機
  106.                         case 1:
  107.                                                 if(humi<25)                        Motor_SetSpeed(0);
  108.                                                 else if(humi>=25 && humi<100)
  109.                                                 {
  110.                                                 Motor_SetSpeed(humi);
  111.                                                 PWM_SetCompare1(humi);
  112.                                                 for (i = 0; i <= (100-humi); i++)
  113.                                                 {
  114.                                                         PWM_SetCompare1(i);                        //依次將定時器的CCR寄存器設置為0~100,PWM占空比逐漸增大,LED逐漸變亮
  115.                                                         Delay_ms(10);                                //延時10ms
  116.                                                 }
  117.                                                 for (i = 0; i <= (100-humi); i++)
  118.                                                 {
  119.                                                         PWM_SetCompare1(100 - i);        //依次將定時器的CCR寄存器設置為100~0,PWM占空比逐漸減小,LED逐漸變暗
  120.                                                         Delay_ms(10);                                //延時10ms
  121.                                                 }                       
  122.                                                
  123.                                                 }
  124.                                                 else         OLED_ShowString(2,5,"error");
  125.                                                
  126.                         break;//模式1——溫控
  127.                         case 2:
  128.                                                 if(Key_num == 2)
  129.                                                 {
  130.                                                         if(++jishu == 11) jishu = 0;
  131.                                                 }
  132.                                                 OLED_ShowNum(4,6,jishu,2);
  133.                                                 Motor_SetSpeed(jishu*10);
  134.                                                         for (i = 0; i <= (100-jishu*10); i++)
  135.                                                 {
  136.                                                         PWM_SetCompare1(i);                        //依次將定時器的CCR寄存器設置為0~100,PWM占空比逐漸增大,LED逐漸變亮
  137.                                                         Delay_ms(10);                                //延時10ms
  138.                                                 }
  139.                                                 for (i = 0; i <= (100-jishu*10); i++)
  140.                                                 {
  141.                                                         PWM_SetCompare1(100 - i);        //依次將定時器的CCR寄存器設置為100~0,PWM占空比逐漸減小,LED逐漸變暗
  142.                                                         Delay_ms(10);                                //延時10ms
  143.                                                 }                       
  144.                                                        
  145.                         break;//模式2——
  146.                 }
  147.                
  148.                
  149.         }
  150. }               
復制代碼

原理圖: 無
仿真: 無
代碼: 按鍵完全實現.7z (187.04 KB, 下載次數: 0)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费看av的网址 | 日韩午夜在线 | 欧美三级大片 | av影片在线观看 | 亚洲第一伊人 | 欧美在线观看一区二区 | 亚洲精品色 | 久久一区二区三区四区 | 97香蕉视频 | 久久天天 | 亚洲少妇一区 | 天天做天天操 | 丰满少妇高潮无套内谢 | 亚洲福利专区 | 久久性生活视频 | 午夜在线观看免费视频 | 福利视频1000 | 老司机免费福利视频 | 久久亚洲精品视频 | 国产香蕉视频 | 午夜网| 高潮毛片7777777毛片 | 日韩欧美综合 | 久久久精品在线观看 | 中文字幕免费看 | 黄色在线免费观看视频 | 成人高清在线 | 黄色成人在线视频 | 亚洲精品久久久久久久久 | 99热99re6国产在线播放 | 久久最新 | 欧美三级三级三级爽爽爽 | 亚洲精品欧美 | 五月天毛片 | 免费黄色av网站 | 日本不卡视频在线观看 | 免费av在线网站 | 天天插天天透 | 九九九精品视频 | 成人免费黄色大片 | 一级做a爱片性色毛片 |