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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機紅外解碼程序(詳細顯示解碼內容)

  [復制鏈接]
跳轉到指定樓層
樓主
經過幾天學習,將各種解碼做顯示程序根據慧凈師傅的程序改寫1602顯示

單片機程序如下:


  1. #include<reg52.h>        //包含頭文件
  2. #include"LCD1602.h"
  3. //#include"delay_50us.h"
  4. //#include"delay_50ms.h"
  5. sbit IR=P3^2;  //紅外接口標志

  6. //#define DataPort P0 //定義數據端口 程序中遇到DataPort 則用P0 替換
  7. //sbit LATCH1=P2^6;//定義鎖存使能端口 段鎖存
  8. //sbit LATCH2=P2^7;//                 位鎖存
  9. /*------------------------------------------------
  10.                 全局變量聲明
  11. ------------------------------------------------*/

  12. //unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值0~9
  13. unsigned char  irtime;//紅外用全局變量 ,num

  14. bit irpro_ok,irok;
  15. unsigned char IRcord[6];
  16. unsigned char irdata[33];
  17. char code Tab[16]="0123456789ABCDEF";
  18. char data TimeNum[]="                      ";


  19. /*------------------------------------------------
  20.                   函數聲明
  21. ------------------------------------------------*/
  22. //
  23. void Ir_work(void);
  24. void Ir_towork(void);
  25. void Ircordpro(void);

  26. /*------------------------------------------------
  27.                   定時器0中斷處理
  28. ------------------------------------------------*/

  29. void tim0_isr (void) interrupt 1 using 1
  30. {
  31.   irtime++;  //用于計數2個下降沿之間的時間
  32. }

  33. /*------------------------------------------------
  34.                   外部中斷0中斷處理
  35. ------------------------------------------------*/
  36. void EX0_ISR (void) interrupt 0 //外部中斷0服務函數
  37. {
  38.   static unsigned char  i;             //接收紅外信號處理
  39.   static bit startflag;                //是否開始處理標志位

  40. if(startflag)                        
  41.    {
  42.     if(irtime<63&&irtime>=33)//引導碼 TC9012的頭碼,9ms+4.5ms
  43.                         i=0;
  44.                     irdata[i]=irtime;//存儲每個電平的持續時間,用于以后判斷是0還是1
  45.                     irtime=0;
  46.                     i++;
  47.                             if(i==33)
  48.                               {
  49.                                    irok=1;
  50.                                  i=0;
  51.                                   }
  52.           }
  53.            else
  54.                 {
  55.                 irtime=0;
  56.                 startflag=1;
  57.                 }

  58. }

  59. /*------------------------------------------------
  60.                 定時器0初始化
  61. ------------------------------------------------*/
  62. void TIM0init(void)//定時器0初始化
  63. {

  64.   TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
  65.   TH0=0x00; //重載值
  66.   TL0=0x00; //初始化值
  67.   ET0=1;    //開中斷
  68.   TR0=1;   
  69. }
  70. /*------------------------------------------------
  71.                   外部中斷0初始化
  72. ------------------------------------------------*/
  73. void EX0init(void)
  74. {
  75. IT0 = 1;   //指定外部中斷0下降沿觸發,INT0 (P3.2)
  76. EX0 = 1;   //使能外部中斷
  77. EA = 1;    //開總中斷
  78. }
  79. /*------------------------------------------------
  80.                   鍵值處理
  81. 注:分解顯示轉換值列表
  82. ------------------------------------------------*/

  83. void Ir_work(void)//紅外鍵值散轉程序
  84. {
  85.        TimeNum[5] = Tab[IRcord[0]/16];   //處理客戶碼并顯示
  86.            TimeNum[6] = Tab[IRcord[0]%16];
  87.            TimeNum[8] = Tab[IRcord[1]/16];   //處理客戶碼并顯示
  88.            TimeNum[9] = Tab[IRcord[1]%16];
  89.            TimeNum[11] = Tab[IRcord[2]/16];  //處理數據碼并顯示
  90.            TimeNum[12] = Tab[IRcord[2]%16];
  91.            TimeNum[14] = Tab[IRcord[3]/16];  //處理數據反碼并顯示
  92.            TimeNum[15] = Tab[IRcord[3]%16];
  93.            TimeNum[17] = Tab[IRcord[4]/16];  //處理數據反碼并顯示
  94.            TimeNum[18] = Tab[IRcord[4]%16];
  95.            TimeNum[20] = Tab[IRcord[5]/16];  //處理數據反碼并顯示
  96.            TimeNum[21] = Tab[IRcord[5]%16];
  97.                   irpro_ok=0;//處理完成標志

  98.   }
  99. /*************                 *********/
  100. void Ir_towork(void)//紅外鍵值散轉程序
  101. {
  102.         
  103. //            PutStr(1,0,TimeNum);//顯示處理過后的碼值
  104.            switch(IRcord[2])//判斷第三個數碼值
  105.                  {
  106.                          case 0x45:lcd_wcom(0x80+0x40);lcd_wdat(Tab[1]);break;//1 顯示相應的按鍵值
  107.                          case 0x46:lcd_wcom(0x81+0x40);lcd_wdat(Tab[2]);break;//2
  108.                          case 0x47:
  109. /***********循環顯示 I LIKE MCU!  只需要屏蔽lcd_wcom(0x82+0x40);lcd_wdat(Tab[3]);break;//3                        
  110.                          for(num=0;num<11;num++)
  111.                                 {
  112.                                         lcd_wcom(0x83+0x40);
  113.                                         lcd_wdat(table[num]);           //a//寫數據write_date(0x31); write_date('1');
  114.                                         delayZ(200);
  115.                         //                write_date('B');

  116.                                 };break;
  117. *****************************************/
  118.                           lcd_wcom(0x82+0x40);lcd_wdat(Tab[3]);break;//3
  119.                          case 0x44:lcd_wcom(0x83+0x40);lcd_wdat(Tab[4]);break;//4
  120.                          case 0x40:lcd_wcom(0x84+0x40);lcd_wdat(Tab[5]);break;//5
  121.                          case 0x43:lcd_wcom(0x85+0x40);lcd_wdat(Tab[6]);break;//6
  122.                          case 0x07:lcd_wcom(0x86+0x40);lcd_wdat(Tab[7]);break;//7
  123.                          case 0x15:lcd_wcom(0x87+0x40);lcd_wdat(Tab[8]);break;//8
  124.                          case 0x09:lcd_wcom(0x88+0x40);lcd_wdat(Tab[9]);break;//9
  125. /**********                                                                              **********/
  126.                          case 0x16:lcd_wcom(0x80+0x4A);lcd_wdat('%');break;//0
  127.                          case 0x19:lcd_wcom(0x80+0x4A);lcd_wdat('#');break;//100
  128.                          case 0x0D:lcd_wcom(0x80+0x4A);lcd_wdat('
  129. );break;//200
  130.                                                                                                                                  
  131.                          case 0x0c:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[1]);break;//1 顯示相應的按鍵值
  132.                          case 0x18:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[2]);break;//2
  133.                          case 0x5e:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[3]);break;//3
  134.                          case 0x08:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[4]);break;//4
  135.                          case 0x1c:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[5]);break;//5
  136.                          case 0x5a:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[6]);break;//6
  137.                          case 0x42:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[7]);break;//7
  138.                          case 0x52:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[8]);break;//8
  139.                          case 0x4a:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[9]);break;//9                     
  140.              default:break;                          
  141.                          }
  142.                          irpro_ok=0;//處理完成標志                                       
  143. }
  144. /*------------------------------------------------
  145.                 紅外碼值處理
  146. ------------------------------------------------*/
  147. void Ircordpro(void)//紅外碼值處理函數
  148. {
  149.   unsigned char i, j, k;
  150.   unsigned char cord,value;

  151.   k=1;
  152.   for(i=0;i<4;i++)      //處理4個字節
  153.      {
  154.       for(j=1;j<=8;j++) //處理1個字節8位
  155.          {
  156.           cord=irdata[k];
  157.           if(cord>7)//大于某值為1,這個和晶振有絕對關系,這里使用12M計算,此值可以有一定誤差
  158.              value|=0x80;
  159.           if(j<8)
  160.                     {
  161.                          value>>=1;
  162.                         }
  163.            k++;
  164.          }
  165.      IRcord[i]=value;
  166.      value=0;
  167. //         tablex(IRcord[2]);     
  168.      }
  169.          irpro_ok=1;//處理完畢標志位置1
  170. }

  171. /*------------------------------------------------
  172.                     主函數
  173. ------------------------------------------------*/
  174. void main(void)
  175. {
  176.   lcd_init();
  177.   EX0init(); //初始化外部中斷
  178.   TIM0init();//初始化定時器
  179. //  DataPort=0xfe; //取位碼 第一位數碼管選通,即二進制1111 1110
  180. //  LATCH2=1;      //位鎖存
  181. //  LATCH2=0;
  182.    lcd_wcom(0x80+0x46);
  183.    lcd_wdat('@');//*"1",0*/
  184. while(1)//主循環
  185.    {
  186.            //uchar h;
  187.            //h=IRcord[2];
  188.            //tablex(table1[h]);
  189.            lcd_wcom(0x80);lcd_wdat(TimeNum[5]);
  190.            lcd_wcom(0x81);lcd_wdat(TimeNum[6]);
  191.            lcd_wcom(0x82);lcd_wdat(TimeNum[8]);
  192.            lcd_wcom(0x83);lcd_wdat(TimeNum[9]);
  193.            lcd_wcom(0x84);lcd_wdat(TimeNum[11]);
  194.            lcd_wcom(0x85);lcd_wdat(TimeNum[12]);
  195.            lcd_wcom(0x86);lcd_wdat(TimeNum[14]);
  196.            lcd_wcom(0x87);lcd_wdat(TimeNum[15]);
  197.            lcd_wcom(0x88);lcd_wdat(TimeNum[18]);
  198.            lcd_wcom(0x89);lcd_wdat(TimeNum[18]);
  199.            lcd_wcom(0x8a);lcd_wdat(TimeNum[20]);
  200.            lcd_wcom(0x8b);lcd_wdat(TimeNum[21]);               
  201.         if(irok)                        //如果接收好了進行紅外處理
  202.           {   

  203.            Ircordpro();
  204.             irok=0;
  205.           }

  206.     if(irpro_ok)                   //如果處理好后進行工作處理,如按對應的按鍵后顯示對應的數字等
  207.           {
  208.            Ir_work();
  209.            Ir_towork();
  210.             }
  211.    }
  212. }
