找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3439|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

紅外遙控程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:68048 發(fā)表于 2015-7-15 15:17 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
希望對(duì)新手有用,里面有幾個(gè)疑問(wèn)請(qǐng)高手指點(diǎn)
  1. ///** STC15F104不需要外部晶振8管腳VCC/GND/P3.0-P3.5 **///
  2. ///** 四個(gè)元件實(shí)現(xiàn)NEC協(xié)議紅外遙控的發(fā)射(STC15F104、按鍵開(kāi)關(guān)、紅外發(fā)射管、限流電阻) 還有4個(gè)IO口可以利用 **///

  3. ///** 程序燒寫時(shí)選運(yùn)行頻率12M **///
  4. ///** P3.3接按鍵開(kāi)關(guān)與GND鏈接 **///
  5. ///** P3.5接紅外發(fā)射管負(fù)極,紅外發(fā)射管正極接+5,注意串接限流電阻 **///



  6. //本程序主體不是自己寫的,主體部分來(lái)源與admin 在2009-11-1 02:26:38 發(fā)布的紅外發(fā)射實(shí)驗(yàn)
  7. //***http://www.torrancerestoration.com/bbs/dpj-2820-1.html****////


  8. ///*** 有的地方不了解就按自己的意識(shí)修改了一下
  9. ///1、是不是應(yīng)該13um中斷一次,換一次電平??????????????
  10. ///2、SendIRdata函數(shù)中 endcount原始賦值看不懂
  11. ///上學(xué)時(shí)接觸幾天C語(yǔ)言(沒(méi)過(guò)級(jí),英語(yǔ)太差)、自學(xué)的51,


  12. ///請(qǐng)教高手指點(diǎn)
  13. ///請(qǐng)教高手指點(diǎn)


  14. #include <STC15F104E.h>
  15. static bit OP; //紅外發(fā)射管的亮滅
  16. static unsigned int count; //延時(shí)計(jì)數(shù)器
  17. static unsigned int endcount; //終止延時(shí)計(jì)數(shù)
  18. static unsigned char flag; //紅外發(fā)送標(biāo)志
  19. char iraddr1; //十六位地址的第一個(gè)字節(jié)
  20. char iraddr2; //十六位地址的第二個(gè)字節(jié)
  21. void SendIRdata(char p_irdata);
  22. void delay();


  23. void main(void)
  24. {
  25. ///****變量初始化******///
  26. count = 0; //延時(shí)計(jì)數(shù)器初始化
  27. flag = 0; //紅外發(fā)送標(biāo)志初始化
  28. OP = 1; //紅外發(fā)射管的亮滅初始化
  29. P35 = 1; //紅外發(fā)射io口初始化

  30. //***中斷初始設(shè)置***//
  31. EA = 1; //允許CPU中斷
  32. TMOD = 0x11; //設(shè)定時(shí)器0和1為16位模式1
  33. ET0 = 1; //定時(shí)器0中斷允許
  34. TH0 = 0xFF; //設(shè)定時(shí)值0為38K 也就是每隔26us中斷一次 TH0 = 0xFF; ????是不是應(yīng)該13um換一次電平
  35. TL0 = 0xf2; // TL0 = 0xE5;
  36. TR0 = 1; //開(kāi)始計(jì)數(shù)




  37. ///***地址初始化****///
  38. iraddr1=0x00; //第一字節(jié)
  39. iraddr2=0xfd; //第二字節(jié)


  40. /**進(jìn)入主程序循環(huán)**/
  41. do{
  42. delay();
  43. if(P33==0)
  44. {SendIRdata(0x16);}// 在此填入發(fā)射數(shù)據(jù)
  45. }while(1);
  46. }
  47. /*****定時(shí)器0中斷處理 ***/
  48. void timeint(void) interrupt 1
  49. {
  50. TH0=0xFF;
  51. TL0=0xf2; //設(shè)定時(shí)值為38K 也就是每隔26us中斷一次 ????是不是應(yīng)該13um換一次電平

  52. count++;

  53. if (flag==1)
  54. {
  55. OP=~OP;
  56. }
  57. else
  58. {
  59. OP = 1;
  60. }
  61. P35 = OP;
  62. }

  63. //**數(shù)據(jù)傳輸函數(shù)**//

  64. void SendIRdata(char p_irdata)
  65. {
  66. /*聲明變量*/
  67. int i;
  68. char irdata=p_irdata;
  69. /*發(fā)送9ms的起始碼*/
  70. endcount=692; /// endcount=223 223*26=5798 ?????????????????
  71. flag=1;
  72. count=0;
  73. do{}while(count<endcount);
  74. /*發(fā)送4.5ms的結(jié)果碼 */
  75. endcount=346;
  76. flag=0;
  77. count=0;
  78. do{}while(count<endcount);
  79. /******發(fā)送十六位地址的前八位********/

  80. irdata=iraddr1;
  81. for(i=0;i<8;i++)
  82. {
  83. endcount=43; //先發(fā)送0.56ms的38KHZ紅外波(即編碼中0.56ms的低電平)
  84. flag=1;
  85. count=0;
  86. do{}while(count<endcount); //停止發(fā)送紅外信號(hào)(即編碼中的高電平)
  87. if(irdata-(irdata/2)*2) //判斷二進(jìn)制數(shù)個(gè)位為1還是0
  88. {
  89. endcount=130; //1為寬的高電平
  90. }
  91. else
  92. {
  93. endcount=43; //0為窄的高電平
  94. }
  95. flag=0;
  96. count=0;
  97. do{}while(count<endcount);
  98. irdata=irdata>>1;
  99. }
  100. /**********發(fā)送十六位地址的后八位*********/
  101. irdata=iraddr2;
  102. for(i=0;i<8;i++)
  103. {
  104. endcount=43;
  105. flag=1;
  106. count=0;
  107. do{}while(count<endcount);
  108. if(irdata-(irdata/2)*2)
  109. {
  110. endcount=130;
  111. }
  112. else
  113. {
  114. endcount=43;
  115. }
  116. flag=0;
  117. count=0;
  118. do{}while(count<endcount);
  119. irdata=irdata>>1;
  120. }
  121. ////*****發(fā)送八位數(shù)據(jù)*****/////
  122. irdata=p_irdata;
  123. for(i=0;i<8;i++)
  124. {
  125. endcount=43;
  126. flag=1;
  127. count=0;
  128. do{}while(count<endcount);
  129. if(irdata-(irdata/2)*2)
  130. {
  131. endcount=130;
  132. }
  133. else
  134. {
  135. endcount=43;
  136. }
  137. flag=0;
  138. count=0;
  139. do{}while(count<endcount);
  140. irdata=irdata>>1;
  141. }
  142. /******發(fā)送八位數(shù)據(jù)的反碼******/
  143. irdata=~p_irdata;
  144. for(i=0;i<8;i++)
  145. {
  146. endcount=43;
  147. flag=1;
  148. count=0;
  149. do{}while(count<endcount);
  150. if(irdata-(irdata/2)*2)
  151. {
  152. endcount=130;
  153. }
  154. else
  155. {
  156. endcount=43;
  157. }
  158. flag=0;
  159. count=0;
  160. do{}while(count<endcount);
  161. irdata=irdata>>1;
  162. }

  163. endcount=43;
  164. flag=1;
  165. count=0;
  166. do{}while(count<endcount);
  167. flag=0;

  168. }
  169. ///****延時(shí)函數(shù)***////
  170. void delay()
  171. {
  172. int i,j;
  173. for(i=0;i<400;i++)
  174. {
  175. for(j=0;j<100;j++)
  176. {
  177. }
  178. }
  179. }
復(fù)制代碼

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的積分獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:51142 發(fā)表于 2015-11-4 11:31 | 只看該作者
學(xué)習(xí)了,頂。。。。
回復(fù)

使用道具 舉報(bào)

板凳
ID:130591 發(fā)表于 2016-7-19 13:03 | 只看該作者
正在學(xué)習(xí),謝謝了!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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