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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 26312|回復: 66
收起左側

電風扇增加紅外遙控、定時及睡眠功能 附單片機程序與電路

  [復制鏈接]
ID:129855 發表于 2017-8-5 11:01 | 顯示全部樓層 |閱讀模式
小伙伴們家里是不是還是手動按鍵式電扇?是的話就跟我改起來,改過之后手動按鍵不影響,還是可以用喲,增加紅外遙控功能,定時增加到8小時(你的是不是還只有1小時定時呀,呵呵!),還有喲!再加個睡眠功能:如果打開睡眠功能,定時時間到之后自動跳到1檔,不然下半夜凍壞羅,不打開睡眠功能,定時時間到之后自動關閉。是不是很貼心啦!本來還想加個仿自然風,就是扇一會停一會再扇一會…………,網友們都說那樣太傷電機,于是取消了。廢話少說,上圖: IMG20170805090627.jpg
二檔走起,中間小燈為電源指示燈,左邊有三個小燈,為風量檔位指示燈,一檔亮一個,二檔亮兩個,三檔亮三個。手動按鍵的話也一樣,會亮指示燈,手動過后再用遙控也是可以的。不按機械按鍵直接遙控也是可以的,遙控后再按鈕也是可以的,如果沒按機械按鍵直接遙控打開的,此時想要按機械按鍵關閉要先按三檔中任一鍵再按0鍵關閉。

IMG20170805090656.jpg

定時設置狀態,數碼管亮起,右邊一個數碼管為小寫h,左邊一個數碼管表示1到8小時設置。

IMG20170805090722.jpg

已經確定為6小時,后面的h變為大寫的H,100秒之前為剩余小時顯示,之后為剩余分鐘的倒計時

IMG20170710204752.jpg
看到定時數碼管下面的小燈了吧,那是睡眠指示小燈,表示打開了睡眠模式。

IMG20170805090512.jpg

三個并排的鍵依次為1檔、2檔、3檔,上翻鍵下翻鍵為檔位的加減,檔位加到三檔時上翻不再增加,檔位減到1檔時,再減就關閉了。
OK為關閉。
V-為定時設置鍵,定時設置狀態時,上翻下翻鍵為定時時間的加減,OK鍵為確認。
右翻鍵為睡眠模式開關切換鍵。V+是管我們家電燈的啦~~

看看我的萬能板
IMG20170708133101.jpg IMG20170705190100.jpg

電源部分直接用的舊手機充電器,

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.png

