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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

紅外遙控程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:68048 發表于 2015-7-15 15:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
希望對新手有用,里面有幾個疑問請高手指點
  1. ///** STC15F104不需要外部晶振8管腳VCC/GND/P3.0-P3.5 **///
  2. ///** 四個元件實現NEC協議紅外遙控的發射(STC15F104、按鍵開關、紅外發射管、限流電阻) 還有4個IO口可以利用 **///

  3. ///** 程序燒寫時選運行頻率12M **///
  4. ///** P3.3接按鍵開關與GND鏈接 **///
  5. ///** P3.5接紅外發射管負極,紅外發射管正極接+5,注意串接限流電阻 **///



  6. //本程序主體不是自己寫的,主體部分來源與admin 在2009-11-1 02:26:38 發布的紅外發射實驗
  7. //***http://www.raoushi.com/bbs/dpj-2820-1.html****////


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


  12. ///請教高手指點
  13. ///請教高手指點


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


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

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




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


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

  52. count++;

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

  63. //**數據傳輸函數**//

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

  80. irdata=iraddr1;
  81. for(i=0;i<8;i++)
  82. {
  83. endcount=43; //先發送0.56ms的38KHZ紅外波(即編碼中0.56ms的低電平)
  84. flag=1;
  85. count=0;
  86. do{}while(count<endcount); //停止發送紅外信號(即編碼中的高電平)
  87. if(irdata-(irdata/2)*2) //判斷二進制數個位為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. /**********發送十六位地址的后八位*********/
  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. ////*****發送八位數據*****/////
  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. /******發送八位數據的反碼******/
  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. ///****延時函數***////
  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. }
復制代碼

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:51142 發表于 2015-11-4 11:31 | 只看該作者
學習了,頂。。。。
回復

使用道具 舉報

板凳
ID:130591 發表于 2016-7-19 13:03 | 只看該作者
正在學習,謝謝了!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表