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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

得用stc12c5a60s2片內pca模塊的捕獲解碼紅外遙控器

  [復制鏈接]
跳轉到指定樓層
樓主
得用stc12c5a60s2片內pca模塊的捕獲解碼紅外遙控器。

20170505191756.jpg (125.83 KB, 下載次數: 219)

20170505191756.jpg

20170505191830.jpg (55.6 KB, 下載次數: 215)

20170505191830.jpg

20170505 PCA_捕獲 紅外遙控.rar

25.21 KB, 下載次數: 150, 下載積分: 黑幣 -5

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:162136 發表于 2017-5-5 19:24 | 只看該作者
程序操作LCD1602都帶忙碌標記檢測,故不接LCD1602程序會一直停在LCD1602的初始化程序處,在此作提示。
回復

使用道具 舉報

板凳
ID:1 發表于 2017-5-6 01:01 | 只看該作者
樓主的源碼:
  1. /*STC12C5A60S2 PCA模塊捕獲模式接收紅外遙控和解碼在顯示在LCD1602上,
  2.   P1^3為捕獲輸入引腳,接紅外接收傳感器。普中(HC6800 V3.2)開發箱測試成功*/
  3. #include<stc12c5a60s2.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. sbit Lcd_RS=P2^6;                                        //LCD數據/命令選擇端(H/L)
  7. sbit Lcd_RW=P2^5;                                        //LCD讀/寫選擇端(H/L)//
  8. sbit Lcd_EN=P2^7;                                        //lcd使能端(lcd讀命令時=H,lcd寫命令時=高脈沖)
  9. sbit Lcd_PSB=P3^2;                                        //并口串口選擇
  10. sbit Lcd_BF=P0^7;                                        //LCD忙碌端

  11. code uchar TABLE[]="0123456789ABCDEF";                //LCD顯示用的數字
  12. uchar IR[33];                                                                //紅外接收捕獲的數據
  13. uchar IR_i=0;                                                                //紅外捕獲次數記錄
  14. bit F_IR=0;                                                                        //紅外捕獲起始標記位                                         

  15. void delay(uint xms)                                                //延時函數約(x)ms
  16. {
  17.         uint i;
  18.         for(;xms>0;xms--)
  19.                 for(i=920;i>0;i--);
  20. }
  21. void lcd_read_bf()                                                        //讀忙碌標志
  22. {
  23.         P0=0xff;
  24.         Lcd_RS=0;
  25.         Lcd_RW=1;
  26.         Lcd_EN=1;
  27.         while(Lcd_BF);
  28.         Lcd_EN=0;
  29. }
  30. void lcd_write_cmd(uchar cmd)                                //寫命令
  31. {
  32.         lcd_read_bf();
  33.         Lcd_RS=0;                                                                //選擇寫命令方式
  34.         Lcd_RW=0;
  35.         P0=cmd;                                                                        //將要寫入的命令數據送到數據總線上
  36.         Lcd_EN=1;                                                                //給使能端1高脈沖,先置1
  37.         Lcd_EN=0;                                                                //再置0,以完成高脈沖
  38. }
  39. void lcd_write_dat(uchar dat)                                //寫數據
  40. {
  41.         lcd_read_bf();
  42.         Lcd_RS=1;                                                                //選擇寫數據方式
  43.         Lcd_RW=0;
  44.         P0=dat;                                                                //將要寫入的命令數據送到數據總線上
  45.         Lcd_EN=1;                                                                //給使能端1高脈沖,先置1
  46.         Lcd_EN=0;                                                                //再置0,以完成高脈沖
  47. }
  48. void lcd_init()                                                                //LCD初始化
  49. {
  50.         Lcd_PSB=1;                                                //串口
  51.         P2&=0xff-0x80-0x20;                                //并口端口初始化
  52.         lcd_write_cmd(0x38);
  53.         lcd_write_cmd(0x06);
  54.         lcd_write_cmd(0x0c);
  55.         lcd_write_cmd(0x01);
  56. }
  57. void pca_init()                                                                //PCA模塊初始化 設置成捕獲模式
  58. {
  59.         CMOD=0x00;                                //PCA計數器模式寄存器
  60.         CCAPM0=0x11;                        //PCA比較/捕獲工作模式寄存器
  61.         CL=0x00;                                //PCA計數寄存器的低8位
  62.         CH=0x00;
  63. //        CCAP0L=0x00;                        //捕獲寄存器低8位,當PCA模塊用于PWM模式時,用來控制輸出的占空比
  64. //        CCAP0H=0x00;                        //當CH&L=CCAPnH&L時輸出高電平,故CCAPnH&L越大,輸出高電平時間越短
  65.         CCON=0x01;                                //PCA控制寄存器 CR=1
  66.         EA=1;
  67. }
  68. void init()                                                                        //系統初始化
  69. {
  70.         lcd_init();
  71.         pca_init();
  72. }
  73. void out_lcd()                                                                //LCD顯示
  74. {
  75.         uchar i,num1,num2,num3,num4,nums;
  76.         for(i=0;i<8;i++)
  77.         {
  78.                 num1>>=1;
  79.                 if(IR[i]>0x06) num1|=0x80;
  80.         }
  81.         for(i=8;i<16;i++)
  82.         {
  83.                 num2>>=1;
  84.                 if(IR[i]>0x06) num2|=0x80;
  85.         }
  86.         for(i=16;i<24;i++)
  87.         {
  88.                 num3>>=1;
  89.                 if(IR[i]>0x06) num3|=0x80;
  90.         }
  91.         for(i=24;i<32;i++)
  92.         {
  93.                 num4>>=1;
  94.                 if(IR[i]>0x06) num4|=0x80;
  95.         }
  96.         nums=IR[32];
  97.         lcd_write_cmd(0x80);
  98.         lcd_write_dat(TABLE[num1>>4]);
  99.         lcd_write_dat(TABLE[num1&0x0f]);
  100.         lcd_write_dat(' ');
  101.         lcd_write_dat(TABLE[num2>>4]);
  102.         lcd_write_dat(TABLE[num2&0x0f]);
  103.         lcd_write_dat(' ');
  104.         lcd_write_dat(TABLE[num3>>4]);
  105.         lcd_write_dat(TABLE[num3&0x0f]);
  106.         lcd_write_dat(' ');
  107.         lcd_write_dat(TABLE[num4>>4]);
  108.         lcd_write_dat(TABLE[num4&0x0f]);
  109.         lcd_write_dat(' ');
  110.         lcd_write_dat(TABLE[nums>>4]);
  111.         lcd_write_dat(TABLE[nums&0x0f]);
  112.         lcd_write_cmd(0xc0);
  113.         if(num1==0x00&&num2==0xff&&(num3|num4)==0xff)
  114.         {
  115.                 lcd_write_dat('y');
  116.                 lcd_write_dat('e');
  117.                 lcd_write_dat('s');
  118.                 lcd_write_dat(' ');
  119.                 lcd_write_dat('0');
  120.                 lcd_write_dat('x');
  121.                 lcd_write_dat(TABLE[num3>>4]);
  122.                 lcd_write_dat(TABLE[num3&0x0f]);
  123.         }
  124.         else
  125.         {
  126.                 lcd_write_dat('n');
  127.                 lcd_write_dat('o');
  128.                 lcd_write_dat(' ');
  129.                 lcd_write_dat(' ');
  130.                 lcd_write_dat(' ');
  131.                 lcd_write_dat(' ');
  132.                 lcd_write_dat(' ');
  133.                 lcd_write_dat(' ');
  134.                 lcd_write_dat(' ');
  135.                 lcd_write_dat(' ');
  136.         }
  137.         if(nums>2)
  138.         {
  139.                 lcd_write_dat(' ');
  140.                 lcd_write_dat('s');
  141.                 lcd_write_dat('s');
  142.         }
  143.         else
  144.         {
  145.                 lcd_write_dat(' ');
  146.                 lcd_write_dat(' ');
  147.                 lcd_write_dat(' ');
  148.         }
  149. }
  150. void main()                                                                        //主程序
  151. {
  152.         delay(100);
  153.         init();
  154.         delay(100);
  155.         while(1)
  156.         {
  157.                 out_lcd();
  158.                 delay(100);                                                        //刷新顯示的間隔時間
  159.         }
  160. }
  161. void pca_()interrupt 7                                                //PCA中斷入口
  162. {
  163.         if(CF)                                                                        //PCA計數器中斷復位
  164.         {
  165.                 CF=0;
  166.                 IR_i=0;
  167.         }
  168.         if(CCF0)                                                                //捕獲中斷處理捕獲的時間
  169.         {                  
  170.                 CR=1;
  171.                 CCF0=0;
  172.                 if(F_IR)
  173.                 {
  174.                         IR[IR_i++]=CCAP0H;                                        //保存捕獲的時間(這里只要高8位即可)
  175.                         if(IR_i>=32)                                                //捕獲到32個時間數據后復位等下一個起始信號                                               
  176.                         {
  177.                                 F_IR=0;
  178.                                 IR_i=0;
  179.                         }
  180.                 }
  181.                 else

  182. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
回復

使用道具 舉報

地板
ID:167337 發表于 2017-6-21 16:08 | 只看該作者
關注紅外線,正需要這些資料,謝謝樓主分享資源!
回復

使用道具 舉報

5#
ID:183763 發表于 2017-12-20 20:47 | 只看該作者
非常實用的制作,正需要這個
回復

使用道具 舉報

6#
ID:66287 發表于 2018-2-7 15:15 | 只看該作者
思路全新,值得學習
回復

使用道具 舉報

7#
ID:280994 發表于 2018-2-9 00:09 | 只看該作者
不錯的想法,又長見識了,我都是用一個外部中斷檢測下降沿,一個定時器計時兩次下降沿時間間隔的,這種方法節省資源,不過只能在有輸入捕獲的芯片上用
回復

使用道具 舉報

8#
ID:262047 發表于 2018-2-18 21:01 | 只看該作者
回復支持一下,是否可以直接對接收到的紅外載波進行學習,不通過接收頭解調,這樣不就可以實現任意載波頻率信號的學習了嗎
回復

使用道具 舉報

9#
ID:458859 發表于 2018-12-31 09:57 | 只看該作者
絕世好貼,頂一個
回復

使用道具 舉報

10#
ID:471147 發表于 2019-1-24 17:49 | 只看該作者
謝謝分享 剛好需要
回復

使用道具 舉報

11#
ID:475247 發表于 2019-2-10 16:57 | 只看該作者

有一點坑,不全!

評分

參與人數 1黑幣 +10 收起 理由
就你**** + 10

查看全部評分

回復

使用道具 舉報

12#
ID:258210 發表于 2019-8-21 17:26 | 只看該作者
謝謝樓主的資源,正在學習中
回復

使用道具 舉報

13#
ID:258210 發表于 2019-8-21 17:27 | 只看該作者

可以自己下載,值得學習參考
回復

使用道具 舉報

14#
ID:258210 發表于 2019-8-21 17:27 | 只看該作者
謝謝樓主分享的資源
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91国产视频在线观看 | 成人在线激情 | 手机av在线 | 黑色丝袜三级在线播放 | 夜操| 五月婷婷在线视频 | 欧美精品一区二区三区四区 在线 | 久久久性色精品国产免费观看 | 犬夜叉在线观看 | 精品一区二区在线观看 | www.日韩| 日本在线网站 | 久久成人一区二区三区 | 婷婷国产一区二区三区 | 久久成人国产精品 | 中文字幕一区二区三区日韩精品 | 国产一级一级毛片 | av先锋资源| 91免费观看 | 波多野结衣在线观看一区二区三区 | 伊人婷婷 | 操操网站| 亚洲欧美中文日韩在线v日本 | 午夜免费影视 | 精品国产免费人成在线观看 | 国产精品成人国产乱一区 | 网黄在线| 在线中文字幕av | 欧美一级二级三级 | 男女羞羞视频在线看 | 黄色av观看 | aaa国产大片| 四虎在线视频 | 国产高清在线精品一区二区三区 | 欧美成人免费在线视频 | 国产精品久久a | 久久久久久成人 | 久久免费视频2 | 亚洲乱码一区二区 | 尤物视频在线免费观看 | 黄色一级大片在线观看 |