基于单片机的红外遥控设计与制作_第1页
基于单片机的红外遥控设计与制作_第2页
基于单片机的红外遥控设计与制作_第3页
基于单片机的红外遥控设计与制作_第4页
基于单片机的红外遥控设计与制作_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 基于单片机的红外遥控设计与制作 13工试2班 陈舒佳 章韬略1、 设计目的 对于本课题的研究,其理论中的价值是对红外线这种电磁波的特性进行更加深入的研究。同时在与单片机和电子电路的共同作用下,找到单片机及电子电路在实际运用中的更多功能,从而挖掘出红外线和硬件设备结合中的更多可能性。在现实意义中,对于红外线的使用,它不仅提高了单片机、硬件设备和硬件系统在智能遥控领域的广泛应用,而相对了在硬件设施上使用了红外线的遥控技术,也同时大大拓宽了硬件设施的应用范围。在不久的将来,我相信,人们对于红外遥控控制的运用,会变得越来越广。2、 设计要求基本功能要求:1. 以一个单片机作为控制遥控器,另一个单片机

2、控制系统为被遥控对象;2. 用遥控器的10个遥控开关,控制遥控对象的10个电源开关通断;3. 能实现10个电源开关状态显示;4. 能实现定时开关某一个电源开关。扩展功能:1. 能实现灯光亮度连续调节;2. 能根据不同电器实现不同时间通断控制;3. 其他扩展功能。3、 方案设计3.1红外遥控发射电路的方案 采用指令键产生电路产生不同的控制指令,单片机进行状态的编码,直接由单片机的口输出方波信号控制红外发射管进行发射。红外发射管采用普通的红外发射二极管。3.2红外遥控接收电路的方案遥控系统采用红外线脉冲个数编码,直接利用单片机软件解码,实现功能的遥控。3.3单片机的选择本设计所编写的程序比较简单,

3、功能也比较少,所用到的输入输出端口也不是很多,所以我们决定用STC89C52单片机来完成本设计,既方便也很实用。3.4红外遥控系统电路的原理框图以及各部分作用各部分作用: (1)行列式键盘 行列式键盘又称为矩阵式键盘,用I/O线组成行列结构,按键设置在行列的交点上,行列式分别连接到按键开关的两端。键盘中有无按键按下是由行线送入扫描字及列线读入列线状态字来判断的,有键按下时通过查键并执行键功能程序。 (2)红外线发射电路 遥控器信息码由单片机的定时器1中断产生40KHZ红外线方波信号。由P3.5口输出,经过三极管放大,由红外线发射管发送。 (3)

4、单片机 单片机用于输出方波信号控制红外发射电路的工作。3.5红外接收部分原理框图以及各部分作用各部分作用: (1)+5V电源电路 给单片机最小系统、控制电路提供以及红外接收电路提供电压。(2)红外接收电路 红外接收电路把接收到的状态在内部进行解码,从而实现不同的功能。 (3)控制电路 通过发射电路的按键实现对控制电路的控制作用。3.6系统硬件电路的设计红外发射电路:红外接收电路:4、 遥控发射及接收控制电路的软件设计4.1 软件设计流程图4.1.1键扫描程序流程图 相应的按键扫描程序:#include<reg

5、52.h> #define uint unsigned int #define uchar unsigned char #define keyrow P0 #define keyline P2 uchar code keyv8=1,2,4,8; uchar keyscan(void) uchar keyval,i; keyval=0; keyrow=0xfe; if(keyline!=0xff) for(i=0;i<4;i+) if(keyline=keyvi) keyval=i+1; keyrow=0xfd; if(keyline!=0xff) for(i=0;i<4;i+

6、) if(keyline=keyvi) keyval=i+5; keyrow=0xfb; if(keyline!=0xff) for(i=0;i<4;i+) if(keyline=keyvi) keyval=i+9; keyrow=0xf7; if(keyline!=0xff) for(i=0;i<4;i+) if(keyline=keyvi) keyval=i+13; while(keyline!=0xff); return(keyval); 4.1.2遥控码发射程序流程图红外信号发射过程: 该遥控器采用脉冲个数编码,不同的脉冲个数代表不同的码,最小为2个脉冲,最大为1

