找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3958|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

模擬風(fēng)扇控制系統(tǒng)源碼-藍(lán)橋杯例程

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:292707 發(fā)表于 2018-3-16 12:28 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
/***************************************
項(xiàng)目名稱:模擬風(fēng)扇控制系統(tǒng)

實(shí)現(xiàn)功能:通過(guò)按鍵控制風(fēng)扇的轉(zhuǎn)動(dòng)速度和定時(shí)時(shí)間,
          數(shù)碼管實(shí)時(shí)顯示風(fēng)扇的工作模式,動(dòng)態(tài)倒計(jì)時(shí)顯示剩余的定時(shí)時(shí)間

實(shí)現(xiàn)功能:1.S4定義為工作模式切換按鍵,每次按下S4,設(shè)備循環(huán)切換三種工作模式

                  2.S5 定義為“定時(shí)按鍵”每次按下 S5,定時(shí)時(shí)間增加 1 分鐘,設(shè)備的剩余
            工作時(shí)間重置為當(dāng)前定時(shí)時(shí)間,重新開(kāi)始倒計(jì)時(shí)
                  
                  3.S6 定義為“停止”按鍵,按下 S6 按鍵,立即清零剩余工作時(shí)間,PWM
            信號(hào)停止輸出,直到通過(guò) S5 重新設(shè)置定時(shí)時(shí)間
                  
                  4.S7 定義為“室溫”按鍵,按下 S7,通過(guò)數(shù)碼管顯示當(dāng)前室溫
                  
                  5.設(shè)備具有“睡眠風(fēng)”、“自然風(fēng)”和“常風(fēng)”三種工作模式可以通過(guò)按鍵切換,通過(guò)
            單片機(jī) P34 引腳輸出脈寬調(diào)制信號(hào)控制電機(jī)運(yùn)行狀態(tài),信號(hào)頻率為 1KHz。
                  
                  6.“睡眠風(fēng)”模式下,L1 點(diǎn)亮,“自然風(fēng)”模式下 L2 點(diǎn)亮,“常風(fēng)”模式下 L3 點(diǎn)亮;
            按下停止按鍵或倒計(jì)時(shí)結(jié)束時(shí),LED 全部熄滅
****************************************/

單片機(jī)源程序如下:
  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;    //  定時(shí)
  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)                                 //延時(shí)函數(shù)
  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. }
復(fù)制代碼


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

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表