1
8 电子钟程序设计
电子表是单片机简单系统最典型的案例,本节学习使用动态扫描的方式实现 6 位数码管
组成的电子钟的设计方法,主要目的是让读者掌握结构化程序设计方法,了解利用数组变量
实现数码管数字显示技巧;并熟练掌握键盘的控制编程方式。
本案例设计分阶段进行,首先使用定时器的方式,实现时钟的显示、调整,包括调整时
数字的闪动,调整范围的界定等问题。然后实现单闹钟的功能,包括定时时间的显示,所定
时间的调整,定时到时的响铃等功能。最后实现双闹钟的全部可调的设计目标。
8.1 设计任务
电子表使用 6 位数码管实现显示时分秒,实现双定闹。使用 4 个键控制,按模式键以后
调整数字加减、闹钟开启。长按加减键,快速调整,停止闪烁。普通模式按下闹钟键显示定
时时间,闹铃时按下则停止闹铃。进入调整模式后 10 秒任意键没有操作,将返回到正常显
示模式。采用的电路见图 8-1 所示。六位数码管的段选连接在单片机的 P0 口,位选连接在单
片机的 P2 口,从右至左分别从 P2.0 到 P2.5。键盘连接在 P3.2 到 P3.5 口。蜂鸣器连接在单
片机的 P1.7 口。
R2~9 200
SEVEN_SEG
NOT1
NOT2
NOT3 NOT4
KEY1
KEY2
NOT5
KEY4
KEY3
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
2
3
4
5
6
7
8
P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
P2.7/A15
P2.6/A14
P2.5/A13
P2.4/A12
P2.3/A11
P2.2/A10
P2.1/A9
P2.0/A8
RESET
XTAL2
XTAL1
EA
ALE
PSEN
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD
10
11
12
13
14
15
16
17
P1.7
1
19
18
9
C1 30P
C2 30P
CY 12MHz
R1 1K
C3 10
μ
IC STC89C51
VCC
P2.2P2.3P2.4P2.5 P2.1 P2.0
P2.2
P2.3
P2.4
P2.5
P2.1
P2.0
图 8-1 硬件电路图
8.2 系统功能分析
此处以使用定时器中断计时的单时钟闹铃为例进行讲解,后附双时钟 DS1302 时钟的完
整程序,两程序结构相似,后者在功能上更为完整,走时更为准确,具有实用价值。在设计
中主要功能可以划分为键盘控制模块、显示时间输出、定时等部分内容。时间的计数要使用
定时器中断来实现。
一、键盘控制
键盘控制是本设计中的重要部分,在键盘上实现全部的功能的调整,首先需要定义各个
按键的主要功能,功能如表 8-1 所示。KEY2 键负责调整模式的选择,带有去抖功能,每按
下一次,改变一次状态,前三次修改时间,后三次修改闹钟时间。KEY3、KEY4 在对应的
模式下进行加或者减,也带有去抖功能。KEY1 在正常显示时按下,显示所定闹钟的时间和
开启与否,在闹铃响起时,按下起到停止闹铃的作用。由于一直按下时显示所定闹钟时间,
故此键不能带有去抖功能。
表 8-1 键盘功能控制
键名
KEY1 闹铃键
KEY2 模式键
KEY3 加键
KEY4 减键