7、7个脉冲,为了使接收可靠,第一位码宽为3ms,其余为1ms,遥控码数据帧间隔大于10ms 。当某个被控电器的电源开关被按下时,单片机先读出键值,然后根据键值设定遥控码的脉冲个数,再调制成40kHz方波由红外线发光管发身出去。相应的遥控码发射程序如下: sbit remoteout=P35; extern void delay1ms(uint time); /*初始化函数*/ void init(void) remoteout=0; IE=0x00; IP=0x08; TMOD=0x22; TH1=0xf3; TL1=0xf3; EA=1; /*发射函数*/ void sen

8、d_infrared(uchar keyval) uchar m; ET1=1;TR1=1;delay1ms(3);ET1=0;TR1=0;remoteout=0; for(m=keyval;m>0;m-) delay1ms(1); ET1=1;TR1=1;delay1ms(1);ET1=0;TR1=0;remoteout=0; delay1ms(10); /*40KHZ发生器*/ void time_intt1(void) interrupt 3 remoteout=remoteout; 4.1.3遥控发射主程序流程图遥控发射的主程序流程图:首先初始化程序,然后调用键扫描程序。相应的发

9、射主程序如下:#include<reg52.h> #define uint unsigned int #define uchar unsigned char extern uchar keyscan(void); extern void init(void); extern void send_infrared(uchar keyval); void delay1ms(uint time) uint i,j; for(i=0;i<time;i+) for(j=0;j<110;j+); void main() uint keyval; init(); while(1) k

10、eyval=keyscan(); while(keyscan(); if(keyval) send_infrared(keyval); 4.1.4 中断程序流程图中断过程:首先判断低电平脉宽度是否大于2ms,若脉宽不到2ms,则中断返回;若低电平大于2ms,则接收并对低电平脉冲计数,接下来看判断高电平脉宽度冲是否大于3ms,若脉宽不到3ms,则返回上一接收计数过程;若高电平脉宽大于3ms,则按照脉冲个数至对应功能程序。此时中断返回。相应的中断程序如下: #include<reg52.h> #include<intrins.h> #define uch

11、ar unsigned char #define uint unsigned int sbit remotein=P31; extern void delay1ms(uint time); uchar value; /*初始化*/ void clearmen(void) EX0=1; EA=1; /*外中断遥控接收函数*/ void intt0(void) interrupt 0 uchar keyval,k,sign; EX0=0;sign=0;keyval=0; if(remotein=0) delay1ms(2); if(remotein=0) while(1) while(remote

12、in=0); keyval+;k=0;delay1ms(1); while(remotein=1) delay1ms(1);k+; if(k>2) value=keyval-1; sign=1; break; if(sign) break; EX0=1; 4.1.5遥控接收器主程序流程图相应的接收主程序:#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int extern void clearmen(void); extern uchar

13、 value; uchar temp; void delay1ms(uint time) uint i,j; for(i=0;i<time;i+) for(j=0;j<110;j+); void youyi(void) /7个流水灯逐个闪动 uint i; temp=0x01; for(i=0;i<8;i+) P2=temp;delay1ms(1000); temp<<=1; void zuoyi(void) /7个流水灯反向逐个闪动 uint i; temp=0x80; for(i=0;i<8;i+) P2=temp;delay1ms(1000); Tem

14、p>>=1; void quanliang(void)uint i; temp=0xfe; for(i=0;i<8;i+) /7个流水灯依次全部点亮 P2=temp; delay1ms(1000); temp<<=1; void fquanliang(void) uint i; temp=0x7f; for(i=0;i<8;i+) /7个流水灯依次全部点亮 P2=temp; delay1ms(1000); Temp>>=1; void main() clearmen(); P0=0xff; while(1) if(value=1) P2=0xfe

