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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

對前期帖51單片機紅外通信第一種方案修正,附完整源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:965487 發表于 2021-10-18 19:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
前期我發帖稱也談51單片機紅外通信(附四種方案),現對第一方案一處錯誤進行修正。前期貼鏈接附在下面:

也談51單片機紅外通信(附有四種紅外解碼源碼) - 單片機DIY制作 (51hei.com)


  1. /*-----------------------------------------------
  2. 【實驗平臺】: QX-MCS51 單片機開發板
  3. * 【外部晶振】: 11.0592Mhz       
  4. * 【主控芯片】: STC89C52
  5. * 【編譯環境】: Keil μVisio4         
  6. * 【編    程】:wzqwxx 水上人家
  7. 名稱:遙控器紅外解碼數碼管顯示
  8.   內容:按配套遙控器會在數碼管上對應顯示鍵碼值,實測通過

  9.                   NEC 標準下的編碼表示

  10.                 其中:引導碼高電平約9000us 左右,低電平約4500us 左右;
  11.                 接收端:引導碼低電平約9000us 左右,高電平約4500us 左右;
  12.                 用戶碼16 位,數據碼16 位,共32位;
  13.         發送端:        數據0 是用“高電平約560us +低電平約560us”表示。
  14.                                 數據1 可用“高電平約560us+低電平約1680us”表示

  15.         接收端反轉:數據0 是用“低電平約560us +高電平約560us”表示。
  16.                                 數據1 可用“低電平約560us+高電平約1680us”表示

  17. ------------------------------------------------*/
  18. #include<reg52.h>            //包含頭文件,頭文件包含特殊功能寄存器的定義
  19. #include <stdio.h>
  20. #include "SMG.H"

  21. sbit IR=P3^2;                          //紅外接口
  22. sbit beep = P2^3;//蜂鳴器接口
  23. unsigned char irtime;        //紅外用全局變量   計數延時,識別比特位電平高低
  24. unsigned char IRcord[4]= {0x12,0x34,0x56,0x78};//存儲鍵碼


  25. void tim0_isr (void) interrupt 1   //STC89C52 11.0592M
  26. {
  27.   irtime++;  //用于計數2個下降沿之間的時間         每個溢出中斷時長256*1.085069us=277.77us
  28. }


  29. void EX0_ISR (void) interrupt 0  //外部中斷0服務函數
  30. {
  31.         static unsigned char  i,blag;             //接收紅外信號處理
  32.           if(blag == 1)
  33.         {
  34.                 if( irtime <3 || irtime >51)goto end;  //兩個下降沿延時過短(少于833us)或過長不解碼 濾除干擾波
  35.                 if(irtime > 28 && irtime < 55)//跳過引導碼 頭碼,9ms+4.5ms
  36.                 { i=0; goto end;}               
  37.                 IRcord[i/8] >>= 1;          //i/8每處理8位換下一個元素,總的處理4個字節共32位的數據
  38.                  if(irtime > 5 ) IRcord[i/8] |= 0x80;           //位0電平時長計數上限4,位1高電平計數上限8
  39.                 i++;                                                                           //這里取6為0/1 的識別分界
  40.                 if(i > 31){ i = 0; blag = 0; beep = 0; delay(30); beep = 1; }        //beep 鳴叫一聲        解碼成功                                                  
  41.         }
  42.         else  
  43.                 {blag = 1;}
  44.         end:irtime=0;                                                                          
  45. }


  46. //void UART_init()
  47. //{
  48. //        TMOD |= 0x20;          //T1工作模式2  8位自動重裝
  49. //        TH1 = 0xfd;
  50. //        TL1 = 0xfd;         //比特率9600   時鐘頻率11.0592MHZ
  51. //        TR1 = 1;                //啟動T1定時器
  52. //        SM0 = 0;
  53. //        SM1 = 1;                 //串口工作方式1 10位異步
  54. //        REN = 1;                //串口允許接收
  55. //        TI = 1;
  56. //}

  57. void TIM0init(void)//定時器0初始化
  58. {
  59.         TMOD|=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
  60.         TH0=0x00; //重載值
  61.         TL0=0x00; //初始化值
  62.         ET0=1;    //開中斷
  63.         TR0=1;   
  64. }
  65. void EX0init(void)
  66. {
  67. IT0 = 1;   //指定外部中斷0下降沿觸發,INT0 (P3.2)
  68. EX0 = 1;   //使能外部中斷
  69. EA = 1;    //開總中斷
  70. }


  71. void main(void)
  72. {
  73. //        UART_init();
  74.         EX0init(); //初始化外部中斷
  75.         TIM0init();//初始化定時器

  76.         while(1)//主循環
  77.         {
  78.                 SMGXSSZ(IRcord);
  79.         //        printf(" %bx %bx %bx %bx \n  ",IRcord[0],IRcord[1],IRcord[2],IRcord[3]) ;
  80.         }
  81. }
  82.   
  83.   
