×
单片机 > 单片机程序设计 > 详情

单片机——红外遥控器——代码

发布时间:2020-06-18 发布时间:
|
  1. #include   

  2. #include   

  3. #include "./delay/delay.h"  

  4. #include "./lcd1602/lcd1602.h"  

  5.   

  6. unsigned int irtime = 0;  

  7. bit startflag = 0;  

  8. unsigned char irdata[33];  

  9. unsigned char ircood[4];  

  10. bit irok = 0;  

  11. sbit IR = P3^2;  

  12.   

  13. void timer0()  

  14. {  

  15.       EA = 1;  

  16.       TMOD |= 0x02;      

  17.       TH0 = 0;  

  18.       TL0 = 0;  

  19.       ET0 = 1;  

  20.       TR0 = 1;  

  21. }  

  22.   

  23. void int0()  

  24. {  

  25.       EA = 1;  

  26.       IT0 = 1;  

  27.       EX0 = 1;  

  28. }  

  29.   

  30. void int0_isr() interrupt 0  

  31. {  

  32.       static unsigned char bitnum = 0;  

  33.       if(1 == startflag)  

  34.       {  

  35.           if((irtime > 40) && (irtime 

  36.          {  

  37.               bitnum = 0;  

  38.           }  

  39.         irdata[bitnum] = irtime;  

  40.         bitnum++;  

  41.         irtime = 0;  

  42.         if(33 == bitnum)  

  43.         {  

  44.             irok = 1;  

  45.             bitnum = 0;  

  46.             startflag = 0;  

  47.         }  

  48.      }  

  49.     else  

  50.     {  

  51.         startflag = 1;  

  52.         irtime = 0;  

  53.     }  

  54. }  

  55. void timer0_isr() interrupt 1  

  56. {  

  57.     irtime++;  

  58. }  

  59. unsigned char irprocess()  

  60. {  

  61.       unsigned char i,j,k;  

  62.       unsigned char temp;  

  63.       k = 1;  

  64.   

  65.       for(j = 0; j 

  66.       {  

  67.             for(i = 0; i 

  68.             {  

  69.                 temp >>= 1;  

  70.                if(irdata[k] > 6)  

  71.                {  

  72.                      temp += 0x80;  

  73.                 }  

  74.                k++;  

  75.              }  

  76.             ircood[j] = temp;  

  77.     }     

  78.     if((ircood[0] + ircood[1] == 0xff)  && (ircood[2] + ircood[3] == 0xff))  

  79.     {  

  80.         switch(ircood[2])  

  81.         {  

  82.                       case 0x16: return 0;  

  83.                       case 0x0c: return 1;  

  84.                       case 0x18: return 2;  

  85.                       case 0x5e: return 3;  

  86.                       case 0x08: return 4;  

  87.                       case 0x1c: return 5;  

  88.                       case 0x5a: return 6;  

  89.                       case 0x42: return 7;  

  90.                       case 0x52: return 8;  

  91.                       case 0x4a: return 9;  

  92.                       case 0x45: return 10;  

  93.                       case 0x46: return 11;  

  94.                       case 0x47: return 12;  

  95.                       case 0x44: return 13;  

  96.                       case 0x40: return 14;  

  97.                       case 0x43: return 15;  

  98.                       case 0x07: return 16;  

  99.                       case 0x15: return 17;  

  100.                       case 0x09: return 18;  

  101.                       case 0x19: return 19;  

  102.                       case 0x0d: return 20;  

  103.                         default: break;  

  104.          }  

  105.     }  

  106.     return 0xff;  

  107.   

  108. }  

  109. void display()  

  110. {  

  111.       unsigned char high,low;  

  112.       unsigned char i;  

  113.       for(i = 0; i 

  114.       {  

  115.               high = ircood[i]/16;  

  116.               low = ircood[i]%16;  

  117.               if(high > 9)  

  118.              {  

  119.                  high += 0x37;  

  120.               }  

  121.             else  

  122.             {  

  123.                  high += 0x30;  

  124.              }  

  125.             if(low > 9)  

  126.             {  

  127.                  low += 0x37;  

  128.              }  

  129.             else  

  130.             {  

  131.                   low += 0x30;  

  132.              }   

  133.             lcd_print(1, 2*i+1, high);  

  134.             lcd_print(1, 2*i + 2, low);  

  135.      }  

  136. }  

  137. void irdisplay(unsigned char num)  

  138. {  

  139.         unsigned char high,low;  

  140.         high = num/10 +0x30;  

  141.         low = num%10 + 0x30;  

  142.   

  143.         lcd_print(2, 1, high);  

  144.         lcd_print(2, 2, low);  

  145. }  

  146.   

  147. void main()  

  148. {  

  149.       unsigned char keynum;  

  150.       lcd_init();  

  151.       timer0();  

  152.       int0();  

  153.       while(1)  

  154.       {  

  155.           if(1 == irok)  

  156.           {  

  157.                irok = 0;  

  158.               keynum = irprocess();  

  159.               display();  

  160.               if(keynum != 0xff)  

  161.               {  

  162.                      irdisplay(keynum);  

  163.                }  

  164.            }  

  165.        }  

  166. }  


关键字:单片机  红外遥控器 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何为单片机选择合适的负载电容