0220

来源:互联网 发布:小黑裙香水淘宝 编辑:程序博客网 时间:2024/05/13 18:26

遥控器输入,用LCD显示灯的号码

  1. #include<reg52.h>  
  2. #include"./uart/uart.h"  
  3. #include"./delay/delay.h"  
  4. #include"./lcd/lcd.h"  
  5.   
  6. sbit IR_IN = P3^2;  
  7. sbit led1 = P1^0;  
  8. sbit led2 = P1^1;  
  9. sbit led3 = P1^2;  
  10. sbit led4 = P1^3;  
  11. sbit led5 = P1^4;  
  12. sbit led6 = P1^5;  
  13. sbit led7 = P1^6;  
  14. sbit led8 = P1^7;  
  15.   
  16. unsigned int irtime;  
  17. unsigned char temp;  
  18. unsigned char IRcord[4];  
  19. unsigned char putbuf[35];  
  20.   
  21. bit startflag =0;  
  22. bit irok,irpro_ok;  
  23.   
  24. void timer0_init()  
  25. {  
  26.     EA=1;  
  27.     TMOD |= 0X02;  
  28.     TH0 = 0;  
  29.     ET0 = 1;  
  30.     TR0 = 1;  
  31. }  
  32.   
  33. void timer0_isr() interrupt 1  
  34. {  
  35.     irtime++;                       //0.256ms   引导码 s:53     0:4   1:9  
  36. }  
  37.   
  38. void int0_init()  
  39. {  
  40.     IT0 = 1;        //设置外部中断的触发方式  
  41.     EA = 1;  
  42.     EX0 = 1;  
  43. }  
  44.   
  45. unsigned char irdata[33];  
  46. unsigned char bitnum = 0;  
  47.   
  48. void int0_isr() interrupt 0  
  49. {  
  50.     if(startflag)  
  51.     {  
  52.         if((irtime > 40) && (irtime < 60))  
  53.         {  
  54.             bitnum = 0;  
  55.         }  
  56.         /*if((irtime > 6) && (irtime < 12)) 
  57.         { 
  58.             temp = 1; 
  59.         } 
  60.         if((irtime > 0) && (irtime < 6)) 
  61.         { 
  62.             temp = 0; 
  63.         }*/  
  64.         //irdata[bitnum] = temp;  
  65.         irdata[bitnum] = irtime;  
  66.         bitnum++;  
  67.         irtime = 0;  
  68.         if(33 == bitnum)  
  69.         {  
  70.             bitnum  = 0;  
  71.             irok = 1;  
  72.             startflag = 0;  
  73.         }  
  74.     }  
  75.     else  
  76.     {  
  77.         irtime = 0;  
  78.         startflag = 1;  
  79.     }     
  80. }  
  81.   
  82. void Ircordpro(void)  
  83. {   
  84.     unsigned char i, j, k;  
  85.     unsigned char cord,value;  
  86.   
  87.     k=1;  
  88.     for(i=0;i<4;i++)       
  89.     {  
  90.         for(j=1;j<=8;j++)   
  91.         {  
  92.             cord=irdata[k];  
  93.             if(cord>6)  
  94.                 value|=0x80;  
  95.             if(j<8)  
  96.             {  
  97.                 value>>=1;  
  98.             }  
  99.             k++;  
  100.         }  
  101.         IRcord[i] = value;  
  102.         value=0;       
  103.     }   
  104.     irpro_ok=1;  
  105. }  
  106.   
  107. void LED()  
  108. {  
  109.     switch(IRcord[2])  
  110.     {  
  111.         case 0x45: led1 = ~led1; break;  
  112.         case 0x46: led2 = ~led2; break;  
  113.         case 0x47: led3 = ~led3; break;  
  114.         case 0x44: led4 = ~led4; break;  
  115.         case 0x40: led5 = ~led5; break;  
  116.         case 0x43: led6 = ~led6; break;  
  117.         case 0x07: led7 = ~led7; break;  
  118.         case 0x15: led8 = ~led8; break;  
  119.         defaultbreak;  
  120.     }  
  121. }  
  122.   
  123. void LCD()  
  124. {  
  125.     switch(IRcord[2])  
  126.     {  
  127.         case 0x45: LCD_Write_String(5,1,"01"); break;  
  128.         case 0x46: LCD_Write_String(5,1,"02"); break;  
  129.         case 0x47: LCD_Write_String(5,1,"03"); break;  
  130.         case 0x44: LCD_Write_String(5,1,"04"); break;  
  131.         case 0x40: LCD_Write_String(5,1,"05"); break;  
  132.         case 0x43: LCD_Write_String(5,1,"06"); break;  
  133.         case 0x07: LCD_Write_String(5,1,"07"); break;  
  134.         case 0x15: LCD_Write_String(5,1,"08"); break;  
  135.         case 0x09: LCD_Write_String(5,1,"09"); break;  
  136.         case 0x16: LCD_Write_String(5,1,"10"); break;  
  137.         case 0x19: LCD_Write_String(5,1,"11"); break;  
  138.         case 0x0d: LCD_Write_String(5,1,"12"); break;  
  139.         case 0x0c: LCD_Write_String(5,1,"13"); break;  
  140.         case 0x18: LCD_Write_String(5,1,"14"); break;  
  141.         case 0x5e: LCD_Write_String(5,1,"15"); break;  
  142.         case 0x08: LCD_Write_String(5,1,"16"); break;  
  143.         case 0x1c: LCD_Write_String(5,1,"17"); break;  
  144.         case 0x5a: LCD_Write_String(5,1,"18"); break;  
  145.         case 0x42: LCD_Write_String(5,1,"19"); break;  
  146.         case 0x52: LCD_Write_String(5,1,"20"); break;  
  147.         case 0x4a: LCD_Write_String(5,1,"21"); break;  
  148.         defaultbreak;  
  149.     }  
  150. }  
  151.   
  152. void main()  
  153. {  
  154.     unsigned char i;  
  155.     timer0_init();  
  156.     int0_init();  
  157.     uart_init();  
  158.     LCD_Init();  
  159.     LCD_Clear();  
  160.     while(1)  
  161.     {  
  162.         if(irok == 1)  
  163.         {  
  164. /*          putbuf[0] = irdata[0] / 10+0x30; 
  165.             putbuf[1] = irdata[0] % 10+0x30; 
  166.             for(i = 0; i<32;i++) 
  167.             { 
  168.                 putbuf[i+2]=irdata[i+1] +0x30; 
  169.             } 
  170.             putbuf[34] = '\0'; 
  171.             uart_send_string(putbuf); 
  172.             uart_send_string("\n");*/  
  173.             Ircordpro();  
  174.             irok = 0;  
  175.         }  
  176.         if(irpro_ok)  
  177.         {  
  178.             for(i=0;i<4;i++)  
  179.             {  
  180.                 uart_send_byte(IRcord[i]);  
  181.                 delay_ms(1);  
  182.             }  
  183.             LED();  
  184.             LCD();  
  185.   
  186.             irpro_ok = 0;  
  187.         }  
  188.     }  

0 0