找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2820|回复: 5
打印 上一主题 下一主题
收起左侧

单片机学习型红外线遥控器程序原理图与PCB文件

  [复制链接]
跳转到指定楼层
楼主
制作出来的遥控器实物图如下:

Altium Designer画的学习型红外线遥控器原理图和PCB图如下:(51hei附件中可下载工程文件)


学习型红外线遥控器  元器件   
   
AT89C52单片机及底座   
NPN 三极管      9013系列4个
发光二极管    3个
红外线发射二极管    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;        //学习状态指示灯
  16. sbit  lamp=P1^7;             //发射指示灯
  17. sbit  studykey=P3^2;         //学习键(中断口)
  18. sbit  remotein=P3^4;         //遥控信号输入口
  19. sbit  remoteout=P3^5;         // 遥控输出口
  20. sbit  txkey=P1^0   ;           //发射键
  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;                //关发射指示
  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;         //发起始位
  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++;//偶地址不发脉冲
  75. //
  76.           ET1=1;TR1=1;  //奇地址发调制脉冲
  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发生器***********/
  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, 下载次数: 83)
视频.7z (9.48 MB, 下载次数: 43)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏10 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:262 发表于 2022-1-21 07:04 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:403447 发表于 2023-6-9 10:14 | 只看该作者
好东西,准备手工做个试试,有问题回来请教楼主
回复

使用道具 举报

地板
ID:403447 发表于 2023-7-11 19:26 | 只看该作者
这个程序有错吧?
在学习函数里,“while(studykey==0);    //等待键释放” ,但在键扫描函数里,并没有studykey按下的指令,也就是无“等待键释放”状态。而该函数,只有要该键被按下,才为0,然后等非0时,while(studykey==0)才会结束。而如果该键从来未被按下过,就一直非0了。也就是说,这条指令是没任何意义的。
请教楼主,这样分析是否正确?
回复

使用道具 举报

5#
ID:398219 发表于 2023-7-21 11:29 | 只看该作者
有成功了的没
回复

使用道具 举报

6#
ID:513213 发表于 2023-7-21 17:16 | 只看该作者
大米861 发表于 2023-7-11 19:26
这个程序有错吧?
在学习函数里,“while(studykey==0);    //等待键释放” ,但在键扫描函数里,并没有st ...

studykey=P3^2;         //学习键(中断口)

他是中断口
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表