红外遥控万年历本科毕设论文.docx
《红外遥控万年历本科毕设论文.docx》由会员分享,可在线阅读,更多相关《红外遥控万年历本科毕设论文.docx(32页珍藏版)》请在冰豆网上搜索。
红外遥控万年历本科毕设论文
请在此处放置您学校的LOGO!
!
!
基于单片机制红外遥控万年历
学院:
__________________
专业:
__________________
姓名:
__________________
学号:
__________________
2013年月日
摘要
本文介绍了一款能够实现可以遥控设置时间,日期,闹钟的电子万年历,该设计模型可以解决壁挂式电子万年历的时间,日期,闹钟调整不方便的问题。
系统主要由STC89C52单片机控制模块,电源模块,DS1302时间生成模块,红外遥控模块,LCD12864显示模块组成。
由电源模块提供保证整个系统的运行所城电压;由时间生成模块生成的时间日期通过单片机模块一系列处理后,通过液晶模块实时显示输出年,月,日,时,分,秒和星期等信息。
配合红外遥控模块对时间日期的调整,使得该系统操作简单方便,非常实用。
关键词:
万年历、单片机STC89C52、DS1302、LCD12864、红外遥控
目录
前言4
第一章系统总体设计
1.1单片机主控系统设计方案6
1.2时钟芯片系统设计方案6
1.3按键控制系统设计方案7
1.4显示系统设计方案....................................................................................................8
1.5系统设计原理框图7
第二章红外遥控万年历的硬件设计8
2.1单片机最小系统设计8
2.2DS1302时钟模块设计8
2.3红外编解码模块设计:
9
2.4LCD12864显示模块设计10
第三章红外遥控万年历的软件设计12
3.1主程序设计12
3.2时钟模块驱动设计14
3.3阴历时间转换程序设计14
3.4红外接收接码驱动设计14
3.5红外编码发射驱动设计14
第四章系统调试15
4.1硬件系统调试14
4.2软件系统调试14
参考文献4
附录
前言
课题的背景
万年历是我国古代传说中最古老的一部太阳历。
为纪念历法编撰者万年的功绩,便将这部历法命名为“万年历”。
而现在所使用的万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体阳历或阴历的日期的年历,方便有需要的人查询使用,与原始历法并无直接联系。
随着新技术的不断开发与应用,近年来单片机发展十分迅速,一个以微机应用为主的新技术革命浪潮正在蓬勃兴起。
单片机具有集成度高,通用性好,功能强,特别是体积小,重量轻,耗能低,可靠性高,抗干扰能力强和使用方便等独特优点,在数字、智能化方面有广泛的用途。
单片机的应用已经渗透到工业控制、家用电器、通信设备、信息处理、尖端武器等各个领域。
而随着单片机的发展,人类用于计时的工具也在不断发展更新,单片机技术使得万年历有了新的发展方向。
目前世界上单片机年产量已达十多亿片,通常是当年微处理器产量的4-5倍以上。
用最少的芯片就能实现最强大的功能,这是将来电子产品的主流方向,它将无可置疑地一步步取代其它同类产品,其数量之大和应用面之广,是其它任何类型的计算机所无法比拟的。
以基于单片机的万年历作为设计的课题,因为它有很好的开放性和可发挥性,对本人我单片机的水平对应的要求比较高,不仅考察了对单片机的掌握能力而且强调了对单片机扩展的应用。
另外液晶显示的万年历已经越来越流行,特别适合在家庭居室、办公室、大厅、会议室、车站和广场等地方使用,它具有显示清晰直观、走时准确、可以进行夜视等功能,并且还可以扩展出其它多种功能,同时将其制成一份精致的成品可作实用的展品。
所以,电子万年历作为设计课题很有价值。
课题的主要工作
本论文主要研究基于单片机的万年历设计。
当程序执行后,LCM12864显示即时时间、年月日、星期、天干地支、温度等。
设置4个操作键:
KEY1,设置键;KEY2,跳出键;KEY3,上调键;KEY4,下调键。
本设计的主要内容:
1、了解单片机技术的发展现状,熟悉万年历各模块的工作原理;
2、选择适当的芯片和元器件,确定系统电路,绘制电路原理图,尤其是各接口电路;
3、熟悉单片机使用方法和C语言的编程规则,编写出相应模块的应用程序。
设计目标
设计目标:
使基于STC89C52单片机的万年历实现以下三个功能:
1、具有年、月、日、星期、时、分、秒的显示功能;
2、具备年、月、日、星期、时、分、秒的校准功能;
3、具有闹钟时间的设置和报警提示功能,具有闹钟的打开关闭功能;
4、具有整点报时的功能;
5、具有用红外遥控器操作的功能。
第一章系统总体设计
1.1单片机主控系统设计方案
单片机也被称为微控制器(Microcontroller),是以一个大规模集成电路为主组成的微型计算机,在一个芯片内含有计算机的基本功能部件:
中央处理器CPU、存储器和I/O接口,CPU通过内部的总线和存储器、I/O接口相连。
单片机以其卓越的性能,得到了广泛的应用,已深入到各个领域。
单片机应用在控制领域中,具有如下特点:
单片机具有集成度高,通用性好,功能强,特别是体积小,重量轻,耗能低,成本低,可靠性高,种类多,型号全,抗干扰能力强和使用方便等独特优点,在数字、智能化方面有广泛的用途。
最重要的是可以采用C语言开发环境,具有友好的人机互交环境。
大多数单片机都提供基于C语言开发平台,并提供大量的函数供使用,这使产品的开发周期、代码可读性、可移植性都大为提高。
综上:
本系统的主控芯片选择80C51家族的STC89C52RC单片机,它具备上面所述的所有特点,能以很高的性价比来满足我们的设计需求。
1.2时钟系统设计方案
方案一:
不使用芯片,采用单片机的定时计数器
这种方法原理是利用单片机芯片的定时器来产生固定的时间,模拟时钟的时,分,秒.如:
利用AT80C52芯片,定时器用工作方式1,每50ms产生一个中断,循环20次,即1s周期.每一个周期加1,那么1min为60个周期,1h就是60*60=3600个周期,一天就是3600*24=86400个周期。
此方法优点是可以省去一些外围的芯片,但这种方法只能适用于一些要求不是十分精确,不做长期保留的场合。
方案二:
并行接口时钟芯片DS12887
特点:
采和单片机应用系统并行总线(三总线)扩展的接口电路,采用这种接口电路具有操作速度快,编程方便的优点。
但是对于80C52单片机来说,低位地址线要通过锁存器输出,还要地址译码器,而且并行口芯片的体积相对较大。
方案三:
串行接口时钟芯片DS1302
优点:
它采用简单的三线制串行接口与单片机连接,使用简单,接口容易,与微型计算机连线较少等特点,在单片机系统尤其是手持式信息设备中己得到了广泛的应用。
因次,我选择了串行时钟芯片DS1302。
1.3按键控制系统设计方案
在对日期和时间进行切换显示,对日期和时间进行调节校准,对闹钟进行设置的过程中,系统需要产生激励电流,因此需要用按键。
按键设计一般有两种方案:
方案一:
使用独立式键盘。
独立式键盘是指直接用I/O口线构成的单个按键电路。
独立式按键硬件电路设置简单,软件程序编写也相对容易。
如下图所示:
图1.3.1独立键盘原理图
方案二:
矩阵键盘,它的缺点是占用IO口太多,如下图所示:
图1.3.2矩阵键盘原理图
根据现实需求,本系统创新性的抛弃这两种方案,采用红外遥控器做为系统的按键,红外遥控器可以不受位置的限制来对万年历功能进行调整和设置,从而摆脱了壁挂式万年历操作不方便的缺点,最大限度的给人带来方便。
红外
1.4显示模块选择
方案一:
LED数码管显示
特点:
数码管显示比较常用的是采用CD4511和74LS138实现数码转换数码显示分动态显示和静态显示,静态显示具有锁存功能,可以使数据显示得很清楚,但浪费了一些资源。
目前单片机数码管普通采用动态显示,编程简单,但只能显示数字,不能显示中文。
方案二:
LCD1602
特点:
能够显示英文和数字。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号。
方案三:
LCD16824
作为一种输出方式,液晶显示最大的特点就是能够实现友好的人机界面,它己经广泛应用于现代工业控制和智能化仪器仪表等领域,它己经成为单片机就用开发领域典型模块之一。
能够方便的显示文字和数字。
因此我选择LCD16824作为显示模块。
1.5系统设计原理框图
图1.4红外遥控万年历系统原理框图
第二章红外遥控万年历硬件设计
2.1单片机最小系统设计
2.1.1STC89C52具有下列主要性能:
·8KB可改编程序Flash存储器(可经受1000次的写入/擦除周期)
·全静态工作:
0Hz~24MHz
·三级程序存储器保密
·128×8字节内部RAM
·32条可编程I/O线
·2个16位定时器/计数器
·6个中断源
·可编程串行通道
·片内时钟振荡器
2.1.2STC89C52的引脚及功能
STC89C52单片机的管脚分布如下图所示。
图4-2STC89C52的管脚
2.1.3晶振电路
图2晶振电路
在晶振电路中,C1、C2为晶振的负载电容,分别接在晶振的两个脚上和对地的电容,电路中取了30PF。
晶振引脚的内部通常是一个反相器。
在晶振输出引脚XO和晶振输入引脚XI之间用一个电阻连接,很多芯片的引脚内部已经包含了这个电阻,引脚外部就不用接了。
这个电阻是为了使反相器在振荡初始时处与线性状态,反相器就如同一个有很大增益的放大器,以便于起振。
2.1.4复位电路
图3复位电路
单片机复位电路有上电自动复位和手动复位两种方式。
上电复位要求接通电源后,自动进行复位操作。
手动复位要求接通电源的前提下,在单片机运行的条件下,在单片机运行期间,用按钮开关操作使单片机进行复位的操作。
这里采用的是手动复位。
2.2DS1302时钟模块设计
2.2.1DS1302芯片介绍
低功耗时钟芯片DS1302可以对年、月、日、星期、时、分、秒进行计时,且具有闰年补偿等多种功能。
(1)DS1302的性能特性
·实时时钟,可对年月日,时分秒,星期以及带闰年补偿的年进行计数;
·具有31×8位的RAM用于数据暂存;
·最少三个I/O引脚即可与MCU进行连接;
·较宽的电压工作东围3.3-5.5V;
·低电压时功耗极低;
·具有单字节或多字节(脉冲方式)两种数据读写传送方式;
·可选的慢速充电(至VCC1)的能力。
(2)DS1302管脚图
图2.2.1DS1302管脚图
如果在传送过程中置RST为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。
上电运行时,在VCC>=2.3V之前,RST脚必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
DS1302的管脚图如图4-3所示,内部结构图如图4-4所示,表4-2为各引脚的功能。
图2.2.2DS1302内部结构图
表2-2-1DS1302引脚功能表
引脚号
引脚名称
功能
1
VCC2
主电源
2,3
X1,X2
振荡源,外接32768HZ晶振
4
GND
地线
5
RST
复位/片选线
6
I/O
串行数据输入/输出端(双向)
7
SCLK
串行数据输入端
8
VCC1
后备电源
DS1302的控制字如图4-5所示。
控制字节的最高有效位(位7)必须是逻辑1;如果它为逻辑0,则不能把数据写入到DS1302中。
位6如果为0,则表示存取日历时钟数据;为1表示存取RAM数据。
位5~1(A4~A0)指示操作单元的地址。
最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。
控制字节总是从最低位开始输入/输出。
图2.2.3控制字节的含义
DS1302的数据读写时序如下图:
图2.2.4数据读写程序
DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表3-3,其中奇数为读操作,偶数为写操作。
表2.2.3DS1302的日历、时钟寄存器及其控制字
寄存器
名
命令字
取值
范围
各位内容
写操作
读操作
7
6
5
4
3
2
1
0
秒寄存器
80H
81H
00-59
CH
10SEC
SEC
分钟寄存器
82H
83H
00-59
0
10MIN
MIN
小时
寄存器
84H
85H
01-12或
00-23
12/
24
0
10
AP
HR
HR
日期
寄存器
86H
87H
01-28,29,
30,31
0
0
10DATE
DATE
月份寄存器
88H
89H
01-12
0
0
0
IOM
MONTH
周日寄存器
8AH
8BH
01-07
0
0
0
0
0
DAY
年份寄存器
8CH
8DH
00-99
10YEAR
YEAR
时钟暂停:
秒寄存器的位7定义位时钟暂停位。
当它为1时,DS1302停止振荡,进入低功耗的备份方式。
通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。
当它为0时,时钟将开始启动。
AM-PM/12-24[小]时方式:
[小]时寄存器的位7定义为12或24[小]时方式选择位。
它为高电平时,选择12[小]时方式。
在此方式下,位5是AM/PM位,此位是高电平时表示PM,低电平表示AM,在24[小]时方式下,位5为第二个10[小]时位(20~23h)。
2.2.2DS1302的应用
实时时钟芯片DS1302采用串行数据传输,可为掉电保护电源提供可编程的充电功能,也可以关闭充电功能,芯片采用32768Hz晶振。
要特别说明的是,备用电源BT1可以用电池或超级电容(10万μF以上)。
虽然DS1302在主电源掉电后耗电很小,但如果要长时间保证时钟正常,最好选用小型充电电池。
如果断电时间较短(几小时或几天),可以用漏电较小的普通电解电容代替(100μF就可以保证1小时的正常走时)[9]。
DS1302在第一次加电后,需进行初始化操作。
初始化后就可以按正常方法调整时间及闹铃。
DS1302的时钟电路如图3-7所示。
图2-2DS1302时钟电路
2.3红外编解码模块设计
图2.3.1HS0038红外接收电路
2.3.1概述
一体化接收头(HS0038)接收遥控器用来产生遥控编码脉冲,完成对遥控信号的放大、检波、整形、解调出遥控编码脉冲。
遥控编码脉冲是一组串行二进制码,对于一般的红外遥控系统,此串行码输入到单片机,并由其内部CPU完成对遥控指令解码,并执行相应的遥控功能。
2.3.2SMOO38引脚功能
表2.3.1HS0038引脚功能
引脚
符号
功能说明
1
OUT
输出一组串行二进制码遥控编码脉冲
2
VSS
接电源(+5V)
3
GND
接地
2.3.3二进制码的解调
图13二进制码的解调过程
红外接收头接收到遥控信号需先进行解调,其解调过程如图13所示,当接收到调制信号时,输出高电平,否则输出为低电平,是调制的逆过程。
HS0038是一体化集成的红外接收器件,直接就可以输出解调后的高低电平信号。
2.3.4红外信号的调制和发射
红外信号的调制和发射由单片机最小系统、矩阵编码键盘和红外信号发射电路组成。
单片机最小系统在前面介绍中已经提到,这里就不再赘述。
2.3.5红外发射电路
图15红外发射电路
如图所示,经单片机调制后的编码信号由单片机的P3.2口输出,经红外发射二极管D2发射出去。
2.7.2遥控器键盘编码电路
当单片机检测到有按键被按下时,就发射与之相对应的二进制编码信号,按键和二进制编码信号的对应关系见表5。
二进制信号(如图a和b所示)的调制过程(如图c所示)由单片机来完成,它采用PPM编码(如图d所示)。
单片机把编码后的二进制信号调制成频率为38kHz的间断脉冲串,相当于用二进制信号的编码乘以频率为38kHz的脉冲信号得到的间断脉冲串,也即是调制后用于红外发射二极管发送的信号。
图a二进制码1图b二进制码0
图c二进制信号的调制
图dPPM编码格式
表5按键功能及其与遥控编码的关系
按键编号
对应的遥控编码值
实现的功能
S1
0x01
用于选择设置的标志位
S2
0x02
确定所设定的值
S3
0x03
闹钟停闹(蜂鸣器停止响)与开启
S4
0x04
调节键+
S5
0x05
调节键-
2.4LCD显示模块设计
带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.
本设计中采用的LCD12864的各个功能引脚如下:
2.4.1LCD12864内部结构图:
图2.4.1LCD12864的逻辑电路图
2.4.1LCD12864应和电路图:
图2.4.2STC89C52与LCD12864液晶的接口电路
根据以上电路原理图中液晶的各引脚与单片机的接法,可得本设计的液晶模块电路如图4-11所示。
VSS接地;数字电源VDD接+5V;对比度控制电压V0接电位器,可通过调节电位器调整液晶亮度;数据、指令选择信号RS接单片机P2.0口;读写选择信号R/W接单片机P2.1口;单片机读、写选通信号/RD、/WR通过与非门接液晶的读写使能信号E;DB0~DB7分别接单片机的P0.0~P0.7口;复位端RST接P2.4口、选屏显示端PSB接P2.6端口,背光正电源LEDA接+5V;液晶驱动电压VEE、背光负电源LEDK接地。
第三章红外遥控万年历软件设计.
3.1主程序设计
主程序的功能:
以80C52为核心,处理外转电路传进来的信号,实现时钟数据的读取,保存,显示其及键盘操作。
流程图如下所示:
3.2时钟模块DS1302驱动设计
3.3阴历程序设计
阴历程序的实现是要靠阳历日期来推算的。
要根据阳历来推算阴历日期,首先要设计算法。
推算方法是,根据阳历当前日期在一年中的天数来计算阴历日期。
阳历一个月不是30天就是31天(2月除外,闰年2月为29天,平年2月为28天)。
阴历一年有12个月或13个月(含闰月),一个月为30天或29天。
如果把一个只有29天的月称为小月,用1为标志,把30天的月称为大月,用0为标志,那么12位二进制就能表示一年12个月的大小。
如果有闰月,则把闰月的月份作为一个字节的高4位,低4位表示闰月大小,大月为0,小月为1,这样一个字节就包括了所有闰月的信息。
阴历春节和阳历元旦相差的天数也用一个字节表示。
总共用4字节就可以存储一年中任何一天阳历和阴历的对应关系的有关数据,例如2004年的阴历和阳历对应关系如表4-1所示。
表3-32004年的阴历和阳历对应关系表
月份
1
2
3
4
5
6
7
8
9
10
11
12
闰2月
大小
小
大
大
大
小
大
小
大
小
大
小
大
小
二进制
1
0
0
0
1
0
1
0
1
0
1
0
1
天数
29
30
30
30
29
30
29
30
29
30
29
30
十六进制
4
2
5
2
21
2004年的春节和元旦差21天,这样2004年的信息表示为:
21,42H,52H,21H。
其中表示12个月大小信息的字节,第4位和第7位不用,第1个字节为十进制,其它的都为十六进制。
按此方法,50年的阳历和阴历对应关系表总共使用200字节。
有了算法和数据以后,就可以设计软件了。
先要根据当前阳历的日期,算出阳历为该年中的第几天。
图5-3为计算阳历中任何一天在该年中为第几天的程序流程图。
图4-3计算阳历天数程序流程图
计算出当前阳历日期为该年中的第几天后,再减去阳历该年春节和元旦的日差,如果够减,则相减的结果就是阴历在该年中的总第几天了。
根据该数据就可以推算出具体的当前阴历日期;如果不够减,则表示当前阴历年为阳历年的前一年。
这种情况下,根据实际,当前阴历日期会处于阴历11月或12月,此时春节和元旦的日差减去前面计算出的当前阳历日期在阳历年为第几天的数据,其结果表示当前阴历日期离春节的天数。
计算出的阳历天数为该年的第几天,存放在寄存器R2和R3中。
计算出天数后,如果大于#FFH,则把#FFH存放在R2中,余值存放在R3中。
也就是说在用寄存器R2和R3表示的天数信息中,R2充当主寄存器,数据先存满R2,再存R3。
在整个转换程序中,这里面的数据不能被覆盖。
计算出阳历总天数后,就可以根据它来推算阴历日期。
推算方法是,先用总天数减去春节和元旦的日差,如果结果为1,则该天正好是春节(因为春节在元旦之后,在计算春节和元旦的日差时,假设元旦为0天,春节为n天,则日差为n。
而前面计算的阳历总天数是该天在该年中的第几天,是以元旦为1而得到的,与计算春节和元旦日差的这样方法相比,其数值少了1,所以要在原来本应该以0作为该天就是春节的依据的基础上加1,所以以1作为该天是春节的标志);如果结果小于1,则阴历应该是阳历的前一年;如果结果大于1,说明阳历和阴历为同一年。
再根据查表所得的该年的阴历的闰年和大小月的信息,就可以推算出该天的阴历日期了。
图4-4为由总天数推算出阴历日期的程序流程图。
图4-4推算阴历日期的程序流程图
3.4红外信号接收解码驱动设计
红外信号的的接收通过外部中断[1]处理函数来完成的,中断函数中判断按键的编码,然后执行相应的按键动作,比如检测到键S1被按下,则执行调节时间的动作。
图19红外发射程序流程图
3.5红外信号发射程序的设计
红外发射程序和红外接收程序是独立的,红外信号的发射和接收分别由各自单片机来完成。
红外信号的发射利用定时器[12],每隔26us中断一次,主程序中等待按键被按下,若检测到有按键按下,就调用红外发射函数,发送相应的二进制编码。
其程序流程图见图20。
图20红外发射程序流程图
3.6时间调整子程序设计
调整时间用五个调整按钮,一个作为设置键、控制用,一个作为退出设置按键,一个作为闹铃开关用,剩下两个是对设置位的加,减操作。
图3-6时间调整程序流程图
第四章系统调试
系统调试包括软件调试和硬件调试。
硬件调试的任务是排除所焊接电路故障。
软件调试是利用开发工具进行在线仿真调试。
调试的一般过程如下所示:
系统调试的一般过程是上电运行后观察其运行状态,数码管是否点亮等。
软件调试先是各个模块、各个子程序分