哈工大51单片机数字时钟.docx

上传人:b****6 文档编号:7316854 上传时间:2023-01-22 格式:DOCX 页数:13 大小:570.98KB
下载 相关 举报
哈工大51单片机数字时钟.docx_第1页
第1页 / 共13页
哈工大51单片机数字时钟.docx_第2页
第2页 / 共13页
哈工大51单片机数字时钟.docx_第3页
第3页 / 共13页
哈工大51单片机数字时钟.docx_第4页
第4页 / 共13页
哈工大51单片机数字时钟.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

哈工大51单片机数字时钟.docx

《哈工大51单片机数字时钟.docx》由会员分享,可在线阅读,更多相关《哈工大51单片机数字时钟.docx(13页珍藏版)》请在冰豆网上搜索。

哈工大51单片机数字时钟.docx

哈工大51单片机数字时钟

数字日历钟的设计

1.课程设计要求

1.数码管显示:

秒、分、时(可同时显示,也可轮换显示)

2.能够设置时间,“设置按键”数量不限,以简单合理易用为好。

3.误差:

1秒/天(报告中要论述分析是否满足要求)

4.设置校准键:

当数字钟显示在“整点±30秒”范围时,按动“校准键”,数字钟即刻被调整到整点,消除了±30秒的误差。

5.加上“星期”显示(可以预置),并可以对其进行设置。

2.方案论证

1.通过单片机内部的计数/定时器,采用软件编程来实现时钟计数,一般称为软时钟,这种方法的硬件线路简单,系统的功能一般与软件设计相关,通常用在对时间精度要求不高的场合。

2.采用时钟芯片,它的功能强大,功能部件集成在芯片内部,具有自动产生时钟等相关功能,硬件成本相对较高;软件编程简单,通常用在对时钟精度要求较高的场合。

3.原理论述

这里采用应用广泛的80C51单片机作为时钟控制芯片,利用单片机内部的定时/计数器T0实现软时钟的目的。

首先将T0设定工作于定时方式1,对机器周期计数形成基准时间(50ms),然后使用循环的程序结构使基准时间计数20次从而形成秒,秒计60次形成分,分计60形成小时,小时计到24形成一天,天计到7形成一星期,再重新循环。

最后通过数码管把它们的内容在相应的位置显示出来,达到时、分、秒计时的功能。

此外还要实现对时间的调整功能,80C51的P1.0、P1.1、P1.2、P1.3外接四个独立按键,当按下P1.0按键时,根据按此键次数的不同,系统分别进入调“星期”、“小时”、“分”状态的功能;当按下P1.1按键时,对显示的数码管进行加一的功能;当按下P1.2按键时,对显示的数码管进行减一的功能,达到调整星期的目的。

当按下P1.3按键时,系统进入调整“秒”状态的功能,如果此时大于30秒则直接清零“秒”显示的数码管,同时对“分”显示的数码管加一;如果小于等于30秒则直接清零“秒”显示的数码管。

同时设置了复位按键,当电路发生故障时,按下此键,可对所有的显示数码管进行清零,达到“复位”的目的。

所设计方案的流程图如下

4.分析

4.1硬件部分

采用7SEG-MPX8-CC八个共阴二极管显示器来显示日期和时间。

通过设置功能按键来实现调整日期和整点调时的功能。

电路连接使用PCB,使电路连接简洁美观。

4.2软件部分

(1)“时钟”基准时间由单片机内部的定时中断T0提供,考虑因素:

定时时间是“秒”的整除数,且长短适宜。

最长不能超过16位定时器的最长定时时间;最短不能少于中断服务程序的执行时间。

基准时间越短,越有利于提高时钟的运行精确度。

基准时间定为0.05秒。

(2)用一个计数器对定时中断的次数进行计数,由基准时间为0.05秒知计数值为20即可实现“秒”定时,同理进行“分”﹑“时”定时,以及“星期”定时。

5.计算

该部分主要是对51单片机内部定时中断T0的计时初值进行计算。

该单片机使用的晶振为内部晶振,因此晶振频率为fosc=12MHz,机器周期为Tj=12/fosc=12/12×106=1us。

由上面分析可知,定时时间T=50ms

定时初值为X=216-T/Tj=65536-50000=15536=3CB0H

6.仿真

6.1数码管显示器结构

“星期”、“小时”、“分”、“秒”显示单元如上图所示,上图显示的时间为星期四的1点11分:

43秒。

对于“星期”显示,0代表星期天,1代表星期一,2代表星期二,3代表星期三,4代表星期四,5代表星期五,6代表星期六。

6.2各按键分布及功能介绍