復制代碼
全部資料51hei下載地址:
慧凈.rar (32.96 KB, 下載次數: 119)

lADPD3lGpxWhY4vNC7jND6A_4000_3000.jpg_720x720q90g.jpg (108.69 KB, 下載次數: 148)

lADPD3lGpxWhY4vNC7jND6A_4000_3000.jpg_720x720q90g.jpg

lADPD3lGpxWXeSjNC7jND6A_4000_3000.jpg_720x720q90g.jpg (82.56 KB, 下載次數: 136)

lADPD3lGpxWXeSjNC7jND6A_4000_3000.jpg_720x720q90g.jpg

lADPD3W5KHDHd-XNC7jND6A_4000_3000.jpg_720x720q90g.jpg (92.89 KB, 下載次數: 142)

lADPD3W5KHDHd-XNC7jND6A_4000_3000.jpg_720x720q90g.jpg

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:89072 發表于 2020-4-12 23:08 | 只看該作者
比如最后照片中00FF后面的44或者其他,44則為案件定義編碼,對于新手很有幫助。
回復

使用道具 舉報

板凳
ID:284488 發表于 2020-4-13 08:52 | 只看該作者
感謝樓主的分享!
回復

使用道具 舉報

地板
ID:261025 發表于 2020-4-30 09:31 | 只看該作者
這個好  謝謝分享
回復

