找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1803|回复: 0
收起左侧

单片机蓝桥杯智能风扇程序

[复制链接]
ID:882665 发表于 2021-6-27 08:35 | 显示全部楼层 |阅读模式
工作模式
设备具有“睡眠风”、“自然风”和“常风”三种工作模式可以通过按键切换,通过
单片机 P34 引脚输出脉宽调制信号控制电机运行状态,信号频率为 1KHz。
1.1 “睡眠风”模式下,对应 PWM 占空比为 20%;
1.2 “自然风”模式下,对应 PWM 占空比为 30%;
1.3 “常风”模式下,对应 PWM 占空比为 70%;
2. 数码管显示
数码管实时显示设备当前工作模式和剩余工作时间(倒计时),如图 2 所示。
- - 1 1 - - 8 8 0 0 0 0 5 5 0 0
工作模式:睡眠风 熄灭 剩余工作时间:50 秒
图 2.工作模式和剩余工作时间显示
“睡眠风”状态下,对应数码管显示数值为 1,自然风模式下,显示数值为 2,常
风模式下,显示数值为 3。
3. 按键控制
使用 S4、S5、S6、S7 四个按键完成按键控制功能。
2.1 按键S4定义为工作模式切换按键,每次按下S4,设备循环切换三种工作模式。
工作过程如下:
2.2 按键 S5 定义为“定时按键”每次按下 S5,定时时间增加 1 分钟,设备的剩余
工作时间重置为当前定时时间,重新开始倒计时,工作过程如下:
设备剩余工作时间为 0 时,停止 PWM 信号输出。
2.3 按键 S6 定义为“停止”按键,按下 S6 按键,立即清零剩余工作时间,PWM
信号停止输出,直到通过 S5 重新设置定时时间。
2.4 按键 S7 定义为“室温”按键,按下 S7,通过数码管显示当前室温,数码管显
示格式如图 3 所示,再次按下 S7,返回图 2 所示的工作模式和剩余工作时间
睡眠风 自然风 常风
0 分钟 1 分钟 2 分钟
3 / 4
显示界面,如此往复。
- - 4 4 - - 8 8 8 8 2 2 5 5 C C
室温显示 熄灭 当前室内:25℃
图 3.室温显示界面
室温测量、显示功能不应影响设备正在执行的 PWM 信号输出、停止、模式切
换和计时等功能。
4. LED 指示灯
“睡眠风”模式下,L1 点亮,“自然风”模式下 L2 点亮,“常风”模式下 L3 点亮;
按下停止按键或倒计时结束时,LED 全部熄灭。

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<dulianjian.h>
  3. #include<shumaguan.h>
  4. #include<onewire.h>
  5. void Timer0Init();
  6. void anjian();
  7. unsigned char jianzhi;
  8. unsigned char fengsu=1;
  9. unsigned char time;       
  10. unsigned char wendu;
  11. unsigned char t;
  12. unsigned char c;
  13. static unsigned char s=0;
  14. static unsigned char w=0;
  15. unsigned char timeplay[8];
  16. unsigned char wenduplay[8];
  17. bit anjianflag;
  18. bit wenduflag;
  19. void main()
  20. {
  21. Timer0Init();
  22. P2=0X80;P0=~0X00;P2=0X00;
  23. P2=0X80;P0=~0X01;P2=0X00;

  24. while(1)
  25. {
  26. timeplay[0]=17;timeplay[1]=fengsu;timeplay[2]=17;timeplay[3]=16;timeplay[4]=0;
  27. timeplay[5]=time/100;
  28. timeplay[6]=(time%100)/10;
  29. timeplay[7]=time%10;
  30. if(wenduflag)
  31. {
  32. wendu=(unsigned char)rd_temperature_f();
  33. }
  34. wenduplay[0]=17;wenduplay[1]=4;wenduplay[2]=17;wenduplay[3]=16;wenduplay[4]=16;
  35. wenduplay[5]=wendu/10;
  36. wenduplay[6]=wendu%10;
  37. wenduplay[7]=12;
  38. if(anjianflag==1)
  39. {
  40. jianzhi=zhuangtaiji();
  41. if(jianzhi==1)
  42. {
  43. c++;
  44. P2=0X80;P0=~0X00;P2=0X00;
  45. P2=0X80;P0=~0X01;P2=0X00;
  46. }
  47. if(jianzhi==2)
  48. {
  49. time=0;t=0;
  50. }
  51. if(jianzhi==3)
  52. {
  53. t++;
  54. if(t==1)time=60;
  55. if(t==2)time=120;
  56. if(t==3)
  57. {
  58. time=0;t=0;
  59. }
  60. }
  61. if(jianzhi==4)
  62. {
  63. fengsu++;
  64. if(fengsu==1)
  65. {
  66. P2=0X80;P0=~0X00;P2=0X00;
  67. P2=0X80;P0=~0X01;P2=0X00;
  68. }
  69. if(fengsu==2)
  70. {
  71. P2=0X80;P0=~0X00;P2=0X00;
  72. P2=0X80;P0=~0X02;P2=0X00;
  73. }
  74. if(fengsu==3)
  75. {
  76. P2=0X80;P0=~0X00;P2=0X00;
  77. P2=0X80;P0=~0X04;P2=0X00;
  78. }
  79. if(fengsu==4)
  80. {
  81. fengsu=1;
  82. P2=0X80;P0=~0X00;P2=0X00;
  83. P2=0X80;P0=~0X01;P2=0X00;
  84. }
  85. }
  86. }
  87. }
  88. }
  89. void Timer0Init(void)                //1毫秒@11.0592MHz
  90. {
  91.         AUXR |= 0x80;                //定时器时钟1T模式
  92.         TMOD &= 0xF0;                //设置定时器模式
  93.         TL0 = 0xAE;                //设置定时初值
  94.         TH0 = 0xFB;        //设置定时初值
  95.         TF0 = 0;                //清除TF0标志
  96.         TR0 = 1;                //定时器0开始计时
  97.         ET0=1;
  98.         EA=1;
  99. }
  100. void tm0_isr() interrupt 1
  101. {
  102.         static int shumaguancount;static int anjiancount;static int timecount;
  103.         shumaguancount++;anjiancount++;timecount++;
  104.     TL0 = 0xAE;                //设置定时初值
  105.         TH0 = 0xFB;               //reload timer0 high byte

  106.     if (shumaguancount == 20)               //1ms * 1000 -> 1s
  107.     {
  108.         shumaguancount = 0;
  109.                 if(c%2==0)
  110.                 {
  111.                 display(timeplay[s],w);
  112.                 wenduflag=0;
  113.                 }
  114.                 if(c%2==1)
  115.                 {
  116.                 display(wenduplay[s],w);
  117.                 wenduflag=1;
  118.                 }
  119.                 s++;w++;
  120.                 if(s==8)s=0;  
  121.                 if(w==8)w=0;            
  122.     }
  123.         if(anjiancount==100)
  124.         {
  125.         anjiancount=0;
  126.         anjianflag=1;
  127.         }
  128.         if(timecount==10000)
  129.         {
  130.         if(time>0)
  131.         time--;
  132.         }
  133. }
复制代码

所有程序51hei提供下载:
fengshan2.zip (53.96 KB, 下载次数: 76)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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