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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10364|回復: 1
收起左側

PIC16F877A單片機接收BA5104紅外線遙控解碼程序

[復制鏈接]
ID:75926 發表于 2015-4-2 23:18 | 顯示全部樓層 |閱讀模式
  1. //熟悉使用單片機進行紅外線遙控解碼
  2. //1、首先根據BA5104遙控IC的編碼形式進行解碼
  3. //2、把解碼出來的按鍵用LED指示
  4. //**************************************************

  5. //**************************************************
  6. //硬件設置:
  7. //1、SW1開關2閉合,其他斷開
  8. //2、SW2開關1閉合,其他斷開
  9. //3、SW4開關全部閉合
  10. //**************************************************

  11. //**************************************************
  12. //*****************定義頭文件**********************
  13. //**************************************************
  14. #include<PIC.h>
  15. #include"delay.h"

  16. //**************************************************
  17. //******************定義配置位*********************
  18. //**************************************************
  19. __CONFIG(0x3545);      
  20. //FLASH代碼不保護,RB6和RB7為調試模式,FLASH不寫保護,數據代碼不保護
  21. //RB3為數字IO口,低電壓復位使能,上電延時開,看門狗開,4M晶體XT振蕩器

  22. //**************************************************
  23. //******************定義常量***********************
  24. //**************************************************
  25. #define uchar unsigned char
  26. #define uint  unsigned int
  27. #define IR  RE2

  28. //**************************************************
  29. //******************定義變量***********************
  30. //**************************************************
  31. uint rdata1,data;

  32. //***********************************************
  33. //函 數 名:port_init();
  34. //入口參數:無
  35. //出口參數:無
  36. //函數作用:端口初始化
  37. //說    明:
  38. //***********************************************
  39. void port_init(void)
  40. {
  41.   PORTA=0X00;    //設置RA口輸出低電平
  42.   PORTD=0X00;    //設置RD口輸出低電平
  43.   PORTE=0X00;    //設置RE口輸出低電平
  44.   ADCON1=0X07;   //設置RA口,RE口為普通IO口
  45.   TRISA=0X00;    //設置RA口為輸出口
  46.   TRISD=0X00;    //設置RD口為輸出口
  47.   TRISE=0X04;    //設置RE2口為輸入口,其他為輸出口
  48.   OPTION=0X8F;   //分頻給WDT,分頻比為128
  49. }

  50. //***********************************************
  51. //函 數 名:scan();
  52. //入口參數:無
  53. //出口參數:無
  54. //函數作用:遙控接收掃描函數
  55. //說    明:
  56. //***********************************************
  57. void scan(void)
  58. {
  59.   uchar i,count=0;
  60.   rdata1=0;                  //變量清零
  61.   IR=0;                      //先輸入低電平
  62.   if(IR)                     //判斷是否有遙控信號,高電平為有遙控信號
  63.   {
  64.     while(IR){CLRWDT();;}    //等待32ms延時
  65.     for(i=0;i<12;i++)        //依次接收12位數據
  66.     {
  67.       while(!IR)             //等待低電平信號結束
  68.       {
  69.         DelayUs(20);         //延時50us, 20*2.5us=50us
  70.         count++;
  71.         if(count>25){break;} //延時大于1.25ms,跳出
  72.       }
  73.       if(count<7){return;}   //延時小于300us,為干擾跳出
  74.       else if((count>6)&&(count<11)){rdata1|=0x00;} //延時在350-500us,判定為0
  75.       else if(count>20){rdata1|=0x01;} //延時在1ms,判定為1
  76.       rdata1=rdata1<<1;                //移位準備接收下一位數據
  77.       count=0;                         //變量清零
  78.       while(IR){CLRWDT();}             //等待高電平結束,接收下一位
  79.     }
  80.   }
  81. }

  82. //***********************************************
  83. //函 數 名:delayms(uchar time);
  84. //入口參數:time
  85. //出口參數:無
  86. //函數作用:延時
  87. //說    明:
  88. //***********************************************
  89. void delayms(uchar time)
  90. {
  91.   uint i;
  92.   while(time--)
  93.   {
  94.     for(i=93;i>0;i--){;}
  95.   }
  96. }

  97. //***********************************************
  98. //函 數 名:buzzer();
  99. //入口參數:無
  100. //出口參數:無
  101. //函數作用:產生警報聲
  102. //說    明:
  103. //***********************************************
  104. void buzzer(void)
  105. {
  106.   RA5=1;         //RE1輸出高電平
  107.   delayms(200);
  108.   RA5=0;         //RE1輸出低電平
  109. }

  110. //***********************************************
  111. //函 數 名:display();
  112. //入口參數:無
  113. //出口參數:無
  114. //函數作用:顯示函數
  115. //說    明:
  116. //***********************************************
  117. void display(void)
  118. {
  119.   switch(data)        
  120.   {
  121.     case 0x0D81:RD0=!RD0;buzzer();break;
  122.     case 0x0D82:RD1=!RD1;buzzer();break;
  123.     case 0x0D84:RD2=!RD2;buzzer();break;
  124.     case 0x0D88:RD3=!RD3;buzzer();break;
  125.     case 0x0D90:RD4=!RD4;buzzer();break;
  126.     case 0x0DA0:RD5=!RD5;buzzer();break;
  127.     case 0x0DC3:RD6=!RD6;buzzer();break;
  128.     case 0x0DC6:RD7=!RD7;buzzer();
  129.   }
  130. }

  131. //***********************************************
  132. //函 數 名:main();
  133. //入口參數:無
  134. //出口參數:無
  135. //函數作用:MAIN函數
  136. //說    明:
  137. //***********************************************
  138. void main(void)
  139. {
  140.   port_init();            //調用端口初始化函數
  141.   while(1)
  142.   {
  143.     scan();               //調用遙控掃描函數
  144.     if(data!=rdata1)
  145.     {
  146.       data=rdata1&0x0fff; //保留接收數據的低12位
  147.       display();          //調用遙控按鍵顯示函數
  148.     }
  149.   }
  150. }
復制代碼


回復

使用道具 舉報

ID:636697 發表于 2019-11-25 10:52 | 顯示全部樓層
我正在學習
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 人人操日日干 | 99精品亚洲国产精品久久不卡 | 日韩一区和二区 | 美女黄18岁以下禁止观看 | 精品欧美乱码久久久久久 | 精品成人 | 青娱乐国产 | 国产成人精品午夜视频免费 | a看片 | 免费观看一级毛片 | 99精品免费久久久久久日本 | 国产一区在线免费 | 免费超碰| 欧美激情精品久久久久久免费 | 色婷婷婷婷色 | 欧美成人a∨高清免费观看 91伊人 | 91在线精品秘密一区二区 | 99精品国产一区二区三区 | 一区二区三区在线观看视频 | 国产精品毛片久久久久久 | 夜夜爽夜夜操 | 亚州影院 | 久久久亚洲一区 | 麻豆av在线免费观看 | 黄色毛片在线观看 | 国产精品夜夜春夜夜爽久久电影 | www.yw193.com | 欧美理论 | 欧美性猛交一区二区三区精品 | 午夜影院免费体验区 | 久久极品 | 在线免费观看黄视频 | www.日日操 | 亚洲视频欧美视频 | 亚洲精品二区 | 草草视频在线免费观看 | 久久久精品视频免费看 | www.成人在线视频 | 最新国产视频 | 亚洲精品乱码久久久久久久久 | 奇米影视在线 |