单片机数字时钟设计文档三.docx
- 文档编号:26915624
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:21
- 大小:85.17KB
单片机数字时钟设计文档三.docx
《单片机数字时钟设计文档三.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟设计文档三.docx(21页珍藏版)》请在冰豆网上搜索。
单片机数字时钟设计文档三
单片机课程设计
课题:
数字时钟设计
系别:
专业:
姓名:
学号:
指导教师:
成绩评定·
一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。
二、评分(按下表要求评定)
课程设计成绩评定
班级姓名学号
成绩:
分(折合等级)
指导教师签字年月日
一、设计目的
用8013单片机CPU及接口电路设计并实现显示时间的实时时钟。
二、设计要求
(1) 在ZY15MCU12BD型综合单片机试验箱的硬件结构上编写软件完成设计。
(2) 程序的首地址应使目标机可以直接运行,即从0000H开始。
在主程序的开始部分必须设置一个合适的栈底。
程序放置的地址须连续且靠前,不要在中间留下大量的空间地址,以使目标机可以使用较少的硬件资源。
(3) 6位LED数码管从左到右分别显示时.分.秒(各占用2位),采用24小时标准计时制。
开始计时时为000000,到235959后变成000000.
(4) 在XD1—2键盘上选定3个键分别作为小时.分.秒的调校键。
每按一次键,对应的显示值便加1。
分.秒加到59后变为00;小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;但小时不发生改变).
(5) 软件设计必须使用8031片内定时器,采用定时中断结构,不得使用软件延时法。
(6) 上机调试程序。
(7) 写出设计报告。
三、总体设计
1、设计的总体原理框图
见附录3
2、工作原理
电子时钟主要由8031片内定时器定时中断,并取一存储单元作为计数器使用,每中断一次,在中断服务程序中使计数器加1、8031芯片、74LS373锁存器、8255A接口芯片、74LS240驱动器、LED数码显示管和4*4键盘组成。
主要用8031片内定时器定时中断服务程序完成秒、分、时的运算即计时功能,TIME0的中断服务程序完成调时、调分、调秒功能。
8255A负责将内存里的时位、分位和秒位数值输出到数码管。
同时按键01键、02键、03键是分别对时、分、秒的加1校对;05键、06键、07键时分别对时、分、秒的减1校对;00键是清零键。
并且开机时时钟时从000000开始计时的,到235959时在回到000000.
四、各部分电路分析
此实时时钟的设计与实现,主要采用了6只LED数码管,8031内部二进制16位定时器/计数器,可编程中断控制器8031等芯片,包括显示模块,运算模块和校时模块三大功能模块。
1、显示模块:
用8255控制,用数码管的显示功能来设计。
显示部分硬件用六只LED为显示管,这些LED发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。
通过在这8只发光二极管的阳极加+5V或0V的电压使不同的二极管发光,形成不同的数字。
该模块主要是将运算模块和校时模块运算出来并存放在内存单元里的十六进制表示的时位、分位和秒位数值转化为十进制,并通过8只数码管显示出来。
该模块实现的硬件是DVCC-8086JH实验箱中的LED单元,采用软件译码,即在程序中设置一个段选码表。
CPU直接往LED输出八段代码,省去了硬件译码器。
A0~A3作为8段数据输出口,经74LS07驱动后到达各LED。
只要做到每送一次段选码时也送一次位扫描码,并且每送一次位扫描码后,位码中的0右移一位作为下一次的位扫描码,即可实现由左向右使6只LED依次出现数字显示。
2、运算模块:
该模块的主要功能是对时、分、秒的运算,并把运算出的最终结果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。
该模块可以细分为秒定时模块和运算模块。
秒定时模块负责提供中断信号,由于CPU运算模块中的指令消耗一定的时间,所以中断信号最好通过硬件来实现。
本实验中用8031定时器/计数器,但因为8031供的信号的周期是毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在内存里开辟存储单元。
中断信号是8031工作方式为方式1,产生一个50ms的脉冲信号。
运算模块负责时、分、秒的计算,该模块主要通过8031的IR1号中断来实现,但由于每50ms一次中断请求,所以在中断服务程序必须利用已申请内存单元26H来统计中断请求的次数,只有当26H的值为20时,才能让秒单元内的数值加1。
在中断服务程序里,必须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1、秒清零;当分加到60时,时加1、分清零。
当时加到24时,直接清零。
然后转到调用处。
3、校时模块:
该模块主要功能是修改时、分、秒内存单元的数值。
每按一次键,对应的显示值便加1。
分、秒加到59后变为00;小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;但小时不发生改变)。
注意:
在主程序中对时间进行调校前应关闭中断,以防在调校过程中定时中断服务程序也对时间进行修改而造成混淆。
4.整体功能:
在6块LED数码管上能实现数字时钟的时、分、秒显示,并能对时、分、秒进行加1校对、减1校对和清零。
本实验中01键、02键、03键是分别对时、分、秒的加1校对;05键、06键、07键时分别对时、分、秒的减1校对;00键是清零键。
并且开机时时钟时从000000开始计时的,到235959时在回到000000.
五、设计的整体电路图
见附录4。
六、设计总结
1、设计过程中遇到的问题及解决方法
将编写好的源程序输入电脑,编译后出现很多错误,这些错误有许多时平时的实验遇到过的,例如:
输入的分号格式不正确,零和字母O弄混淆了,LOOP5出现了几次,CJNE写成了CJNZ等等,幸好这些错误在平时的实验中遇到了,所以改错误很容易,但同时也说明了,平时的错误现在还在换,证明错误我还没有完全的改正,这点我以后一定要注意了。
争起错误换了两次就不能在换了。
除了常见的错误外,还有几条错误时我从来没有遇到过的,如:
LJMP跳转指令跳不回指定的位置,是因为跳转的长度大于LJMP跳转的长度,最后只好设置跳转两次后才能跳到指定的位置。
经过多次的修改和向别人请教,错误都拍除了,编译通过了,但功能没有达到设计的要求,第一、小时加1键加到23时还可以向上加而不是回到00.第二、时钟走到235959时不能回到000000的状态。
这两个错误都出现在小时的位置,说明小时键很特殊,的确,小时键当小于23时个位遇到10要进位,当大于23时个位遇到4时要进位,小时的十位也是一样,要判断两次,才能实现完整的功能。
最后,经过几天在机房的努力,终于实现了时钟的全部要求。
在前期的程序编写和几天的上机调试,使我又获得了很多新的知识,因为前期编写程序时查了很多资料学到了很多知识,这几天的调试更时获得很新的知识,因为程序中又很多的错误,为了修改错误必须看书或向别人请教,在这个过程中无意识的获得了很多知识。
同时也使我对单片机更感兴趣了,这点我觉得很重要,因为兴趣使最好的老师,相信在以后的单片机相关的学习中会表现的更好。
2、设计体会
本次课程设计是用8031单片机CPU及接口电路设计一个数字时钟,经过一个星期的调试,结果满足设计要求,验证无误。
设计主要用到了多种芯片,程序也比较长比较麻烦,同时也遇到了不少困难,尤其是关于校时模块的设计实现。
关于显示模块,在以前的实验中做过,所以问题很容易解决。
通过本次设计,我系统的了解了实时时钟的设计流程,尤其是硬、软件的设计方法,掌握了键盘显示电路的基本功能及编程方法,掌握了键盘电路和显示电路的一般原理,也进一步掌握了8031定时器的使用和中断处理器程序的编程方法。
开拓了思路,锻炼了实践动手能力,提高了分工协作能力和分析问题,解决问题的能力,达到了本次课程设计的目的
3、对设计的建议
希望下次有机会能在更充足的时间里完成,我想会完成的更好
参考文献
1、胡汉才编著,《单片机原理及其接口技术》清华大学出版社,2004。
2贾金铃等编著,《微型计算原理及应用》重庆大学出版社,2006。
3、吴清秀,周荷琴编著,《微型计算机原理与接口技术》中国科学技术
大学出版社,2004。
4、吴向军、罗源明等编著《汇编语言程序设计》高等教育出版社,2001。
附录1.程序流程图
开始
↓
初始化(定时器、显示区、
中断系统、计数单元等)
↓
开中断
↓
调用显示子程序
↓
调用键盘扫描子程序
↓
有键按下?
N
↓
关中断
↓
秒键?
N
↓
秒加1处理
↓
分键?
N
↓
分加1处理
↓
小时键?
N
↓
小时加1处理
图1主程序流程图
定时器中断处理
↓
重送初值
↓
保护现场
↓
计数单元加1
↓
到1秒?
N
↓
秒加1
↓
秒到60?
N
↓
秒清0、分加1
↓
分到60?
N
↓
分清0、小时加1
↓
小时到24?
N
↓
小时清0
↓
恢复现场
↓
中断返回
图2定时器中断程序流程图
2.程序清单
ORG0000H
LJMPSTART
ORG000BH
LJMPTIME0
START:
MOVSP,#60H
AGAIN:
CPLP1.0
MOVR0,#10
LOOP1:
MOVR1,#100
LOOP2:
MOVR2,#250
DJNZR2,$
DJNZR1,LOOP2
DJNZR0,LOOP1
MOVDPTR,#4003H;8255初始化
MOVA,#10000001B
MOVX@DPTR,A
MOVTMOD,#01H;选择方式.
MOVTH0,#3CH
MOVTL0,#0B0H
MOV20H,#00H;赋初值
MOV21H,#00H
MOV22H,#00H
MOV23H,#00H
MOV24H,#00H
MOV25H,#00H
MOV26H,#00H
LOOP:
MOVIE,#82H;开中断
SETBTR0;启动T0计数
LCALLDIS
LCALLKEY
CJNEA,#0FFH,DDDD;若有键按下,DDDD
SJMPLOOP;无键按下,则转LOOP
DDDD:
MOVIE,#00H;关中断
CJNEA,#03H,LOOP3;按下的键为秒键往下执行
INC25H
MOVA,25H
CJNEA,#10,LOOP
MOV25H,#0
INC24H
MOVA,24H
CJNEA,#6,LOOP
MOV24H,#0
SJMPLOOP
LOOP3:
CJNEA,#02H,LOOP4;按下的键为分键往下执行
INC23H
MOVA,23H
CJNEA,#10,LOOP
MOV23H,#0
INC22H
MOVA,22H
CJNEA,#6,LOOP
MOV22H,#0
SJMPLOOP
LOOP4:
CJNEA,#01H,LOOP4B;按下的键为小时键往下执行
INC21H
MOVA,21H
CJNEA,#10,LOOP5
MOV21H,#0
INC20H
LOOP4B:
CJNEA,#00H,LOOP4C
MOV20H,#00H
MOV21H,#00H
MOV22H,#00H
MOV23H,#00H
MOV24H,#00H
MOV25H,#00H
LOOP5:
MOVA,20H
SWAPA
ORLA,21H
CJNEA,#24H,LOOP
MOV20H,#0
MOV21H,#0
SJMPLOOP
----------各键减1校时程序----------
LOOP00:
LJMPLOOP
LOOP4C:
CJNEA,#07H,LOOP30
MOVA,25H
DEC25H
CJNEA,#0,LOOP00
MOV25H,#9
MOVA,24H
DEC24H
CJNEA,#0,LOOP00
MOV24H,#5
SJMPLOOP00
LOOP30:
CJNEA,#06H,LOOP40
MOVA,23H
DEC23H
CJNEA,#0H,LOOP00
MOV23H,#9
MOVA,22H
DEC22H
CJNEA,#0,LOOP00
MOV22H,#5
SJMPLOOP00
LOOP40:
CJNEA,#05H,LOOP00
MOVA,21H
CJNEA,#0,LOOP5A
MOVA,20H
CJNEA,#0,LOOP5B
MOV21H,#3
MOV20H,#2
SJMPLOOP00
LOOP5A:
DEC21H
LJMPLOOP00
LOOP5B:
DEC20H
MOV21H,#9
LJMPLOOP00
;-----------显示子程序-------------
DIS:
MOVPSW,#08H
MOVR0,#20H
MOVR2,#0FEH
LOOP10:
MOVA,@R0
MOVDPTR,#ASCTAB
MOVCA,@A+DPTR;查字形代码
MOVDPTR,#4001H;字形代码送B段口
MOVX@DPTR,A
MOVA,R2
MOVDPTR,#4000H;字形代码送A位口
MOVX@DPTR,A
MOVR1,#250
DJNZR1,$
MOVA,#0FFH;关闭所有的显示位即位口置高电平
MOVX@DPTR,A
MOVA,R2
RLA
MOVR2,A
INCR0
CJNER0,#26H,LOOP10
RET
ASCTAB:
DB0C0H,0F9H,0A4H,0B0H,99H
DB92H,82H,0F8H,80H,90H
DB88H,83H,0C6H,0A1H,86H
DB8EH,40H,79H,24H,30H
DB19H,12H,02H,78H,00H
DB80H,08H,03H,46H,21H
DB06H,0EH,0BFH,0FFH
;-----------扫描子程序-------------
KEY:
MOVDPTR,#4002H
MOVA,#00001111B
MOVX@DPTR,A
MOVXA,@DPTR
ANLA,#0FH
CJNEA,#0FH,NEXT
SJMPLOOP8
NEXT:
MOVR2,#11101111B
LOOP6:
MOVA,R2
MOVDPTR,#4002H
MOVX@DPTR,A
MOVXA,@DPTR
ANLA,#0FH
CJNEA,#0FH,NEXT1
LOOP7:
MOVA,R2
RLA
MOVR2,A
JBACC.0,LOOP6
LOOP8:
MOVA,#0FFH
RET
NEXT1:
MOVR6,A
MOVR3,#100
LOOP9:
MOVR4,#100
DJNZR4,$
DJNZR3,LOOP9
MOVXA,@DPTR
ANLA,#0FH
XRLA,R6
JNZLOOP7
LOOP20:
MOVXA,@DPTR
ANLA,#0FH
CJNEA,#0FH,LOOP20
MOVA,R6
ANLA,#0FH
MOVR6,A
MOVA,R2
ANLA,#0F0H
ORLA,R6
CALLKEY20
RET
;------------查键子程序-----------
KEY20:
PUSHACC
MOVR1,#00H
KEY21:
JNBACC.4,KEY22
RRA
INCR1
SJMPKEY21
KEY22:
MOVA,R1
MOVB,#4
MULAB
MOVR1,A
POPACC
KEY23:
JNBACC.0,KEY24
RRA
INCR1
SJMPKEY23
KEY24:
MOVDPTR,#KEYTAB
MOVA,R1
MOVCA,@A+DPTR
RET
KEYTAB:
DB0FH,0BH,07H,03H
DB0EH,0AH,06H,02H
DB0DH,09H,05H,01H
DB0CH,08H,04H,00H
;-----------定时器中断-------------
TIME0:
PUSHACC
PUSHPSW
MOVTH0,#3CH
MOVTL0,#0B0H
INC26H
MOVA,26H
CJNEA,#20,RETURN;未到1秒,则转RETURN
MOV26H,#00H
INC25H;到1秒,秒单元的个位加1
MOVA,25H
CJNEA,#10,RETURN;
MOV25H,#00H
INC24H
MOVA,24H
CJNEA,#6,RETURN;未到60秒,则转
MOV24H,#00H
INC23H;分单元个位加1
MOVA,23H
CJNEA,#10,RETURN
MOV23H,#00H
INC22H
MOVA,22H
CJNEA,#06H,RETURN;若未到60分,则转
MOV22H,00H
INC21H
MOVA,21H
CJNEA,#4H,CCCC
MOVA,20H
CJNEA,#2H,CCCC
MOV21H,#00H
MOV20H,#00H
CCCC:
CJNEA,#10,RETURN
MOV21H,#00H
INC20H
MOVA,20H
RETURN:
POPPSW
POPACC
RETI
END
3.系统框图
图三系统的方框图
4.整体电路图
图四总电路图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数字 时钟 设计 文档