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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用單片機串口2去測試紅外hx1838的按鍵值,但是為什么在電腦上不顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:923440 發表于 2021-8-23 21:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
求大佬幫忙看看這個程序哪里出現了問題,主要是紅外按鍵再數碼管上不顯示,所以想先再串口上調通。求解答
單片機源程序如下:
  1. #include <reg51.h>
  2. #include<intrins.h>

  3. #define uchar unsigned char
  4. #define uint  unsigned int


  5. #define FOSC 11059200UL
  6. #define BRT (65536 - FOSC / 9600 / 4)



  7. sfr INTCLkO = 0x8f;
  8. //#define EX2 0x10;


  9. sfr AUXR = 0x8e;
  10. sfr T2H = 0xd6;
  11. sfr T2L = 0xd7;
  12. sfr S2CON = 0x9a;
  13. sfr S2BUF = 0x9b;

  14. sfr IE2 = 0xaf;

  15. sfr P0M1 = 0x93;
  16. sfr P0M0 = 0x94;
  17. sfr P1M1 = 0x91;
  18. sfr P1M0 = 0x92;
  19. sfr P2M1 = 0x95;
  20. sfr P2M0 = 0x96;
  21. sfr P3M1 = 0xb1;
  22. sfr P3M0 = 0xb2;
  23. sfr P4M1 = 0xb3;
  24. sfr P4M0 = 0xb4;
  25. sfr P5M1 = 0xc9;
  26. sfr P5M0 = 0xca;



  27. bit busy;
  28. char wptr;
  29. char rptr;
  30. uint buffer[8];
  31. uint recv_flag=0;
  32. uint machine_step=0;
  33. uint recv_cnt=0;
  34. uint a,b,c;
  35. int s=0;
  36. uint temp;

  37. void Delay500ms();
  38. void delay_140us( void );
  39.                                                                                                                                        

  40. void Uart2Isr() interrupt 8
  41. {
  42. if (S2CON & 0x02)
  43. {
  44. S2CON &= ~0x02;
  45. busy = 0;
  46. }
  47. if (S2CON & 0x01)
  48. {
  49. S2CON &= ~0x01;
  50. buffer[wptr++] = S2BUF;
  51. wptr &= 0x0f;
  52. }
  53. }

  54. void Uart2Init()
  55. {
  56. S2CON = 0x10;
  57. T2L = BRT;
  58. T2H = BRT >> 8;
  59. AUXR = 0x14;
  60. wptr = 0x00;
  61. rptr = 0x00;
  62. busy = 0;
  63. }
  64. void Uart2Send(char dat)
  65. {
  66. while (busy);
  67. busy = 1;
  68. S2BUF = dat;
  69. }

  70. void Delay10us()                //@12.000MHz
  71. {
  72.         unsigned char i;

  73.         _nop_();
  74.         i = 2;
  75.         while (--i);
  76. }


  77. void Delay600us()                //@12.000MHz
  78. {
  79.         unsigned char i, j;

  80.         i = 2;
  81.         j = 39;
  82.         do
  83.         {
  84.                 while (--j);
  85.         } while (--i);
  86. }

  87. uchar jz;
  88. sbit IRIN =P3^6;//紅外接收頭
  89. uchar ircode[4];
  90. uchar ir_flag = 0;


  91. void ir_init(void)
  92.         {
  93.                
  94.                 IRIN = 1;//初始化紅外接收頭為1
  95.                
  96.                 INTCLkO = 0x10;//開啟INT2為下降沿觸發

  97.                 EA = 1;

  98.         }
  99.         
  100.         
  101.         


  102. void EX2_ISR() interrupt 10//紅外中斷函數
  103.         {
  104.                 unsigned char i;
  105.                 unsigned char j;
  106.                 unsigned int cnt;
  107.                 unsigned char temp = 0;
  108.                
  109.         if(IRIN == 0)
  110.         {
  111.         //判斷9ms的高電平
  112.         cnt = 0;
  113.         while(IRIN == 0)
  114.         {
  115.                 cnt++;
  116.                 Delay10us();
  117.                 if(cnt > 1000)//超時判斷
  118.                 return ;
  119.         }
  120.         
  121.         cnt = 0;
  122.         //4.5ms
  123.         while(IRIN)
  124.         {
  125.                 cnt++;
  126.                 Delay10us();
  127.                 if(cnt > 500)//超時等待
  128.                 return ;
  129.         }
  130.         //開始接受紅外信號
  131.         for( i = 0; i<4; i++)
  132.         {

  133.                 for( j = 0; j<8;j++)
  134.                 {
  135.                         cnt = 0;
  136.                         while(IRIN == 0)//560us
  137.                         {
  138.                                 cnt++;
  139.                                 Delay10us();
  140.                                 if(cnt > 60)
  141.                                 return ;
  142.                         }
  143.                         
  144.                         Delay600us();//延時600us判斷是高電平還是電平
  145.                         if(IRIN)
  146.                         {
  147.                                         temp |= 1<<j;//數據是從低位開始傳輸
  148.                                         cnt = 0;
  149.                                 while(IRIN)
  150.                                 {
  151.                                         cnt++;
  152.                                         Delay10us();
  153.                                         if(cnt > 110)
  154.                                         return ;
  155.                                 }
  156.                         }        

  157.                 }
  158.                         ircode[i] = temp;
  159.                         temp = 0;
  160.         }
  161.                 Delay600us();
  162.                 if(ircode[2] != ~ircode[3])//判斷命令碼是不是接受正確
  163.                         return;        
  164.                
  165.         }
  166. //            switch(        ircode[2])   
  167. //        {
  168. //            case 0x19:jz=0;break;
  169. //                                                case 0x45:jz=1;break;
  170. //                                                case 0x46:jz=2;break;
  171. //                                                case 0x47:jz=3;break;
  172. //                                                case 0x44:jz=4;break;
  173. //                                                case 0x40:jz=5;break;
  174. //                                                case 0x43:jz=6;break;
  175. //                                                case 0x07:jz=7;break;
  176. //                                                case 0x15:jz=8;break;
  177. //                                                case 0xD9:jz=9;break;
  178. //                                                default:break;
  179. //        }

  180.       Uart2Send(ircode[2]); //把命令碼通過串口發送出去
  181.         }

  182.         

  183. void main()
  184. {
  185.         

  186.         P0M0 = 0x00;
  187. P0M1 = 0x00;
  188. P1M0 = 0x00;
  189. P1M1 = 0x00;
  190. P2M0 = 0x00;
  191. P2M1 = 0x00;
  192. P3M0 = 0x00;
  193. P3M1 = 0x00;
  194. P4M0 = 0x00;
  195. P4M1 = 0x00;
  196. P5M0 = 0x00;
  197. P5M1 = 0x00;

  198.   ir_init();
  199.         
  200.         
  201.         
  202.         
  203.         Uart2Init();
  204. IE2 = 0x01;
  205. EA = 1;

  206.         
  207.         
  208.     while(1)
  209.                 {
  210.                         
  211.                
  212. //                        if(XXX>10)
  213. //                        {
  214. //                                XXX = 0;
  215. //                                TM1637_writeCammand(0x44);
  216. //                TM1637_writeData(0xc1, SEGData[0]);
  217. //          TM1637_writeCammand(0x8a);
  218.                         
  219.                         
  220. //                        if (rptr != wptr)
  221. // {
  222. // Uart2Send(buffer[rptr++]);
  223. // rptr &= 0x0f;
  224. // }
  225.                         
  226.                         
  227.                         //        xs(jz);

  228.    }
  229.                
  230.         
  231.    }
