欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 遙控風扇芯片BA5104 STC8G1K08-TSSOP20單片機四位共陰數碼管 紅外解碼程序 [打印本頁]

作者: 玉萌業余發展    時間: 2023-5-8 09:40
標題: 遙控風扇芯片BA5104 STC8G1K08-TSSOP20單片機四位共陰數碼管 紅外解碼程序
  1. /*風扇遙控芯片:BA5104  紅外遙控解碼程序  晶振頻率:11.0592MHZ  1幀12位,一次至少發2幀*//*歷時8天成功調試,干擾碼直接清零,只顯示相關鍵值*/
  2. /*解碼后的鍵值:關機 0xfd81; 開/風速 0xfd82; 風類 0xfd84; 定時 0xfd88; 搖頭 0xfd90; 彩燈 0xfdc3; 無 0xfda0; 無 0xfdc6*/
  3. #include "STC8G.h"/*單片機:STC8G1K08-TSSOP20*//*紅外端口:P33(包含外部中斷1,改端口時要注意)*/
  4. unsigned char q,b,s,g,/*位選*/xs,ir[13],j,c;unsigned int r,m,d0,d1;
  5. unsigned char code dm[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};/*共陰段碼*/
  6. void delayms(unsigned int i){while(i--);}/*延時函數*/
  7. void int1init(){IT1=1;EX1=1;EA=1;}/*外部中斷1初始化函數,設置成下降沿觸發*/
  8. void d1r1Init()/*定時器1初始化函數*/{AUXR |= 0x40;/*1T*/TMOD &= 0x0F;TL1 = 0x70;/*初始值*/TH1 = 0xFF;/*初始值*/TF1 = 0;/*清除TF1標志*/TR1=0;/*先不啟動*/ET1=1;/*開中斷*/EA=1;}
  9. void kayscan()/*P1端口對地增加按鍵*/
  10. {
  11.         P1=0xff;
  12.         P34=1;P35=1;P36=1;P37=1;
  13.   if(P11==0){delayms(5);if(P11==0){IAP_CONTR |= 0x20;/*軟件復位,并且從用戶程序開始執行*/while(!P11);}}
  14.         if(P12==0){delayms(5);if(P12==0){xs=1;while(!P12);}}if(P13==0){delayms(5);if(P13==0){xs=2;while(!P13);}}  
  15.         P1=0x00;
  16. }
  17. void display()/*數碼管掃描*/
  18. {
  19.         unsigned char i;for(i=0;i<4;i++){switch(i)/*選擇顯示位置*/
  20.         {case(0):P34=0;P35=1;P36=1;P37=1;break;/*千位*/case(1):P34=1;P35=0;P36=1;P37=1;break;/*百位*/case(2):P34=1;P35=1;P36=0;P37=1;break;/*十位*/case(3):P34=1;P35=1;P36=1;P37=0;break;/*個位*/}
  21.    if(i==0){P1=dm[q];}/*千位*/if(i==1){P1=dm[b];}/*百位*/if(i==2){P1=dm[s];}/*十位*/if(i==3){P1=dm[g];}/*個位*/delayms(50); /*間隔一段時間掃描*/P1=0x00;/*消隱*/}
  22. }
  23. void ircl()/*紅外時間記錄*/
  24. {
  25.         unsigned char c1;
  26.         if(!P33)
  27.         {
  28.     d1=0;
  29.     TR1=1;/*啟動定時器1*/
  30.     while(!P33);
  31.     TR1=0;
  32.     ir[j]=d1;
  33.         }
  34.         /*編碼位置清零*/
  35.   if(P33==1&&j>0)/*當端口高電平時,編碼位置還未清零*/
  36.         {
  37.     c++;/*計算一下持續時間*/
  38.    if(c>250){c1++;c=0;}/*超過一定的時間*/
  39.          if(c1>5){j=0;c1=0;}/*就要再次按遙控按鍵*/
  40.          /*如果還有干擾碼就直接清零*/
  41.         }
  42. }
  43. void xssz() /*顯示的數值*/
  44. {
  45.         /*按K1顯示收錄的紅外編碼*/
  46.         if(xs==0){g=m/1%16;s=m/16%16;b=m/256%16;q=m/4096%16;}/*1倍代表示4位16進制,16倍表示8位16進制,256倍表示12位16進制,4096倍表示16位16進制*/
  47.         /*按K2顯示0表示編碼位置清零成功*/
  48.         if(xs==1){g=c%10;s=c/10%10;b=c/100%10;q=0;}
  49.         /*按K3顯示大約中斷次數和快速清零*/
  50.         if(xs==2){g=j%10;s=j/10%10;b=j/100%10;q=j/1000%10;}
  51. }
  52. void main()
  53. {
  54.         P1M0=0xff; P1M1=0; P3M0=0; P3M1=0; P5M0=0; P5M1=0;/*端口模式*/P33=1;j=0;xs=0;
  55.         d1r1Init();/*定時器1初始化*/
  56.         delayms(1000);/*等待電源穩定*/
  57.         int1init();/*外部中斷1初始化*/
  58.         while(1)
  59.         {
  60.                 ircl();
  61.                 kayscan();
  62.                 xssz();
  63.                 display();
  64.         }
  65. }
  66. /*傳統51單片機具有5個中斷源,中斷優先級從高到低依次是:外部中斷0(interrupt0)、定時器0(interrupt1)、外部中斷1(interrupt2)、定時器1(interrupt3)和串口中斷(interrupt4)。*/
  67. void int1() interrupt 2 /*外部中斷1服務函數,低電平觸發*//*受遙控中斷影響,不夠時間處理編碼,記錄時間不可以在這函數里*/
  68. {
  69.         unsigned int i;
  70.         j++;/*編碼位置*/
  71.   if(m==0)/*如果還沒解碼正確*/
  72.           {
  73.       for(i=1;i<13;i++)/*未捕獲間隔碼*/
  74.          {
  75.            r=r<<1;
  76.            if(ir[i]>70&&ir[i]<125)
  77.              {
  78.                      r=r|0x001;
  79.              }
  80.           }
  81.     }
  82.         if(j>12){r=r|0xf000;}/*表示收到符合長度的編碼*/else{r=0x0000;}/*清零*/  
  83.         if(r==0xfd81|r==0xfd82|r==0xfd84|r==0xfd88|r==0xfd90|r==0xfdc3|r==0xfda0|r==0xfdc6)
  84.         {
  85.                 m=r;/*收錄合格編碼*/
  86.         }
  87.         else
  88.         {
  89.                 m=0;
  90.         }
  91.         if(j>12&m==0){j=0;}/*如果大于12位了,編碼還不正確,就把位置清零,防止下一幀亂碼*/
  92. }
  93. void TM1_Isr() interrupt 3 /*定時器1 中斷服務函數,每約13微秒中斷1次*/{d1++;/*每約13微秒加1*/}
