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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用51單片機編程修復遙控電風扇 帶源碼

  [復制鏈接]
跳轉到指定樓層
樓主
家里的遙控電風扇主板主控燒壞了,閑著沒事用多年沒有玩的51單片機進行編制程序,將原來的主板上的單片機拆除,各個功能按鍵和指示燈不動,把51單片機對應各個功能管腳用飛線接上,再用502膠水給固定住,防止松動。下來用KELL軟件編程。經測試一切正常帶自然風、睡眠風、定時功能;取消原來的遙控功能(因個人愛好,很少用遙控)。待源碼需要的朋友隨意下。單片機為89C51或52都行,注意時鐘:11.0592,不同時鐘定時時間差異大。

單片機源程序如下:
  1. /************************************************************************
  2.   家里的遙控電風扇主板燒壞了,閑著沒事用閑置的STC89C51單片機做了一個控制板
  3.   不帶遙控,利用原來的按鍵進行設計一個控制板,經測試一切運行正常。
  4. **********************************************************************/
  5. #include <reg52.h>
  6. #define  uint unsigned int   //宏定義
  7. #define uchar unsigned char
  8. uint  second,  second1, tcount, tcount1,miao;
  9. uchar anjian,jishu,jishu1,dingshi;
  10. uchar m,n,a,b,c;
  11. /*===================關機特殊功能定義======================*/
  12. sfr ISP_CONTR=0xe7;           //特殊功能寄存器定義
  13. /*=============================按鍵功能定義=================*/
  14. sbit s1=P3^7;        //開機、關機與 風類選擇
  15. sbit s2=P3^3;        //        關機
  16. sbit s3=P3^5;        //搖頭
  17. sbit s4=P3^6;        //定時開關
  18. /*==========================輸出功能IO口定義==================*/
  19. sbit sui_mian_feng =P0^0;         //睡眠風指示
  20. sbit zi_ran_feng= P0^1;         //自然風指示
  21. sbit gao_su=P2^5;        //高速指示
  22. sbit zhong_su=P2^6;         //中速指示
  23. sbit di_su=P2^7;          //低速指示
  24. sbit beep_out=P2^4;                //蜂鳴輸出
  25. sbit yao_tou_out=P2^3; //搖頭 輸出
  26. sbit gao_su_out=P2^0;        //高速 輸出
  27. sbit zhong_su_out=P2^1;//中速輸出
  28. sbit di_su_out=P2^2;   //低速輸出
  29. /*============工作時間狀態指示LED燈的IO口定義===================*/
  30. sbit timer_30=P1^0;         //定時30分鐘LED指示
  31. sbit timer_1h=P1^1;         //定時1小時LED指示
  32. sbit timer_2h=P1^2;         //        定時2小時LED指示
  33. sbit timer_4h=P1^3;        // 定時4小時LED指示
  34. /*=========================延時時間函數=======================*/
  35. void delay_1 (char sum)                   //按鍵消抖延時
  36. {        char x,y;
  37.     for        (x=sum;x>0;x--)
  38.                  for (y=0;y<100;y++);
  39. }
  40. void delay_2 (char sum)                   //蜂鳴頻率延時時間(82us)
  41. {        char x,y;
  42.     for        (x=sum;x>0;x--)
  43.                  for (y=0;y<20;y++);
  44. }
  45. void delay_3 (uint sum)                   //風速延時時間 25.3        毫秒
  46. {        uint x,y;
  47.     for        (x=sum;x>0;x--)
  48.                  for (y=0;y<5000;y++);
  49. }
  50. void  feng_min (char sum)                   //蜂鳴器聲音
  51. {         char i;
  52.     for        (i=sum;i<100;i++)
  53.                 { beep_out=0;
  54.                   delay_2 (10);                //10*20 時間
  55.                   beep_out=1;
  56.                   delay_2 (10);
  57.                  }
  58. }
  59. /*=================定時器0初始化=====================*/
  60. void timer1_int (void)                 //定時器中斷0         初始化
  61. {   TMOD|=0x01;                                // 定時器0工作模式 1
  62.         TH0=0x16;                           //放定時初值
  63.     TL0=0xf6;                          //放定時初值
  64.     TR0=0;                                  //關閉定時器(暫時未開啟)
  65.     ET0=0;                                  //開啟中斷
  66.         PT0=1;                                  //中斷優先級1
  67.         EA =1;
  68. }
  69. /*=================定時器1初始化=====================*/
  70. void timer2_int (void)                //風類定時器中斷 1 初始化
  71. {        TMOD|=0x20;                          //工作模式2
  72.     TH1=0x06;                        // 設定初始值        50ms
  73.     TL1=0x06;                   //設定初始值
  74.     TR1=0;                          //開啟定時器
  75.     ET1=0;                           //開啟外部中斷
  76.         PT1=0;                                //中斷優先級0
  77.         EA =1;                                //開啟總中斷開關
  78. }
  79. /*====================外部中斷1初始化=====================*/
  80. void guan_ji_int(void)                   //外部中斷 1
  81. {
  82.    EA =1;                                 //中斷總開關
  83.    EX1=1;                                //中斷開關
  84.    IT1=0;                        // 觸發方式0,低電平觸發
  85.    PX1=1;                 //中斷優先級 最高
  86. }
  87. /*======================外部中斷1程序======================*/
  88. void guan_ji(void) interrupt 2 using 2                 //關機的外部中斷 2
  89. {
  90.           if (s2==0&&s3!=0&&anjian>=1)                // 關機
  91.              {   
  92.                     delay_1(100);
  93.                     if (s2==0&&s3!=0&&anjian>=1)
  94.                             { while (s2==0) ;         //按鍵松手檢測
  95.                                   switch (1)
  96.                                   { case (1):  feng_min (1);ISP_CONTR=0x20;break;}//蜂鳴后、關機、整機復位  
  97.                                 }       
  98.                  }
  99.           if (s3==0&&anjian>=1 )
  100.                     {        delay_1(100);
  101.                     if (s3==0&&anjian>=1)
  102.                             {   while (s3==0) ;
  103.                                         jishu++;
  104.                                      switch (1)
  105.                                           { case (1):  feng_min (1); yao_tou_out=0;  break;
  106.                                                                 default:   feng_min (1);yao_tou_out=1; jishu=0 ;break;
  107.                                                           }
  108.                                   }
  109.                     }
  110.           if (s4==0&&anjian>=1)                        //風扇定時工作時間程序
  111.                     {  delay_1(100);                //        100*100 時間
  112.                            if (s4==0)
  113.                                 { dingshi++;
  114.                                   while (s4==0);
  115.                                   switch (dingshi)
  116.                                          { case (1):
  117.                                                             feng_min (1); TR0=1;ET0=1;miao=1800;timer_30=0;                  break;            //0.5 小時
  118.                                                    case (2):                                                                  
  119.                                                             feng_min (1); TR0=1;ET0=1;miao=3600;timer_30=1;timer_1h=0;        break;                //1 小時
  120.                                                    case (3):
  121.                                                             feng_min (1); TR0=1;ET0=1;miao=5400;timer_30=0;timer_1h=0;        break;                //1.5 小時
  122.                                                    case (4):
  123.                                                             feng_min (1); TR0=1;ET0=1;miao=7200;timer_30=1;timer_1h=1;timer_2h=0;break;         //2 小時
  124.                                                    case (5):
  125.                                                             feng_min (1); TR0=1;ET0=1;miao=9000;timer_30=0;timer_2h=0;break;                //2.5 小時
  126.                                                    case (6):
  127.                                                             feng_min (1); TR0=1;ET0=1;miao=10800;timer_30=1;timer_2h=0;        timer_1h=0;gao_su=1;        break;        //3小時
  128.                                                    case (7):
  129.                                                             feng_min (1); TR0=1;ET0=1;miao=14400;timer_2h=1;timer_1h=1;        timer_4h=0;gao_su=1;        break;        //4 小時
  130.                                                    case (8):
  131.                                                             feng_min (1); TR0=1;ET0=1;miao=28800;timer_1h=0;timer_4h=0;        gao_su=1;            break;                //5 小時
  132.                                                    case (9):
  133.                                                             feng_min (1);TR0=1;ET0=1;miao=28800;timer_1h=1;        timer_2h=0;timer_4h=0;        break;                //6 小時
  134.                                                    case (10):
  135.                                                             feng_min (1);TR0=1;ET0=1;miao=28800;timer_1h=0;timer_2h=0;timer_4h=0;        break;                //7 小時
  136.                                                    case (11):
  137.                                                             feng_min (1);TR0=1;ET0=1;miao=28800;timer_30=0;timer_1h=0;timer_2h=0;timer_4h=0; break;        //7.5小時

  138.                                                    default: feng_min (1);TR0=0;ET0=0;dingshi=0;        miao=0; timer_2h=1;        timer_1h=1;        timer_4h=1;timer_30=1;break;
  139.                                                  }
  140.                                 }
  141.                 }         
  142. }
  143. /*===========================定時器中斷0(關機)程序==============================*/
  144. void timer1(void) interrupt 1  using 1           //定時器(0)控制
  145.          {        tcount1++;
  146.             TH0=0X16;
  147.                 TL0=0Xf6;                                                  //50ms
  148.             if(tcount1==20)                                //1秒時間
  149.                   {  tcount1=0;
  150.                      second1++;       
  151.                          timer_30=~timer_30;          //定時閃亮指示
  152.                          if(second1>=miao)                 //設定的定時時間等于當前時間
  153.                           {         second1=0;
  154.                              for (a;a<10;a++)
  155.                                   {         feng_min (1) ;
  156.                                          beep_out=1;
  157.                                      delay_3(20);                 //間隔1 秒  60*5000 時間
  158.                                   }
  159.                                   ISP_CONTR=0x20;                 // 整機復位關機(由軟件)
  160.                            }
  161.                   }
  162.     }
  163. /*==============================定時器1中斷(風類選擇)工作程序====================================*/         
  164. void timer2(void) interrupt 3 using 3                 //  模擬風與自然風選擇控制
  165.          {         
  166.             tcount++;
  167.                 TH1=0x06;                        // 初始數        50ms
  168.         TL1=0x06;                         //0.25毫秒
  169.             if(tcount==2386)                //0.5 秒
  170.                   {
  171.                      tcount=0;
  172.                      second++;       
  173.                          zi_ran_feng=~zi_ran_feng;
  174.                      if (second>=m&&n==1)                // 進行設定的自然風程序        180秒  6 次
  175.                             {  second=0;gao_su = 1; zhong_su = 1;  di_su=1;gao_su_out = 1; zhong_su_out = 1;  di_su_out=1;
  176.                                    delay_3(60);                          //  5 *10000
  177.                                    for (b;b<2;b++)
  178.                                         {
  179.                                          gao_su_out = 0;   
  180.                                          gao_su=0;
  181.                                          delay_3(700);                                        //工作17秒   1200*10000
  182.                                          gao_su_out = 1;   
  183.                                          gao_su=1;                                           //停機
  184.                                          delay_2(100);                                 //  100*20
  185.                                           zhong_su_out = 0;                         // 關2 檔
  186.                                          zhong_su=0;
  187.                                          delay_3(400);                                 //         工作 10秒
  188.                                          zhong_su_out = 1;       
  189.                                          zhong_su =1;                           //停機
  190.                                          delay_2(100);                           //
  191.                                          di_su_out = 0;               
  192.                                          di_su=0;                                  //工作 5秒
  193.                                          delay_3(200);
  194.                                          di_su_out = 1;
  195.                                          di_su=1;
  196.                                          delay_2(100);
  197.                                    }
  198.                                    b=0;
  199.                            }          
  200.                          if (second>=n&&m==1)                //進行設定的睡眠風程序360秒 4 次
  201.                                        {  second=0;         gao_su = 1; zhong_su = 1; di_su=1;gao_su_out = 1; zhong_su_out = 1;  di_su=1;
  202.                                                   delay_3(60);
  203.                                                   for (c;c<4;c++)
  204.                                                       {  
  205.                                                                    gao_su_out = 0;   
  206.                                                      gao_su=0;
  207.                                                      delay_3(200);
  208.                                                                  gao_su_out = 1;   
  209.                                                      gao_su=1;       
  210.                                                                  delay_2(100);       
  211.                                                              zhong_su_out = 0;       
  212.                                                                  zhong_su=0;
  213.                                                                  delay_3(600);                         //工作        15秒
  214.                                                                  zhong_su_out = 1;
  215.                                                                  zhong_su =1;                        //停機
  216.                                                                  delay_2(100);
  217.                                                                  di_su_out = 0;       
  218.                                                                  di_su=0;
  219.                                                                  delay_3(400);                        //工作 10秒
  220.                                                                  di_su_out = 1;       
  221.                                                                  di_su=1;
  222.                                                                  delay_3(400);                        //停機         10秒
  223.                                                         }
  224.                                                         c=0;
  225.                                         }
  226.                  }
  227.           }       
  228. /*===================================風扇運行主程序==================================*/                 
  229. void main()
  230. {   timer1_int ();        //定時器0初始化
  231.         timer2_int ();        //定時器1初始化
  232.         guan_ji_int();        //外部中斷1初始化
  233.         delay_3 (1);   //緩沖25.3毫秒
  234.         while(1)   //無條件永遠執行大循環
  235.         {
  236.             
  237.                 if(!s1)                        //開機和進行速度選擇 ;睡眠風和自然風選擇
  238.                  {
  239.                          delay_1(100);         //按鍵消抖延時
  240.                     if (s1==0)
  241.                           {         
  242.                             anjian++;
  243.                                    while (s1==0) ;        //松手檢測
  244.                            }
  245.                          if (anjian>5)
  246.                            anjian=1;
  247.                   switch (anjian)
  248.                                       {
  249.                                                  case (1):
  250.                                                             feng_min (1);tcount=0;second=0;TR1=0;ET1 =0;di_su = 0;di_su_out=0; zhong_su = 1;zhong_su_out = 1;gao_su = 1;gao_su_out = 1;zi_ran_feng=1;sui_mian_feng =1;break; //工作在低速
  251.                                                  case (2):
  252.                                                                     feng_min (1);tcount=0;second=0;TR1=0;ET1 =0;di_su = 1;di_su_out=1; zhong_su = 0;zhong_su_out = 0;gao_su = 1;gao_su_out = 1;zi_ran_feng=1;sui_mian_feng =1;break; //工作在中速
  253.                                                  case (3):
  254.                                                                         feng_min (1);tcount=0;second=0;TR1=0;ET1 =0;di_su = 1;di_su_out=1; zhong_su = 1;zhong_su_out = 1;gao_su = 0;gao_su_out = 0;zi_ran_feng=1;sui_mian_feng =1;break; //工作在高速
  255.                                                  case (4):  
  256.                                                             feng_min (1); TR1=1;ET1 =1;di_su_out=1; di_su=1;zhong_su = 0;zhong_su_out = 0;gao_su = 1;gao_su_out = 1;zi_ran_feng=0;sui_mian_feng =1; m=15;n=1; break;         //開啟自然風模式
  257.                                                  case (5):  
  258.                                                             feng_min (1); TR1=1;ET1 =1;di_su_out=0;di_su=0; zhong_su = 1;zhong_su_out = 1;gao_su = 1;gao_su_out = 1;zi_ran_feng=1;sui_mian_feng=0; n=120;m=1; break;        // 開啟在睡眠風模式
  259.                                            }
  260.                  }
  261.            if (s2==0&&anjian>=1)                // 關機
  262.                      {   
  263.                             delay_1(100);         //按鍵消抖
  264.                             if (s2==0)
  265.                                     { while (s2==0) ;         //松手檢測
  266.                                          /* jishu1++;          */
  267.                                           switch (1)
  268.                                           {
  269.                                                             case (1):  feng_min (1); dingshi=0;tcount=0;second=0;tcount1=0;second1=0;anjian=0;TR0=0;ET0 =0; TR1=0;ET1 =0;timer_2h=1;timer_1h=1;        timer_4h=1;timer_30=1;zi_ran_feng=1;sui_mian_feng=1;gao_su=1;gao_su_out=1;zhong_su=1;zhong_su_out=1;di_su=1;di_su_out=1;         break;                  //進行關機
  270.                                                           }
  271.                                         }       
  272.                          }
  273.                 if (s3==0&&anjian!=0)        //風扇搖頭開和關
  274.                       {
  275.                             delay_1(100);        //        按鍵消抖
  276.                             if (s3==0)
  277.                                     {
  278.                                             jishu++;         
  279.                                                    while (s3==0) ;                 //松手檢測
  280.                                     switch (jishu)
  281.                                           { case (1):  feng_min (1); yao_tou_out=0;  break;
  282.                                                             default:  feng_min (1);yao_tou_out=1; jishu=0; break;
  283.                                                                   }
  284.                                          }
  285.                                   }
  286.                 if (s4==0&&anjian>=1)                        //風扇定時工作時間選擇程序                  
  287. ……………………

  288. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
多功能電風扇修復程序.rar (1.86 KB, 下載次數: 56)
電風扇程序序.rar (3.18 KB, 下載次數: 69)



評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:235106 發表于 2017-9-23 20:44 | 只看該作者
電路原理圖隨后補上
回復

使用道具 舉報

板凳
ID:235106 發表于 2017-9-23 22:32 | 只看該作者
電路圖已經完成,請大家指教!

電風扇原理圖.png (126.5 KB, 下載次數: 172)

電風扇修復程序的電器原理圖

電風扇修復程序的電器原理圖
回復

使用道具 舉報

地板
ID:235106 發表于 2017-9-23 22:36 | 只看該作者
謝謝!

電風扇原理圖.png (126.5 KB, 下載次數: 163)

風扇原理圖(重新上傳)

風扇原理圖(重新上傳)
回復

使用道具 舉報

5#
ID:96682 發表于 2017-9-25 17:09 | 只看該作者
LZ,還留一手,新手想仿制電路圖這關就卡殼了
回復

使用道具 舉報

6#
ID:1 發表于 2017-9-28 14:54 | 只看該作者
wc86110 發表于 2017-9-25 17:09
LZ,還留一手,新手想仿制電路圖這關就卡殼了

有電路圖啊 放大以后可以看得很清晰
回復

使用道具 舉報

7#
ID:146874 發表于 2017-10-6 12:01 | 只看該作者
正在學習這個,感謝分享
回復

使用道具 舉報

8#
ID:237453 發表于 2017-10-6 13:12 | 只看該作者
can i using all brand fan reamote control
回復

使用道具 舉報

9#
ID:105075 發表于 2018-1-19 22:03 | 只看該作者
第一個rar文件是HEX文件,C語言就更好了。
回復

使用道具 舉報

10#
ID:272625 發表于 2018-1-25 00:44 | 只看該作者
樓主資料大好了,剛好有一個壞的沒丟.有時間試下
回復

使用道具 舉報

11#
ID:272625 發表于 2018-1-25 00:51 | 只看該作者
沒有遙控,美中不足
回復

使用道具 舉報

12#
ID:152164 發表于 2018-3-8 01:35 | 只看該作者
想加遙控功能
回復

使用道具 舉報

13#
ID:289019 發表于 2018-3-8 09:26 | 只看該作者
哈哈 很好的應用  我玩單片機很多年了  幾乎沒給自己做過東西 都是給別人做了
回復

使用道具 舉報

14#
ID:113858 發表于 2019-5-16 01:31 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久亚洲综合 | ririsao久久精品一区 | 97人人澡人人爽91综合色 | 一区二区三区免费看 | 国产精品久久国产精品 | 久久国际精品 | 久久综合爱 | 亚洲成人一级 | 99精品国产一区二区青青牛奶 | 久久99精品国产99久久6男男 | 一区二区三区四区不卡视频 | 在线欧美视频 | 妹子干综合 | 精品亚洲一区二区 | 日韩一区二区三区视频在线观看 | 久久r久久 | 久久久91精品国产一区二区三区 | 欧美一级艳情片免费观看 | 精品一区二区三区四区五区 | 美女张开腿露出尿口 | 午夜精品一区二区三区在线观看 | 一级黄色毛片子 | 在线高清免费观看视频 | 欧州一区二区三区 | 国产免费av在线 | 日本粉嫩一区二区三区视频 | 日韩中文一区 | 九九综合| 国产亚洲www | 国产精品区一区二区三 | 一区二区三区视频 | 四虎午夜剧场 | 成人在线精品 | 日本久久精品视频 | 亚洲一区二区三区在线免费观看 | 欧美日韩成人影院 | 免费视频一区二区 | 久久久www成人免费无遮挡大片 | 日韩在线精品视频 | www免费视频 | 久久综合久久综合久久 |