找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3506|回復(fù): 0
收起左側(cè)

紅外接收51單片機設(shè)計要求按配套遙控器上的 1-9 按鍵會在數(shù)碼管上對應(yīng)顯示,注意其....

[復(fù)制鏈接]
ID:218179 發(fā)表于 2017-7-8 20:24 | 顯示全部樓層 |閱讀模式
紅外接收51單片機設(shè)計要求按配套遙控器上的 1-9 按鍵會在數(shù)碼管上對應(yīng)顯示,注意其....
下載:
紅外接收.7z (802 Bytes, 下載次數(shù): 12)


  1.         #include<reg52.h>
  2. sbit IR=P3^3;
  3. #define DataPort P0
  4. sbit DI1=P1^0;
  5. sbit DI2=P1^1;
  6. sbit DI3=P1^2;
  7. sbit DI4=P1^3;
  8. unsigned char code dofly_DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};
  9. unsigned char irtime;
  10. bit irpro_ok,irok;
  11. unsigned char IRcord[4];
  12. unsigned char irdata[33];
  13. void Ir_work(void);
  14. void Ircordpro(void);
  15. void tim0_isr (void) interrupt 1 using 1
  16. {
  17. irtime++;
  18. }
  19. void EX1_ISR (void) interrupt 2
  20. {
  21. static unsigned char i;
  22. static bit startflag;
  23. if(startflag)
  24. {
  25. if(irtime<63&&irtime>=33)
  26. i=0;
  27. irdata[i]=irtime;
  28. irtime=0;
  29. i++;
  30. if(i==33)
  31. {
  32. irok=1;
  33. i=0;
  34. }
  35. }
  36. else
  37. {
  38. irtime=0;
  39. startflag=1;
  40. }
  41. }
  42. void TIM0init(void)
  43. {
  44. TMOD=0x02;
  45. TH0=0x00;
  46. TL0=0x00;
  47. ET0=1;
  48. TR0=1;
  49. }
  50. void EX0init(void)
  51. {
  52. IT1 = 1;
  53. EX1 = 1;
  54. EA = 1;
  55. }
  56. void Ir_work(void)
  57. {
  58. switch(IRcord[2])
  59. {
  60. case 0x0c:DataPort=dofly_DuanMa[1];break;
  61. case 0x18:DataPort=dofly_DuanMa[2];break;
  62. case 0x5e:DataPort=dofly_DuanMa[3];break;
  63. case 0x08:DataPort=dofly_DuanMa[4];break;
  64. case 0x1c:DataPort=dofly_DuanMa[5];break;
  65. case 0x5a:DataPort=dofly_DuanMa[6];break;
  66. case 0x42:DataPort=dofly_DuanMa[7];break;
  67. case 0x52:DataPort=dofly_DuanMa[8];break;
  68. case 0x4a:DataPort=dofly_DuanMa[9];break;
  69. default:break;
  70. }
  71. irpro_ok=0;
  72. }
  73. void Ircordpro(void)
  74. {
  75. unsigned char i, j, k;
  76. unsigned char cord,value;
  77. k=1;
  78. for(i=0;i<4;i++)
  79. {
  80. for(j=1;j<=8;j++)
  81. {
  82. cord=irdata[k];
  83. if(cord>7)
  84. value|=0x80;
  85. if(j<8)
  86. {
  87. value>>=1;
  88. }
  89. k++;
  90. }
  91. IRcord[i]=value;
  92. value=0;
  93. }
  94. irpro_ok=1;
  95. }
  96. void main(void)
  97. {
  98. EX0init();
  99. TIM0init();
  100. DataPort=0xff;
  101. DI1=0;
  102. DI2=0;
  103. DI3=0;
  104. DI4=0;
  105. while(1)
  106. {
  107. if(irok)
  108. {
  109. Ircordpro();
  110. irok=0;
  111. }
  112. if(irpro_ok)
  113. {
  114. Ir_work();
  115. }
  116. }
  117. }
復(fù)制代碼


回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表