復制代碼


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

使用道具 舉報

沙發
ID:923440 發表于 2021-8-23 21:21 | 只看該作者
這個紅外是用的nec協議的
回復

使用道具 舉報

板凳
ID:752974 發表于 2021-8-24 08:17 | 只看該作者
用十六進制數顯示看看,因為有很多ASCII是不可顯示的。
回復

使用道具 舉報

地板
ID:923440 發表于 2021-8-24 09:25 | 只看該作者
munuc_w 發表于 2021-8-24 08:17
用十六進制數顯示看看,因為有很多ASCII是不可顯示的。

你好,怎么把接收的數據用16進制表示
回復

使用道具 舉報

5#
ID:161164 發表于 2021-8-24 14:41 | 只看該作者
51c_yang 發表于 2021-8-24 09:25
你好,怎么把接收的數據用16進制表示

你用什么串口軟件?
回復

使用道具 舉報

6#
ID:923440 發表于 2021-8-24 20:35 | 只看該作者
lkc8210 發表于 2021-8-24 14:41
你用什么串口軟件?

STC-ISP呀
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品欧美一区二区在线观看视频 | 亚洲色图婷婷 | 日韩欧美在线观看 | 欧美日韩高清在线观看 | 免费一区在线观看 | 免费看大片bbbb欧美 | 国产精品99久久久久久宅男 | 亚洲一区二区三区在线视频 | 欧美在线a | 亚洲精品9999 | 精品二区| 亚洲精品视频免费 | 成人免费视频观看视频 | 婷婷精品 | 日韩一二三区 | 一级片成人 | 日韩av一区在线观看 | 精品久久久久久久久久久久久久久久久 | 日韩精品一区二区三区在线观看 | 日本在线观看视频 | 久久一二| 91免费在线视频 | 国产精品视频一二三区 | 欧美午夜在线 | www久久久| 久久大| 天天av天天好逼 | 亚洲狠狠爱| xxx.在线观看 | 激情网站在线观看 | 成人做爰www免费看视频网站 | 免费欧美 | 亚洲欧美成人影院 | 久久久久久综合 | 精品国产青草久久久久福利 | 黑人中文字幕一区二区三区 | 不卡的av在线 | 古装人性做爰av网站 | 欧美美女一区二区 | 99亚洲精品| 羞视频在线观看 |