單片機源程序如下:
  1. /******************************************************************
  2. /* STC89C52單片機                                                 *
  3. /* 11.0592M晶振                                                         *
  4. /*程序用了外部中斷0接收紅外信號,IO口為P32                        *
  5. /*遙控OK鍵為關閉,在定時設置狀態時為確認                          *
  6. /*遙控上、下翻鍵為檔位加、減,在設置定時狀態時為定時時間加、減,  *
  7. /*遙控V-鍵為進入設置定時模式                                      *
  8. /*右翻鍵為睡眠模式的開啟與關閉,睡眠模式指定時時間到后自動切為1檔 *
  9. /*遙控返回鍵為1檔,遙控主頁鍵為2檔,遙控菜單鍵為3檔,             *
  10. /*定時設置狀態時,第二個數碼管為小寫H,設置完成后為大寫H.          *
  11. /*最多定時8小時,99分鐘內顯示分鐘倒計時                            *
  12. /******************************************************************/

  13. #include <reg52.h>
  14. #include <intrins.h>

  15. #define uchar unsigned char
  16. #define uint  unsigned int
  17. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  18. #define const_key_time1  20    //按鍵去抖延時的時間
  19. #define const_1s  440   //大概1秒鐘所需要的中斷數

  20. void delay_long(unsigned int uiDelaylong);
  21. void delay(uchar x);  //x*0.14MS
  22. void delay1(int ms);
  23. void T0_time();  //定時器0中斷函數
  24. void key_service(); //按鍵服務的應用程序
  25. void key_scan(); //按鍵掃描函數,放在定時中斷里
  26. void key_service1(); //關閉的應用程序
  27. void initial_myself(); //初始化單片機
  28. void initial_peripheral();//初始化外圍
  29. void LCD_XSservice(); //數碼管顯示程序
  30. void display_drive(); //數碼管字模驅動函數

  31. sfr ISP_CONTR=0xe7;       //軟復位地址
  32. sbit IRIN = P3^2;         //紅外接收器數據線,外部中斷0
  33. sbit K1 = P2^0;           //按鍵1   
  34. sbit K2 = P2^1;           //按鍵2
  35. sbit K3 = P2^2;           //按鍵3
  36.                           //風量1檔最小,3檔最大
  37. sbit SC1 = P2^3;          //1檔輸出,控制PNP三極管,三極管再控制BT136雙向可控硅
  38. sbit SC2 = P2^4;          //2檔輸出,控制PNP三極管,三極管再控制BT136雙向可控硅
  39. sbit SC3 = P2^5;          //3檔輸出,控制PNP三極管,三極管再控制BT136雙向可控硅
  40. sbit LED1 = P1^0;         //檔位指示小燈1
  41. sbit LED2 = P1^1;         //檔位指示小燈2
  42. sbit LED3 = P1^2;         //檔位指示小燈3
  43. sbit LED4 = P1^3;         //睡眠模式指示小燈
  44. sbit LCD1 = P2^6;         //接PNP三極管控制定時顯示數碼管1的陽極(顯示數碼管為共陽管)
  45. sbit LCD2 = P2^7;         //接PNP三極管控制定時顯示數碼管2的陽極(顯示數碼管為共陽管)
  46.                           //定時顯示數碼管的八個陰極接P0



  47. uchar IRCOM[7];                 //定義紅外接收數組
  48. uchar code Tab0[]=             //定義數碼管數組,沒有小數點
  49.       {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x89
  50.              };//0,1,2,3,4,5,6,7,8,9,h
  51. uint code Dingshi0[]=             //定義定時數組
  52.     {0,60,120,180,240,300,360,420,480
  53.                 };
  54. unsigned char ly_dis1;//定義顯示緩沖區
  55. unsigned char ly_dis2;//定義顯示緩沖區                                
  56. unsigned char ucKeySec=0;   //被觸發的按鍵編號
  57. unsigned int uiKeyTimeCnt1=0; //按鍵1去抖延時計數器
  58. unsigned char ucKeyLock1=0; //按鍵1觸發后自鎖的變量標志
  59. unsigned int uiKeyTimeCnt2=0; //按鍵2去抖延時計數器
  60. unsigned char ucKeyLock2=0; //按鍵2觸發后自鎖的變量標志
  61. unsigned int uiKeyTimeCnt3=0; //按鍵3去抖延時計數器
  62. unsigned char ucKeyLock3=0; //按鍵3觸發后自鎖的變量標志
  63. unsigned char anjiank=0;   //有按鍵被觸發
  64. unsigned char hw_anjiank=0;   //紅外按鍵被觸發
  65. unsigned char LCDSec=0;   //定時設置狀態
  66. unsigned char LCDszxs=0;   //數碼管定時的變量
  67. unsigned int DSSJ=0; //定時的時間
  68. unsigned char DSBZ=0;   //定時標志
  69. unsigned char iii=0;  //動態數碼管定時顯示變量
  70. unsigned char posit=0;//動態數碼管掃描步驟
  71. unsigned int uiTimeCnt=0;  //倒計時的時間計數器
  72. unsigned int js1m=0;//計時秒
  73. unsigned char Guanbi=0;   //關閉標志
  74. unsigned char SMMS=0;   //睡眠模式標志
  75. unsigned char SMMSJK=0;   //睡眠模式監控
  76. /*******************************************************************/
  77. main()
  78. {   
  79.           initial_myself(); //初始化
  80.           delay_long(100);
  81.     initial_peripheral();//初始化外圍
  82.   
  83.   while(1)        
  84.   {
  85.                   key_service1(); //關閉的應用程序
  86.       key_service();//按鍵服務的應用程序
  87.                   LCD_XSservice(); //數碼管顯示程序
  88.          }
  89.   }

  90. //end main
  91. /**********************************************************/
  92. void LCD_XSservice() //數碼管顯示程序
  93. {
  94.         if (DSBZ==1)
  95.         {
  96.                 if (DSSJ>60)
  97.                 {
  98.                         if (DSSJ>99) {iii=2;}
  99.                         if (DSSJ>120) {iii=3;}
  100.                         if (DSSJ>180) {iii=4;}
  101.                         if (DSSJ>240) {iii=5;}
  102.                         if (DSSJ>300) {iii=6;}
  103.                         if (DSSJ>360) {iii=7;}
  104.                         if (DSSJ>420) {iii=8;}
  105.                         ly_dis1=iii;//P0口驅動數碼管2到8的定時顯示
  106.                         ly_dis2=10;        //顯示個位值
  107.                 }
  108.         
  109.          if (DSSJ<=99)
  110.                 {
  111.                         if (DSSJ>0)
  112.                         {
  113.                                 ly_dis1=DSSJ/10;        //顯示十位值
  114.                                 ly_dis2=DSSJ%10;        //顯示個位值
  115.                         }
  116.           }
  117.         if (DSSJ==0)
  118.         {
  119.                
  120.                 if (SMMS==1)
  121.                 {
  122.                  LCD1=1;
  123.                  LCD2=1;
  124.                  DSBZ=0;
  125.                  LED4=1;
  126.                  SMMSJK=0;
  127.                  hw_anjiank=1;     //表明由紅外按鍵觸發
  128.                  ucKeySec=1;//觸發1檔按鍵
  129.                 }
  130.                 if (SMMS==0)
  131.                 {
  132.                         if (DSBZ==1)
  133.                         {
  134.                     ISP_CONTR=0x20;  //關閉所有,所有變量清零,軟復位
  135.                         }
  136.                 }
  137.                
  138.         }
  139. }
  140. }
  141. /**********************************************************/
  142. void key_scan()//按鍵掃描函數,放在定時中斷里
  143. {
  144.   if (LCDSec!=1)
  145. {
  146.         if(K1==1)//IO口是高電平,說明按鍵1一直沒有按下,這時要及時清零一些標志位
  147.          {
  148.            ucKeyLock1=0; //按鍵自鎖標志清零
  149.                  uiKeyTimeCnt1=0;//按鍵去抖延時計數器清零
  150.          }
  151.    else if(ucKeyLock1==0)//有按鍵按下,且是第一次按下
  152.          {
  153.           uiKeyTimeCnt1++; //累計定時中斷次數
  154.                  if(uiKeyTimeCnt1>const_key_time1)
  155.                  {
  156.                          uiKeyTimeCnt1=0;
  157.                          ucKeyLock1=1;  //自鎖按鍵置位,避免一直觸發
  158.                          hw_anjiank=0;  //表明解除由紅外按鍵觸發
  159.                          anjiank=1;     //表明由按鍵觸發
  160.                          ucKeySec=1;    //觸發1檔按鍵
  161.                  }
  162.          }
  163.          
  164.          if(K2==1)//IO口是高電平,說明按鍵2一直沒有按下,這時要及時清零一些標志位
  165.          {
  166.            ucKeyLock2=0; //按鍵自鎖標志清零
  167.                  uiKeyTimeCnt2=0;//按鍵去抖延時計數器清零
  168.          }
  169.    else if(ucKeyLock2==0)//有按鍵按下,且是第一次按下
  170.          {
  171.           uiKeyTimeCnt2++; //累計定時中斷次數
  172.                  if(uiKeyTimeCnt2>const_key_time1)
  173.                  {
  174.                          uiKeyTimeCnt2=0;
  175.                          ucKeyLock2=1;  //自鎖按鍵置位,避免一直觸發
  176.                          hw_anjiank=0;  //表明解除由紅外按鍵觸發
  177.                          anjiank=1;     //表明由按鍵觸發
  178.                          ucKeySec=2;    //觸發2檔按鍵
  179.                  }
  180.          }
  181.                
  182.    if(K3==1)//IO口是高電平,說明按鍵3一直沒有按下,這時要及時清零一些標志位
  183.          {
  184.            ucKeyLock3=0; //按鍵自鎖標志清零
  185.                  uiKeyTimeCnt3=0;//按鍵去抖延時計數器清零
  186.          }
  187.    else if(ucKeyLock3==0)//有按鍵按下,且是第一次按下
  188.          {
  189.           uiKeyTimeCnt3++; //累計定時中斷次數
  190.                  if(uiKeyTimeCnt3>const_key_time1)
  191.                  {
  192.                          uiKeyTimeCnt3=0;
  193.                          ucKeyLock3=1;  //自鎖按鍵置位,避免一直觸發
  194.                          hw_anjiank=0;  //表明解除由紅外按鍵觸發
  195.                          anjiank=1;     //表明由按鍵觸發
  196.                          ucKeySec=3;    //觸發3檔按鍵
  197.                  }
  198.          }         
  199.   }
  200. }



  201. /**********************************************************/
  202. void key_service1() //關閉的應用程序
  203. {
  204.         if(anjiank==1)  //判斷按鍵是否有按下,如果按鍵觸發,但三個按鍵都為高電平,那么表示按了按鍵關按鍵
  205.                  {
  206.                          if(K1&K2&K3==1)
  207.                          {
  208.                                  ISP_CONTR=0x20;  //關閉所有,所有變量清零,軟復位
  209.                          }
  210.                  }
  211.                  
  212.          if(hw_anjiank==1)//判斷紅外關按鍵是否按下
  213.                  {
  214.                          if(Guanbi==1)   //關閉標志
  215.                          {     
  216.                                   //關閉所有,所有變量清零,軟位
  217.                                 initial_myself(); //初始化
  218.                                 delay_long(100);
  219.                                 initial_peripheral();//初始化外圍
  220.                                 Guanbi=0;   //關閉標志清零
  221.                                  
  222.                          }
  223.                  }
  224.          
  225.                  
  226. }
  227. /**********************************************************/
  228. void key_service() //按鍵服務的應用程序
  229. {
  230.   switch(ucKeySec) //按鍵的切換
  231.         {  
  232.                
  233.         case 1:       //按鍵1--1檔
  234.             LED1 = 1;
  235.       LED2 = 1;
  236.       LED3 = 1;
  237.       LED1 = 0;        
  238.       SC2 = 1;
  239.             SC3 = 1;
  240.             delay(300);        
  241.             if (SC2&SC3)
  242.                         {
  243.       SC1 = 0;
  244.                                 }
  245.                         ucKeySec=0;  //響應按鍵服務處理程序后,按鍵編號清零,避免一直觸發
  246.        break;
  247.         case 2:       //按鍵2--2檔
  248.             LED1 = 1;
  249.       LED2 = 1;
  250.       LED3 = 1;        
  251.             LED1 = 0;
  252.       LED2 = 0;
  253.       SC1 = 1;
  254.             SC3 = 1;
  255.       delay(300);        
  256.       if (SC1&SC3)
  257.                         {
  258.       SC2 = 0;
  259.                                 }
  260.             ucKeySec=0;  //響應按鍵服務處理程序后,按鍵編號清零,避免一直觸發
  261.        break;
  262.         case 3:       //按鍵3--3檔
  263.             LED1 = 1;
  264.       LED2 = 1;
  265.       LED3 = 1;        
  266.             LED1 = 0;
  267.       LED2 = 0;
  268.             LED3 = 0;
  269.       SC1 = 1;
  270.             SC2 = 1;
  271.       delay(300);        
  272.       if (SC1&SC2)
  273.                         {
  274.       SC3 = 0;
  275.                                 }
  276.             ucKeySec=0;  //響應按鍵服務處理程序后,按鍵編號清零,避免一直觸發
  277.        break;
  278.   case 4:       //OK按鍵短按
  279.             
  280.             ucKeySec=0;  //響應按鍵服務處理程序后,按鍵編號清零,避免一直觸發
  281.        break;
  282.         
  283.         }
  284. }

  285. /**********************************************************/
  286. void IR_IN() interrupt 0 //using 0    接收紅外信號
  287. {
  288.   unsigned char j,k,N=0;
  289.          EX0 = 0;   
  290.          delay(15);
  291.          if (IRIN==1)
  292.      { EX0 =1;
  293.            return;
  294.           }
  295.                            //確認IR信號出現
  296.   while (!IRIN)            //等IR變為高電平,跳過9ms的前導低電平信號。
  297.     {delay(1);}

  298. for (j=0;j<4;j++)         //收集四組數據
  299. {
  300.   for (k=0;k<8;k++)        //每組數據有8位
  301.   {
  302.    while (IRIN)            //等 IR 變為低電平,跳過4.5ms的前導高電平信號。
  303.      {delay(1);}
  304.     while (!IRIN)          //等 IR 變為高電平
  305.      {delay(1);}
  306.      while (IRIN)           //計算IR高電平時長
  307.       {
  308.     delay(1);
  309.     N++;           
  310.     if (N>=30)
  311.          { EX0=1;
  312.          return;}                  //0.14ms計數過長自動離開。
  313.       }                        //高電平計數完畢               
  314.      IRCOM[j]=IRCOM[j] >> 1;                  //數據最高位補“0”
  315.      if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //數據最高位補“1”
  316.      N=0;
  317.                                 
  318.   }//end for k
  319. }//end for j


  320.    
  321.    if (IRCOM[2]!=~IRCOM[3])
  322.    { EX0=1;
  323.                  return; }
  324.                  
  325. if (LCDSec!=1)
  326. {
  327.         if (IRCOM[2]==0xC5)//返回鍵  這一步就是判斷,如果對應按鍵,則執行下面動作!
  328.                         {
  329.                          anjiank=0;  //表明解除由按鍵觸發
  330.                          hw_anjiank=1;     //表明由紅外按鍵觸發
  331.                          ucKeySec=1;//觸發1檔按鍵
  332.                         
  333.                         }
  334.         if (IRCOM[2]==0x88)// 主頁鍵  這一步就是判斷,如果對應按鍵,則執行下面動作!
  335.                         {
  336.                          anjiank=0;  //表明解除由按鍵觸發
  337.                          hw_anjiank=1;     //表明由紅外按鍵觸發
  338.                          ucKeySec=2;//觸發2檔按鍵
  339.                         
  340.                         }         
  341.         if (IRCOM[2]==0x82)//菜單鍵   這一步就是判斷,如果對應按鍵,則執行下面動作!
  342.                         {
  343.                          anjiank=0;  //表明解除由按鍵觸發
  344.                          hw_anjiank=1;     //表明由紅外按鍵觸發
  345.                          ucKeySec=3;//觸發3檔按鍵
  346.                         
  347.                         }
  348.         }                        

  349. if (IRCOM[2]==0xCA)//上翻鍵,這一步就是判斷,如果對應按鍵,則執行下面動作!
  350.                 {
  351.                  if (LCDSec==1)//如果在時間設置狀態,就是設置時間的加
  352.                  {
  353.                          LCDszxs++;
  354.                          if (LCDszxs>8)
  355.                          {
  356.                          LCDszxs=0;
  357.                          }
  358.                         }
  359.            else    //除了時間設置狀態,為風量檔位加
  360.                  {
  361.                   if (SC1&SC2&SC3)
  362.                          {
  363.                                  ucKeySec=1;
  364.                                 }
  365.                  if (SC1==0)
  366.                          {
  367.                                  ucKeySec=2;
  368.                          }
  369.                         if (SC2==0)
  370.                          {
  371.                                  ucKeySec=3;
  372.                          }
  373.                   anjiank=0;  //表明解除由按鍵觸發
  374.                   hw_anjiank=1;     //表明由紅外按鍵觸發
  375.                   }
  376.                 }                        
  377. if (IRCOM[2]==0xD2)//下翻鍵,這一步就是判斷,如果對應按鍵,則執行下面動作!
  378.                 {
  379.                  if (LCDSec==1)//如果在時間設置狀態,就是設置時間的減
  380.                  {
  381.                          if (LCDszxs>0)
  382.                          {
  383.                          LCDszxs--;
  384.                          }
  385.                          if (LCDszxs==0)
  386.                          {
  387.                          LCDszxs=8;
  388.                          }
  389.                   }
  390.           else   //除了時間設置狀態,為風量檔位減
  391.                  {
  392.                   if (SC1==0)
  393.                          {
  394.                                 Guanbi=1;   //關閉標志打開
  395.        }
  396.                         if (SC2==0)
  397.                          {
  398.                                  ucKeySec=1;
  399.                          }
  400.                          if (SC3==0)
  401.                          {
  402.                                  ucKeySec=2;
  403.                          }
  404.                  anjiank=0;  //表明解除由按鍵觸發
  405.                  hw_anjiank=1;     //表明由紅外按鍵觸發
  406.                  }
  407.                 }
  408.                
  409. if (IRCOM[2]==0x81)// V-鍵  這一步就是判斷,如果對應按鍵,則執行下面動作!定時設置
  410.    {
  411.     if ((SC1&SC2&SC3)==0)
  412.                  {
  413.                  LCDSec=1;  //定時設置狀態,數碼管閃動
  414.                  LCDszxs=0;   //數碼管定時的變量
  415.                  LCD1=0;
  416.                  LCD2=0;
  417.                 }
  418.          }                 
  419.                
  420.         if (IRCOM[2]==0xce)//OK鍵  這一步就是判斷,如果對應按鍵,則執行下面動作!確認并退出定時設置
  421.                 {
  422.                  if (LCDSec==1)
  423.                  {
  424.                          if (LCDszxs>0)
  425.                          {
  426.                                  DSSJ=Dingshi0[LCDszxs];
  427.                                  DSBZ=1;
  428.                                  LCDSec=0;
  429.                                  SMMSJK=0;
  430.                          }
  431.                         else
  432.       {
  433.                                 LCD1=0;
  434.                     LCD2=0;
  435.                                 LCDSec=0;
  436.                         }                                
  437.                  }
  438.                  else
  439.                 {
  440.       initial_myself(); //初始化
  441.                         delay_long(100);
  442.                         initial_peripheral();//初始化外圍
  443.                         Guanbi=0;   //關閉標志清零
  444.                 }               
  445.                 }        
  446.   
  447. if (IRCOM[2]==0xC1)//右翻鍵,這一步就是判斷,如果對應按鍵,則執行下面動作!
  448. {
  449.         if ((SC1&SC2&SC3)==0)
  450.         {
  451.         if (LCDSec==0)
  452.         {
  453.         LED4=!LED4;                 //LED4取反
  454.         
  455.                 if (LED4==0)
  456.                 {
  457.                         SMMS=1;
  458.                          if (DSBZ==0)
  459.            {
  460.                         if(SMMSJK==0)
  461.                                         {
  462.                                         LCD1=0;
  463.                       LCD2=0;
  464.                                         LCDszxs=3;
  465.                                         DSSJ=Dingshi0[LCDszxs];
  466.                                         DSBZ=1;
  467.                                         SMMSJK=1;
  468.                                         }
  469.                    }
  470.                  }
  471.                 if (LED4==1)
  472.                 {
  473.                         SMMS=0;
  474.                
  475.                 if (DSBZ==1)
  476.                 {
  477.                         if(SMMSJK==1)
  478.                          {
  479.                                 LCD1=1;
  480.                     LCD2=1;
  481.                                 DSBZ=0;
  482.                                 LCDszxs=0;
  483.                                 DSSJ=Dingshi0[LCDszxs];
  484.                                 SMMSJK=0;
  485.                                 }
  486.                         }
  487.                 }
  488.         }
  489. }
  490. }
  491.         
  492.                  
  493.      EX0 = 1;
  494. }
  495. /**********************************************************/
  496. void display_drive()  //數碼管字模驅動函數
  497. {
  498.         if (DSBZ|LCDSec)
  499. {
  500.         switch(posit)
  501.                         {
  502.                                 case 1:
  503.                                         LCD1=0;
  504.                                         LCD2=1;
  505.                                  if (LCDSec==1)
  506.                                  {
  507.                                         P0=Tab0[LCDszxs];//P0口驅動數碼管0到8的定時顯示
  508.                                  }
  509.                                  else
  510.                                  {
  511.                                         P0=Tab0[ly_dis1];//P0口驅動數碼管1到8的定時顯示
  512.                                  }
  513.                                         break;        
  514.                                 case 2:
  515.                                         LCD1=1;
  516.                                         LCD2=0;
  517.                                 if (LCDSec==1)
  518.                                  {
  519.                                         P0=0X8b;//顯示H
  520.                                  }
  521.                                  else
  522.                                  {
  523.                                         P0=Tab0[ly_dis2];//P0口驅動數碼管1到8的定時顯示
  524.                                  }
  525.                                         break;                                
  526.                         }
  527.                         posit++;
  528.                         if(posit>2)
  529.                         {
  530.                                 posit=1;
  531.                         }
  532.                 }
  533. else
  534. {
  535.         LCD1=1;
  536.         LCD2=1;
  537. }
  538. }
  539. /**********************************************************/
  540. void T0_time() interrupt 1  //定時器0函數
  541. {
  542.         TF0=0;  //清除中斷標志
  543.         TR0=0; //關中斷
  544.         key_scan(); //按鍵掃描函數
  545.         
  546.          if(DSBZ==1)  //啟動定時倒計時計數器
  547.   {
  548.      uiTimeCnt++;
  549.      if(uiTimeCnt>=const_1s)    //1秒時間到
  550.      {
  551.                          js1m++;
  552.                          if (js1m==210)
  553.                          {
  554.             if(DSSJ!=0) //防止倒計時到0秒
  555.             {
  556.                DSSJ--;  //倒計時值減1
  557.             }
  558.                                         js1m=0;        
  559.                                 }
  560.    
  561.         uiTimeCnt=0;   //計時器清零,準備重新開始
  562.      }
  563.   }

  564.         display_drive();  //數碼管字模驅動函數
  565.         TH0=0xfe;   //重裝初始值(65535-500)=635035=0xfe0b
  566.         TL0=0x0b;
  567.         TR0=1;  //開中斷
  568. }

  569. /*******************************************************/
  570. void initial_myself()  //初始化單片機
  571. {
  572.    
  573.    
  574.         //I/O口初始化
  575.     IRIN=1;           //紅外接收器數據線,外部中斷0                  
  576.           K1 = 1;           //按鍵1
  577.           K2 = 1;           //按鍵2
  578.           K3 = 1;           //按鍵3
  579.     SC1 = 1;          //1檔輸出
  580.     SC2 = 1;          //2檔輸出
  581.     SC3 = 1;          //3檔輸出
  582.     LED4 = 1;         //仿自然風指示小燈
  583. ……………………

  584. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
接下來是重點
所有資料51hei提供下載:
遙控風扇程序.rar (122.38 KB, 下載次數: 366)
風扇電路仿真圖.rar (42.08 KB, 下載次數: 269)


評分

參與人數 4黑幣 +132 收起 理由
51yzq + 6
yousunny + 20 很給力!
張小帥1126 + 6
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:102702 發表于 2017-8-5 23:32 | 顯示全部樓層
樓主如果能做成一張PCB就完美了
回復

使用道具 舉報

ID:105804 發表于 2017-8-6 07:35 | 顯示全部樓層
正合我意
回復

使用道具 舉報

ID:105804 發表于 2017-8-6 07:39 | 顯示全部樓層
那個A1015可不可以用其他PNP三極管代替嗎?
回復

使用道具 舉報

ID:129855 發表于 2017-8-6 13:02 來自手機 | 顯示全部樓層
奧斯特洛夫斯基 發表于 2017-8-6 07:39
那個A1015可不可以用其他PNP三極管代替嗎?

參數相符即可,只是起開關作用
回復

使用道具 舉報

ID:147518 發表于 2017-8-15 15:52 來自手機 | 顯示全部樓層
用個小點的單片機嘛
回復

使用道具 舉報

ID:82765 發表于 2017-8-15 22:07 | 顯示全部樓層
好資料,強烈支持大家 diy,贊一個
回復

使用道具 舉報

ID:227313 發表于 2017-8-17 09:40 | 顯示全部樓層
也想把家里的電扇改造一下 學習學習 謝謝
回復

使用道具 舉報

ID:164850 發表于 2017-9-5 13:59 | 顯示全部樓層
把家里的電扇改造一下 學習學習 謝謝
IMG_20170905_134753.jpg
IMG_20170905_134805.jpg
IMG_20170905_134840.jpg
IMG_20170905_134853.jpg
回復

使用道具 舉報

ID:164850 發表于 2017-9-5 16:34 | 顯示全部樓層
回復

使用道具 舉報

ID:209789 發表于 2017-9-6 19:37 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:129855 發表于 2017-9-15 22:07 來自手機 | 顯示全部樓層
luxianjun 發表于 2017-9-5 13:59
把家里的電扇改造一下 學習學習 謝謝

能幫到你我很高興!下載回貼是你們給我的最大動力。繼續努力,再發新貼!
回復

使用道具 舉報

ID:232280 發表于 2017-9-23 11:45 來自手機 | 顯示全部樓層
好東西,能發一下需要哪些材料嗎?你這個好像不是用繼電器的
回復

使用道具 舉報

ID:248377 發表于 2017-11-11 16:06 來自手機 | 顯示全部樓層
不錯的資料,真是羨慕
回復

使用道具 舉報

ID:194149 發表于 2017-12-4 21:54 | 顯示全部樓層
proteus仿真數碼管怎么不亮
回復

使用道具 舉報

ID:129855 發表于 2018-1-24 23:23 | 顯示全部樓層
863903579 發表于 2017-12-4 21:54
proteus仿真數碼管怎么不亮

不好意思,仿真圖我隨便找的元器件,我沒有仿真。仿真圖只是我的電路圖,電路是正確的!
回復

使用道具 舉報

ID:46999 發表于 2018-2-26 09:37 | 顯示全部樓層
謝謝分享,今年必須改個來用
回復

使用道具 舉報

ID:282091 發表于 2018-3-12 02:20 | 顯示全部樓層
馬上就熱了,剛好可以搞來用
回復

使用道具 舉報

ID:272625 發表于 2018-4-7 20:29 來自手機 | 顯示全部樓層
感謝樓主共享,現在正需要了!
回復

使用道具 舉報

ID:272625 發表于 2018-4-11 10:09 來自手機 | 顯示全部樓層
樓主程序發現有問題,顯示100分鐘以下,段碼有暗影。如顯示:95分鐘,看到的是88分鐘。消暗影不知怎么改?哪個大神改好了傳上來!
回復

使用道具 舉報

ID:76497 發表于 2018-5-25 11:13 | 顯示全部樓層
我也把我的風扇改造一下。
回復

使用道具 舉報

ID:129855 發表于 2018-5-26 11:26 | 顯示全部樓層
都市郎 發表于 2018-4-11 10:09
樓主程序發現有問題,顯示100分鐘以下,段碼有暗影。如顯示:95分鐘,看到的是88分鐘。消暗影不知怎么改?哪 ...

已經加了消隱,由于未拆風扇所以未測試,你可以測試下,如果測試ok請回復一下
回復

使用道具 舉報

ID:129855 發表于 2018-5-26 11:31 | 顯示全部樓層
加了消隱,用過OK請回復!

遙控風扇.rar

143.26 KB, 下載次數: 90, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:129855 發表于 2018-5-26 11:42 來自手機 | 顯示全部樓層
fyhhtgq 發表于 2018-5-26 11:31
加了消隱,用過OK請回復!

忘了編譯,請下載后編譯下再使用!也就是說文件里的HEX文件還是沒加消隱的。特此聲明!
回復

使用道具 舉報

ID:272625 發表于 2018-6-2 23:27 來自手機 | 顯示全部樓層
最近工作挺忙的,沒時間逛論壇。程序經過請教大神早就改好了!
回復

使用道具 舉報

ID:272625 發表于 2018-6-3 10:50 | 顯示全部樓層
      樓主真是不好意思!我的開發板模塊拆了,風扇早裝好了,天氣熱不想拆。我改的程序跟樓主不一樣!
我的是加P0=0XFF;,樓主的是加LCD1=1;LCD2=1;。
      另外有一點不明白P0=0X8b;//顯示H,改成共陰數碼管H不能正常顯示。為什么H是0X8b?
共陰數碼管H是:0X76,共陽數碼管H是:0X89,對不上呀?
回復

使用道具 舉報

ID:129855 發表于 2018-6-3 13:22 來自手機 | 顯示全部樓層
都市郎 發表于 2018-6-3 10:50
樓主真是不好意思!我的開發板模塊拆了,風扇早裝好了,天氣熱不想拆。我改的程序跟樓主不一樣!
我 ...

建議學習一下,這是最基本的東西!
回復

使用道具 舉報

ID:346921 發表于 2018-6-7 14:27 | 顯示全部樓層
想下載學習下,可就是。。。。。
回復

使用道具 舉報

ID:346921 發表于 2018-6-8 11:41 | 顯示全部樓層
樓主不能把圖和程序放一個壓縮包里嗎?分兩次下扣兩次黑幣啊!
回復

使用道具 舉報

ID:129855 發表于 2018-6-8 20:20 來自手機 | 顯示全部樓層
zfeng 發表于 2018-6-8 11:41
樓主不能把圖和程序放一個壓縮包里嗎?分兩次下扣兩次黑幣啊!

請直接下13樓的就可以了,編譯一下,忘了編譯,里面的hex文件是沒加消隱的。
回復

使用道具 舉報

ID:164850 發表于 2018-6-9 14:57 | 顯示全部樓層
下23樓的就可以了,編譯一下,忘了編譯,里面的hex文件是沒加消隱的。
回復

使用道具 舉報

ID:348234 發表于 2018-6-9 15:33 來自手機 | 顯示全部樓層
馬上就熱了,剛好可以搞來用
回復

使用道具 舉報

ID:346921 發表于 2018-6-15 12:45 | 顯示全部樓層
三個機械按鍵加的電容有什么作用,可不加嗎?
回復

使用道具 舉報

ID:129855 發表于 2018-6-15 14:55 來自手機 | 顯示全部樓層
zfeng 發表于 2018-6-15 12:45
三個機械按鍵加的電容有什么作用,可不加嗎?

起消抖作用,但程序里己經作了消抖處理,加只是我的習慣問題,可以不加!
回復

使用道具 舉報

ID:346921 發表于 2018-7-12 09:19 | 顯示全部樓層
做是做好了,最近發現老是開一會自動關了,也沒定時,不知什么原因,有遇到過的嗎?
回復

使用道具 舉報

ID:89072 發表于 2018-7-15 17:32 | 顯示全部樓層
編譯時出現警告不通過,下載后不顯示,仿真也不顯示,不知道哪里出問題,下了兩個壓縮包,沒黑幣啦
回復

使用道具 舉報

ID:120628 發表于 2018-7-17 12:26 來自手機 | 顯示全部樓層
哈哈,剛好想改家里風扇
回復

使用道具 舉報

ID:346921 發表于 2018-7-23 09:24 | 顯示全部樓層
發現紅外中斷里的程序比較多,對系統運行有影響的吧?
回復

使用道具 舉報

ID:129855 發表于 2018-7-26 21:32 來自手機 | 顯示全部樓層
zfeng 發表于 2018-7-23 09:24
發現紅外中斷里的程序比較多,對系統運行有影響的吧?

兩年多了,沒出現過問題!
回復

使用道具 舉報

ID:346921 發表于 2018-7-30 08:57 | 顯示全部樓層
本帖最后由 zfeng 于 2018-7-30 09:08 編輯

樓主百忙之中還回帖,贊一下。順便再回答我個問題吧:我把這個程序加在STC8F2K08S2。這個沒打完不小心回車了,請管理員刪了。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 国产美女h视频 | 日韩三级免费网站 | 日韩一区二区三区在线观看 | 成人国产精品色哟哟 | 久久久综合网 | 日韩一区二区三区视频 | 精品真实国产乱文在线 | 中文字幕亚洲精品 | 放个毛片看看 | 9999国产精品欧美久久久久久 | 在线一区观看 | 亚洲一区二区久久 | 国产午夜精品一区二区三区 | 亚洲二区精品 | 国产成人精品一区二区三区 | 亚洲 欧美 日韩 在线 | 久久网一区二区 | 国产精品欧美一区二区 | 精品国产高清一区二区三区 | 中文字幕一区二区三区精彩视频 | 91久久久久久久久久久 | 日韩精品成人av | 青娱乐一区二区 | 成人亚洲视频 | 亚洲成人综合在线 | 国产超碰人人爽人人做人人爱 | 欧美电影免费观看高清 | 日本黄色的视频 | 欧美区日韩区 | 日韩精品a在线观看图片 | 日本亚洲欧美 | 欧美一级电影免费 | 色吊丝2| 天堂网中文| 国产亚洲一区二区三区 | 99久久精品国产麻豆演员表 | 日韩中文字幕一区二区 | 操操日| 欧美日韩看片 | av日韩一区|