復制代碼

作者: 玉萌業余發展    時間: 2023-5-8 09:44
歡迎各位黒友一起研究學習。
作者: Evanora    時間: 2023-5-8 23:14
不錯不錯,回去我試試
作者: 252622979    時間: 2023-5-9 08:02
紅外解碼程序
作者: 我在東北玩51    時間: 2023-5-9 09:45
不錯 也做個試試
作者: joyb    時間: 2023-5-9 16:04
配上原理圖,更完美
作者: 濤qq623942603    時間: 2023-5-9 19:29
代碼有點亂啊
作者: suiwinder    時間: 2023-5-10 09:06
代碼學習是否規范?
作者: 玉萌業余發展    時間: 2023-5-10 11:49

作者: 玉萌業余發展    時間: 2023-5-10 11:50
參考原理圖:


作者: 玉萌業余發展    時間: 2023-5-10 12:26
joyb 發表于 2023-5-9 16:04
配上原理圖,更完美

已上傳原理圖了
作者: suiwinder    時間: 2023-5-11 08:37
這個不屬于51單片機?
作者: 玉萌業余發展    時間: 2023-5-11 10:06
suiwinder 發表于 2023-5-11 08:37
這個不屬于51單片機?

屬于的呢,是51系列單片機呀。
作者: o_0    時間: 2023-5-11 16:58
贊,學到了
作者: 君工創    時間: 2023-5-11 22:50
不一樣的紅外解碼。
作者: 芯菲    時間: 2023-5-12 07:52
很不錯的程序謝謝分享
作者: hhxx23    時間: 2023-5-12 08:56
這個值得學習,謝謝分享
作者: qqq312    時間: 2023-10-12 17:27
牛逼啊,兄弟
作者: wkman    時間: 2023-10-14 08:05
紅外解碼  哪種b編碼格式? NEC ???
作者: 玉萌業余發展    時間: 2023-10-15 13:32
wkman 發表于 2023-10-14 08:05
紅外解碼  哪種b編碼格式? NEC ???

風扇芯片專用的格式,一開始我也以為是NEC,搞了好久……
作者: 范莉萍    時間: 2023-10-18 10:15
謝謝分享,我最近也寫了一款
作者: cc0203    時間: 2023-12-2 09:16
玉萌業余發展 發表于 2023-5-8 09:44
歡迎各位黒友一起研究學習。

講解一下就好了
作者: cc0203    時間: 2023-12-2 10:28
  c++;/*計算一下持續時間*/
   if(c>250){c1++;c=0;}/*超過一定的時間*/
         if(c1>5){j=0;c1=0;}/*就要再次按遙控按鍵*/
         /*如果還有干擾碼就直接清零*/

一次多長時間
作者: cc0203    時間: 2023-12-2 16:26
玉萌業余發展 發表于 2023-5-8 09:44
歡迎各位黒友一起研究學習。

