標題: 單片機學習型紅外線遙控器程序原理圖與PCB文件 [打印本頁]

作者: 嘉禾沐雨    時間: 2022-1-16 20:59
標題: 單片機學習型紅外線遙控器程序原理圖與PCB文件
制作出來的遙控器實物圖如下:

Altium Designer畫的學習型紅外線遙控器原理圖和PCB圖如下:(51hei附件中可下載工程文件)


學習型紅外線遙控器  元器件   
   
AT89C52單片機及底座   
NPN 三極管      9013系列4個
發(fā)光二極管    3個
紅外線發(fā)射二極管    2個
電阻  560    3個
電阻  10K    5個
電阻  10    2個
電阻  4K7    2個
電容  1uf    2個,有正負極
電容  10uf    2個,有正負極
電容  20uf,3v    2個,有正負極
電容  30pf    3個,無正負極
12MHz晶振    1個
按鍵開關    3個
電視機三端一體紅外接收解調器    1個
大塊萬用板    1塊
導線若干   

單片機源程序如下:
  1. /*********************************************************************/
  2. //                         remote.c
  3. //                       學習型遙控器
  4. //                     使用keil c51
  5. /*********************************************************************/
  6. //使用AT89C52單片機,12MHZ晶振,
  7. //
  8. //#pragma src(E:\remote.asm)
  9. #include "reg51.h"
  10. #include "intrins.h"     //_nop_();延時函數用
  11. //
  12. #define uchar unsigned char
  13. #define uint unsigned int
  14. //
  15. sbit  studylamp=P1^6;        //學習狀態(tài)指示燈
  16. sbit  lamp=P1^7;             //發(fā)射指示燈
  17. sbit  studykey=P3^2;         //學習鍵(中斷口)
  18. sbit  remotein=P3^4;         //遙控信號輸入口
  19. sbit  remoteout=P3^5;         // 遙控輸出口
  20. sbit  txkey=P1^0   ;           //發(fā)射鍵
  21. //
  22. //
  23. uint i,j,m=255,n,k,s;
  24. uchar idata  remotedata[206];//存肪沖寬度數據用
  25. uint   head;           //存起始位用
  26. uint   remdata;
  27. //
  28. //
  29. ////
  30. /*********1毫秒延時程序**********/
  31. delay1ms(uint t)
  32. {
  33. for(i=0;i<t;i++)
  34.    for(j=0;j<120;j++)
  35.    ;
  36. }
  37. //
  38. //
  39. /***********初始化函數**********/
  40. clearmen()
  41. {
  42. studylamp=0;           //關學習燈
  43. lamp=0;                //關發(fā)射指示
  44. remoteout=0;           //關遙控輸出
  45. remotein=1;            //
  46. for(i=0;i<206;i++)     //清內存
  47. {remotedata[i]=0x00;}
  48. IE=0x00;
  49. IP=0x01;
  50. TMOD=0x22;             //8位自動重裝模式
  51. PCON=0X00;
  52. TH1=0xf3;              //40KHZ初值
  53. TL1=0xf3;
  54. IT0=1;
  55. EX0=1;                //外中斷允許
  56. EA=1;                 //開總中斷
  57. }
  58. //
  59. //
  60. /**********鍵功能函數************/
  61. keywork()
  62. {
  63. if(txkey==0)
  64. {
  65.     while(txkey==0);     //等待鍵釋放
  66.     ET1=1;TR1=1;         //發(fā)起始位
  67.     for(i=head;i>0;i--){;}
  68.         remoteout=0;ET1=0;TR1=0;
  69.         n=0;
  70.         while(1)
  71.         {
  72.       if(remotedata[n]==0x00){delay1ms(10);break;}//數據為0結束
  73.           for(i=remotedata[n];i>0;i--){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
  74.           lamp=~lamp;n++;//偶地址不發(fā)脈沖
  75. //
  76.           ET1=1;TR1=1;  //奇地址發(fā)調制脈沖
  77.       for(i=remotedata[n];i>0;i--){;}
  78.           remoteout=0;ET1=0;TR1=0;n++;
  79.         }
  80.   }
  81. }
  82. //
  83. //
  84. /***********主函數***************/
  85. main()
  86. {
  87. clearmen();          //初始化
  88. while(1)
  89. {
  90.   keywork();       //按鍵掃描
  91.   }
  92. }
  93. //
  94. //
  95. /*********40KHZ發(fā)生器***********/
  96. //定時中斷T1
  97. void time_intt1(void) interrupt 3
  98. {
  99. remoteout=~remoteout;
  100. }
  101. //
  102. //
  103. /***********學習函數 ***********/
  104. //外中斷0
  105. void intt0(void) interrupt 0
  106. {
  107. ET1=0;TR1=0;EX0=0;EA=0;
  108. head=0;studylamp=1;lamp=0;
  109. while(studykey==0);           //等待鍵釋放
  110. while(remotein==1);           //等待遙控碼輸入
  111. head=0;                       //讀入起始位
  112. ……………………

  113. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei附件下載:
PCB原理圖程序.7z (1.98 MB, 下載次數: 87)
視頻.7z (9.48 MB, 下載次數: 44)


作者: heicad    時間: 2022-1-21 07:04
好資料,51黑有你更精彩!!!
作者: 大米861    時間: 2023-6-9 10:14
好東西,準備手工做個試試,有問題回來請教樓主
作者: 大米861    時間: 2023-7-11 19:26
這個程序有錯吧?
在學習函數里,“while(studykey==0);    //等待鍵釋放” ,但在鍵掃描函數里,并沒有studykey按下的指令,也就是無“等待鍵釋放”狀態(tài)。而該函數,只有要該鍵被按下,才為0,然后等非0時,while(studykey==0)才會結束。而如果該鍵從來未被按下過,就一直非0了。也就是說,這條指令是沒任何意義的。
請教樓主,這樣分析是否正確?
作者: herui2128    時間: 2023-7-21 11:29
有成功了的沒
作者: lsh04    時間: 2023-7-21 17:16
大米861 發(fā)表于 2023-7-11 19:26
這個程序有錯吧?
在學習函數里,“while(studykey==0);    //等待鍵釋放” ,但在鍵掃描函數里,并沒有st ...

studykey=P3^2;         //學習鍵(中斷口)

他是中斷口




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1