单片机数字时钟设计文档三.docx

上传人:b****3 文档编号:26915624 上传时间:2023-06-24 格式:DOCX 页数:21 大小:85.17KB
下载 相关 举报
单片机数字时钟设计文档三.docx_第1页
第1页 / 共21页
单片机数字时钟设计文档三.docx_第2页
第2页 / 共21页
单片机数字时钟设计文档三.docx_第3页
第3页 / 共21页
单片机数字时钟设计文档三.docx_第4页
第4页 / 共21页
单片机数字时钟设计文档三.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

单片机数字时钟设计文档三.docx

《单片机数字时钟设计文档三.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟设计文档三.docx(21页珍藏版)》请在冰豆网上搜索。

单片机数字时钟设计文档三.docx

单片机数字时钟设计文档三

单片机课程设计

 

课题:

数字时钟设计

 

系别:

专业:

姓名:

学号:

指导教师:

 

成绩评定·

一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。

二、评分(按下表要求评定)

课程设计成绩评定

班级姓名学号

成绩:

分(折合等级)

指导教师签字年月日

一、设计目的

用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.整体电路图

图四总电路图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1