基于AT89S52的学习型红外遥控器的设计.docx
《基于AT89S52的学习型红外遥控器的设计.docx》由会员分享,可在线阅读,更多相关《基于AT89S52的学习型红外遥控器的设计.docx(16页珍藏版)》请在冰豆网上搜索。
![基于AT89S52的学习型红外遥控器的设计.docx](https://file1.bdocx.com/fileroot1/2023-2/6/8f745b39-f2cb-4194-8b85-5f3fac9f4d38/8f745b39-f2cb-4194-8b85-5f3fac9f4d381.gif)
基于AT89S52的学习型红外遥控器的设计
单片机系统开发与应用工程实习报告
选题名称:
基于AT89S52的学习型红外遥控器的设计
系(院):
专业:
计算机科学与技术(嵌入式系统软件设计)
班级:
姓名:
学号:
指导教师:
学年学期:
2009~2010学年第2学期
2010年5月30日
摘要:
学习型红外线遥控器,通过自学习而拥有对多台电器的遥控功能。
该遥控器有两种状态:
学习状态和控制状态。
处于学习状态时,使用者每按一个控制键红外接收电路就开始接收外来红外信号,并将其转换为电信号,然后经过检波、整形、放大,再由单片机定时对其采样,将每个采样点的二进制数据以8位为一个单位,分别存放到指定的存储单元中去,供以后对该设备控制使用;处于控制状态时,使用者每按一个控制键单片机从指定的存储单元中读取二进制数据,串行输出(位和位之间的时间间隔等于采样的时间间隔)给信号保持电路,同时由调制电路进行信号调制,将调制信号经放大后,由红外线发射二极管进行发射,从而实现对该键对应设备功能的控制。
关键词:
学习型;红外线遥控器;学习状态;控制状态;AT89S52
1课题综述
1.1课题来源及意义
目前,人们的物质文化生活水平日益提高,各种各样的家用电器走进了千家万户,其中,大多数的家用电器都有各自不同的遥控器,人们常常为了控制某台电器到处寻找其对应的遥控器,这样就给人们的生活带来了很多步便。
为了解决这个问题,笨项目提出了一个多功能遥控器的设计方案:
该遥控器可以通过自学习而拥有对多台电器的遥控功能,既省时又省力,从而使人们免除同时面对众多遥控器的苦恼。
1.2预期目标
设计一种基于AT89S52单片机控制的红外线遥控器,具有以下功能:
1、适用于编码式红外线遥控型家用电器
2、可遥控多台家用电器
3、具有一个学习/控制复用键
4、可通过一个设备选择键和各个功能控制键实现对多台设备的常用功能的学习和控制
5、成本低,抗干扰能力强
1.3面对的问题
1、对于AT89S52单片机的了解及应用
2、对于抗干扰能力的解决
1.4需解决的关键技术
本项目是通过扫描按键的状态、单片机外中断0和定时/计数器程序来判断遥控器处于什么状态,实现什么功能,因此,对于功能键的设计和中断程序的设计是难点。
同时,对于红外发射和红外接收的工作原理和设计对于我们来说也是陌生的,都要从头开始,对其进行了解、掌握及使用,所以也是一个难题。
2系统分析
2.1涉及的基础知识
通过对本项目的了解,为了实现该项目的各个功能,必须要掌握以下知识点:
1、电源原理及设计
2、单片机复位电路工作原理及设计
3、单片机晶振电路工作原理及设计
4、按键电路的设计
5、驱动74LS07的特性及使用
6、一体化红外遥控接收器的特性及使用
7、AT89S52单片机引脚
8、单片机C语言程序设计
2.2解决问题的基本思路
2.2.1AT89S52单片机的基本知识
功能特性:
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
8位微控制器8K字节在系统可编程FlashAT89S52。
主要性能:
与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33Hz 、 三级加密程序存储器 、32个可编程I/O口线 、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。
图2-1AT89S52引脚图
2.2.2对于抗干扰能力的解决
该项目中采用一体化红外遥控接收器HX1838,该接收器的内部包括红外光敏二极管、谐振电路、放大电路、解码器、滤波器等,其工作电压为+5V,输出引脚直接输出不带副载波的负极性RC-5V信号,具有电路简单、灵敏度高、抗干扰性好等优点。
2.3总体方案
学习型红外线遥控器,通过自学习而拥有对多台电器的遥控功能。
该遥控器有两种状态:
学习状态和控制状态。
处于学习状态时,使用者每按一个控制键红外接收电路就开始接收外来红外信号,并将其转换为电信号,然后经过检波、整形、放大,再由单片机定时对其采样,将每个采样点的二进制数据以8位为一个单位,分别存放到指定的存储单元中去,供以后对该设备控制使用;处于控制状态时,使用者每按一个控制键单片机从指定的存储单元中读取二进制数据,串行输出(位和位之间的时间间隔等于采样的时间间隔)给信号保持电路,同时由调制电路进行信号调制,将调制信号经放大后,由红外线发射二极管进行发射,从而实现对该键对应设备功能的控制。
2.3功能模块框图
遥控器由红外接收及红外发射电路、复位电路、控制器AT89S52、按键及状态指示电路组成,其组成框图如图2-1所示。
图2-2基于AT89S52学习型红外线遥控器系统框图
3系统设计
3.1电路原理图
控制芯片选择AT89S52单片机,控制系统按最小化工作模式设计,P1.0接红外线发射,P1.6和P1.7接两个发光二极管用来指示遥控器的工作状态,P3.4和P3.5用来接收和发射红外线。
红外接收采用一体化红外遥控接收器(HX1838)。
其原理图如图3-1所示。
图3-1基于AT89S52学习型红外遥控器原理图
3.2实现方法
当红外遥控器的某个按键按下时,发射出的一组串行二进制编码脉冲,该脉冲由引导码、系统码、功能码和反码组成,通过设置这些编码以及码长便可区分不同的红外遥控器。
红外接收器负责红外信号的接收和放大并解调出TTL电平信号送至微处理器进行处理,微处理器通过比较和识别接收来的红外遥控编码便可执行相应的遥控功能,本系统的设计思想是不考虑红外编码方式,仅利用单片机AT89S52对多个红外遥控编码的脉冲宽度进行测量,并原封不动地把发射信号中高、低电平的时间宽度记忆至存储区的指定地址。
当要发射红外信号时,从存储区中还原出相应的红外遥控编码,并调制到38kHz的载波信号上,最后,通过74LS07驱动发光二极管发射红外信号,达到学习和发射的目的,从而实现一个遥控器控制多种遥控设备的功能。
3.3详细流程图
在程序中主程序完成初始化、按键扫描和调用信号发射程序的功能,学习功能通过中断0来完成。
程序的具体流程图如图3-2所示。
(a)主程序流程图(b)中断程序流程图
图3-2基于AT89S52学习型红外线遥控器程序流程图
4代码编写
4.1AT89S52单片机与各模块电路的连接端口分配
P1.6和P1.7分别接学习灯指示灯和发射指示灯
sbitstudylamp=P1^6;//学习指示灯
sbitlamp=P1^7;//发射指示灯
sbitstudykey=P3^2;//学习键(中断口)
sbitremotein=P3^4;//遥控信号输入口
sbitremoteout=P3^5;//遥控信号输出口
sbittxkey=P1^0;//发射键
4.2复位电路的设计
复位电路实现的是对单片机以及整个电路的初始化
uinti,j,m=255,n,k,s;//定义各个变量
ucharidataremotedata[206];//存脉冲宽度数据用
uinthead;//存起始位用
uintremdata;
clearmen()//初始化函数
{
studylamp=0;//关学习指示灯
lamp=0;//关发射指示灯
remoteout=0;//关遥控输出
remotein=0;
for(i=0;i<206;i++)//清内存
{
remotedata[i]=0x00;
}
IE=0x00;//中断允许控制寄存器置0
IP=0x01;//定义中断优先级
TMOD=0x22;//8位自动重装模式
PCON=0x00;//定时器溢出位清零
TH1=0xf3;//40khz初值
TL1=0xf3;
IT0=1;//脉冲触发方式,负跳变有效
EX0=1;//外中断允许
EA=1;//开总中断
}
定义延时1ms子程序
delay1ms(uintt)//1ms延时子程序
{
for(i=0;ifor(j=0;j<120;j++);
}
4.3按键电路设计的实现
通过扫描按键来判断实现的功能,并通过按键进入中断程序
keywork()//键功能键
{
if(txkey==0)
{
while(txkey==0);//等待键释放
ET1=1;TR1=1;//发起始位
for(i=head;i>0;i--)
{;}
remoteout=0;
ET1=0;TR1=0;
n=0;
while
(1)
{
if(remotedata[n]==0x00)//数据为0结束
{
delay1ms(10);
break;
}
for(i=remotedata[n];i>0;i--)
{
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
lamp=~lamp;n++;//偶地址不发脉冲
ET1=1;TR1=1;//奇地址发调制脉冲
for(i=remotedata[n];i>0;i--)
{;}
remoteout=0;
ET1=0;TR1=0;
n++;
}
}
}
4.4中断程序的实现
4.4.1定时器中断T1的服务程序
定时器中断T1的服务程序,实现控制红外发射灯是否发射。
当remoteout为低电平时,红外发射处于工作状态,会发出红外信号;当送入的为高电平时,红外发射不工作。
voidtime_intt1(void)interrupt3//定时器中断T1
{
remoteout=~remoteout;
}
4.4.2外中断0的服务程序
外中断服务程序实现的是接收遥控器发射的红外信号,判断其高低电平,并存入单片机指定的位置,以供当系统处于学习状态时,该红外遥控器进行学习,并控制家电的使用。
voidintt0(void)interrupt0//外中断0
{
ET1=0;TR1=0;EX0=0;EA=0;
head=0;studylamp=1;lamp=0;
while(studykey==0);//等待键释放
while(remotein==1);//等待遥控码输入
head=0;//读入起始位
while(remotein==0)
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
head++;
}
n=0;remdata=0x0000;
while
(1)
{
while(remotein==1)
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
remdata++;
}
if(remdata>m)//高电平>5ms退出
{
remotedata[n]=0x00;
EX0=1;EA=1;gotoend;
}
remotedata[n]=remdata;
n++;//存高电平脉宽数据
remdata=0x0000;//脉宽计数器清零
while(remotein==0)
{
_nop_();_nop_();_nop_();_nop_();_nop_();nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
remdata++;
}//低电平计数
remotedata[n]=remdata;//存低电平脉宽数据
n++;
remdata=0x00;
}
end:
lamp=1;studylamp=0;
}
4.5主函数的实现
主函数只需调用初始化函数实现电路复位,调用按键函数实现学习、控制功能。
main()
{
clearmen();
while
(1)
{
keywork();//按键扫描
}
}
5程序调试
各个函数实现后,对该函数整体实现,并进行调试了,调试过程中出现了一些低级错误,如变量的书写错误,定义的错误等等,但整体的模块规划设计实现跟设想的还是一样比较完整、正确的,故软件的实现还是比较顺利的。
6运行与测试
本项目设计的是一个多功能红外线遥控器,控制电路板的安装与调试在整个系统研制中占有重要位置,它是把理论付诸实践的过程,也是把纸面设计转变成实际产品的必经阶段。
在调试过程中药注意以下几个特点。
(1)正确使用测量仪器的接地端,仪器的接地端与电路的接地端要可靠连接。
(2)在信号较弱的输入端,尽可能使用屏蔽线连线,屏蔽线的外屏蔽层要接到公共地线上,在频率较高时要设法隔离连接线分布电容的电影,例如用示波器测量时应该使用使用示波器探头连接,以减少分布电容的影响。
(3)测量电压所用仪器的输入阻抗必须远大于被测处的等效阻抗。
(4)测量仪器的带宽必须大于被测量电路的带宽。
(5)正确选择测量点和测量。
(6)认真观察记录实验过程,包括条件、现象、数据、波形、相位等。
(7)出现故障时要认真查找原因。
在程序调试成功之后,我将该程序烧入AT89S52芯片中,并对整个系统进行了测试。
刚开始时,当按下学习键时,其学习指示灯不亮,于是,我用万能表对焊接的状态指示电路进行了测试,最后发现是与单片机的P1.6端口接入处没有焊实。
但经焊实后,发现跟我要系统实现的功能还是不完全,于是我又对程序进行了修改,经多次烧写、运行、调试,终于实现了学习型红外线遥控功能。
遥控器在使用时按下学习键,待学习指示灯亮后,用原遥控器对着红外接收头按下某一功能键,当学习指示灯灭时,就可按发射键进行遥控操作了。
本设计还有较多的扩展空间,若在系统中扩展一个存储器,再加入相应的按键就可以制作成一个学习型的万能遥控器。
总结
本次单片机系统开发与应用工程实习报告前后历时两周。
此次工程实习的前一周,我们对整个系统的进行了深入的了解,并对其进行了整体规划,分别划分为AT89S52控制器模块、红外接收电路模块、红外发射电路模块、状态指示电路模块、复位电路模块、电源电路模块。
当我把该系统的模块确定以后,就初步画出该系统的硬件电路原理图,经过确定以后,就开始了硬件电路的焊接。
经过对焊接的电路运行和测试成功后,就对软件设计进行了简单的设计。
实习的第二周主要是将程序烧写入硬件电路中,并对其进行运行与调试。
在学习这门课程时,感到单片机的概念抽象,对其中的引脚的分配、寄存器的功能等基本理论也不能很好地理解与掌握。
通过本次工程实习,我对学到的单片机知识有了更深一步的深入,而且,本次实习让我对于实践也有了基本认识。
刚开始时,我有的只是书本上的东西,只有表面记忆,通过该次实习,我对其有了进一步的了解,如AT89S52单片机芯片的具体功能、默认输出的值,元器件的如何正确焊接,如何验证元器件的焊接是否正确等等。
本次工程实习是本科学习阶段很有价值的理论与实践相结合的机会,这次实习能这么顺利的完成,首先感谢淮阴工学院、计算机工程学院提供的实践机会,同时也感谢实验室老师给我们提供的良好的实验环境。
当然,更要感谢一直陪伴在实验室的老师孜孜不倦的教诲、细心的指导和不懈的支持,以及同班同学的帮忙调试,让我学会了很多东西。
这次比较系统的学习型红外遥控器的设计提高了我运用所学的专业基础知识来解决面临实际问题的能力,让我见证了单片机应用的价值,同时也提高了我查阅各种文献资料、设计手册、设计规范以及软件编程的水平。
参考文献
1赵鑫,蒋亮,齐兆群等.数字电路设计.北京:
机械工业出版社,2005
2苏家健,曹柏荣,汪志锋.单片机原理及应用技术.北京:
高等教育出版社,2003
3李朝青.单片机原理及接口技术.北京:
北京航天航空大学出版色,2001
4胡汉才.单片机原理及其接口技术.北京:
清华大学出版社,2004.
5潭浩强.C语言程序设计.北京:
清华大学出版社.2005
6李华,李东.MCS51/98系列单片机原理与应用.北京:
机械工业出版社.1997
7杨居义,杨尧,杨晓琴等.单片机课程设计指导.北京:
清华大学出版社.2009
指导教师评语
学号
姓名
班级
选题
名称
基于AT89S52的学习型红外遥控器的设计
序号
评价内容
权重(%)
得分
1
考勤记录、学习态度、工作作风与表现。
5
2
自学情况:
上网检索机时数、文献阅读情况(笔记)。
10
3
论文选题是否先进,是否具有前沿性或前瞻性。
5
4
成果验收:
是否完成设计任务;能否运行、可操作性如何等。
20
5
报告的格式规范程度、是否图文并茂、语言规范及流畅程度;主题是否鲜明、重心是否突出、论述是否充分、结论是否正确;是否提出了自己的独到见解。
30
6
文献引用是否合理、充分、真实。
5
7
答辩情况:
自我陈述、回答问题的正确性、用语准确性、逻辑思维、是否具有独到见解等。
25
合计
指导教师(签章):
年月日