復制代碼

  1. #include "SMG.H"

  2. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  3.                         0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  4.                                                 //0-F的碼表
  5. uchar code wen_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //數碼管位數選擇碼表

  6. void delay(uint i)//延時毫秒程序
  7. {
  8.         uint m,n;
  9.         for(m=i;m>0;m--)
  10.                 for(n=114;n>0;n--);
  11. }

  12. //一位數碼管顯示,參數1:位,參數2:數
  13. void smgxs(uchar we,uchar shu)
  14. {
  15.        
  16.         P0=table[shu];
  17.         du=1;
  18.         du=0;

  19.         P0=wen_code[we];
  20.         we=1;
  21.         we=0;
  22.         delay(2);
  23. }
  24. //void smgxs8w(unsigned long shu)         //數碼管顯示8位大數
  25. //{
  26. //        unsigned long shu_temp=shu;
  27. //        uchar i=8;
  28. //    if(shu>0)
  29. //    {
  30. //          while(shu_temp)
  31. //          {       
  32. //                  i--;
  33. //                smgxs(i,shu_temp%10);         
  34. //                shu_temp=shu_temp/10;
  35. //          }
  36. //        } else {smgxs(7,0);}//歸零數碼管顯一個零
  37. //}

  38. void SMGXSSZ(uchar shuz[])         //數碼管顯示數組
  39. {
  40.         uchar i;
  41.           for(i = 0;i < 4;i++)
  42.           {       
  43.                 smgxs(i*2+1,shuz[i]&0x0f);                 //顯示十六進制數
  44.                 smgxs(i*2,shuz[i]>>4);
  45.           }                       
  46. }
復制代碼




評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 婷婷色综合 | 伊人超碰在线 | av中文天堂 | 日韩精品无码一区二区三区 | 欧美一级片久久 | 欧美一级黄色免费 | 久热精品在线 | 国产成人精品一区二区三区视频 | 亚洲精品v日韩精品 | 国产免费一区二区三区最新6 | 国产成人精品区一区二区不卡 | 97碰碰碰| 日韩不卡一区二区 | 国产日本精品视频 | 91毛片在线观看 | 亚洲精品久久久一区二区三区 | 亚洲一区国产精品 | 99久久婷婷国产综合精品首页 | 色噜噜狠狠色综合中国 | 蜜月va乱码一区二区三区 | 久热精品在线 | 国产91网站在线观看 | 亚洲视频免费观看 | 欧美一级二级视频 | 成年人在线观看 | 久热m3u8| 91一区二区三区 | 国产在线麻豆精品入口 | 婷婷久久一区 | 久久久久久国产精品免费免费狐狸 | 欧美成人精品一区二区男人看 | 亚洲一区二区三区观看 | 久夜精品 | 精品一区二区久久久久久久网站 | 亚洲影音 | 9191成人精品久久 | 亚洲va欧美va人人爽午夜 | 国产精品一二三区 | 亚洲永久入口 | 国产成人高清在线观看 | 免费av观看 |