基于遥控器操作的两路独立单片机定时器.docx
《基于遥控器操作的两路独立单片机定时器.docx》由会员分享,可在线阅读,更多相关《基于遥控器操作的两路独立单片机定时器.docx(13页珍藏版)》请在冰豆网上搜索。
基于遥控器操作的两路独立单片机定时器
基于遥控器操作的两路独立单片机定时器
1实验目的
1、本设计通过使用红外遥控器控制单片机,实现对定时器的选择和定时。
2、遥控器:
遥控器的*键控制T1定时器,#键控制T2定时器,左右键用来调节被控制的定时器的时、分、秒的位,上下键用来调整选定位的时间设置的大小,从而实现对此定时器的时间的设定。
Ok键用来控制所选定的定时器的启动和停止。
3、LCD显示屏:
第一行显示T1定时器的相关信息包括有没有被选中(*)、时、分、秒的设定和最后面的1,2,3,用来控制被选中的定时器的秒、分、时的位选,从而按上下键来调整此位的时间的设定。
0,表示没有任何的位被选中。
第二行主要显示T2定时器相关信息,左边*表示T2被选中,否则没被选中,往右依次显示时、分、秒时间的设定。
4、蜂鸣器:
按键按下蜂鸣器响一下,定时时间到,蜂鸣器长响至按下Ok键。
本设计的优点:
1、物尽其用,单片机的15个I/O全部使用,由于本设计采用内部晶振,所以除了晶振两个端口和RST三个端口空闲,其余端口都物尽其用。
2、程序大小2K字节,占用所有ROM。
3、其中外部中断INT0和定时器T1配合使用作为红外编码解析,定时器T0为两个定时器的计时步长。
实现了一个遥控器对两路定时器进行定时和时间设置。
2硬件模块选取与系统方案论证
2.1单片机
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
概括的讲:
一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
本设计采用STC11F02E单片机作为中心控制单元,控制LCD显示的定时器的定时和时间设置,控制蜂鸣器的响停。
1、STC11F02E单片机简介
STC11F02E是宏晶科技设计生产的STC11/10xx系列单片机之一,其特点为:
高速,1个时钟/机器周期,增强型8051内核,速度比普通8051快8~12倍;宽电压,5.5~4.1V/3.7V;低功耗设计;工作频率,0~35MHz,具有2kB的片内Flash程序存储器、2kB的EEPROM存储器和256B的片内SRAM数据存储器,体积小价格低廉;20Pin贴片封装,共有16个I/O可用,1个串口,自带波特率发生器,2个16位定时器。
本设计选用STC11F02E单片机因为它体积较小,且I/O口刚好够用,适合在较小的板子上集成,能满足成品体积尽量小的要求。
因此本设计采用此型号单片机,做到物尽其用,提高效率。
2、单片机管脚图
串行口做主机通信时,可控制串口通信在[RxD/P3.0,TxD/P3.1]和[RxD/Pl.6,TxD/Pl.7]之间任意切换,实现2组串口。
一般都将自己的串行口设置在【RxD/Pl.6,TxD/Pl.7],而将[P3.0,P3.1]口作为ISP下载的专用通信口,当然也可以当用户的普通I/O口用。
若用户将[P3.0,P3.1]作串行口通信用,则必须在ISP下载程序时选择“下次冷启动时,PI.0/Pl.1为0/0才可下载程序”。
P4.7/RST既可作复位脚用,也可作普通I/0口用,如将P4.7/RST当I/0口使用,必须使用外部复位。
单片机管脚图如图1所示。
图1单片机管脚图
2.2LCD1602液晶显示屏
LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。
LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,即可以显示出图形。
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5*7或者5*11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
由于本实验只需要显示时间数字,因此选用LCD1602作为显示屏足以。
1、管脚功能
1602采用标准的16脚接口,其中:
第1引脚:
GND为电源地
第2引脚:
VCC接5V电源正极
第3引脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4引脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5引脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
第6引脚:
E(或EN)端为使能(enable)端,高电平
(1)时读取信息,负跳变时执行指令。
第7~14引脚:
D0~D7为8位双向数据端。
第15~16脚:
空脚或背灯电源。
第15引脚背光正极,第16引脚背光负极。
2、特性
LCD1602的工作电压为3.3V或5V,对比度可调。
内含复位电路,提供各种控制命令,如:
清屏、字符闪烁、光标闪烁、显示移位等多种功能。
有80字节显示数据存储器DDRAM,内建有192个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5*7的字符发生器CGRAM。
其微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。
2.3红外模块
红外遥控HS0038B黑色环氧树脂封装,不受日光、荧光灯等光源干扰,内附磁屏蔽,功耗低,灵敏度高。
在用小功率发射管发射信号情况下,其接收距离可达35m。
它能与TTL、COMS电路兼容。
HS0038为直立侧面收光型。
它接收红外信号频率为38kHz,周期约26μs,同时能对信号进行放大、检波、整形,得到TTL电平的编码信号。
三个管脚分别是地、+5V电源、解调信号输出端。
在HS0038的电源端与信号输出端之间接上一只二极管及一只发光二极管后,再配上规定的工作电源(为+5V),当手拿遥控器对着接收头按任意键时,发光二极管会闪烁,说明红外接收头和遥控器工作都正常;如果发光二极管不闪烁发光,说明红外接收头和遥控器至少有一个损坏。
只要确保遥控器工作正常,很容易判断红外接收头的优劣。
2.4蜂鸣器
蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种,这里的“源”并不是指电源,而是震荡源。
这也是有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声的原因。
一般来说,有源蜂鸣器比较贵一些,因为里面多个震荡电路。
当然不是有源蜂鸣器就比无源蜂鸣器要好,而是要看应用场合了,有源蜂鸣器内部带震荡源,所以只要一通电就会叫,这种蜂鸣器多适用于提示或报警,而无源蜂鸣器则一般适用于需要发出不同音调声音的地方,即音乐或其它有音调变化的声音。
这个定时器上的蜂鸣器是声音示警用的,所以用的是有源蜂鸣器。
2.5系统方案论证
为了实现设计系统整体功能,红外解码部分是核心,红外解码指将遥控发射器所产生的红外遥控编码脉冲所对应的键值翻译出来的过程。
通常有硬件解码和软件解码两种方案,方案一:
使用专用遥控器作为控制信号发出装置,当按下遥控器的设置键后,一体化红外接收装置接收到遥控器发出的设置控制信号,然后将信号送到专用的解码芯片中进行解码,解码后将信号送到单片机,由单片机查表判断这个信号是不是设置信号,当确认是设置信号后,启动设置子程序,那么以后接收到的红外信号就是设置的时间信号了,单片机通过查表确定这是确认操作后,可以通过可控硅控制电源通断。
设计原理图如图1所示。
方案二:
我们采用普通的家用电器遥,控器作为控制信号发出装置,当按下遥控器的设置键后,红外接收装置接收到遥控器发出的红外线控制信号,然后把这个信号转换成电信号,传到单片机中,利用单片机对这个信号进行解码,解码完成后查表确定是不是设置信号,当这个信号是设置信号后,启动设置子程序,那么以后接收到的红外信号就是设置的时间信号了。
方案一设计原理图
方案二设计原理图
方案一:
为硬件解码方案,硬件解码需要使用与遥控器相配套的专用的解码器芯片,而解码芯片一般不易得到,价格也较贵,或者自行开发解码电路(但电路太复杂,性能欠佳)。
方案二:
为软件解码方案,软件解码可以不考虑遥控器的芯片是什么型号的,因为我们只需检测到它的发射编码,然后用软件方式来对它进行处理,从而得到所要的信息。
软件解码具有灵活、硬件精简(仅需集成红外接收头和一片单片机)、可靠性高,成本低等特点。
经以上的论证,本设计采用软件解码方案,成本低,方便实现,并且系统整体性能和可靠性高。
3硬件系统设计思路及原理
3.1系统组成
该课题的硬件主要由以下几个部分组成:
单片机最小系统、LCD1602显示部分、电源部分、红外接收头部分以及蜂鸣器部分。
系统原理图如下:
图2系统原理图
系统的PCB图如下:
图3系统PCB图
3.2最小系统
最小系统主要由时钟电路、复位电路、电源电路组成。
1、单片机的晶体震荡电路
对于常见的时钟电路就是外接晶振。
必须将单片机的时钟引脚XTAL1和XTAL2接在外部的时钟晶振上,同时在其外部还要加上两个电容C1和C2,电容一般选择30pF的。
对于本系统而言,采用的内部时钟,这样避免了外接晶振,简化了硬件电路。
最终采用6M的内部时钟电路。
对于内部时钟的选择我们可以在下载程序的时候,在下载程序的软件上进行设置,选择内部时钟。
2、单片机的复位电路
单片机的复位电路就是构建一个复位信号在单片机的复位引脚上。
当复位的引脚信号产生时,会让单片机复位,造成的影响的就是寄存器的值回复的最开始的默认值,这就让单片机里面的程序从头执行,同样就很好的避免了单片机内的程序跑飞与死机。
本系统采用的手动复位电路。
该电路也是一个上电高电平复位电路,当我们手动按下复位开关时,复位引脚就会介入高电平,这样就实现了单片机的复位。
3、电源模块
电源是给整个系统供电的部分,关乎着整个系统能否正常运行。
本系统我们采用220V转5V的电源供电,极大地保证了电源的稳定性
3.3LCD1602
红外通讯的建立之后,我们还需要一个直观的显示器件,这里我们使用LCD602作为显示器件,同时通过蜂鸣器来提示数据的传输,这样我们就实现了整个系统的控制与检测,同时通过LCD1602也可以有效的检测我们的数据是否就收正确,本次设计使用LCD1602进行显示,先对LCD1602进行初始化,初始化操作分别是对LCD1602写入命令0x38显示设置,写入命令0x01进行清屏操作,写入0x06显示光标移动设置,最后写入命令0x0c显示开及光标设置。
初始化完成之后就可以指定显示位置进行显示。
电路如下图所示。
图4LCD1602模块
3.4报警
1、设定时间包括秒钟、分钟、时钟;
2、通过定时器T0设置中断,62.5ms进入一次中断,当16次中断后时间到达一秒。
在中断内秒钟自减1;当秒钟自减1由设定的时间减到0时,停止自减并发出报警。
3、定时器选择和模式选择:
此单片机拥有两个定时器,分别是T0定时器和T1定时器,T1定时器和外部中断INT0用来控制外部红外的解码,T0定时器用来控制两个独立的内部T1-CLOCK和T2-CLOCK两个定时器。
因为本次设计中,实时显示选取的定时器是T0定时器,采用工作方式1,在中断中重装初值,方便完成定时器的逻辑业务。
4、通过选择通道来设定T1-CLOCK和T2-CLOCK的时间,从而实现定时,两个定时器可以独立工作,计时到0时蜂鸣器发声警报。
报警使用的蜂鸣器设计电路如下图5所示:
图5蜂鸣器设计电路图
3.5红外接受头
HS0038黑色环氧树脂封装,不受日光、荧光灯等光源干扰,内附磁屏蔽,功耗低,灵敏度高。
在用小功率发射管发射信号情况下,其接收距离可达35m。
它能与TTL、COMS电路兼容。
HS0038为直立侧面收光型。
它接收红外信号频率为38kHz,周期约26μs,三个管脚分别是地、+5V电源、信号线。
图6HS0038
4、软件设计
4.1系统软件设计说明
在单片机大型项目里面,除了对单片机控制系统设计、外围电路的设计意外时,很大的一部分时间都会花在对每个硬件模块如何编程如何设计应用程序这个方面。
所以软件的编写在单片机项目里面占有极高的比重,对于本次设计来说更甚。
数据处理和过程控制着两个类型可组成为一个单片机项目。
数据处理一般都包含很多方面,例如对传感器传输来的数据进行收集、对干扰信号进行滤波处理、不同信号量之间进行转换等等。
而过程控制一般都是用微处理器按照一定的方式对数据进行处理运算,最终输出,以便控制生产。
想要完成一个产品设计所要求的性能指标,那么在进行软件设计的时候,一般都需要将整个过程分成好几块去设计,这种方法叫模块化。
意思就是将某独立的且能够完成某一特定功能的程序段落单独写在一个文件里面比如A.c、A.h分别是程序段和头文件,这种方法叫模块程序设计法。
模块程序有许许多多的优点。
第一:
将程序模块化非常方便编写和调试,这一模块在很多情况下可以被多个任务在不同的目的下使用、模块程序可以将设计者与设计者之间分开,并且可以利用已有的程序模块。
第二:
程序模块化非常容易寻找BUG,因为每一个模块都很清楚的完成某一特定任务,当某个模块运行出问题时,可以很快的寻找到对应的程序段落,非常的便于程序的维护。
第三:
将程序模块化可以使得模块的方式保证程序有更好的可读性,移植性以及升级修改等后期的操作。
程序模块化还有很多优点,需要自己去发掘,别人怎么说都是别人的,始终不是你的。
模块程序化有两个原则:
首先是尽可能以少取多,顾名思义就是以很少量的模块尽可能得到多的产品。
不仅如此,还要在满足需要的基础上尽最大可能使得产品的参数最优化,即产品精度高、性能稳定等。
本软件系统也是采用模块化编写的方法。
将整个结构分为三个部分:
LCD1602驱动代码,HS0038红外接收头解码代码,定时器逻辑结构的编写。
4.2系统软件设计平台简介
kielμVision5是有美国KeilSoftware公司发布的,这个平台的功能非常强大。
在意在上面编辑多种语言,例如C语言,汇编语言。
但是我们在kielμVision5上主要应用的还是C语言因为C语言与其他语言相比有很多明显的优势,在编写完程序之后,我们可以将程序进行模拟的仿真,kielμVision5的模拟仿真效果比较理想。
可以帮助我们准确的分析电路。
C51工具包的整体结构,μVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及C51编译器编译生成目标文件(.obj)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.abs)。
abs文件由OH51转换成标准的hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
4.3系统主程序设计
本系统以单片机为核心,以遥控器为输入,通过红外接收装置对信息进行接收,通过单片机得到键值,然后控制单片机内的定时器,改变定时时间,同时显示相应的数据在LCD1602上。
系统总体设计框图如图所示:
系统总体设计框图
系统程序设计框图如下:
系统程序设计框图
系统核心代码如下:
while
(1)
{
if(Dr_Data)
{
BEE=RING;Delay2ms();Delay2ms();Delay2ms();
switch(Dr_Data)
{
caseDr_star:
T_Flag=0;LCD_Display_Byte(0x80,'*');LCD_Display_Byte(0xC0,'');LCD_Display_Byte(0x8F,T_BIT+0x30);break;
caseDr_sharp:
T_Flag=1;LCD_Display_Byte(0x80,'');LCD_Display_Byte(0xC0,'*');LCD_Display_Byte(0x8F,T_BIT+0x30);break;
caseDr_left:
T_BIT=(T_BIT+1)&3;LCD_Display_Byte(0x8F,T_BIT+0x30);break;
caseDr_right:
T_BIT=(T_BIT+3)&3;LCD_Display_Byte(0x8F,T_BIT+0x30);break;
caseDr_up:
if((T_Flag==1)&&(T2_RUN))break;
if((T_Flag==0)&&(T1_RUN))break;
if(T_Flag)T_Temp=T2_CLOCK;elseT_Temp=T1_CLOCK;
switch(T_BIT)
{
case1:
T_Temp+=1;break;
case2:
T_Temp+=60;break;
case3:
T_Temp+=3600;break;
}
if(T_Flag)T2_CLOCK=T_Temp;elseT1_CLOCK=T_Temp;
break;
caseDr_down:
if((T_Flag==1)&&(T2_RUN))break;
if((T_Flag==0)&&(T1_RUN))break;
if(T_Flag)T_Temp=T2_CLOCK;elseT_Temp=T1_CLOCK;
switch(T_BIT)
{
case1:
if(T_Temp>=1)T_Temp-=1;break;
case2:
if(T_Temp>=60)T_Temp-=60;break;
case3:
if(T_Temp>=3600)T_Temp-=3600;break;
};
if(T_Flag)T2_CLOCK=T_Temp;elseT1_CLOCK=T_Temp;
break;
caseDr_OK:
if(T_Flag)
{
T2_RUN=~T2_RUN;
SYSCLOCK_2=0;
}else
{
T1_RUN=~T1_RUN;
SYSCLOCK_1=0;
}
BEE=!
RING;break;
}
BEE=!
RING;
}
LCD_Display_Number(0x80+5,T1_CLOCK/3600);
LCD_Display_Number(0x80+8,T1_CLOCK%3600/60);
LCD_Display_Number(0x80+11,T1_CLOCK%60);
LCD_Display_Number(0xC0+5,T2_CLOCK/3600);
LCD_Display_Number(0xC0+8,T2_CLOCK%3600/60);
LCD_Display_Number(0xC0+11,T2_CLOCK%60);
Dr_Data=0x00;
Delay50ms();
}
5系统组装调试
硬件的组装首先,利用电烙铁对各个器件进行焊接,之后通电测试电路是否正常,如果电路可以正常工作。
然后对单元电路的逐个测试,我们将会通过一个简单的测试程序来对串口通信、以及蜂鸣器电路、LCD1602显示电路、系统USB电源供电电路调试。
待所有的单元模块测试完毕,将在keil中设计好的软件,通过串口下载的硬件电路的单片机中。
完成红外信号的接收,控制单片机定时器的时间。
通过对系统原理的学习,电路的设计,软件的编写,最后就需要对整个系统进行调试,验证系统各项功能是否正常。
5.1系统硬件部分调试方法
系统硬件调试是系统的难点,因为硬件容易出现一些小问题,例如焊接接触不良,接线不正确等等。
对于硬件调试,主要是按照以下部分来进行:
(1)检验所有焊点,看看是否存在短路或者接触不良的情况存在;
(2)对整个电路通电测试,检查所有硬件芯片的输入输出电压是否在合理范围内;
(3)最后分别对各个子模块电路的功能进行测试。
5.2系统软件调试方法
通过硬件调试后,需要对系统烧录程序进行测试,此时需要USB转串口模块,ISP软件下载。
在进行串口程序测试时,如果要检测这个程序是否能够实现正常的功能和程序设计是否完善时,则需要将这些串口与单片机进行连接,这时就需要用到串口调试工具。
在本设计中,在进行串口测试时所选用的串口调试工具是串口调试助手,它的主要功能是可以按照设定的串口、波特率向单片机发送数据。
5.3调试结果分析与总结
在对实物进行调试的过程中出现了一些问题,如硬件的工作表现的很不稳定,主要是表现在LCD1602显示的路部分和单片机系统部分,之后进行了分析,对电路和整体接线进行了修改和调整,解决了问题。
图7系统实物图
6结论
本次设计是利用红外接收头,接收红外遥控器的信息,然后分析键值,根据不同的键值,做出不同的动作。
最终实现通过遥控器控制两路单片机内定时器的时间。
通过本系统实现了理论和实际结合起来,同时能够结合资料和有关的文献进行整理和学习,锻炼了自己的学习能力和动手的能力。
整个设计通过元器件的选型以及相应信号处理电路的设计,虽然在设计时都尽量采用简单但功能显著,由于硬件的合理搭建同时也为软件提供了很多方便,为软件稳定、可靠的运行打下基础。
在这次设计中,能够将以前的被动学习转化为主动学习,同时也参考了很多书籍和文献,能够做到知识的灵活运用和其中重点的把握。