按键功能如下:

1.按键1是用来选定“星期”、“小时”、“分”的调整。

当不按或者按键次数是3的整数倍时,选定“星期”状态;当除以3余数为1次时,选定“小时”状态;当按除以3余数为2次时,选定“分”状态。

2.按键2是对按键1选定的状态进行加一操作。

3.按键3是对按键1选定的状态进行减一操作。

4.按键4可以进行整点调时功能,当“秒”状态小于等于30秒时,直接对“秒”清零;当“秒”状态大于30秒时,对“秒”清零,同时“分”加一。

5.按键5是用来复位的,当电路发生故障时,按下此键,可以使整个电路恢复初始设置。

6.3对“星期”的调整

通过调整“星期”、“小时”和“分”的状态,得到如下仿真图

6.4整点调时

在16s时按下按键4,在运行12s后可以得到如下结果

在35s时按下按键4,“分”加一,“秒”清零,19s后得到如下结果:

7.PCB图的设计

8.误差分析

使用keil软件进行误差分析,使用debug进行调试,在计时1s处设置断点,当计数初值为3CB0H时,计时1s和计时2s的调试结果如下:

计时1s调试结果

计时2s调试结果

由上表可知,计时1s调试结果为t1=1.000357s,计时2s调试结果t2=2.000646,t2-t1=2.000646-1.000357=1.000289s,也就是1s会有

T=289us的误差,可以通过调整计数初值来减小误差。

单片机的机器周期Tj=1us,

调整量

,因而计数初值应改为3CBEH。

这样,1s的误差就变为9us,一天的误差为

,达到了要求。

9.总结

由于大三逐渐接触专业课,但是仅仅停留在书本和考试上,而没有达到“知行合一”的地步。

通过这次课程设计,使我体会到了《数字电路》和《单片机》这两门课程的重要性和实用性。

而且我不仅了解了多种仿真软件以及他们的利弊,还对单片机的汇编语言程序进行了复习。

硬件部分,由于先前我们都没有操作过proteus之类的软件,所以一切从零开始,针对这次课程设计需要,查询了可以用于硬件仿真的软件,有Multisim和proteus。

由于Multisim的仿真性能很差,无法仿真单片机,因而选择preteus。

然后通过各种渠道学习了proteus软件的基本操作、原理图的绘制修改、原件的封装以及原件集成库的创建。

流程很简洁,过程很纠结。

我们一步一个脚印地制作着,生怕哪个步骤出错而导致前功尽废。

软件部分,由于学习过《单片机》这门课程,对汇编语言还是比较熟悉,但是过去编辑的程序很短,属于功能比较单一的程序。

而这次课程设计的程序相对比较庞大,是一个艰巨的挑战。

通过回顾51单片机的中断和定时器/计数器部分,将程序写出来了。

然后就是使用keil软件进行调试,修改。

最终得到了正确的程序,本报告的程序绝对原创。

感谢任老师的悉心指导,感谢学院给我们这次机会来做到“知行合一”。

10.参考文献

[1]《单片机原理与应用》宗成阁编著

[2]《单片机应用与仿真调试》严天峰编著

[3]《模拟电子技术(第三版)》胡宴如耿苏燕编著

[4]《数字电子技术(第三版)》杨志忠卫桦林编著

11.程序

ORG0000H

LJMPSTART

ORG000BH

LJMPINIT0

START:

MOVP0,#00H

MOVP2,#0FFH

MOVR0,#70H;主程序开始

MOVR7,#0DH;13

INIT:

MOV@R0,#00H

INCR0

DJNZR7,INIT

MOVTMOD,#01H;选择定时器/计数器T0的方式1

MOVTL0,#0B0H;对低位赋初值

MOVTH0,#03CH;高位赋初值

SETBEA;开中断

SETBET0

SETBTR0;T0计时开始

START1:

LCALLSCAN

LCALLKEYSCAN

SJMPSTART1

DL1MS:

MOVR6,#64H;延时1子程序,延时0.5ms

DL1:

MOVR7,#19H

DL2:

DJNZR7,DL2

DJNZR6,DL1

RET

DL20MS:

ACALLSCAN;延时20ms子程序

ACALLSCAN

ACALLSCAN

RET;数码管显示程序开始

SCAN:

MOVA,78H

MOVB,#0AH

DIVAB;时间秒的十位送给A,时间秒的个位送B

MOV71H,A;时间秒要显示的十位

MOV70H,B;时间秒要显示的个位

MOVA,79H

MOVB,#0AH

DIVAB;时间分的十位送给A,时间分的个位送B