使用道具 舉報

5#
ID:501311 發表于 2020-7-23 09:31 | 只看該作者
本帖最后由 18773170245 于 2020-7-23 10:18 編輯

不使用for循環該怎么搞
回復

使用道具 舉報

6#
ID:796012 發表于 2023-3-2 14:05 | 只看該作者
下載可以。但是有只風扇遙控器每次按遙控編碼都不一樣,沒有示波器看不出波形,只知道發送的很快。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | www.一区二区三区 | 久久精品久久久久久 | 国产9999精品 | av在线播放网 | 国产高清精品一区二区三区 | 九色91视频 | 曰批视频在线观看 | 羞羞视频免费观看入口 | 免费在线a视频 | 逼逼视频 | 一级黄在线观看 | 日日噜| 国产成人短视频在线观看 | 亚洲精品久久久久久久不卡四虎 | 成人在线网| 精品国产一区二区三区久久 | 日韩在线观看精品 | 国产亚洲精品精品国产亚洲综合 | 久久69精品久久久久久国产越南 | 在线国产一区二区 | 另类视频区 | 精品亚洲一区二区三区 | 久久91| 国产一区二区三区四区hd | 国产精品视频久久 | 日韩a视频 | 天天看天天操 | 日本大香伊一区二区三区 | 91麻豆精品国产91久久久久久 | 黄色毛片大全 | 亚洲精品日韩精品 | 国产精品久久在线观看 | 国产一级片一区二区 | 久久久国产网站 | 国产一区二区三区在线免费 | 国产成人精品久久二区二区91 | 99这里只有精品视频 | 日本亚洲精品 | 日韩中文字幕 | 高清亚洲|