基于单片机的红外遥控设计与制作Word格式文档下载.docx
《基于单片机的红外遥控设计与制作Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的红外遥控设计与制作Word格式文档下载.docx(24页珍藏版)》请在冰点文库上搜索。
3.4红外遥控系统电路的原理框图以及各部分作用
各部分作用:
(1)行列式键盘
行列式键盘又称为矩阵式键盘,用I/O线组成行列结构,按键设置在行列的交点上,行列式分别连接到按键开关的两端。
键盘中有无按键按下是由行线送入扫描字及列线读入列线状态字来判断的,有键按下时通过查键并执行键功能程序。
(2)红外线发射电路
遥控器信息码由单片机的定时器1中断产生40KHZ红外线方波信号。
由P3.5口输出,经过三极管放大,由红外线发射管发送。
(3)单片机
单片机用于输出方波信号控制红外发射电路的工作。
3.5红外接收部分原理框图以及各部分作用
(1)+5V电源电路
给单片机最小系统、控制电路提供以及红外接收电路提供电压。
(2)红外接收电路
红外接收电路把接收到的状态在部进行解码,从而实现不同的功能。
(3)控制电路
通过发射电路的按键实现对控制电路的控制作用。
3.6系统硬件电路的设计
红外发射电路:
红外接收电路:
四、遥控发射及接收控制电路的软件设计
4.1
软件设计流程图
4.1.1键扫描程序流程图
相应的按键扫描程序:
#include<
reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
#definekeyrowP0
#definekeylineP2
ucharcodekeyv[8]={1,2,4,8};
ucharkeyscan(void)
{
ucharkeyval,i;
keyval=0;
keyrow=0xfe;
if(keyline!
=0xff)
for(i=0;
i<
4;
i++)
if(~keyline==keyv[i])keyval=i+1;
keyrow=0xfd;
if(keyline!
if(~keyline==keyv[i])keyval=i+5;
keyrow=0xfb;
if(~keyline==keyv[i])keyval=i+9;
keyrow=0xf7;
if(~keyline==keyv[i])keyval=i+13;
while(keyline!
=0xff);
return(keyval);
}
4.1.2遥控码发射程序流程图
红外信号发射过程:
该遥控器采用脉冲个数编码,不同的脉冲个数代表不同的码,最小为2个脉冲,最大为17个脉冲,为了使接收可靠,第一位码宽为3ms,其余为1ms,遥控码数据帧间隔大于10ms
。
当某个被控电器的电源开关被按下时,单片机先读出键值,然后根据键值设定遥控码的脉冲个数,再调制成40kHz方波由红外线发光管发身出去。
相应的遥控码发射程序如下:
sbitremoteout=P3^5;
externvoiddelay1ms(uinttime);
/*************初始化函数***********/
voidinit(void){
remoteout=0;
IE=0x00;
IP=0x08;
TMOD=0x22;
TH1=0xf3;
TL1=0xf3;
EA=1;
}
/*****************发射函数***********/
voidsend_infrared(ucharkeyval)
ucharm;
ET1=1;
TR1=1;
delay1ms(3);
ET1=0;
TR1=0;
for(m=keyval;
m>
0;
m--){
delay1ms
(1);
ET1=1;
delay1ms
(1);
delay1ms(10);
/******************40KHZ发生器************/
voidtime_intt1(void)interrupt3{
remoteout=~remoteout;
}
4.1.3遥控发射主程序流程图
遥控发射的主程序流程图:
首先初始化程序,然后调用键扫描程序。
相应的发射主程序如下:
externucharkeyscan(void);
externvoidinit(void);
externvoidsend_infrared(ucharkeyval);
voiddelay1ms(uinttime){
uinti,j;
time;
for(j=0;
j<
110;
j++);
voidmain()
uintkeyval;
init();
while
(1)
keyval=keyscan();
while(keyscan());
if(keyval){send_infrared(keyval);
4.1.4
中断程序流程图
中断过程:
首先判断低电平脉宽度是否大于2ms,若脉宽不到2ms,则中断返回;
若低电平大于2ms,则接收并对低电平脉冲计数,接下来看判断高电平脉宽度冲是否大于3ms,若脉宽不到3ms,则返回上一接收计数过程;
若高电平脉宽大于3ms,则按照脉冲个数至对应功能程序。
此时中断返回。
相应的中断程序如下:
intrins.h>
sbitremotein=P3^1;
ucharvalue;
/***********初始化********/
voidclearmen(void)
EX0=1;
EA=1;
/**************外中断遥控接收函数**************/
voidintt0(void)interrupt0
{ucharkeyval,k,sign;
EX0=0;
sign=0;
if(remotein==0)
{
delay1ms
(2);
if(remotein==0)
{
while(remotein==0);
keyval++;
k=0;
while(remotein==1)
k++;
if(k>
2)
value=keyval-1;
sign=1;
break;
}if(sign)break;
EX0=1;
4.1.5遥控接收器主程序流程图
相应的接收主程序:
externvoidclearmen(void);
externucharvalue;
uchartemp;
for(i=0;
for(j=0;
voidyouyi(void)//7个流水灯逐个闪动
{uinti;
temp=0x01;
8;
i++)
{
P2=~temp;
delay1ms(1000);
temp<
<
=1;
voidzuoyi(void)//7个流水灯反向逐个闪动
{uinti;
temp=0x80;
Temp>
>
voidquanliang(void)
{uinti;
temp=0xfe;
i++)//7个流水灯依次全部点亮
P2=temp;
delay1ms(1000);
temp<
}
voidfquanliang(void)
uinti;
temp=0x7f;
Temp>
{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;
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();
五、演示结果
当按下键1时,发光二极管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时,发光二极管LED8-LED1依次全亮;
当按下键14时,发光二极管LED1-LED8依次全亮;
附录:
1.程序:
delay1
接收系统:
接收主程序:
voidyouyi(void)
voidzuoyi(void)
2.个人小结
这次课程设计我们的题目是设计单片机遥控系统设计,以51单片机为基础通过红外发射与接收装置来实现信息的传递,通过这次课程设计,我学会了红外通信装置的使用以及它们之间编码的设计。
另外,通过自己设计焊接单片机让我对单片机的结构有了新的认识与理解。
单片机的每一个端口都有自己所需的结构与电路,特别是P0口,需要接上拉电阻。
这次课程设计我负责接收模块与部分程序设计,我用了一个hs0038一体化红外接收头,使接收电路大大的简洁化了,为了找hs0038的电路,还上网找了很多版本的资料,最终确定了一个相对简单的电路,且比较稳定。
最后实验结果虽然不尽如人意,但是也学会了很多电路设计的方法。
——————章韬略
这次课程设计,我们的设计共分为两个模块,我负责的是红外发射模块。
首先我在网上查询了一些关于红外发射模块硬件电路的资料,确定所需要的硬件材料。
运用软件来绘制出了硬件电路图。
再购买到了材料之后,开始了硬件电路的焊接工作,焊接完成后,开始编写程序。
在写程序的过程中,我了解到了51单片机芯片的工作原理,学会了矩阵键盘的扫描原则。
同时,也认清了红外发射的原理,这次我采用的是按脉冲个数来对应相应的功能,相对来说更为简单易懂。
再完成这些工作之后,我们开始了测试和调节,虽然最终并没有完全达到预期的效果,但通过这次课程设计,我还是了学会了很多电路设计和单片机的知识。
-----------舒佳