万年历论文.docx
- 文档编号:5064180
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:63
- 大小:143.57KB
万年历论文.docx
《万年历论文.docx》由会员分享,可在线阅读,更多相关《万年历论文.docx(63页珍藏版)》请在冰豆网上搜索。
万年历论文
摘要
单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理以及我们生活中广泛使用的各种智能IC卡,电子宠物等,这些都离不开单片机。
单片机是集CPU,RAM,ROM,定时计数和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
而51系列单片机是各单片机中最为典型和最有代表的一种。
本设计是基于51系列的单片机进行的电子万年历设计,电子万年历是一种非常广泛的日常计时工具,在现代社会越来越来流行。
它可以对年,月,日,时,分,秒进行计时,还具有闰年补偿等多种功能。
系统由主控制器AT89C51,时钟电路DS1302,显示电路,按键电路和复位电路等部分组成,能实现时钟日历显示的功能,能进行时,分,秒的显示。
关键词:
单片机,农历查询,万年历,时钟DS1302
1设计方案论证
1.1按键电路
1.1.1方案一:
采用阵列式键盘
此类键盘是采用行列扫描方式,当按键较多时可以减少占用单片机的I/O口数目。
1.1.2方案二:
采用独立式按键电路
每个键单独占用一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫方式。
但是当按键较多时占用单片的I/O数目较多。
本系统只需四个按键,因此选择方案二。
如果按键采用中断的话,可以使单片机工作更加灵活,效率更高。
由于该系统要用到4个按键,考虑到单片机的中断资源不够,所以就只用外部中断INT0和INT1中断,另外两个按键接P1.0和P1.1口。
1.2显示电路
1.2.1方案一:
采用动态显示
这种工作方式是分时轮流选通数码管的公共端,使各个数码管轮流导通。
当所有数码管依次显示一遍后,软件控制循环,使每位显示器分时点亮。
这种方式不但不能提高数码管的发光效率,并且由于各个数码管的字段线是并联使用的,因而大大简化了硬件线路,各个数码管虽然是分时轮流导通,但发光数码管具有余辉特性及人眼具有视觉暂留作用,所以适当选取扫描频率时,看上去数码管是同时点亮的,察觉不出有闪烁现象。
1.2.2方案二:
采用静态显示
数码管工作在静态显示方式下,共阴极或共阳极点连接在一起接地或高电平。
每位的段选线与一个8位并行口连接。
只要在该位的段选线上保持段选码电平。
该位就能保持相应的显示字符。
该工作方式常采用串行口设定方式0输出,外接74LS164移位寄存器构成显示电路。
由于该系统用到的数码管很多,要分三行显示,若果采用动态显示的话,单片机的I/O口资源明显不够。
而采用静态显示的话,一个数码管就要对应一片74LS164芯片,这使得成本花费很多。
综合考虑后,决定采用动态显示和静态显示相结合的方法。
1.2.3方案三:
点阵式数码管显示
点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以不采用此种作为显示。
1.2.4方案四:
LED液晶显示屏显示
液晶显示屏的显示功能强大,可显示大量的文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中也不采用LED液晶显示屏。
1.3时钟电路
1.3.1方案一:
直接采用单片机的定时计数器提供秒信号,使用程序实现年,月,日,星期,时,分,秒计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。
所以不采用此种方案。
1.3.2方案二:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒,分,时,日,周,月,年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V---5.5V范围内,2.5V时耗电小于300nA,所以本次设计采用此方案。
2系统的硬件设计与实现
2.1电路设计框图
键盘模块
AT89C51
主控制模块
DS1302时钟模块
2.2主要单元电路的设计
2.2.1单片机主控制模块的设计
AT89C51为40引脚芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个八位的I/O口,每一条I/O线都能独立的做输出或输入。
单片机的最小系统如下图,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是震荡器倒相放大器的输入,XTAL2外接晶振和微调电容的另一端,在片内它是振荡器的倒相放大器的输出。
第9脚为复位输入端,接上电容,电阻及开关后的上电复位电路,20引脚为接地端,40引脚为电源端。
如图所示:
2.2.2时钟电路模块的设计
(1)DS1302引脚功能及原理
DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc>2.0V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向),后面有详细说明。
SCLK为时钟输入端。
下图为DS1302的引脚功能图:
DS1302封装图
(2)DS1302的控制字节
DS1302的控制字如图2所示。
控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
(3)数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
(4)DS1302寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
2.2.3显示模块的设计
(1)LED显示数码管
数码管有共阴共阳之分,其原理图如图所示。
LED数码管的结构外部有10个引脚,其中3,8脚为公共端也称位选端,其余8个引脚称为段选端,当要使某一位数码管显示某一数字((0-9中的一个)必须在这个数码管的段选端加上与数字显示数字对应的8位段选码(也称字形码),在位选端加上低电平即可。
二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。
一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。
当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。
符号和引脚
共阳极
共阴极
(2)74LS164
74ls164是一个串入并出的8位移位寄存器,它常用于单片机系统中,封装如图所示
其引脚功能和工作原理:
当清除端(CLEAR)为低电平时,输出端(QA--QH)均为低电平。
串行数据输入端(A,B)可控制数据。
当A,B有一个为低电平时,则禁止数据输入,在时钟端(CLOCK)脉冲上升沿作用下决定Q0为低电平。
当A,B有一个为高电平,则另一个就允许输入数据,并在CLOCK上升沿作用下决定Q0的状态。
引脚功能:
CLOCK:
时钟输入端CLEAR:
同步清除输入端(低电平有效)A,B:
串行数据输入端QA—QH:
输出端
74LS164内部功能图
3系统的软件设计
启动定时器
开始
3.1主程序的流程图
按键扫描
初始化
推算时间
定时器设置
送显示器
3.2时间调整程序流程图:
3.3
程序入口
公历转阴历流程图
R2减1个月天数
4调试与结果分析4.1硬件测试
硬件调试的主要任务是检测硬件电路是否有短路,断路,虚焊等,
其中包括设计错误和工艺性性错误。
(1)LED数码管的断码错乱,原因出于没有看清a,b,c等引脚信息。
解决:
重新排列输出端,相应接入LED数码管,即可解决断码和乱码。
(2)
4.2软件测试
电子万年历是多功能的数字型,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。
最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。
(1)烧程序后,LED数码管显示闪动。
解决:
首先对调用的延时进行逐渐修改,可以解决闪动问题。
(2)修改时间,日期时农历没有自动对应上。
解决:
把不相关的程序暂时屏蔽,农历的子程序独立调试,发现在调用农历自动更新时,对十进制和十六进制处理的不好,会造成混乱。
最后把相应的十进制进行修改,使得可以和十六进制对应,问题解决。
4.3测试结果分析与总结
(1)在测试中遇到发光二极管,LED数码管为不显示时,首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或则元件损坏。
(2)LED数码管显示不正常,还有亮度不够,首先使用试测仪对电路进行测试,观察电路是否存在短路现象。
查看烧写的程序是否正确无误,对程序进行认真修改。
总结:
在整个设计过程中,发挥团队精神,分工合作,充分发挥个人的主观能动性,自主学习,学到了许多没学到的知识。
较好的完成了作品,达到了预期的目的,在最初的设计中,发挥“三个臭皮匠,顶个诸葛亮”的作用。
相互学习,相互讨论,研究,完成了最初的设想。
在电路焊接时虽然没有什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程大,不能心急,一个个慢慢来不能急于求成。
对电路的设计,布局要先有一个好的构思,才显得电路板美观。
程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静心思考,和组员的探讨,理清思路,再借鉴,就得心应手,像写文章一样。
附录一
一测试仪器
1PC机
2直流稳压电源
3单片机7.2PROTUES仿真器
4数字万用表
5ISP在线编程器
二系统程序清单
;从1302中读出的数据放在67H(高2位年)、66H(低2位年)、65H(月)、64H(星期)
;63H(日)、62H(时)、61H(分)、60H(秒)、57H(农历月)、56H(农历日)
;闰月标志为F0,定时器T1为调整时闪烁用
SCLKEQUP3.2
IOEQUP3.3
RSTEQUP3.4
yearDATA66H
monthDATA65H
weekDATA64H
dayDATA63H
hourDATA62H
mintueDATA61H
secondDATA60H
DS1302_ADDRDATA32H
DS1302_DATADATA31H
ORG0000H
AJMPSTART
ORG0003H
RETI
ORG000BH
RETI
ORG0013H
RETI
ORG001BH
RETI
LJMPINTT1
ORG0023H
RETI
ORG002BH
RETI
;主程序
START:
SETBEA
MOVSCON,#00H;串行输出,方式0
MOVTMOD,#10H;计数器1,方式1
MOVTL1,#00H
MOVTH1,#00H
MOVDS1302_ADDR,#8EH
MOVDS1302_DATA,#00H;允许写1302
LCALLWRITE
MOVDS1302_ADDR,#90H
MOVDS1302_DATA,#0A6H;1302充电,充电电流为1.1mA
LCALLWRITE
MAIN1:
MOVDS1302_ADDR,#8DH;读出年
LCALLREAD
MOVyear,DS1302_DATA
MOVDS1302_ADDR,#8BH;读出星期
LCALLREAD
MOVweek,DS1302_DATA
MOVDS1302_ADDR,#89H;读出月
LCALLREAD
MOVmonth,DS1302_DATA
MOVDS1302_ADDR,#87H;读出日
LCALLREAD
MOVday,DS1302_DATA
MOVDS1302_ADDR,#85H;读出小时
LCALLREAD
MOVhour,DS1302_DATA
MOVDS1302_ADDR,#83H;读出分钟
LCALLREAD
MOVmintue,DS1302_DATA
MOVDS1302_ADDR,#81H;读出秒
LCALLREAD
MOVsecond,DS1302_DATA
MOVR0,year;年分离,送显示缓存
LCALLDIVIDE
MOV7BH,R1
MOV4BH,R1
MOV7CH,R2
MOV4CH,R2
MOV78H,week
MOV48H,week
MOVR0,month;月分离,送显示缓存
LCALLDIVIDE
MOV79H,R1
MOV49H,R1
MOV7AH,R2
MOV4AH,R2
MOVR0,day;日分离,送显示缓存
LCALLDIVIDE
MOV76H,R1
MOV46H,R1
MOV77H,R2
MOV47H,R2
MOVR0,hour;小时分离,送显示缓存
LCALLDIVIDE
MOV74H,R1
MOV44H,R1
MOV75H,R2
MOV45H,R2
MOVR0,mintue;分钟分离,送显示缓存
LCALLDIVIDE
MOV72H,R1
MOV42H,R1
MOV73H,R2
MOV43H,R2
MOVR0,second;秒分离,送显示缓存
LCALLDIVIDE
MOV70H,R1
MOV40H,R1
MOV71H,R2
MOV41H,R2
LCALLDISPLAY
LCALLGENGXIAN
JNBP1.2,NUM
JNBP1.1,SETG
JNBF0,SSS
CLRP1.3
LJMPMAIN1
SSS:
SETBP1.3
LJMPMAIN1
;=======================阳历设置程序========================
NUM:
MOVMONTH,#0AAH
MOVHOUR,#0AAH
MOVMINTUE,#0AAH
MOVSECOND,#04H
MOVR0,MONTH
LCALLDIVIDE
MOV79H,R1
MOV49H,R1
MOV7AH,R2
MOV4AH,R2
MOVR0,HOUR
LCALLDIVIDE
MOV74H,R1
MOV44H,R1
MOV75H,R2
MOV45H,R2
MOVR0,MINTUE
LCALLDIVIDE
MOV72H,R1
MOV42H,R1
MOV73H,R2
MOV43H,R2
MOVR0,SECOND
LCALLDIVIDE
MOV70H,R1
MOV40H,R1
MOV71H,R2
MOV41H,R2
LCALLDISPLAY
JNBP1.2,NUM
LJMPMAIN1
SETG:
SETBTR1
SETBET1
CLR08H
CLR09H
CLR0AH
CLR0BH
CLR0CH
CLR0DH
CLR0EH
CLR0FH
MOVDS1302_ADDR,#8EH
MOVDS1302_DATA,#00H;允许写1302
LCALLWRITE
MOVDS1302_ADDR,#80H
MOVDS1302_DATA,#80H;1302停止振荡
LCALLWRITE
GWAIT:
LCALLDISPLAY
JNBP1.1,GWAIT
SETG1:
LCALLDISPLAY
JNBP1.1,SETG2
JNBP1.2,GADDYEAR
AJMPSETG1
GADDYEAR:
MOVR7,66H;年加1
LCALLADD1
MOV66H,A
CJNEA,#51H,GADDYEAR1
MOV66H,#01H
GADDYEAR1:
MOVDS1302_ADDR,#8CH;年值送入1302
MOVDS1302_DATA,66H
LCALLWRITE
MOVR0,66H
LCALLDIVIDE;年分离,送显示缓存
MOV4BH,R1
MOV7BH,R1
MOV4CH,R2
MOV7CH,R2
WAITT1:
LCALLDISPLAY
JNBP1.2,WAITT1
AJMPSETG1
SETG2:
SETB0AH;调月时闪标志
GWAIT2:
LCALLDISPLAY
JNBP1.1,GWAIT2
SETG3:
LCALLDISPLAY
JNBP1.1,SETG4
JNBP1.2,GADDMONTH
AJMPSETG3
GADDMONTH:
MOVR7,65H;月加1
LCALLADD1
MOV65H,A
CJNEA,#13H,GADDMONTH1
MOV65H,#01H
GADDMONTH1:
MOVDS1302_ADDR,#88H;月值送入1302
MOVDS1302_DATA,65H
LCALLWRITE
MOVR0,65H
LCALLDIVIDE;月分离,送显示缓存
MOV79H,R1
MOV49H,R1
MOV7AH,R2
MOV4AH,R2
WAITT2:
LCALLDISPLAY
JNBP1.2,WAITT2
AJMPSETG3
SETG4:
SETB0BH;调日时闪标志
GWAIT4:
LCALLDISPLAY
JNBP1.1,GWAIT4
SETG5:
LCALLDISPLAY
JNBP1.1,SETG6
JNBP1.2,GADDDAY
AJMPSETG5
GADDDAY:
MOVR7,63H;日加1
LCALLADD1
MOV63H,A
CJNEA,#32H,GADDDAY1
MOV63H,#01H
GADDDAY1:
MOVDS1302_ADDR,#86H;日值送入1302
MOVDS1302_DATA,63H
LCALLWRITE
MOVR0,63H
LCALLDIVIDE;日分离,送显示缓存
MOV76H,R1
MOV46H,R1
MOV77H,R2
MOV47H,R2
WAITT3:
LCALLDISPLAY
JNBP1.2,WAITT3
AJMPSETG5
SETG6:
SETB0CH;调星期时闪标志
GWAIT6:
LCALLDISPLAY
JNBP1.1,GWAIT6
SETG7:
LCALLDISPLAY
JNBP1.1,SETG8
JNBP1.2,GADDWEEK
AJMPSETG7
GADDWEEK:
MOVR7,64H;星期加1
LCALLADD1
MOV64H,A
CJNEA,#08H,GADDWEEK1
MOV64H,#01H
GADDWEEK1:
MOVDS1302_ADDR,#8AH;星期值送入1302
MOVDS1302_DATA,64H
LCALLWRITE
MOVR0,64H
LCALLDIVIDE;星期分离,送显示缓存
MOV48H,R1
MOV78H,R1
WAITT4:
LCALLDISPLAY
JNBP1.2,WAITT4
AJMPSETG7
SETG8:
SETB0DH;调<小>时时闪标志
GWAIT8:
LCALLDISPLAY
JNBP1.1,GWAIT8
SETG9:
LCALLDISPLAY
JNBP1.1,SETG10
JNBP1.2,GADDHOUR
AJMPSETG9
GADDHOUR:
MOVR7,62H;<小>时加1
LCALLADD1
MOV62H,A
CJNEA,#24H,GADDHOUR1
MOV62H,#00H
GADDHOUR1:
MOVDS1302_ADDR,#84H;<小>时值送入1302
MOVDS1302_DATA,62H
LCALLWRITE
MOVR0,62H
LCALLDIVIDE;<小>时分离,送显示缓存
MOV74H,R1
MOV44H,R1
MOV75H,R2
MOV45H,R2
WAITT5:
LCALLDISPLAY
JNBP1.2,WAITT5
AJMPSETG9
SETG10:
SETB0EH;调分<钟>时闪标志
GWAIT10:
LCALLDISPLAY
JNBP1.1,GWAIT10
SETG11:
LCALLDISPLAY
JNBP1.1,SETGOUT
JNBP1.2,GADDMINTUE
AJMPSETG11
GADDMINTUE:
MOVR7,61H;分<钟>加1
LCALLADD1
MOV61H,A
CJNEA,#60H,GADDMINTUE1
MOV61H,#00H
GADDMINTUE1:
MOVDS1302_ADDR,#82H;分<钟>值送入1302
MOVDS1302_DATA,61H
LCALLWRITE
MOVR0,61H
LCALL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万年历 论文