数字钟项目书

  • 格式:docx
  • 大小:509.19 KB
  • 文档页数:19

1 数字钟项目书 项目名称 数字钟 文档名称 数字钟项目书

文档版本 0.2 日 期 2012-3-13

撰写日期 2012-3-13 审核日期 批准日期 2

目录 1. 产品说明............................................................................................... 3 2. 功能设计说明 ...................................................................................... 3 3. 系统设计............................................................................................... 4 4. 硬件设计方案 ...................................................................................... 4 5. 软件设计方案 ...................................................................................... 5 5.1 程序总体框架 ............................................................................. 5 5.2 子程序 ......................................................................................... 6 5.2.1 初始化模块 ........................................................................ 6 5.2.2 键盘扫描模块 .................................................................... 8 5.2.3 调整时分模块 .................................................................... 9 5.2.4 Timer0中断处理模块 ........................................................ 9 5.2.5 Timer1中断处理模块 ........................................................ 9 5.2.6 蜂鸣器模块 ........................................................................ 9 5.2.7 延时模块 ............................................................................ 9 6. 参考程序............................................................................................. 10 3

1. 产品说明 使用单片机控制6个数码管,模拟小时,分,秒显示,时间需要可以修改,并且可设置闹钟时间。时间到的闹铃响。

2. 功能设计说明 (1) 秒和分60进制,小时24进制。 (2) 数码管的控制可以用扫描方式,也可以外加辅助电路如锁存器等。 (3) 可以外加按键控制,实现计数的暂停、开启功能。 (4) 通过按键可以设置当前时间,闹钟时间。 (5) 闹钟时间到,则外部蜂鸣器发出蜂鸣。1Hz鸣叫。通过按键可以停止鸣叫。 (6) 24小时制,一天误差不要超过3分钟。

系统操作: 按键 功能 K1 调整小时:显示时钟时按调整时钟小时,当按下K3后为调整闹钟小时。

每按一次小时

位加1,到24时跳为0. K2 调整分钟:正常情况下按调整时钟分钟,当按下K3后为调整闹钟分钟。

每按一次分钟

位加1,到60时跳为0. K3 设置闹钟:按下按键后显示闹钟时间,时钟正常走。 K4 显示时钟:按下后返回时钟时间。 K5 关闭闹铃:按下后闹铃停止。 K6 暂停时钟:第一次按,时间暂停。第二次按,计数器启动 时间正常走 4

3. 系统设计 MCUCortex M0

6个按键P1.0~P1.5蜂鸣器段锁存器六位数码管段选口位锁存器六位数码管位选口P2.7P2.6

P0口

P2.5P0口

软件功能:在硬件的基础上完成对系统的控制,它可以对每个外设,内设进行合理控制,达到设计的需求.驱动系统包括I/O口的控制.系统定时器,中断的控制。

4. 硬件设计方案 (1)系统外设。 2个74HC573 锁存器 数据占用8个I/O口,P0口 锁存位占用2个I/O口,P2.6 ,P2.5 蜂鸣器 1个I/O口,P2.7 6个按键 5个I/O口,P1.0-P1.5

(4)硬件原理图 5

5. 软件设计方案 软件设计中心思想,尽量减少中断中的处理数据量,中断尽量只做开关量的判断和时间标志。控制和计算都在主程序中进行,程序设计做到模块化编成,考虑到移植性,并且充分注释。程序设计时充分考虑运行的效率,实时性。

5.1 程序总体框架 主流程图: 6

上图为主系统的程序流程主函数进去后先解锁寄存器,选择外部12M晶振作为主系统时钟,并等待稳定。初始化I/O,初始化定时器,Timer0、Timer1初始化。读取键盘状态,执行相应的处理函数,如,时间调整,设置闹铃等。没有按键时,正常显示时间。判断闹铃是否符合条件,若符合闹铃响30秒,否则继续扫描键盘状态。

5.2 子程序

子程序设计时主要分为三大模块:初始化模块,键盘扫描模块,调整时分加1模块,Timer0中断处理模块,延时模块,蜂鸣器模块.分别如下图所示:

5.2.1 初始化模块 初始化模块主要完成IO、timer0、timer1、软件变量、中断初始化。 7

I/O口初始化Timer0初始化Timer1初始化软件变量初始化中断初始化

IO初始化,也就是IO的输入输出,端口的电平高低 timer0初始化,也就是timer0定时基准为1秒,设为周期模式,使能定时中断。 timer1初始化,也就是timer1定时基准为7.5ms,设为周期模式,使能定时中断。 Timer1流程图:

开始闹钟设置键是否按下

显示时钟时间否显示闹钟时间

软件变量初始化,主要初始化,程序中的一些开关和定义的寄存器变量。 中断初始化,打开相应的中断使能,并且中断请求清零。 8

5.2.2 键盘扫描模块 读取键盘状态

调整小时键K1按下调整分钟键K2按下设置闹钟键K3按下显示时钟键K4按下关闭闹铃

键K5按下暂停计数键K6按下开始计数

键K6按下

小时加1分钟加1显示闹钟时间,调整闹钟时间显示时钟时间关闹铃暂停计数开始计数

调整小时:显示时钟时按调整时钟小时,当按下K3后为调整闹钟小时。每按一次小时位加1,到24时跳为0。 调整分钟:显示时钟时按调整时钟分钟,当按下K3后为调整闹钟分钟。每按一次分钟位加1,到60时跳为0。 设置闹钟:按下按键后显示闹钟时间,时钟正常走。 显示时钟:按下后返回时钟时间。 关闭闹铃:按下后闹铃停止。 暂停时钟:第一次按,时间暂停。第二次按,计数器启动 时间正常走。 9

5.2.3 调整时分模块 小时调整键是否按下小时加1是是否到24小时清0是结束否否分钟加1是是否到60分钟清0是结束否否分钟调整键是否按下

闹钟时间调整同上,只是改变存储的闹钟时间。 5.2.4 Timer0中断处理模块 每进一次中断秒加1,秒到60分钟加1,分钟到60小时加1。蜂鸣器进行1Hz鸣叫。 5.2.5 Timer1中断处理模块 数码显示系统。 5.2.6 蜂鸣器模块 无源蜂鸣器用方波驱动三极管,频率为50Hz。闹钟响30秒。 5.2.7 延时模块 有参数延时模块,定义变量值选择延时时间。 10

6. 参考程序 #define P0_MODE 0x5555 #define P1_MODE 0x0000 #define P2_MODE 0x5555 #define DU_ON P26_DOUT=1; #define DU_OFF P26_DOUT=0; #define WE_ON P25_DOUT=1; #define WE_OFF P25_DOUT=0;

#include #include "M051.h" #include "Register_Bit.h" #include "Common.h" #include "Macro_SystemClock.h" #include "Macro_Timer.h"

uint8_t table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};

uint8_t num1,num2,naoz; uint8_t ling=1; uint8_t beep_stop=1; uint8_t BEEP_ON=0; uint8_t num=0; uint8_t clock=0; uint8_t hour=20; uint8_t min=9; uint8_t sec=56; uint8_t naoh=20; uint8_t naof=10; uint8_t naom=0;

void Timer0_Init(void); void Timer1_Init(void); void display(uint8_t ,uint8_t ,uint8_t ); void naoling(void); void delay(uint16_t z); uint8_t keyscan(void);

main(void)