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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

這是我做的一個單片機萬能紅外解碼器PCB+源程序

[復制鏈接]
跳轉到指定樓層
樓主
出于興趣做的萬能紅外解碼器,請大家多多指教。
本設計基于51單片機設計
主要功能可以解讀紅外的用戶碼和地址碼
可以通過不同按鍵控制同一繼電器并且保存按鍵值


Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1.                
  2. #include<reg52.h>
  3. #include"bst_car.h"
  4. #include"led.h"  
  5. #include "uart.h"
  6. #define uchar  unsigned char
  7. #define uint  unsigned int
  8. #define Imax 14000    //此處為晶振為11.0592時的取值,
  9. #define Imin 8000    //如用其它頻率的晶振時,
  10. #define Inum1 1450    //要改變相應的取值。
  11. #define Inum2 700
  12. #define Inum3 3000
  13. sbit s1=P2^1;
  14. sbit s2=P2^4;
  15. sbit s3=P2^3;
  16. sbit s4=P2^2;
  17. sbit fmq=P2^0;

  18. sbit s11=P3^7;
  19. sbit s12=P3^6;
  20. sbit s13=P3^5;
  21. sbit s14=P3^4;
  22. unsigned char flag_REC;
  23. unsigned char buff[20]=0;

  24. unsigned char f=0,aa,zz,cc,cc1,dd;
  25. unsigned char Im[4]={0x00,0x00,0x00,0x00};
  26. unsigned char show[2]={0,0};
  27. unsigned long m,Tc;
  28. unsigned char IrOK;
  29. uchar code Tab1[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//"0123456789ABCDEF";
  30. uchar Tab2[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  31. /************************************************************************/        

  32.   void delayms(uchar x)
  33.   {
  34.     unsigned int i,j;
  35.     for(i=0;i<x;i++)
  36.      for(j=0;j<110;j++)
  37.          ;
  38.    }
  39.          
  40. /*--主函數--*/
  41. void jieshou()
  42. {
  43.           if(Im[2]==Tab2[1])
  44.                    {
  45.                      aa=aa;
  46.                         }
  47.                         else
  48.                         if(Im[2]==Tab2[2])
  49.                    {
  50.                      aa=aa;
  51.                    }
  52.                    else
  53.                    if(Im[2]==Tab2[3])
  54.                    {
  55.                      aa=aa;
  56.                         }
  57.                         else
  58.                         if(Im[2]==Tab2[4])
  59.                    {
  60.                      aa=aa;
  61.                    }
  62.                    else
  63.                     if(Im[2]==Tab2[5])
  64.                    {
  65.                      aa=aa;
  66.                         }
  67.                         else
  68.                         if(Im[2]==Tab2[6])
  69.                    {
  70.                      aa=aa;
  71.                    }
  72.                    else
  73.                    if(Im[2]==Tab2[7])
  74.                    {
  75.                      aa=aa;
  76.                         }
  77.                         else
  78.                         if(Im[2]==Tab2[8])
  79.                    {
  80.                      aa=aa;
  81.                    }
  82.                            else
  83.                    if(Im[2]==Tab2[9])
  84.                    {
  85.                      aa=aa;
  86.                         }
  87.                         else
  88.                         if(Im[2]==Tab2[10])
  89.                    {
  90.                      aa=aa;
  91.                    }
  92.                    else
  93.                    if(Im[2]==Tab2[11])
  94.                    {
  95.                      aa=aa;
  96.                         }
  97.                         else
  98.                         if(Im[2]==Tab2[12])
  99.                    {
  100.                      aa=aa;
  101.                    }
  102.                    else
  103.                     if(Im[2]==Tab2[13])
  104.                    {
  105.                      aa=aa;
  106.                         }
  107.                         else
  108.                         if(Im[2]==Tab2[14])
  109.                    {
  110.                      aa=aa;
  111.                    }
  112.                    else
  113.                    if(Im[2]==Tab2[15])
  114.                    {
  115.                      aa=aa;
  116.                         }
  117.                         else
  118.                         if(Im[2]==Tab2[16])
  119.                    {
  120.                      aa=aa;
  121.                    }
  122.                            else
  123.                         if(Im[2]==Tab2[17])
  124.                    {
  125.                      aa=aa;
  126.                         }
  127.                         else
  128.                         if(Im[2]==Tab2[18])
  129.                    {
  130.                      aa=aa;
  131.                    }
  132.                    else
  133.                    if(Im[2]==Tab2[19])
  134.                    {
  135.                      aa=aa;
  136.                         }
  137.                         else
  138.                         if(Im[2]==Tab2[20])
  139.                    {
  140.                      aa=aa;
  141.                    }
  142.                    else
  143.                     if(Im[2]==Tab2[21])
  144.                    {
  145.                      aa=aa;
  146.                         }
  147.                         else
  148.                         if(Im[2]==Tab2[22])
  149.                    {
  150.                      aa=aa;
  151.                    }
  152.                    else
  153.                    if(Im[2]==Tab2[23])
  154.                    {
  155.                      aa=aa;
  156.                         }
  157.                         else
  158.                         if(Im[2]==Tab2[24])
  159.                    {
  160.                      aa=aa;
  161.                    }
  162.                            else
  163.                         {aa=aa+1;}
  164. }
  165. void shuju()
  166. {
  167.    Tab2[aa]=Im[2];
  168.                
  169.                         if(Im[2]==Tab2[1])
  170.                         {
  171.                           
  172.                            s1=~s1;
  173.                            LcdWriteCom(0x84);
  174.                            LcdWriteData('0'+0);
  175.                            LcdWriteData('0'+1);
  176.                            
  177.                         }
  178.                         else
  179.                         if(Im[2]==Tab2[2])
  180.                         {
  181.                         
  182.                             LcdWriteCom(0x84);
  183.                                 LcdWriteData('0'+0);
  184.                            LcdWriteData('0'+2);
  185.                            s2=~s2;
  186.                         }
  187.                         else
  188.                          if(Im[2]==Tab2[3])
  189.                         
  190.                         {
  191.                         
  192.                                  s3=~s3;
  193.                                  LcdWriteCom(0x84);
  194.                                  LcdWriteData('0'+0);
  195.                                    LcdWriteData('0'+3);
  196.                         
  197.                         }
  198.                         else
  199.                         if(Im[2]==Tab2[4])
  200.                         {
  201.                         
  202.                                 s4=~s4;
  203.                             LcdWriteCom(0x84);
  204.                                 LcdWriteData('0'+0);
  205.                            LcdWriteData('0'+4);
  206.                            
  207.                         }
  208.                         else
  209.                         
  210.                         
  211. //                        {        dd=1;
  212. //                                   TMOD= 0X20;
  213.                          if(Im[2]==Tab2[5])
  214.             {
  215.                                 dd=dd+1;
  216.                             LcdWriteCom(0x84);
  217.                                 LcdWriteData('0'+0);
  218.                            LcdWriteData('0'+5);
  219.                         }
  220.                         else
  221.                         if(Im[2]==Tab2[6])
  222.                         {
  223.                           //  dd=0;
  224.                           //  TMOD= 0X11;
  225.                                  
  226.                             LcdWriteCom(0x84);
  227.                                 LcdWriteData('0'+0);
  228.                            LcdWriteData('0'+6);
  229.                         }
  230.                         else
  231.                          if(Im[2]==Tab2[7])
  232.                         
  233.                         {
  234.                         
  235.                             LcdWriteCom(0x84);
  236.                                 LcdWriteData('0'+0);
  237.                            LcdWriteData('0'+7);
  238.                         }
  239.                         else
  240.                         if(Im[2]==Tab2[8])
  241.                         {
  242.                            
  243.                             LcdWriteCom(0x84);
  244.                                 LcdWriteData('0'+0);
  245.                            LcdWriteData('0'+8);
  246.                         }
  247.                         else
  248.                         if(Im[2]==Tab2[9])
  249.                         {
  250.                         
  251.                             LcdWriteCom(0x84);
  252.                                 LcdWriteData('0'+0);
  253.                            LcdWriteData('0'+9);
  254.                         }
  255.                         else
  256.                         if(Im[2]==Tab2[10])
  257.                         {
  258.                         
  259.                             LcdWriteCom(0x84);
  260.                                 LcdWriteData('0'+1);
  261.                            LcdWriteData('0'+0);
  262.                         }
  263.                         else
  264.                         if(Im[2]==Tab2[11])
  265.                         {
  266.                         
  267.                             LcdWriteCom(0x84);
  268.                                 LcdWriteData('0'+1);
  269.                            LcdWriteData('0'+1);
  270.                         }
  271.                         else
  272.                         if(Im[2]==Tab2[12])
  273.                         {
  274.                         
  275.                             LcdWriteCom(0x84);
  276.                                 LcdWriteData('0'+1);
  277.                            LcdWriteData('0'+2);
  278.                         }
  279.                         else
  280.                         if(Im[2]==Tab2[13])
  281.                         {
  282.                         
  283.                             LcdWriteCom(0x84);
  284.                                 LcdWriteData('0'+1);
  285.                            LcdWriteData('0'+3);
  286.                         }          else
  287.                         if(Im[2]==Tab2[14])
  288.                         {
  289.                         
  290.                             LcdWriteCom(0x84);
  291.                                 LcdWriteData('0'+1);
  292.                            LcdWriteData('0'+4);
  293.                         }
  294.                         else
  295.                         if(Im[2]==Tab2[15])
  296.                         {
  297.                         
  298.                             LcdWriteCom(0x84);
  299.                                 LcdWriteData('0'+1);
  300.                            LcdWriteData('0'+5);
  301.                         }
  302.                         else
  303.                         if(Im[2]==Tab2[16])
  304.                         {
  305.                         
  306.                             LcdWriteCom(0x84);
  307.                                 LcdWriteData('0'+1);
  308.                            LcdWriteData('0'+6);
  309.                         }
  310.                         else
  311.                         if(Im[2]==Tab2[17])
  312.                         {
  313.                         
  314.                             LcdWriteCom(0x84);
  315.                                 LcdWriteData('0'+1);
  316.                            LcdWriteData('0'+7);
  317.                         }
  318.                                 else
  319.                         if(Im[2]==Tab2[18])
  320.                         {
  321.                         
  322.                             LcdWriteCom(0x84);
  323.                                 LcdWriteData('0'+1);
  324.                            LcdWriteData('0'+8);
  325.                         }
  326.                         else
  327.                         if(Im[2]==Tab2[19])
  328.                         {                                 
  329.                         
  330.                             LcdWriteCom(0x84);
  331.                                 LcdWriteData('0'+1);
  332.                            LcdWriteData('0'+9);
  333.                         }
  334.                         else
  335.                         if(Im[2]==Tab2[20])
  336.                         {
  337.                         
  338.                             LcdWriteCom(0x84);
  339.                                 LcdWriteData('0'+2);
  340.                            LcdWriteData('0'+0);
  341.                         }
  342.                         else
  343.                         if(Im[2]==Tab2[21])
  344.                         {
  345.                         
  346.                             LcdWriteCom(0x84);
  347.                                 LcdWriteData('0'+2);
  348.                            LcdWriteData('0'+1);
  349.                         }                else
  350.                         if(Im[2]==Tab2[22])
  351.                         {
  352.                         
  353.                             LcdWriteCom(0x84);
  354.                                 LcdWriteData('0'+2);
  355.                            LcdWriteData('0'+2);
  356.                         }
  357.                         else
  358.                         if(Im[2]==Tab2[23])
  359.                         {
  360.                         
  361.                             LcdWriteCom(0x84);
  362.                                 LcdWriteData('0'+2);
  363.                            LcdWriteData('0'+3);
  364.                         }
  365.                         else
  366.                         if(Im[2]==Tab2[24])
  367.                         {
  368.                         
  369.                             LcdWriteCom(0x84);
  370.                                 LcdWriteData('0'+2);
  371.                            LcdWriteData('0'+4);
  372.                         }
  373.                         else
  374.                         if(Im[2]==Tab2[25])
  375.                         {
  376.                         
  377.                             LcdWriteCom(0x84);
  378.                                 LcdWriteData('0'+2);
  379.                            LcdWriteData('0'+5);
  380.                         }
  381. }
  382. void xianshi()
  383.   {
  384.            
  385.                         LcdWriteCom(0x8A);
  386.                            if(cc==0xa)
  387.                                 {
  388.                              LcdWriteData('A');
  389.                                 }
  390.                                  else
  391.                                  if(cc==0xb)
  392.                                 {
  393.                              LcdWriteData('B');
  394.                                 }
  395.                                 else
  396.                                  if(cc==0xc)
  397.                                 {
  398.                              LcdWriteData('C');
  399.                                 }else
  400.                                  if(cc==0xd)
  401.                                 {
  402.                              LcdWriteData('D');
  403.                                 }else
  404.                                  if(cc==0xe)
  405.                                 {
  406.                              LcdWriteData('E');
  407.                                 }else
  408.                                  if(cc==0xf)
  409.                                 {
  410.                              LcdWriteData('F');
  411.                                 }
  412.                                 else
  413.                             LcdWriteData('0'+Tab1[cc]);

  414.                         
  415.                             if(cc1==0xa)
  416.                                 {
  417.                              LcdWriteData('A');
  418.                                 }
  419.                                  else
  420.                                  if(cc1==0xb)
  421.                                 {
  422.                              LcdWriteData('B');
  423.                                 }
  424.                                 else
  425.                                  if(cc1==0xc)
  426.                                 {
  427.                              LcdWriteData('C');
  428.                                 }else
  429.                                  if(cc1==0xd)
  430.                                 {
  431.                              LcdWriteData('D');
  432.                                 }else
  433.                                  if(cc1==0xe)
  434.                                 {
  435.                              LcdWriteData('E');
  436.                                 }else
  437.                                  if(cc1==0xf)
  438.                                 {
  439.                              LcdWriteData('F');
  440.                                 }
  441.                            else
  442.                            LcdWriteData('0'+Tab1[cc1]);


  443.   }        
  444. void lanya()
  445. {
  446.   if(flag_REC==1)                                    //
  447.              {
  448.                      flag_REC=0;
  449.                     if(buff[0]=='o')        //第一個字節為O,第二個字節為N,第三個字節為控制碼
  450.                         
  451.                             switch(buff[1])
  452.                         {
  453.                               case '1' :                                                
  454.                                    if(buff[2]=='0')
  455.                                   s1=1;
  456.                                   else
  457.                                   s1=0;
  458.                                   break;
  459.                               case '2':                                         
  460.                                    if(buff[2]=='0')
  461.                                   s2=1;
  462.                                   else
  463.                                   s2=0;
  464.                                   break;                                   
  465.                               case '3':                                         
  466.                                    if(buff[2]=='0')
  467.                                   s3=1;
  468.                                   else
  469.                                   s3=0;
  470.                                   break;
  471.                               case '4':                                 
  472.                                    if(buff[2]=='0')
  473.                                   s4=1;
  474.                                   else
  475.                                   s4=0;
  476.                                   break;
  477.                                   case '5':                                 
  478.                                    if(buff[2]=='0')
  479.                                   dd=1;
  480.                                   else
  481.                                   dd=0;
  482.                                   break;                        
  483.                           }        
  484.                          LcdWriteCom(0xC7);
  485.                         LcdWriteData('O');
  486.                         LcdWriteData('0'+buff[1]);
  487.                         LcdWriteData('0'+buff[2]);                                   
  488.               }
  489.                
  490. }
  491. void hwint()
  492. {
  493.     s11=s12=s13=s14=0;
  494.            m=0;
  495.     f=1;
  496.     IT0=1;
  497.     EX0=1;
  498.     TMOD=0x11;  
  499.     TH0=0;
  500.         TL0=0;
  501.     TR0=1;
  502.         EA=1;
  503. }
  504. void main(void)
  505. {
  506.         LcdInit();
  507.          hwint();
  508.            
  509.           aa=0;
  510.          LcdWriteCom(0x80);
  511.                         LcdWriteData('H');
  512.                         LcdWriteData('W');
  513.                 LcdWriteCom(0xC0);
  514.                         LcdWriteData('L');
  515.                         LcdWriteData('A');
  516.                         LcdWriteData('N');
  517.                         LcdWriteData('Y');
  518.                         LcdWriteData('A');
  519.                         LcdWriteCom(0x88);
  520.                         LcdWriteData('0');
  521.                         LcdWriteData('X');
  522.         while(1)                                                        /*無限循環*/
  523.         {  
  524.                   
  525.                
  526.             if(IrOK==1)                           //如果處理好后進行紅外處理
  527.         {        
  528.                   
  529.                     shuju();
  530.                         xianshi();
  531.             IrOK=0;
  532.                         LcdWriteCom(0x8e);
  533.                         LcdWriteData('0'+dd);
  534.                          delayms(1000);
  535.                         EA=1;
  536.         }
  537.          if(dd==3)
  538.           {
  539.             dd=0;
  540.                 Uart_init();
  541.                 while(1)
  542.                  {
  543.                    lanya();
  544.                    LcdWriteCom(0x8e);
  545.                    LcdWriteData('0'+dd);
  546.                    if(dd==1)
  547.                     {
  548.                           dd=0;
  549.                           hwint();
  550.                           break;
  551.                         }
  552.                  }
  553.           }
  554.           if(s11==1)
  555.            {
  556.              s1=~s1;
  557.                  while(!s11);
  558.            }
  559.            if(s12==1)
  560.            {
  561.              s2=~s2;
  562.                  while(!s12);
  563.            }
  564.            if(s13==1)
  565.            {
  566.              s3=~s3;
  567.                  while(!s13);
  568.            }
  569.            if(s14==1)
  570.            {
  571.              s4=~s4;
  572.                  while(!s14);
  573.            }

  574.          }
  575. }
  576. /************************************************************************/        
  577. //外部中斷解碼程序
  578. void intersvr0(void) interrupt 1 using 1
  579. {
  580.     Tc=TH0*256+TL0;      //提取中斷時間間隔時長
  581.     TH0=0;
  582.     TL0=0;              //定時中斷重新置零
  583.     if((Tc>Imin)&&(Tc<Imax))
  584.     {
  585.         m=0;
  586.         f=1;
  587.         return;
  588.     }       //找到啟始碼

  589.     if(f==1)
  590.     {
  591.         if(Tc>Inum1&&Tc<Inum3)
  592.         {
  593.             Im[m/8]=Im[m/8]>>1|0x80; m++;
  594.         }
  595.         if(Tc>Inum2&&Tc<Inum1)
  596.         {
  597.          Im[m/8]=Im[m/8]>>1; m++; //取碼
  598.         }
  599.         if(m==32)
  600.         {
  601.          m=0;  
  602.          f=0;
  603.          if(Im[2]==~Im[3])
  604.         {
  605.            IrOK=1;
  606.                    jieshou();
  607.                    cc=Im[2]/0x10;
  608.                         cc1=Im[2]%0x10;
  609.                         fmq=0;
  610.                         delayms(100);
  611.                         fmq=1;
  612.                         delayms(100);
  613.                         EA=0;
  614.                         if(Im[2]==Tab2[aa])
  615.                           {
  616.                             delayms(200);
  617.                                  {
  618.                                   if(Im[2]==Tab2[aa])
  619.                                     {
  620.                                           delayms(2100);
  621.                                         }
  622.                                  }
  623.                           }
  624.         }
  625.         else IrOK=0;   //取碼完成后判斷讀碼是否正確
  626.         }
  627.                //準備讀下一碼
  628.    }

  629. }
  630. void uart_rx(void)  interrupt 4        using 3          //放在這里 和放在main()里面是一樣的
  631. {

  632.            unsigned char i;
  633.         unsigned char flag;
  634.         unsigned char dat;
  635.     if(RI)                         //是否接收中斷
  636.     {
  637.        RI=0;
  638.        dat=SBUF;
  639.        if(dat=='o'&&(i==0)) //接收數據第一幀
  640.        {
  641.             buff[i]=dat;
  642.             flag=1;        //開始接收數據
  643.        }
  644.        else
  645.               if(flag==1)
  646.               {
  647.                       i++;
  648.                       buff[i]=dat;
  649.                       if(i>=2)
  650.                   {
  651.                            i=0;
  652.                            flag=0;
  653.                            flag_REC=1 ;
  654.                       }  // 停止接收
  655.               }
  656.          }

  657. }
  658.                
復制代碼

所有資料51hei提供下載:
程序PCB.7z (1.23 MB, 下載次數: 45)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年人网站免费视频 | 国产成人在线观看免费 | 亚洲免费av一区 | 综合五月| 九九综合| 午夜在线视频一区二区三区 | 黑人巨大精品 | 欧美日韩不卡在线 | 久久免费精品视频 | 一区二区中文字幕 | 亚洲天堂中文字幕 | 在线色网| 91久久国产综合久久 | 在线免费激情视频 | 人人艹人人爽 | 午夜性色a√在线视频观看9 | 国产在线精品一区二区三区 | 亚洲精品欧美一区二区三区 | 久久久久久久久久久久久久国产 | 自拍偷拍第一页 | www.久草.com| 在线免费观看成年人视频 | 欧美综合久久 | 99riav3国产精品视频 | 日韩福利在线 | 在线观看免费国产 | h肉视频| 一级黄色夫妻生活 | 狠狠狠干 | 色999视频 | 在线观看欧美日韩视频 | 精品久久久久久久 | 91超碰在线观看 | 91在线看片 | 麻豆视频国产在线观看 | 欧美成人自拍视频 | 日韩一区二区三区精品 | 色婷婷av久久久久久久 | 男人的天堂视频网站 | 亚洲精品中文字幕在线观看 | 亚洲精品电影网在线观看 |