(最新版)基于51单片机汇编语言的数字钟课程设计报告含有闹钟万毕业论文 联系客服

发布时间 : 星期二 文章(最新版)基于51单片机汇编语言的数字钟课程设计报告含有闹钟万毕业论文更新完毕开始阅读

单片微型计算机课程设计

基于汇编语言的电子数字钟

整体设计方案

? NINE:中断(TO)计时程序

包含了秒→分→时→日→月→年进位以及判断大小月及平闰年以及生日标志设定

? TEN:中断预置程序

控制预置项目的自动加计数的延时时间, 并能判断大小月及平闰年

? ELEVEN:中断(INT0)控制程序

控制预置的开/关及生日信号的清楚

? TEWLVE:延时程序

用于闪烁时的数码管亮度控制

模块划分中遇到的问题及解决:

模块划分的过程中遇到的问题不多,只做了一个比较大的修改。刚开 始设置模块的时候并没有设定显示缓存LED12、LED34、LED56而是将主显 示模块THREE分成四个部分分别实现对时间、日期、闹铃、生日的显示(编 号FOUR、FIVE,SIX便是删去的另外三个部分的程序名)并通过检测开关决 定跳转到哪一个部分去执行,但经过分析发现这样做极大地浪费了存储空 间而设置显示缓存后,只需要在检测开关后将相应要显示的数据送入显示 缓存并在主程序中对显示缓存进行显示即可,这样做大大地缩减了程序存 储空间而程序可读性也增强了。在程序编码完成后发现,没有必要将SEVEN 显示HAPPY程序同THREE显示主程序单列开来,TWELVE延时程序也并不是必 要的,并且模块的划分还有些值得商榷的地方,本报告中的程序还可以通 过模块划分的优化修改得更加精简一些。

06 电气工程及其自动化 2 班

许伟敏

4

7

单片微型计算机课程设计

基于汇编语言的电子数字钟

单模块流程设计

五、单模块流程设计

在完成了系统总流程设计后,便进入到了系统设计中工作量最大的单 模块流程设计。由于系统模块划分虽然是系统设计的基础,但比较简单而 且模块划分有多种方法,因此单模块的设计可以认为是本程序中最关键的 部分。单模块设计的好坏与否决定了系统功能能否被稳定地实现以及下一 阶段调试程序的难度。

鉴于单模块设计的重要性,我在设计中并不急于对模块进行编码,而 是反复论证模块的可行性和流程图,为下一阶段的工作做好准备,同时也 能够尽早发现系统模块划分的错误,加以解决。

㈠各模块设计概述及模块流程图

①初始化模块(ONE)

初始化模块包含了各中断的跳转语句、存储资源的分配、各存储器和寄存器的赋值以及中 断及计时器的状态设置。

源程序中共使用了17字节的内部数据存储地址,其中包含3字节位寻址地址以便于进行位 判断。

三字节的位寻址地址分配如下:

开始

22H—秒的存储地址,方便对整点报时条件进行判断 23H—月的存储地址,方便对大小月平闰年进行判断

跳转指令

资源分配(伪指 令 EQU 及 BIT)

另外一个位寻址字节00H地址拆开用做程序状态标志位

00H(bit,BS)—生日标志位,到生日那天为 1 使程序转入生日显示段 01H(bit,SS)—预置标志,以INT0控制其值,控制预置闪烁的实现 02H(bit,GS)—闪烁标志,在预置标志有效时控制闪烁项目的亮和灭两状态 03H(bit,FC)—频率控制,在整点报时时控制产生低音还是高音 04H(bit,NB)—忽略生日标志,控制预置及报时的优先级高于生日显示 05H(bit)—控制生日信号的有效与否,其使用目的参见调试过程

时间、日期、闹 铃时间、生日日 期存储地址赋初 值;各状态标志 位赋初值 设置中断优先 级、各中断工 作方式

源程序中使用了两个寄存器R1、R0,R1用于控制闪烁的间隔时间, R0用 于显示延时。

在初始化模块中设定了中断的优先级、定时计数器的工作模式、并打开 了定时计数器TO开始计时

其他资源分配项目参见源程序集合及注释。初始化模块指令很大一部分 都是伪指令,方便了后面程序的编写。

初始化模块流程图↑

06 电气工程及其自动化 2 班

许伟敏

4

8

单片微型计算机课程设计

基于汇编语言的电子数字钟

单模块流程设计

②开关检测模块(TWO)

开关检测模 块主要执行两个 任务:

⒈读取闹铃 使能控制拨码开 关K5的值并赋予 闹铃使能相应值;

⒉读取显示 选择开关(K0,K1) 的值并将要显示 的项目值送入显 示缓存LED12、 LED34、LED56.当 K5为1时将A1H送 入RE,反之送入

A0H,其中A为“—”的字型码查表偏移量。当显示生日日期时,将生日Birthday的缩写“bd”的 字型码送入显示缓存LED56。

开关检测模块的执行时间大约在40uS左右。

开关检测模块流程图↑

③显示主程序(THREE)

显示主程序是程序中最复杂的模块,实现的功能也最多,占用了程序运行过程当中90%以 上的执行时间。流程图中由判断SS(预置信号)开始分成两个分支,当SS=1,即预置状态下程序 进入预置闪烁部分。

预置闪烁的优先级是:LED34>LED12>LED56即同预置优先级相同(参见调试部分的详细说 明)闪烁首先判断是否对LED34进行判断闪烁,如果是则另外两个显示值直接显示,否则判断 是否对LED12进行闪烁,如果是则直接显示LED56的值,只有当前两个显示值都不闪烁的时候, 才判断是否对LED56进行闪烁,这样就确保了每次只有一个显示值闪烁。预置通过GS标志位判 断预置的亮/灭,由R1控制每50轮显示对GS取反一次。

当SS=0时进入判断闹铃/报时及正常显示模块,模块EIGHT(参见其说明)对闹铃及报时条件 进行判断,符合条件则对P1.6取反一次并使NB(忽略生日)有效,此时不进行对BS(生日标志) 的判断,即使响铃优先级高于生日显示(其实也可以对程序进行修改使响铃和生日显示不发生 冲突,修改方法参见程序优化)。当不响铃并且生日标志BS有效时显示HAPPY

④显示HAPPY子程序(SEVEN)

本程序实际上是显示主程序的分支,在模块的划分过程中为了简化显示主程序的编写而将

06 电气工程及其自动化 2 班

许伟敏

4

9

单片微型计算机课程设计

基于汇编语言的电子数字钟

单模块流程设计

其单列开来。本程序由生日标志BS控制,当到达生日时间时,T0中断程序会将BS置1使之有效 在显示主程序中通过判断BS的置来控制是否执行本模块。

显示主程序及显示”HAPPY”模块流程图↑

说明:* 只有当在预置日期时,才需要对LED56进行预置闪烁判断。并且当LED34(即月份的显示缓存)

06 电气工程及其自动化 2 班

已经判断需要闪烁后,LED56便不需要闪烁而直接显示(闪烁优先级LED56最低,每次只对一个项 目进行预置,只有一个项目需要闪烁)。这个设置使同时拨下两个以上预置开关时不会出错,参 见调试部分说明

** 闹铃及报时判断程序EIGHT执行过程参见其说明

许伟敏

4

10