电子电路毕业设计总结报告题目:红外遥控器信号接收和现实的设计摘要随着电子技术的发展,红外遥控器越来越多用到电气设备中,为电器用户提供了极大的方便。
但是各种型号的遥控器的大量使用带来的遥控器的大批量多品种的生产检测却是一个难题,因此红外遥控器接受和显示的设计实现以改变生产一线的这种状况成为一种迫切的需要。
在本实验的设计中,采用HS0038塑封一体化红外线接收器,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而且体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。
整个电路分为四个模块:单片机最小系统、通信模块、红外接收模块以及数码管显示模块。
四个模块的相互连接配合实现了数码管显示遥控器的按键值以及当按下左右键时,数码管上实现流水灯现象,并通过串口调试助手,在PC机上显示其按键值。
此设计加以完善推广,可在生产生活中被广泛的应用。
目录一课题的任务与要求 (4)二系统概述 (4)三单元电路设计与分析 (6)四安装调试及测量数据分析 (8)五结束语 (10)六附录 (10)一课题的任务与要求结合单片机最小电路和红外接收接口电路共同设计一个基于单片机的红外遥控信号接收与转发系统,用普通电视机遥控器控制该系统,使数码管显示信号的接受结果。
1 当遥控器按下数字键时,在数码管上显示其键值。
如按下数字键1,则在数码管上显示号码“01”。
2当遥控器按下左键及右键时,用两位数码的周围段实现顺时针或者逆时针旋转的流水灯功能。
*3 运用串口调试助手,在遥控器有按键按下时,将其键值显示在PC机上。
二系统概述1 设计方案为了实现系统整体功能,红外解码部分是核心,红外解码指将遥控发射器所产生的红外遥控编码脉冲所对应的键值翻译出来的过程。
下面将系统方案做一论证,通常有硬件解码和软件解码两种方案。
方案一: 硬件解码此方案中,使用专用遥控器作为控制信号发出装置,当按下遥控器的按键后,一体化红外接收装置接收到遥控器发出的设置控制信号,然后将信号送到专用的解码芯片中进行解码,解码后将信号送到单片机,由单片机查表判断这个信号是按键数值信号或控制音量、频道等信号,当确认是何种信号后,启动子程序,然后进行查询。
每次红外接收头接收到红外信号传到解码器中,解码器解码完毕后送到单片机,单片机再通过查表确定这些数值并进行相应功能的控制。
设计原理图如图1所示。
图1 方案一原理图方案二:软件解码此方案中,采用普通的家用遥控器作为控制信号发出装置,当按下遥控器的按键后,一体化红外接收装置接收到遥控器发出的红外线控制信号,然后把这个信号转换成电信号,传到单片机中,利用单片机对这个信号进行解码,解码完成后查表确定是按键数值信号或控制音量、频道等信号,启动子程序,进行相应的显示数字等功能。
然后查询,重复上述流程。
设计原理图如图2所示。
图2 方案二设计原理图2 方案比较与选取方案一为硬件解码方案,硬件解码需要使用与遥控器相配套的专用的解码器芯片,而解码芯片一般不易得到,价格也较贵,或者自行开发解码电路(但电路太复杂,性能欠佳)。
方案二为软件解码方案,软件解码可以不考虑遥控器的芯片是什么型号的,因为我们只需检测到它的发射编码,然后用软件方式来对它进行处理,从而得到所要的信息。
软件解码具有灵活、硬件精简(仅需集成红外接收头和一片单片机)、可靠性高,成本低等特点。
基于以上特点,选取方案二作为实验方案。
3 系统框图系统框图如图3所示。
图3 系统框图遥控器为控制信号的发出装置,用一体化红外接收装置HS0038接收遥控器发出的红外线控制信号,并与单片机相连实现数据传输,通过单片机编程将接收到的数字编码在数码管上显示出来,当按下左右键时,数码管将实现流水灯现象。
使用MAX232芯片、串口及若干电容来完成串口模块,以实现单片机和PC机的通信功能并且达到可以使用串口调试助手的目的。
三单元电路设计与分析1 单片机最小系统单片机选用STC89C51,主要负责整个系统的控制及数据的存储和处理。
放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。
外接晶体谐振器以及电容构成并联谐振电路,接在放大器的反馈回路中。
根据情况本设计中选择12MHz的晶振,补偿电容选择30pF左右的电容。
单片机最小系统电路图如图4所示。
图4 单片机最小系统2通信模块通信模块用于将编写好的程序下载至单片机中,采用MAX232与串口相连组成了通信下载电路。
MAX232是MAXIM公司专门为PC视RS-232标准串口设计的电平转换电路。
该芯片与TTL/COMS电平兼容,片内有2个发送器,2个接收器,且使用+5 V单电源供电。
通信模块电路如图5所示。
图5 通信模块电路图3 红外接收模块本电路采用HS0038塑封一体化红外线接收器,它是一种集红外线接收、放大、整形于一体的集成电路,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,没有红外遥控信号时为高电平,收到红外信号时为低电平,而且体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。
电路图如图6所示。
图6 红外接收电路4 数码管显示电路数码管显示电路采用两位共阳数码管LG5022BH,由单片机的P3^2和P3^3作为位选口,输出低电平时数码管被选中;P1口作为段选。
选用三极管S8550驱动,e极与VCC相连,b极接电阻后与单片机的P3^2和P3^3口相连,c极与数码管的位选口相连。
数码管显示电路如图7所示。
图7 数码管显示电路四安装调试及测量数据分析总体电路一次组装完毕后,首先采用分块调试,采用这种调试的方法,可以缩小问题出现的范围,可及时发现,易于解决。
首先进行单片机最小系统的测试,将单片机的VCC与电源正极相连,连接完成后用示波器观察晶振两端起振,且30管脚有波形。
单片机最小系统正常工作。
接下来测试通信模块,测试单片机与PC机之间能否正常通信,单片机与PC 机之间正常通信,通信模块测试正常。
接下来对数码管显示电路进行测试,首先将数码管动态显示的程序下载至单片机中对数码管显示电路进行测试,数码管没有示数,用万用表检查数码管显示电路是否有短路和短路的情况,检测结果发现三极管连接有断路,将断路处重新焊接好后再次进行检测,这时数码管有示数出现,但其中一位的“c”段始终没有显示,检查“c”段所对应的电路连接情况,发现有断路情况出现,再次焊接好后重新检测,数码管正常显示,数码管显示电路调试完毕。
之后进行程序下载调试。
主函数软件流程图如图8所示。
图8 主函数软件流程图将最初编写好的程序下载到电路板上后,数码管不能按照预定的想法显示,对程序进行仔细检查后,发现有的数组编写错误,经细心修正后,使得所有的数组均能正确的显示想要表示的功能。
但在显示数值时发生数值跳变的情况,由一个数值跳变为乱码,后经在程序中增加延时函数解决此问题。
最后,在使用串口调试助手实现单片机与PC机之间的通信时,PC机接收到得数据有误,后经程序修正及调节串口调试助手的比特率,使得两机之间的通信顺利进行。
至此,电路和程序全部调试完毕。
五结束语本实验基本满足了设计要求,实现了当遥控器按下数字键时,在数码管上显示其键值。
如按下数字键1,则在数码管上显示号码“01”;当遥控器按下左键及右键时,两位数码的周围段实现顺时针或者逆时针旋转的流水灯功能;运用串口调试助手,在遥控器有按键按下时,能将其键值显示在PC机上。
本设计仍然存在着一些不足之处,例如只能实现对遥控器少量按键在数码管上的显示情况,而对于其他按键的显示大多没有规律或显示乱码,在此方面有待提高和改进。
随着电子技术的发展,红外遥控器越来越多用到电气设备中,为电器用户提供了极大的方便。
但是,对于电器生产厂家来说,各种型号的遥控器的大量使用带来的遥控器的大批量多品种的生产检测却是一个难题。
目前市面上对遥控器的检测还是使用比较落后的手动方式逐一进行,使得一线的检测工人既费时又费力而又效率低下;另外,在电器产品的调试过程中,当出现控制故障时,很难判断到底是遥控器的发射故障还是电脑上的接受故障。
因此红外遥控器接受和显示的设计实现以改变生产一线的这种状况成为一种迫切的需要。
通过此次试验的整个设计,焊接以及调试的完成,使我了解了常用红外接收器的原理并基本掌握了其设计和使用的方法,了解了实际遥控器编码的数据格式,掌握了数码管显示电路的实际构建方法,了解了单片机最小系统的构成及应用设计,熟悉了单片机串行通信模块的设计。
在以前的各类实验课所做的实验中,多数为单元实验且电路模式比较固定,调试也较容易,多数实验没能培养出我们对整个电子电路系统的整体认识,而通过这次的实验,不仅使我学到了有关红外接收方面的内容,而且,提高了我对整个电子电路系统从设计到调试整体的系统性认识,培养了综合运用多学科相关知识进行初步工程设计与实际装调系统电路的能力,收获颇多。
最后,感谢高敬鹏老师在整个实验过程中给我们的指点和帮助!六附录附录二:程序清单#include<reg51.h>#define uchar unsigned char#define uint unsigned int//宏定义sbit a=P3^3;sbit b=P3^2;int a,read,bj,result,yiweiresult,nuresult,k=0;uchar table[4]={0};//定义数组用来存放用户码和数据码uchar dis[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa 1,0x86,0x8e};//数码管显示编码uchar tablea[3]={0xef,0xdf,0xfe}; //{0xef,0xdf,0xfe};uchar tableb[4]={0xfe,0xfd,0xfb,0xf7};//{0xfe,0xfd,0xfb,0xf7};uchar tableaf[2]={0xef,0xf7}; //{0xef,0xf7};uchar tablebf[2]={0xfe,0xdf}; //{0xfe,0xdf};//数码管流水灯顺时针逆时针数组void delay_9000us(){uint i,j;for(i=0;i<5;i++)for(j=0;j<308;j++);} //延时9.0msvoid delay_5000us(){uint i,j;for(i=0;i<2;i++)for(j=0;j<308;j++);} //延时5.0msvoid delay_100us(){uint i,j;for(i=0;i<1;i++)for(j=0;j<11;j++);} //延时100usvoid delay_6ms(){uint i,j;for(i=0;i<1;i++)for(j=0;j<660;j++);} //延时6msvoid delay_500ms() {uint j;for(j=0;j<12850;j++){ read=P3;if((read&0x10)==0)break;}} //延时500msvoid start_t0(){TH0=0;TL0=0;TR0=1;} //定时计数器初始化/*解码子函数*/uchar jiema(){uchar i,j,rd,pd,dat=0;for(i=4;i>0;i--){for(j=8;j>0;j--){dat>>=1;dord=P3;while(!(rd&0x10));//等待高电平start_t0();//初始化定时器dord=P3;while(rd&0x10);//等待低电平TR0=0;//关闭定时器pd=TH0;if(pd>0x03)dat=(dat|0x80); //接收1并存储elsedat=(dat&0x7f); //接收0并存储}table[i]=dat;//接收8位数据完毕}//接受32位数据完毕return(table[2]);//返回数据码}//流水灯子函数(zheng)两位数码管外围段顺时针转void liushuideng(){int i=0;while(1){for(i=0;i<3;i++){b=1;a=0;P1=tablea[i];delay_500ms() ;}for(i=0;i<4;i++){a=1;b=0;P1=tableb[i];delay_500ms();}for(i=0;i<1;i++){a=0;b=1;delay_500ms() ;P1=0xf7;}delay_6ms();read=P3;//查询if((read&0x10)==0)break;}}//流水灯子函数(fan) 两位数码管外围段逆时针转void fanliushuideng(){int i=0;while(1){for(i=0;i<2;i++){b=1;a=0;P1=tableaf[i];delay_500ms();}for(i=3;i>=0;i--){a=1;b=0;P1=tableb[i];delay_500ms();}for(i=0;i<2;i++){a=0;b=1;P1=tablebf[i];delay_500ms();}delay_6ms();read=P3;//查询if((read&0x10)==0)break;}}//显示子函数void display(uchar dat){while(1){a=0;b=1;if(dat<=9){P1=0xc0;delay_5000us();P1=0xff;}if(dat<=9){ a=1;b=0;P1=dis[dat];delay_5000us();P1=0xff;}a=1;b=0;delay_100us();read=P3;//查询if((read&0x10)==0)break;}nuresult=dat;}/*************串口发送子程序*****************/ void init(void){TMOD=0x20;TH1=0xf3;TL1=0xf3;PCON=0x00;TR1=1;SCON=0x50;}void checkout(unsigned int para){ unsigned int paracheck;paracheck=para;SBUF=paracheck;while(TI==0);TI=0;}void sent(unsigned int i){checkout(i+48);}/*******************************************/ /************************/void chuankou(uint f){/********串口发送*******/ init();sent(0);TI=0;init();sent(f);TI=0;TMOD=0x01;/*********************/}/**********************//*解码主函数*/void main(){TMOD=0x01; //选择方式1,定时器工作模式jj:do read=P3;while(read&0x10);//等待低电平delay_100us();//消抖100usdoread=P3;while(!(read&0x10));//等待高电平start_t0();doread=P3;while(read&0x10);//等待低电平TR0=0;//关闭定时器bj=TH0;if(bj>0x0c)//判断正常码和数据码result=jiema(); //调用解码函数if(result==0x1a) //1a音量增加按键{liushuideng();goto jj;}if(result==0x1e) //1e音量减少按键{fanliushuideng();goto jj;}chuankou(result);delay_9000us(); //显示延时display(result); //显示//chuankou(result);goto jj; //等待再次发送数据}附录三:元件清单表附录4 参考文献1 《实用电子系统设计基础》姜威. 北京理工大学出版社.2 《电子线路设计实验测试》罗杰,谢自美. 电子工业出版社.3 《单片机实验与应用系统设计》范蟠果. 国防工业出版社.4 《红外遥控在节能和无线操作方面的应用》王伟生,郑小真. 河南工业大学5 《单片机C语言开发技术》龚运新. 清华大学出版社。