MOV73H,A;时间分要显示的十位送地址

MOV72H,B;时间分要显示的个位送地址

MOVA,7AH

MOVB,#0AH

DIVAB;时间时的十位送给A,时间时的个位送B

MOV75H,A;时间时显示的十位送地址

MOV74H,B;时间时要显示的个位送地址

MOVR1,#70H

MOVR5,#80H

MOVR3,#08H

SCAN1:

MOVA,R5;数码管的显示程序

CPLA

MOVP2,A

MOVA,@R1

MOVDPTR,#TAB

MOVCA,@A+DPTR;对字段表取值显示

MOVP0,A

LCALLDL1MS;延时程序

INCR1

MOVA,R5

RRA

MOVR5,A

DJNZR3,SCAN1

MOVP2,#0FFH

MOVP0,#00H

RET;"0~9"和"-"的字段表

TAB:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H

;定时/计数器T0中断程序

INIT0:

PUSHACC

PUSHPSW

CLRET0;开T0中断

CLRTR0;定时器0清零

MOVTL0,#0B0H

MOVTH0,#03CH;定时50ms

SETBTR0

INC7CH;124

MOVA,7CH

CJNEA,#14H,OUTT0;50ms是否到20次,没有到就继续执行50ms的延时

MOV7CH,#00

INC78H

MOVA,78H

CJNEA,#3CH,OUTT0;一秒的延时是否计到60次,没有就继续执行

MOV78H,#00

INC79H

MOVA,79H

CJNEA,#3CH,OUTT0;一分的延时是否计到60次,没有就继续执行

MOV79H,#00

INC7AH

MOVA,7AH

CJNEA,#18H,OUTT0;60分钟的延时是否计到24次,没有就

MOV7AH,#00

OUTT0:

SETBET0;启动定时器T0

POPPSW

POPACC

RETI;按键处理程序

KEYSCAN:

CLREA

JNBP1.0,KEYSCAN0;P1.0有按键按下则跳转到子程序(选择)不为1转移

JNBP1.1,KEYSCAN1;P1.1有按键按下则跳转到子程序(+)

JNBP1.2,KEYSCAN2;P1.2有按键按下则跳转到子程序(—)

JNBP1.3,KEYSCAN3;P1.3有按键按下测跳转到子程序(确定键)

KEYOUT:

SETBEA

RET

KEYSCAN0:

LCALLDL20MS;20ms的延时消抖

JBP1.0,KEYOUT;为1转移

WAIT0:

JNBP1.0,WAIT0;判断按键是否松手,松手就往下执行程序

INC7DH

MOVA,7DH

MOVB,#3

DIVAB

MOV38H,B

SJMPKEYOUT

KEYSCAN1:

LCALLDL20MS;按键加一的程序

JBP1.1,KEYOUT

WAIT1:

JNBP1.1,WAIT1

MOVA,38H

KSCAN11:

CJNEA,#01H,KSCAN12;如果功能键按下则对时加一调整

INC7AH;

MOVA,7AH

CJNEA,#24,KEYOUT

MOV7AH,#00

SJMPKEYOUT

MOVA,38H

KSCAN12:

INC79H;;如果功能键按下则对分加一调整

MOVA,79H

CJNEA,#60,KEYOUT

MOV79H,#00

SJMPKEYOUT

MOVA,78H

KSCAN13:

CJNEA,#1EH,KK1;加秒

MOV78H,3BH;

INC79H

AJMPKEYOUT

KK1:

CLR78H

AJMPKEYOUT

 

KEYSCAN2:

LCALLDL20MS;按键减一的程序

JBP1.2,KEYOUT

WAIT2:

JNBP1.2,WAIT2

MOVA,38H

KSCAN21:

CJNEA,#01H,KSCAN22;如果功能键按下则对时减一调整

DEC7AH;

MOVA,7AH

CJNEA,#0FFH,KEYOUT

MOV7AH,#23

SJMPKEYOUT

KSCAN22:

DEC79H;如果功能键按下则对分减一调整

MOVA,79H

CJNEA,#0FFH,L1

MOV79H,#59

L1:

AJMPKEYOUT

MOVA,78H

KSCAN23:

CJNEA,#1EH,KK2;减秒

MOV78H,3BH;

DEC79H

AJMPKEYOUT

KK2:

CLR78H

AJMPKEYOUT

KEYSCAN3:

LCALLDL20MS;延时消抖程序

JBP1.3,KEYOUT

WAIT3:

JNBP1.3,WAIT3;判断是否放开按键

LJMPSTART

END

 

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

当前位置:首页 > 高等教育 > 研究生入学考试

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

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