15、; if(value=2) P2=0xfd; if(value=3) P2=0xfb; if(value=4 P2=0xf7; if(value=5) P2=0xef; if(value=6) P2=0xdf; if(value=7) P2=0xbf; if(value=8) P2=0x7f; if(value=9) P1=0xfe; if(value=10) P1=0xfd; if(value=11) youyi(); if(value=12) zuoyi(); if(value=13) quanliang(); if(value=14) fquanliang(); 5、 演示结果当按下键1

16、时,发光二极管LED1亮; 当按下键2时,发光二极管LED2亮; 当按下键3时,发光二极管LED3亮; 当按下键4时,发光二极管LED4亮; 当按下键5时,发光二极管LED5亮; 当按下键6时,发光二极管LED6亮; 当按下键7时,发光二极管LED7亮; 当按下键8时,发光二极管LED8亮; 当按下键9时,发光二极管LED9亮;当按下键10时,发光二极管LED10亮; 当按下键11时,发光二极管LED8-LED1依次渐亮; 当按下键12时,发光二极管LED1-LED8依次渐亮;当按下键13时,发

17、光二极管LED8-LED1依次全亮;当按下键14时,发光二极管LED1-LED8依次全亮; 附录:1.程序:#include<reg52.h> #define uint unsigned int #define uchar unsigned char #define keyrow P0 #define keyline P2 uchar code keyv8=1,2,4,8; uchar keyscan(void) uchar keyval,i; keyval=0; keyrow=0xfe; if(keyline!=0xff) for(i=0;i<4;i+) if(k

18、eyline=keyvi) keyval=i+1; keyrow=0xfd; if(keyline!=0xff) for(i=0;i<4;i+) if(keyline=keyvi) keyval=i+5; keyrow=0xfb; if(keyline!=0xff) for(i=0;i<4;i+) if(keyline=keyvi) keyval=i+9; keyrow=0xf7; if(keyline!=0xff) for(i=0;i<4;i+) if(keyline=keyvi) keyval=i+13; while(keyline!=0xff); return(keyv

19、al); sbit remoteout=P35; extern void delay1ms(uint time); /*初始化函数*/ void init(void) remoteout=0; IE=0x00; IP=0x08; TMOD=0x22; TH1=0xf3; TL1=0xf3; EA=1; /*发射函数*/ void send_infrared(uchar keyval) uchar m; ET1=1;TR1=1;delay1ms(3);ET1=0;TR1=0;remoteout=0; for(m=keyval;m>0;m-) delay1 ET1=1;TR1=1;delay

20、1ms(1);ET1=0;TR1=0;remoteout=0; delay1ms(10); /*40KHZ发生器*/ void time_intt1(void) interrupt 3 remoteout=remoteout; extern uchar keyscan(void); extern void init(void); extern void send_infrared(uchar keyval); void delay1ms(uint time) uint i,j; for(i=0;i<time;i+) for(j=0;j<110;j+); void main() ui

21、nt keyval; init(); while(1) keyval=keyscan(); while(keyscan(); if(keyval) send_infrared(keyval); 接收系统:#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit remotein=P31; extern void delay1ms(uint time); uchar value; /*初始化*/ void clearmen(void) E

22、X0=1; EA=1; /*外中断遥控接收函数*/ void intt0(void) interrupt 0 uchar keyval,k,sign; EX0=0;sign=0;keyval=0; if(remotein=0) delay1ms(2); if(remotein=0) while(1) while(remotein=0); keyval+;k=0;delay1ms(1); while(remotein=1) delay1ms(1);k+; if(k>2) value=keyval-1; sign=1; break; if(sign) break; EX0=1; 接收主程序:

23、 extern void clearmen(void); extern uchar value; uchar temp; void delay1ms(uint time) uint i,j; for(i=0;i<time;i+) for(j=0;j<110;j+); void youyi(void) uint i; temp=0x01; for(i=0;i<8;i+) P2=temp;delay1ms(1000); temp<<=1; void zuoyi(void) uint i; temp=0x80; for(i=0;i<8;i+) P2=temp;de

24、lay1ms(1000); Temp>>=1; void quanliang(void)uint i; temp=0xfe; for(i=0;i<8;i+) P2=temp; delay1ms(1000); temp<<=1; void fquanliang(void) uint i; temp=0x7f; for(i=0;i<8;i+) P2=temp; delay1ms(1000); Temp>>=1; void main() clearmen(); P0=0xff; while(1) if(value=1) P2=0xfe; if(value=2) P2=0xfd; if(value=3) P2=0xfb; if(value=4 P2=0xf7;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论