找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stm32智能遥控风扇程序源码

[复制链接]
跳转到指定楼层
楼主
ID:309758 发表于 2018-8-2 21:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本程序使用的是普中stm32开发板外加一个电机驱动模块,实习自动根据温度调节风扇转速, 和手动选择模式,温度的范围可通过按键和红外遥控进行调节。屏幕显示当前温度和模式。并且可通过串口查看温度

单片机源程序如下:
  1. #include "system.h"
  2. #include "SysTick.h"
  3. #include "led.h"
  4. #include "usart.h"
  5. #include "tftlcd.h"
  6. #include "DS18B20.h"
  7. #include "key.h"
  8. #include "hwjs.h"


  9. /*******************************************************************************
  10. * 函 数 名         : main
  11. * 函数功能                   : 主函数
  12. * 输    入         : 无
  13. * 输    出         : 无
  14. *******************************************************************************/
  15. int main()
  16. {
  17.         u8 i=0,key,a=15,b=20,t=25,k=30;
  18.         int PWM,low,zhouqi;
  19.         float temper;
  20.         u8 temper_buf[6];
  21.         int temper1;
  22.        
  23.         zhouqi=250;
  24.         low=zhouqi-PWM;
  25.        
  26.         SysTick_Init(72);
  27.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
  28.         LED_Init();
  29.         KEY_Init();
  30.         USART1_Init(9600);
  31.         Hwjs_Init();
  32.         TFTLCD_Init();
  33.        
  34.        
  35.         FRONT_COLOR=YELLOW;
  36.        
  37.   LCD_ShowFontHZ(10,20,"当前温度为");
  38.        
  39.         while(DS18B20_Init())
  40.         {  
  41.           printf("DS18B20检测失败,清插好!\r\n");
  42.                    
  43.         }
  44.         printf("DS18B20检测成功!\r\n");
  45.        
  46.         while(1)
  47.         {
  48.           key=KEY_Scan(0);
  49.                 switch(key)
  50.                 {
  51.                   case KEY_UP:
  52.                         {
  53.                                 led2=0;
  54.                                 t+=1;
  55.                           break;
  56.                         }
  57.                   case KEY_DOWN:
  58.                         {
  59.                                 led2=1;
  60.                                 t-=1;
  61.                                 break;
  62.       }                               
  63.                   case KEY_LEFT:
  64.                         {
  65.                                 led3=0;
  66.                                 k+=1;
  67.                                 break;
  68.                         }       
  69.                   case KEY_RIGHT:
  70.                         {
  71.                                 led3=1;
  72.                                 k-=1;
  73.                                 break;
  74.                         }       
  75.                 }
  76.                 LCD_ShowFontHZ(10,60,"第一档");
  77.                 LCD_ShowChar(10+100,70,'<',16,0);
  78.                 LCD_ShowNum(10+110,70,a,2,16);
  79.           LCD_ShowFontHZ(10,100,"第二档");
  80.                 LCD_ShowNum(10+100,110,a,2,16);
  81.                 LCD_ShowChar(10+115,110,'-',16,0);
  82.                 LCD_ShowNum(10+125,110,b,2,16);
  83.                 LCD_ShowFontHZ(10,140,"第三档");
  84.                 LCD_ShowNum(10+100,150,b,2,16);
  85.                 LCD_ShowChar(10+115,150,'-',16,0);
  86.                 LCD_ShowNum(10+125,150,t,2,16);
  87.                 LCD_ShowFontHZ(10,180,"第四档");
  88.                 LCD_ShowNum(10+100,190,t,2,16);
  89.                 LCD_ShowChar(10+115,190,'-',16,0);
  90.                 LCD_ShowNum(10+125,190,k,2,16);
  91.                 LCD_ShowFontHZ(10,220,"第五档");
  92.                 LCD_ShowChar(10+100,230,'>',16,0);
  93.                 LCD_ShowNum(10+110,230,k,2,16);
  94.                 LCD_ShowFontHZ(10,260,"风力为");
  95.                
  96.                 i++;
  97.                 if(i%5==0)
  98.                 {
  99.                   temper=DS18B20_GetTemperture();
  100.                         if(temper<0)
  101.                         {
  102.                           printf("检测的温度为:-");
  103.                         }
  104.                    else
  105.                          {
  106.                            printf("检测的温度为:");
  107.                          }
  108.                          printf("%.2f\r\n",temper);
  109.                          temper1=temper*100;
  110.                          temper_buf[0]=temper1/10000+0x30;
  111.                          temper_buf[1]=temper1%10000/1000+0x30;
  112.                          temper_buf[2]=temper1%1000/100+0x30;
  113.                          temper_buf[3]='.';
  114.                          temper_buf[4]=temper1%100/10+0x30;
  115.        temper_buf[5]=temper1%10+0x30;
  116.                          LCD_ShowString(10+20*8,30,tftlcd_data.width,tftlcd_data.height,16,(u8 *)temper_buf);

  117.                 }
  118.                
  119.                 if(hw_jsbz==1)
  120.                 {
  121.                        
  122.                         if(hw_jsm==0x00FF629D)
  123.                         {
  124.                                 if(temper>k)
  125.                                 {
  126.                                         LCD_ShowFontHZ(110,260,"第五档");
  127.                                         low=0;
  128.                                         GPIO_SetBits(GPIOB,GPIO_Pin_0);                       
  129.                                         delay_ms(PWM);                       
  130.                                 }
  131.                                 if(temper<15)
  132.                                 {
  133.                                         LCD_ShowFontHZ(110,260,"第一档");
  134.                                         low=400;
  135.                                         GPIO_SetBits(GPIOB,GPIO_Pin_0);                       
  136.                                         delay_ms(PWM);
  137.                                         GPIO_ResetBits(GPIOB,GPIO_Pin_0);                       
  138.                                         delay_ms(low);       
  139.                                 }
  140.                                 if(temper>=15&temper<20)
  141.                                 {
  142.                                         LCD_ShowFontHZ(110,260,"第二档");
  143.                                         low=300;
  144.                                         GPIO_SetBits(GPIOB,GPIO_Pin_0);                       
  145.                                         delay_ms(PWM);
  146.                                         GPIO_ResetBits(GPIOB,GPIO_Pin_0);                       
  147.                                         delay_ms(low);                       
  148.                                 }
  149.                                 if(temper>=20&temper<t)
  150.                                 {
  151.                                         LCD_ShowFontHZ(110,260,"第三档");
  152.                                         low=200;
  153.                                         GPIO_SetBits(GPIOB,GPIO_Pin_0);                       
  154.                                         delay_ms(PWM);
  155.                                         GPIO_ResetBits(GPIOB,GPIO_Pin_0);                       
  156.                                         delay_ms(low);                       
  157.                                 }
  158.                                 if(temper>=t&temper<k)
  159.                                 {
  160.                                         LCD_ShowFontHZ(110,260,"第四档");
  161.                                         low=100;
  162.                                         GPIO_SetBits(GPIOB,GPIO_Pin_0);                       
  163.                                         delay_ms(PWM);
  164.                                         GPIO_ResetBits(GPIOB,GPIO_Pin_0);                       
  165.                                         delay_ms(low);                       
  166.                                 }       
  167.                         }
  168.                        
  169.                                 else if(hw_jsm==0x00FF30CF)
  170.                                         {
  171.                                                 LCD_ShowFontHZ(110,260,"第一档");
  172.                                                 low=400;
  173.                                                 GPIO_SetBits(GPIOB,GPIO_Pin_0);                       
  174.                                                 delay_ms(PWM);
  175.             GPIO_ResetBits(GPIOB,GPIO_Pin_0);                       
  176.                                                 delay_ms(low);                                                       
  177.                                         }
  178.                                         else if(hw_jsm==0x00FF18E7)
  179.                                         {
  180.                                                 LCD_ShowFontHZ(110,260,"第二档");
  181.                                                 low=300;
  182.                                                 GPIO_SetBits(GPIOB,GPIO_Pin_0);                       
  183.                                                 delay_ms(PWM);
  184.                                                 GPIO_ResetBits(GPIOB,GPIO_Pin_0);                       
  185.                                                 delay_ms(low);                       
  186.                                         }                                       
  187.                                         else if(hw_jsm==0x00FF7A85)
  188.                                         {
  189.                                                 LCD_ShowFontHZ(110,260,"第三档");
  190.                                                 low=200;
  191.                                                 GPIO_SetBits(GPIOB,GPIO_Pin_0);                       
  192.                                                 delay_ms(PWM);
  193.                                                 GPIO_ResetBits(GPIOB,GPIO_Pin_0);                       
  194.                                                 delay_ms(low);                       
  195.                                         }
  196.                                         else if(hw_jsm==0x00FF10EF)
  197.                                         {
  198.                                                 LCD_ShowFontHZ(110,260,"第四档");
  199.                                                 low=100;
  200.                                                 GPIO_SetBits(GPIOB,GPIO_Pin_0);                       
  201.                                                 delay_ms(PWM);
  202.                                                 GPIO_ResetBits(GPIOB,GPIO_Pin_0);                       
  203.                                                 delay_ms(low);                       
  204.                                         }               
  205.                                         else if(hw_jsm==0x00FF38C7)       
  206.                                         {
  207.                                                 LCD_ShowFontHZ(110,260,"第五档");
  208.                                                 low=0;
  209.                                                 GPIO_SetBits(GPIOB,GPIO_Pin_0);                       
  210.                                                 delay_ms(PWM);
  211.                                         }       
  212.                                         else if(hw_jsm==0x00FFA25D)       
  213.                                         {
  214.                                                 LCD_ShowFontHZ(110,260,"关闭");
  215.                                                 GPIO_ResetBits(GPIOB,GPIO_Pin_0);                       
  216.                                         }       
  217.                                         else if(hw_jsm==0x00FF22DD)
  218.                                         {
  219.                                           a+=1;
  220.                                                 hw_jsm=0;
  221.                                         }
  222.                             else if(hw_jsm==0x00FFE01F)
  223.                                         {
  224.                                           a-=1;
  225.                                                 hw_jsm=0;
  226.                                         }
  227.                                         else if(hw_jsm==0x00FFC23D)
  228.                                         {
  229.                                           b+=1;
  230.                                                 hw_jsm=0;
  231.                                         }
  232.                                         else if(hw_jsm==0x00FF02FD)
  233.                                         {
  234.                                           b-=1;
  235.                                                 hw_jsm=0;
  236.                                         }
  237.                                         else if(hw_jsm==0x00FF906F)
  238.                                         {
  239.                                           t+=1;
  240.                                                 hw_jsm=0;
  241.                                         }
  242.                                         else if(hw_jsm==0x00FFA857)
  243.                                         {
  244.                                           t-=1;
  245.                                                 hw_jsm=0;
  246.                                         }
  247.                                         else if(hw_jsm==0x00FFB04F)
  248.                                         {
  249.                                           k+=1;
  250.                                                 hw_jsm=0;
  251.                                         }
  252.                                         else if(hw_jsm==0x00FF9867)
  253.                                         {
  254.                                           k-=1;
  255.                                                 hw_jsm=0;
  256.                                         }                       
  257.           }
  258.                 if(i%20==0)
  259.                 {
  260.                         led1=!led1;
  261.                 }
  262.                 delay_us(5);
  263.         }
  264. }

复制代码

所有资料51hei提供下载:
智能遥控风扇.rar (333.5 KB, 下载次数: 68)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:461983 发表于 2019-1-4 17:58 | 只看该作者
很有帮助 最近正在进行这项设计,可以参考一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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