標(biāo)題: 紅外解碼 在LCD1602上顯示出遙控發(fā)送的16進制值 源代碼分享 [打印本頁]

作者: aiwang51    時間: 2015-11-7 21:03
標(biāo)題: 紅外解碼 在LCD1602上顯示出遙控發(fā)送的16進制值 源代碼分享
按鍵遙控鍵盤某個鍵,用紅外接收頭接受,單片機解碼接受數(shù)據(jù)值,在LCD1602上顯示出遙控發(fā)送的16進制值。

IMG_20151107_205714.jpg (1.71 MB, 下載次數(shù): 214)

IMG_20151107_205714.jpg

紅外解碼.rar

31.16 KB, 下載次數(shù): 160, 下載積分: 黑幣 -5


作者: admin    時間: 2015-11-9 01:54
主程序:
  1. #include"reg51.h"  
  2. #include"intrins.h"
  3. #include"lcd1602.h"

  4. // 此口為紅外信號輸入MCU口  
  5. sbit IR_Out = P3^2;   
  6.   
  7. // 主程序運行標(biāo)志位,運行主程序時LED滅,運行中斷程序時LED亮   
  8. sbit IR_Flag = P1^4;  

  9. // LED顯示口  
  10. //#define LED_Port P1  
  11.   
  12. // 用于存放按鍵碼值,初始化為0000 0000這樣接受數(shù)據(jù)時可以只考慮1了   
  13. unsigned char dat[4] = {0,0,0,0};  
  14. void init()
  15. {
  16.         IR_Out = 1;     // 此口為MCU輸入口,故需要置1  
  17.     IR_Flag = 1;    // 滅LED燈  
  18.     TMOD = 0x01;    // 定時器0,方式1  
  19.     IT0 = 1;        // 外部中斷0,下降沿觸發(fā)  
  20.     EX0 = 1;        // 準(zhǔn)許外部中斷  
  21.     EA = 1;         // CPU準(zhǔn)許中斷  
  22. }         
  23.   
  24. /*............................................................*/  
  25. void main()  
  26. {  
  27.     init();
  28.         lcd_init();
  29.         lcd_initdata();
  30.     while(1)  
  31.     {  
  32.                 if(dat[2]==~dat[3])
  33.                 {
  34.                 lcd_conv(dat[2]);
  35.                 lcd_dis0();
  36.         IR_Flag = 1;// 執(zhí)行主程序時,LED燈滅
  37.                
  38.                 }
  39.                
  40.     }  
  41. }  
  42. /*------------------------------------------------------------*-  
  43.   函數(shù)名稱:Int0()
  44.   函數(shù)輸入:無(容許中斷時,外部觸發(fā))
  45.   函數(shù)輸出:無
  46.   函數(shù)說明:外部中斷0中斷處理
  47. -*------------------------------------------------------------*/  
  48. void Int0() interrupt 0  
  49. {  
  50.     unsigned char i,j;  
  51.     EX0 = 0;            // 關(guān)閉外部中斷0  
  52.     IR_Flag = 0;        // 執(zhí)行中斷程序時,LED燈亮  
  53.     i = 10;             // 0.793ms延時,運行10次  
  54.     while( --i )  
  55.     {  
  56.         // 定時0.793ms,延時0.793ms*10=7.93ms  
  57.         TH0 = 0xfc;  
  58.         TL0 = 0xe7;  
  59.         TR0 = 1;  
  60.         while( !TF0 );  
  61.         TF0 = 0;  
  62.         TR0 = 0;  
  63.          
  64.         // 這7.93ms期間只要IR_Out變高電平,就非合法的紅外信號,跳出  
  65.         if( IR_Out )  
  66.         {  
  67.             EX0 = 1;    // 準(zhǔn)許中斷  
  68.             return ;  
  69.         }  
  70.     }  
  71.       
  72.     // 程序進行到這里,表明是合法的紅外信號(利用9ms判斷)  
  73.     while( !IR_Out );   // 等待9ms低電平過去  
  74.       
  75.     // 程序進行到這里,表明經(jīng)過9ms低電平  
  76.     TH0 = 0xf6;  
  77.     TL0 = 0xff;  
  78.     TR0 = 1;  
  79.     while( !TF0 );  
  80.     TF0 = 0;  
  81.     TR0 = 0;            // 延時2.305ms  
  82.       
  83.     // IR_Out 為低表明是連發(fā)碼,不予理睬,跳出  
  84.     if( !IR_Out )  
  85.     {  
  86.         EX0=1;  
  87.         return;  
  88.     }  
  89.   
  90.     // 程序進行到這里,表明是引導(dǎo)碼,等待4.5ms高電平的過去  
  91.     while( IR_Out );      
  92.       
  93.     // 開始接收用戶碼  
  94.     for(i=0; i<4; i++)  
  95.     {  
  96.         for(j=0; j<8; j++)  
  97.         {  
  98.             while( !IR_Out );   // 等待低電平過去  
  99.             dat[i] >>= 1;     // 把上次的數(shù)據(jù)位右移一位  
  100.   
  101.             TH0 = 0xfc;  
  102.             TL0 = 0xe7;  
  103.             TR0 = 1;  
  104.             while( !TF0 );  
  105.             TR0=0;  
  106.             TF0=0;              //延時0.793ms   
  107.               
  108.             // 若為數(shù)據(jù)"1",則延時后IR_Out為高電平  
  109.             if( IR_Out )   
  110.             {  
  111.                 dat[i] |= 0x80;     // 所有數(shù)據(jù)位1放最高位  
  112.                 while( IR_Out );    // 等待高電平過去  
  113.             }  
  114.         }  
  115.     }     
  116.   //LED_Port = dat[2];  
  117.     EX0=1;      // 開中斷  
  118.     return;  
  119. }  
復(fù)制代碼

作者: lemon0210    時間: 2015-11-9 09:19
不錯的設(shè)計,下載看看
作者: yaofang1010    時間: 2016-9-11 14:12
下來看看
作者: zhaoqing    時間: 2016-9-12 16:13
下載下來做了仿真感覺不錯
作者: jiangxin    時間: 2016-9-12 16:16
很棒的設(shè)計,但是代碼有點看不懂,正在學(xué)習(xí)中
作者: at87c573    時間: 2016-9-22 09:01
找這個例程好久了,感謝分享
作者: raymondau    時間: 2017-3-31 00:46
正需要這個,下來研究研究
作者: gdx    時間: 2019-12-16 22:30
學(xué)習(xí)有用,謝謝分享
作者: 米花卷    時間: 2021-4-18 01:26
沒仿真成功,不知道那錯了




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