51单片机数码管时钟电路的设计-AT89C51

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

广东石油化工学院

《51单片机原理与实践》课程设计报告

学院计算机与电子信息学院

专业

班级

学号

姓名

指导教师

课程成绩

完成日期 2010年12月27日

数码管时钟电路的设计

一、设计目的:

通过这次课程设计掌握单片机系统的基本设计步骤及设计思路,掌握汇编语言的用法及各种指令的含义,比较熟练的运用指令进行单片机系统的设计的,熟悉用KEIL软件进行汇编语言的汇编,以及把代码写入实验板中,观测代码结合实际的运行结果后进行调整,体会到编程的分析问题、确定算法、画程序流程图、编写程序、程序功能模块化的优点的各各步骤。

二、设计要求:

LED数码管时钟电路采用24h计时方式,时、分、秒用六位数码管显示。该电路采用AT89C2051单片机,使用3V电池供电,只使用一个按键开关即可进入调时、省电(不显示LED数码管)和正常显示三种状态。

三、设计实验内容:

1. 硬件的设计

其采用AT89C51单片机应用设计,LED显示采用动态扫描方式实现,P0口输出段码数据,P2口输出位码数据,P1.1、P1.2接按钮开关。为了提供LED数码管的驱动电流,采用6MHz晶振。

2. 系统总体分析

系统主要包含四大模块:显示模块、时间计时模块、模式切换模块和模式设置模块。

●显示模块:主要由主循环负责。内存中开辟了一段8字节的内存空间,

用作数据显示的字符缓冲区。主循环不断将缓冲区中的字符呈现至数码管。

●时间计时模块:电子钟的核心模块,记录了时间的时、分、秒信息。

●模式切换模块(MODE):切换电子钟的设置模式,包括时设置、分设置、

秒设置、闹铃开关设置、闹铃时设置和闹铃分设置。相关数据被设置时将闪烁显示。

●模式设置模块(CONFIG):通过判断设置模式(MODE),执行相应的设置。

如时、分、秒的增1以及闹铃开关的变换。

另外,主循环还负责扫描键盘,检测相应键是否被按下,若MODE键被按下则在特定单元中登记该功能,并启动定时器1,然后返回继续执行显示功能。在定时器1中断时,被登记的功能正式执行。期间用时约10ms,用以消除机械抖动。

主循环流程图大致如下:

图(一)主循环流程图

定时器1中断服务程序流程图如下:

图(二)定时器1中断服务程序流程图

3. 系统主要程序的设计

1)主程序

本设计中的主程序主要负责对键盘扫描及显示数据,还包括判断是否闹钟正在活动。若键盘中的P1.6(模式键)或P1.7(设置键)被按下,登记将被执行的功能,主循环不负责功能模块的执行。若闹钟正在活动,调用蜂鸣函数。其中bPalse标识了一秒的前半秒和后半秒,是为了控制显示数据的半秒闪烁。主函数还包含初始化操作,以下省略。

loop:

MOV B, #01111111B ;位选通信号

MOV R0, #prebuf - 01H ;数据缓冲区

nextnum:

ACALL keyscan ;扫描键盘

INC R0

MOV A, @R0

PUSH ACC

MOV A, B

RL A

MOV B, A

JB bPalse, show

ORL A, dmask

JNB bAlaIng, show

MOV led, #0FFH

ACALL beeponce 若闹铃活动,调用蜂鸣函数

DEC SP

show:

PUSH ACC

ACALL displayone 在特定数码管显示数据。

DEC SP

DEC SP

ACALL delay

CJNE R0, #prebufend, nextnum

SJMP loop

keyscan:

JNB keym, keymode ;若切换键被按下,登记“切换”功能

JNB keyc, keyconf ;若设置键被按下,登记“设置”功能

RET

;=====================

;

;log function 'mode'

;

;=====================

keymode:

MOV funclog, #01H ;key act

ACALL funcperform ;激活“功能执行模块”(见下文),

RET

;=====================

;

;log function 'config'

;

;=====================

keyconf:

MOV funclog, #02H

ACALL funcperform ;激活“功能执行模块”(见下文)

RET

2)显示子程序

在特定数码管显示数据,通过堆栈传递参数。

第一个参数是待显示的字符,第二个参数是位选通信号。函数通过查字形码表将字形显示至数码管。

displayone:

PUSH ACC

PUSH PSW

MOV A, R0

PUSH ACC

PUSH B

MOV PSW, #00H

MOV A, SP

SUBB A, #07H

MOV R0, A

MOV A, @R0

INC R0

MOV B, @R0

相关文档
最新文档