找回密码
 立即注册

QQ登录

只需一步,快速开始

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

模拟风扇控制系统源码-蓝桥杯例程

[复制链接]
跳转到指定楼层
楼主
ID:292707 发表于 2018-3-16 12:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/***************************************
项目名称:模拟风扇控制系统

实现功能:通过按键控制风扇的转动速度和定时时间,
          数码管实时显示风扇的工作模式,动态倒计时显示剩余的定时时间

实现功能:1.S4定义为工作模式切换按键,每次按下S4,设备循环切换三种工作模式

                  2.S5 定义为“定时按键”每次按下 S5,定时时间增加 1 分钟,设备的剩余
            工作时间重置为当前定时时间,重新开始倒计时
                  
                  3.S6 定义为“停止”按键,按下 S6 按键,立即清零剩余工作时间,PWM
            信号停止输出,直到通过 S5 重新设置定时时间
                  
                  4.S7 定义为“室温”按键,按下 S7,通过数码管显示当前室温
                  
                  5.设备具有“睡眠风”、“自然风”和“常风”三种工作模式可以通过按键切换,通过
            单片机 P34 引脚输出脉宽调制信号控制电机运行状态,信号频率为 1KHz。
                  
                  6.“睡眠风”模式下,L1 点亮,“自然风”模式下 L2 点亮,“常风”模式下 L3 点亮;
            按下停止按键或倒计时结束时,LED 全部熄灭
****************************************/

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<absacc.h>
  3. #include<intrins.h>
  4. #include "ds18b20.h"
  5. #define uchar unsigned char
  6. #define uint  unsigned int

  7. sbit   pwm=P3^4;   //  pwm
  8. sbit   S4=P3^3;    //  模式
  9. sbit   S5=P3^2;    //  定时
  10. sbit   S6=P3^1;    //  停止
  11. sbit   S7=P3^0;    //  室温

  12. #define led_addr        XBYTE[0x9fff]
  13. #define ziwei_addr      XBYTE[0xdfff]
  14. #define zixing_addr     XBYTE[0xffff]
  15. #define dalindun_addr   XBYTE[0xbfff]

  16. uchar  wd=0,ms=1,dsw,ds,kk=20;
  17. uchar  pwmh,pwml;

  18. uchar code zixing[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,
  19.                      0x7D,0x07,0x7F,0x6F,0x77,0x7C,
  20.                                          0x39,0x5E,0x79,0x71,0x76,0x00,0x40};
  21. uchar code ziwei[]={0x01,0x02,0x04,0x08,
  22.                     0x10,0x20,0x40,0x80};


  23. void delay(uint i)                                 //延时函数
  24. {
  25.     unsigned int j,k;
  26.     for(j=0;j<i;j++)
  27.        for(k=0;k<1200;k++);
  28. }


  29. void tc0int(void)
  30. {
  31.          TMOD=0x01;
  32.      TH0=0x3C;
  33.      TL0=0x0B0;
  34.      EA=1;
  35.      ET0=1;
  36.      TR0=1;
  37. }

  38. void tc0(void) interrupt 1 using 0
  39. {

  40.      TH0=(65536-50000)/256;
  41.      TL0=(65536-50000)%256;
  42.          kk--;
  43.          if(kk==0)
  44.             {
  45.                    kk=20;
  46.                    if(ds==0)
  47.                       ds=0;
  48.                 else
  49.                       ds--;
  50.                    }
  51. }


  52. void tc1int(void)
  53. {
  54.          TMOD=0x10;
  55.      TH1=pwml/256;
  56.      TL1=pwml%256;
  57.      EA=1;
  58.      ET1=1;
  59.      TR1=1;
  60. }

  61. void tc1(void) interrupt 3 using 1
  62. {
  63.       uchar  flag;
  64.           flag=~flag;
  65.           if(flag)
  66.         {        
  67.             TH1=pwmh/256;
  68.             TL1=pwmh%256;
  69.         }
  70.       else
  71.         {
  72.             TH1=pwml/256;
  73.             TL1=pwml%256;
  74.         }
  75.       pwm=!pwm;
  76. }


  77. void disp(void)
  78. {
  79.            uchar disbuf[8];
  80.         uchar m,temperature;

  81.         temperature=rd_temperature();
  82.         if(ds==0)
  83.            TR1=0;
  84.         else
  85.            TR1=1;
  86.         if(wd==0)
  87.       {
  88.                   disbuf[0]=18;
  89.               disbuf[1]=ms;
  90.          disbuf[2]=18;
  91.          disbuf[3]=17;
  92.          disbuf[4]=0;
  93.          disbuf[5]=ds/100;
  94.          disbuf[6]=(ds/10)%10;
  95.          disbuf[7]=ds%10;

  96.                 for(m=0;m<8;m++)
  97.                     {
  98.                                                                   
  99.                        zixing_addr=~zixing[disbuf[m]];
  100.                        ziwei_addr=ziwei[m];
  101.                        delay(1);
  102.                             zixing_addr=0xff;
  103.                                          
  104.                     }
  105.             
  106.             
  107.           }
  108.         if(wd==1)
  109.           {
  110.               disbuf[0]=18;
  111.                disbuf[1]=4;
  112.           disbuf[2]=18;
  113.           disbuf[3]=17;
  114.           disbuf[4]=17;
  115.           disbuf[5]=temperature/10;
  116.           disbuf[6]=temperature%10;
  117.           disbuf[7]=12;

  118.                  for(m=0;m<8;m++)
  119.                     {
  120.                                                                   
  121.                        zixing_addr=~zixing[disbuf[m]];
  122.                        ziwei_addr=ziwei[m];
  123.                        delay(1);
  124.                             zixing_addr=0xff;
  125.                                          
  126.                     }

  127.            }

  128.    if(ms==1)
  129.           led_addr=0xFE;
  130.    if(ms==2)
  131.           led_addr=0xFD;
  132.    if(ms==3)
  133.           led_addr=0xFB;
  134.    if(ds==0)
  135.           led_addr=0xFF;


  136. }

  137. void key_read(void)
  138. {
  139.            if(S4==0)                                 
  140.         {
  141.                    delay(1);
  142.                    if(S4==0)
  143.                          {
  144.                        while(S4==0)
  145.                                    disp();
  146.                            ms++;
  147.                                    if(ms==4)
  148.                                       ms=1;
  149.                          }
  150.                 }

  151.          if(S5==0)                                 
  152.         {
  153.                    delay(1);
  154.                    if(S5==0)
  155.                          {
  156.                        while(S5==0)
  157.                                    disp();
  158.                            dsw++;
  159.                                    if(dsw==3)
  160.                                       dsw=0;
  161.                                    ds=dsw*60;
  162.                          }         
  163.                 }
  164.                         
  165.          if(S6==0)                                 
  166.         {
  167.                    delay(1);
  168.                    if(S6==0)
  169.                          {
  170.                        while(S6==0)                                       
  171.                                           disp();
  172.                                           ds=0;                                 
  173.                          }                 
  174.                  }

  175.          if(S7==0)                                 
  176.         {
  177.                    delay(1);
  178.                    if(S7==0)
  179.                          {
  180.                        while(S7==0)                                                               
  181.                                           disp();
  182.                                           wd=!wd;
  183.                          }                 
  184.                  }         
  185. }

  186. void pwmsc(void)
  187. {
  188.          if(ms==1)
  189.             pwmh=65536-200;
  190.                 pwml=65536-800;

  191.      if(ms==2)
  192.             pwmh=65536-300;
  193.                 pwml=65536-700;

  194.      if(ms==3)
  195.             pwmh=65536-700;
  196.                 pwml=65536-300;

  197. }

  198. void main(void)
  199. {   

  200.         tc0int();
  201.         tc1int();
  202.     while(1)
  203.      {         
  204.          
  205.              disp();
  206.              key_read();
  207.              pwmsc();

  208.      }

  209. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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