改成51不行
  1. #include "reg52.h"
  2. unsigned char q,b,s,g,xs,ir[13],j,c;unsigned int r,m,d0,d1,value;
  3. unsigned char  code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  4.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};/"?0~F??
  5. sbit XP32=P3^2;
  6. sbit LSA=P2^2;
  7. sbit LSB=P2^3;
  8. sbit LSC=P2^4;
  9. void delay(int i)
  10. {
  11.         while(i--);        
  12. }

  13. void display()
  14. {
  15.         unsigned char i;
  16.                 xs=0;
  17.          if(xs==0)
  18.                 {
  19.                         g=value/1%16;
  20.                         s=value/16%16;
  21.                         b=value/256%16;
  22.                         q=value/4096%16;
  23.                 }
  24.                 for(i=0;i<4;i++)
  25.                 {
  26.                         switch(i)
  27.                         {
  28.                                 
  29.                         case(0):
  30.                                 LSA=0;LSB=0;LSC=0; break;/"??0?
  31.                         case(1):
  32.                                 LSA=1;LSB=0;LSC=0; break;/"??1?
  33.                         case(2):
  34.                                 LSA=0;LSB=1;LSC=0; break;/"??2?
  35.                         case(3):
  36.                                 LSA=1;LSB=1;LSC=0; break;/"??3?
  37.                         }        
  38.                                 if(i==0)
  39.                                 {
  40.                                         P0=smgduan[q];
  41.                                 }
  42.                                 if(i==1)
  43.                                 {
  44.                                         P0=smgduan[b];
  45.                                 }
  46.                                 if(i==2)
  47.                                 {        
  48.                                         P0=smgduan[s];
  49.                                 }
  50.                                 if(i==3)
  51.                                 {
  52.                                         P0=smgduan[g];
  53.                                 }
  54.                         
  55.                                 
  56.                                 //P0=smgduan[i];
  57.                                 delay(100);
  58.                                 P0=0x00;
  59.                         
  60.         }               
  61. }
  62. void ircl()
  63. {
  64.         unsigned char c1;
  65.         if(!XP32)
  66.         {
  67.                         d1=0;
  68.                         TR0=1;
  69.                         while(!XP32);
  70.                         TR0=0;
  71.                         ir[j]=d1;
  72.         }
  73.         
  74.                 if(XP32==1&&j>0)
  75.         {
  76.                         c++;
  77.                         if(c>250){c1++;c=0;}
  78.                         if(c1>5){j=0;c1=0;}
  79.    
  80.         }
  81. }

  82. void main()
  83. {
  84.       
  85.                 TMOD=0x11;
  86.                  
  87.                 TH0=0xFF;
  88.                 TL0=0xF2;
  89.                 TR0=0;
  90.                 ET0=1;
  91.                 xs=0;
  92.         
  93.                 IT0=1;
  94.                 EX0=1;
  95.         EA=1;
  96.         while(1)
  97.         {
  98.                ircl();
  99.                
  100.               
  101.                 display();
  102.         }
  103. }
  104. void int1() interrupt 0
  105. {
  106.         unsigned int i;
  107.         j++;
  108.                 if(m==0)
  109.         {
  110.                         for(i=1;i<13;i++)
  111.                         {
  112.                                 r=r<<1;
  113.                                 if(ir[i]>70&&ir[i]<125)
  114.                                 {
  115.                      r=r|0x001;
  116.                                 }
  117.           }
  118.                 }
  119.       
  120.                
  121.         //        if(r==0xfd81|r==0xfd82|r==0xfd84|r==0xfd88|r==0xfd90|r==0xfdc3|r==0xfda0|r==0xfdc6)
  122.                 if(j>12)
  123.                 {
  124.                 value=r;j=0; m=0;r=0;
  125.         }
  126.       

  127. }
  128. void t0() interrupt 1
  129. {        
  130.         TH0=0xFF;
  131.         TL0=0xF2;
  132.         d1++;
  133. }
  134. //1.085069444444444e-6
復制代碼

作者: xiaofengxian    時間: 2023-12-14 17:20
希望能學會單片機
作者: csmjmcc    時間: 2023-12-21 16:19
希望能學好單片機。謝謝分享,同時想得到黑幣
作者: zkele    時間: 2024-4-25 19:48
樓主的程序好象不完整,可否上傳一份壓縮包分享一下。
作者: heyanrog    時間: 2024-4-30 14:26
樓主的程序不完整,可否上傳一份壓縮包分享一下。
作者: zdmjjp    時間: 2024-5-3 11:43
想學習一下,請樓主多幫助,謝謝!
作者: 玉萌業余發展    時間: 2024-5-5 09:50
zkele 發表于 2024-4-25 19:48
樓主的程序好象不完整,可否上傳一份壓

我還想讓黒友優化一下呢




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1