红外遥控器信号接收和显示的设计1Word文档下载推荐.docx
- 文档编号:21315629
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:22
- 大小:185.36KB
红外遥控器信号接收和显示的设计1Word文档下载推荐.docx
《红外遥控器信号接收和显示的设计1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《红外遥控器信号接收和显示的设计1Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
方案三:
此方案中采用分立元件实现红外接收装置,通过外围电路实现将遥控信号的接收、放大、检波、整形等功能,并将信号转换成单片机识别的TTL信号。
其余与方案二相同。
方案的比较如下:
方案一为硬件解码方案,硬件解码需要使用与遥控器相配套的专用的解码器芯片,而解码芯片一般不易得到,价格也较贵,或者自行开发解码电路(但电路太复杂,性能欠佳)。
方案二为软件解码方案,软件解码可以不考虑遥控器的芯片是什么型号的,因为我们只需检测到它的发射编码,然后用软件方式来对它进行处理,从而得到所要的信息。
软件解码具有灵活、硬件精简(仅需集成红外接收头和一片单片机)、可靠性高,成本低等特点。
方案三所用的红外接收外围电路设计工作复杂,电路复杂程度相对较大,不方便使用,并且性能欠佳。
经以上的论证,我采用方案二的软件解码方案,成本低,方便实现,并且系统整体性能和可靠性高。
2、方案的可行性论证
采用方案二的具体思路如下:
遥控器为控制信号的发出装置,用一体化红外接收装置HS0038接收遥控器发出的红外线控制信号,并与单片机相连实现数据传输,将信号解码成二进制编码,并按位进行存储,通过单片机编程将接收到的数字编码在数码管上显示出来,编程比较若接收到信号为音量增减则实现数码管外围段的流水灯显示功能(在实验中我在P1口连接了8个流水灯,使得音量增加或减少在流水灯上显示为自下向上流动或自上向上流动),在比较中若接收到的信号为频道的增减则实现在原本显示数值上加1或减1的功能。
用单片机的P0口控制数码管的段选,P3^2及P3^3控制数码管的位选,在数码管显示模块中,利用动态扫描的方式来显示数字或数码管流水灯。
使用MAX232芯片、串口及若干电容来完成串口模块,以实现单片机和PC机的通信功能并且达到可以使用串口调试助手的目的。
有上述论证可知此方案可行。
3、经以上方案的选择和论证,确定总体系统框图如下:
图3、总体系统框图
二、系统各单元电路的设计与分析
1、单片机最小系统
单片机的主要功能是负责整个系统的控制及数据的存储和处理,因此在设计本系统时选用STC89C51。
其中,系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。
引脚XTAL1和XTAL2分别是振荡器的高增益反相放大器的输入端和输出端。
这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。
外接晶体谐振器以及电容C3和C4构成并联谐振电路,接在放大器的反馈回路中。
根据情况本设计中选择12MHz的晶振,补偿电容选择30pF左右的瓷片电容,如图中Y1、C3、C4;
复位电路则采用手动按键复位方式,通过按键将电阻R9与VCC接通,复位脉冲的高电平宽度大于2个机器周期,即可实现复位,如图中的R9、C1所示;
P0口外接上拉电阻,其结构如图中103,采用10K的排阻以提供给I/O口合适的电流。
在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。
单片机最小系统电路图如图4所示。
图4、单片机最小系统电路图
2、通信模块的设计
通信模块选用MAX232芯片。
MAX232是MAXIM公司专门为PC视RS-232标准串口设计的电平转换电路。
该芯片与TTL/COMS电平兼容,片内有2个发送器,2个接收器,且使用+5V单电源供电,使用非常方便。
现从MAX232芯片中两路发送接收中任选一路作为接口,其发送接收的引脚一一对应。
本系统中使T2in接单片机的发送端TXD,同时R2out接单片机的RXD端,1、3脚和4、5脚接104瓷片电容,其接口电路如图5所示。
图5、通信模块电路图
3、红外接收模块设计
一体化的红外接收装置将遥控信号的接收、放大、检波、整形集于一身,并且输出可以让单片机识别的TTL信号,这样大大简化了接收电路的复杂程度和电路的设计工作,方便使用。
在本系统中我们采用红外一体化接收头HS0038。
HS0038黑色环氧树脂封装,不受日光、荧光灯等光源干扰,内附磁屏蔽,功耗低,灵敏度高。
在用小功率发射管发射信号情况下,其接收距离可达35m。
它能与TTL、COMS电路兼容。
HS0038为直立侧面收光型。
它接收红外信号频率为38kHz,周期约26μs,同时能对信号进行放大、检波、整形,得到TTL电平的编码信号。
三个管脚分别是地、+5V电源、解调信号输出端。
解调信号输出端与单片机P3^4相连,Vcc与GND间接104瓷片电容滤波整形,电路图如图6所示。
图6、红外接收模块电路图
4、数码管显示电路设计
数码管显示电路采用两位共阳数码管LG5022BH,具体电路如图7。
其中由单片机的P3^2和P3^3作为位选口,输出低电平时数码管被选中;
P0口外接上拉电阻后作为段选,输出低电平时相应的段被点亮。
数码管的驱动选用三极管S8550,图中的电阻R10和R11选取1K的阻值大小,以提供合适的电流使三极管导通。
图7、数码管显示电路电路图
5、流水灯电路设计
流水灯电路采用八个发光二极管,所有发光二极管的正极接到单片机的P1口,负极分别通过一个1k的限流电阻接到GND端,当单片机的相应端口为高电平时发光二极管点亮,通过控制单片机P1端口的高低电平实现流水灯功能,电路图如图8所示。
图8、流水灯电路
6、程序设计和说明
在本设计中,数据的处理、存储、比较以及芯片的控制都是由单片机编程实现的。
其中,判断是显示按键数值或按键为音量增减键调用流水灯函数或按键为频道增减键调用加减函数及显示加1或减1后的数值信息等,均是使用单片机的软件部分实现,在整个设计中还存在较多的延时函数的调用和循环语句。
具体程序见附录。
主函数软件流程图如下图9所示。
图9、主函数软件流程图
三、系统的安装调试及测试数据分析
1、测试仪器
晶体管直流稳压电源1台
数字万用表1块
示波器1台
2、硬件调试的方法和过程
完成电路设计后,采用整体布局、分模块安装调试再连调的方法。
整个过程中对出现的问题进行了比较适当的解决。
、单片机最小系统焊接完成后,不能正常工作,经观察发现单片机的Vcc没有和电源正极相连,连接完成后用示波器观察晶振两端起振,且30管脚有波形。
单片机最小系统正常工作。
b、数码管显示部分在安装调试过程工作不稳定。
经老师提醒,是数码管管脚过细与插槽接触不良导致。
将管脚镀锡后在进行调试,问题得到了良好的解决。
c、在焊接完通信模块后单片机不能与PC机之间进行通信,仔细检查电路,发现MAX232的V-管脚没有接地,将此电路焊接完成后,单片机和PC机之间的通信功能得以实现。
在硬件调试的过程中有两处失误的原因均为电路芯片的管脚没有和公共的Vcc或GND接到一起,寻找错误的原因是在焊接电路的过程中均将Vcc和GND悬空,待其它电路焊接完成,最后焊接公共端,在最后寻找的过程中由于不细心导致有遗漏,对此颇有体会,在以后的实验或是工程中将更加细心。
3、软件调试问题及解决方法
A、首先在将最初编写好的程序下载到电路板上后,只能接受一次数据,第二次发送数据后不能再数码管上显示其结果,后经细心研究,增加无条件转移指令,使得能端口能一直查询红外接收电路是否有电平的变化,从而达到每次发送信号时均能在数码管上显示。
B、其次,在将数码管流水灯及外接的流水灯程序加进后,当程序走到流水灯的循环之后,不能自动的跳转出循环,经耐心的学习探讨,找到两种解决方案,一是用外部中断,使得程序能挑出循环,但由于中断的功能及调用的方法不能灵活运用,所以又经细心的研究选择使用查询的方法,同样达到了目的,也使程序简单易懂。
C、再次,使用示波器测得音量及频道增减按键的编码时,由于示波器显示的时间以及人为按下按键时间间隔不好掌控,需要测量很多次,方可测得所需要的编码,将编码测得后,写入相应的程序,若编码错误则不能实现相应按键按下所要得到的功能,在此过程中需要耐心细致,最后均测得了正确的编码。
D、再次,在写数码管和流水灯的显示数组时,将有的数组编写错误,这是较容易发现及解决的问题,经细心修正后,使得所有的数组均能正确的显示想要表示的功能。
E、再次,在显示数值时发生过数值跳变的情况,由一个数值跳变为乱码,后经在程序中增加延时函数解决此问题。
F、再次,当按键按下频道的增减按键时,每按下一次时增加或减少的数值不均为1,经过多次试验调试,在函数中增加了延时函数以达到消除抖动的目的,使得此问题得到良好的解决。
G、最后,在使用串口调试助手实现单片机与PC机之间的通信时,PC机接收到得数据有误,后经程序修正及调节串口调试助手的比特率,使得两机之间的通信顺利进行,并且没有误差。
经过以上的硬件以及软件的调试工作,基本排除了电路上或软件编程上的问题。
4、整机调试及实现的功能
在最后的整机调试过程中,能很好的完成老师的功能。
并且在要求的基础上,自己将电路的部分功能进行了扩展,完成的功能如下:
1、能实现按下数字键时在两位数码管上显示其数值,按下按键9,显示09。
2、按下音量△及音量▽时可以实现数码管外围段的顺时针或逆时针流水灯功能,并再此增加了外围的流水灯,使在音量增加或减少时流水灯能自下向上流动或自下向上流动,使得按键的功能一目了然。
3、能够使用串口调试助手实现单片机及PC机之间的通信功能。
可以在PC机上显示按键的数值。
按键按下1时,PC机上显示01。
4、在此实验中除增加流水灯的功能外还实现了当按下频道的增减按键时,数码管上显示的数值为原数值加1或减1的功能。
总体来说本次试验得到了良好的试验效果。
四、结论与改进意见
由整机测试的结果可知,本设计较好地满足了题目要求,在红外接收数据及其显示等功能方面得到了良好的稳定性。
并且在整个设计与装调过程中出现的问题得到了较好的解决,并最终完成了基于单片机的红外遥控信号接收和显示的设计与实现。
其实本次实验设计还有一定的提升空间和改进措施。
比如本次实验所用到的遥控器为一种固定编码的遥控器,当遥控器的型号不同即遥控器内部的红外线发射器的编码不同时,本程序并不一定能得到想要的预期结果,同时软件程序中的解码部分由了更高的要求。
现在市面上的遥控器种类有很多,增加软件部分的功能及外围电路即可实现不同型号遥控器的解码功能。
使得功能更加完善。
但由于时间原因以及理论水平有限,没能很好的达到。
通过本次设计,我了解了红外线解码的基本工作原理和设计方法,掌握了流水灯及数码显示电路的实际使用方法,了解了单片机最小系统的构成及应用设计,熟悉了单片机串行通信模块的设计。
最为重要的是,在我掌握了电子电路系统设计的基本方法的同时,提高了综合利用多学科相关知识并且进行初步工程实践与实际装调系统电路的能力,
附录一:
元件清单表
元器件名称
数量
40脚IC座
1
16脚IC座
STC89C51
HS0038
MAX232
两位共阳数码管(LG5022BH)
串口
开关
按键
12M晶振
发光二极管
8
三极管8550
2
电容(104)
6
电容(30pF)
电容(10uF)
电阻(10K)
电阻(1K)
10
排阻(10k)
单排座
万用板
附录二:
程序
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint//宏定义
sbitshu1=P3^3;
sbitshu2=P3^2;
inta,read,bj,result,yiweiresult,nuresult,k=0,gewei,gaowei,gewei1,gaowei1;
uchartable[4]={0};
//定义数组用来存放用户码和数据码
uchardis[16]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
//数码管显示编码
uchartablea[3]={0xef,0xdf,0xfe};
//{0xef,0xdf,0xfe};
uchartableb[4]={0xfe,0xfd,0xfb,0xf7};
//{0xfe,0xfd,0xfb,0xf7};
uchartableaf[2]={0xef,0xf7};
//{0xef,0xf7};
uchartablebf[2]={0xfe,0xdf};
//{0xfe,0xdf};
数码管流水灯数组
ucharnew1[4]={0x20,0x10,0x08,0x04};
ucharnew[2]={0x01,0x02};
ucharnew2[2]={0x40,0x80};
ucharold[3]={0x80,0x40,0x20};
ucharold1[4]={0x10,0x08,0x04,0x02};
//流水灯数组
voiddelay_9000us()
{
uinti,j;
for(i=0;
i<
5;
i++)
for(j=0;
j<
308;
j++);
}//延时9.0ms
voiddelay_5000us()
2;
}//延时5.0ms
voiddelay_100us()
1;
11;
}//延时100us
voiddelay_6ms()
660;
}//延时6ms
voiddelay_500ms()
uintj;
12850;
j++)
{read=P3;
if((read&
0x10)==0)
break;
}
}//延时500ms
voidstart_t0()
TH0=0;
TL0=0;
TR0=1;
}//定时计数器初始化
/*解码子函数*/
ucharjiema()
{
uchari,j,rd,pd,dat=0;
for(i=4;
i>
0;
i--)
{
for(j=8;
j>
j--)
{
dat>
>
=1;
do
rd=P3;
while(!
(rd&
0x10));
//等待高电平
start_t0();
//初始化定时器
while(rd&
0x10);
//等待低电平
TR0=0;
//关闭定时器
pd=TH0;
if(pd>
0x03)
dat=(dat|0x80);
//接收1并存储
else
dat=(dat&
0x7f);
//接收0并存储
}
table[i]=dat;
//接收8位数据完毕
}//接受32位数据完毕
return(table[2]);
//返回数据码
}
//流水灯子函数(zheng)数码管顺时针循环,流水灯由下向上循环点亮
voidliushuideng()
inti=0;
while
(1)
{
3;
{
shu2=1;
shu1=0;
P0=tablea[i];
//数码管顺时针循环数组1
P1=old[i];
//流水灯自下向上循环点亮数组1
delay_500ms();
for(i=0;
4;
shu1=1;
shu2=0;
P0=tableb[i];
//数码管顺时针循环数组2
P1=old1[i];
//流水灯自下向上循环点亮数组2
delay_500ms();
}
i++)
{
shu2=1;
P0=0xf7;
P1=0x01;
delay_500ms();
delay_6ms();
read=P3;
if((read&
0x10)==0)//查询
break;
//流水灯子函数(fan)数码管逆时针循环,流水灯由上向下循环点亮
voidfanliushuideng()
P0=tableaf[i];
P1=new[i];
delay_500ms();
for(i=3;
=0;
P1=new1[i];
P0=tablebf[i];
P1=new2[i];
//显示子函数jia频道键加
voiddisplayjia()
if(nuresult<
=9)
{nuresult=nuresult+1;
gewei1=nuresult%10;
gaowei1=nuresult/10;
else
{nuresult=yiweiresult+1;
gewei1=nuresult%10;
gaowei1=nuresult/10;
shu1=1;
shu2=0;
P0=dis[gewei1];
delay_5000us();
P0=0xff;
shu1=0;
shu2=1;
P0=dis[gaowei1];
delay_5000us();
P0=0xff;
delay_6ms();
read=P3;
if((read&
delay_6ms();
//显示子函数jian频道键减
voiddisplayjian()
{nuresult=nuresult-1;
{nuresult=yiweiresult-1;
delay_5000us();
P0=0xff;
delay_100us();
delay_100us();
delay_5000us();
delay_6ms();
//显示子函数
voiddisplay(uchardat)
shu2=1;
if(dat<
{P0=0xc0;
}//无加减时数码管1显示0
{P0=dis[gao
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 红外 遥控器 信号 接收 显示 设计