欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機紅外遙控解碼程序 用1602液晶屏顯示

[復(fù)制鏈接]
ID:115316 發(fā)表于 2016-4-19 20:48 | 顯示全部樓層 |閱讀模式
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit lcden = P2^7;
  6. sbit lcdrs = P2^6;
  7. sbit lcdwr = P2^5;
  8. sbit IR = P3^2;
  9. uchar IRCOM[6];//數(shù)組,用于存儲紅外編碼
  10. uchar code table1[] = "remote control";
  11. uchar code table2[] = "CODE:";
  12. void delayms(uchar x)// 延時x*0.14ms
  13. {
  14. uchar i;
  15. while(x--)
  16. for(i=0;i<13;i++){}
  17. }
  18. void delay(uchar x) //延時xms
  19. {
  20. uchar i,j;
  21. for(i=x;i>0;i--)
  22. for(j=110;j>0;j--);
  23. }
  24. /****************************LCD部分***********************************************/
  25. void write_com(uchar com)
  26. {
  27. lcden = 0;
  28. lcdrs = 0;
  29. lcdwr = 0;
  30. P0 = com;
  31. delay(5);
  32. lcden = 1;
  33. delay(5);
  34. lcden = 0; //別忘了lcden拉低
  35. }
  36. void write_date(uchar date)
  37. {
  38. lcden = 0;
  39. lcdrs = 1;
  40. lcdwr = 0;
  41. P0 = date;
  42. delay(5);
  43. lcden = 1;
  44. delay(5);
  45. lcden = 0;
  46. }
  47. void lcd_init(void)
  48. {
  49. lcden = 0;
  50. lcdrs = 0;
  51. lcdwr = 0;
  52. delay(5);
  53. write_com(0x38);
  54. write_com(0x0c);
  55. write_com(0x06);
  56. write_com(0x01);
  57. }
  58. /*****************main()************************/
  59. void main(void)
  60. {
  61. uchar count=0;
  62. IR = 1;
  63. lcd_init();
  64. write_com(0x80);
  65. while(table1[count]!='\0')
  66. {
  67. write_date(table1[count]);
  68. count++;
  69. delay(5);
  70. }
  71. count = 0;
  72. write_com(0x80+0x40);
  73. while(table2[count]!='\0')
  74. {
  75. write_date(table2[count]);
  76. count++;
  77. delay(5);
  78. }
  79. IE = 0x81; //開中斷
  80. TCON = 0x01;//脈沖負(fù)邊沿觸發(fā)
  81. while(1);
  82. }
  83. /*********************紅外中斷**************************/
  84. void IR_time() interrupt 0
  85. {
  86. uchar i,j,TimeNum=0;//TimeNum用來計IR高電平次數(shù) 從而判斷是0還是1
  87. EX0 = 0; //關(guān)閉中斷
  88. delayms(5);
  89. if(1 == IR)
  90. {
  91. EX0 = 1;
  92. return;
  93. }
  94. while(!IR) //跳過9ms前導(dǎo)低電平
  95. delayms(1);
  96. for(i=0;i<4;i++)
  97. {
  98. for(j=0;j<8;j++)
  99. {
  100. while(IR) //跳過4.5ms的前導(dǎo)高電平
  101. delayms(1);
  102. while(!IR) //跳過0.56ms的低電平
  103. delayms(1);
  104. while(IR)
  105. {
  106. TimeNum++; //計時高電平時間從而判斷讀取的是0還是1
  107. delayms(1);
  108. }
  109. if(TimeNum>=30)//按鍵按下時間過長 跳過
  110. {
  111. EX0 = 1;
  112. return;
  113. }
  114. IRCOM[i] = IRCOM[i]>>1;
  115. if(TimeNum >= 8) //8*0.14ms 這時讀取的是1;
  116. {
  117. IRCOM[i] = IRCOM[i]|0x80;
  118. }
  119. TimeNum = 0;
  120. }
  121. }
  122. if(IRCOM[2]!=~IRCOM[3])//判斷八位數(shù)據(jù)和八位數(shù)據(jù)反碼是否相等
  123. {
  124. EX0 = 1;
  125. return;
  126. }
  127. IRCOM[4] = IRCOM[2]&0x0f;//取低四位
  128. IRCOM[5] = IRCOM[2]>>4; //IRCOM[5]取IRCOM[2]高四位
  129. if(IRCOM[4] > 9) //轉(zhuǎn)換成字符
  130. {
  131. IRCOM[4] = IRCOM[4] + 0x37;
  132. }
  133. else
  134. IRCOM[4] = IRCOM[4] + 0x30;
  135. if(IRCOM[5] > 9)
  136. {
  137. IRCOM[5] = IRCOM[5] + 0x37;
  138. }
  139. else
  140. IRCOM[5] = IRCOM[5] + 0x30;
  141. delay(5);
  142. write_com(0x80 + 0x40 + 5);
  143. write_date(IRCOM[5]);
  144. write_date(IRCOM[4]);
  145. EX0 = 1; //重新開啟外部中斷
  146. }
復(fù)制代碼

評分

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

查看全部評分

回復(fù)

使用道具 舉報

ID:112693 發(fā)表于 2016-4-21 23:33 | 顯示全部樓層
給個線路圖唄
回復(fù)

使用道具 舉報

ID:149319 發(fā)表于 2016-11-23 21:48 | 顯示全部樓層
接收不i到ir的數(shù)據(jù)
回復(fù)

使用道具 舉報

ID:160317 發(fā)表于 2017-4-17 15:22 | 顯示全部樓層
能給個protus的仿真圖嗎
回復(fù)

使用道具 舉報

ID:353588 發(fā)表于 2018-6-20 09:59 | 顯示全部樓層
超級感謝樓主的
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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