从单片机基础到程序框架(全集 2019pdf版).pdf - 第726页
第一百二十四节: 数显仪表盘显示“速度、方向、计数器 ”的跑马灯。 【124.1 数显仪表盘显示“速度、方向、计数器”的跑马灯。 】 上图 12 4.1.1 数码管 上图 12 4.1.2 独立按键 上图 12 4.1.3 有源蜂鸣器
时器是两种不同的功能范畴,用两个不同的变量进行分开隔离,各自管理两种不同的事物,计时器即使为 0
也不影响代码本该有的自锁功能”。通过此例子,给初学者一个建议,在代码的“队形感,易读性,扩展性,
分类清晰”和“巧妙,节省代码”两者之间,建议大家优先考虑“队形感,易读性,扩展性,分类清晰”,
追求一种原则上的“工整,不出奇兵,扎硬寨,打呆仗,步步为营”,这样阵脚不易乱,能走得更远,驾驭
更多千军万马的代码。

第一百二十四节: 数显仪表盘显示“速度、方向、计数器”的跑马灯。
【124.1 数显仪表盘显示“速度、方向、计数器”的跑马灯。】
上图 124.1.1 数码管
上图 124.1.2 独立按键
上图 124.1.3 有源蜂鸣器

上图 124.1.4 LED 电路
本节小项目,意在“人机界面”与“过程控制”如何关联的练习。
程序功能如下:
(1)数码管显示的格式是“S.D.CC”。其中 S 是代表 3 档速度,能显示的数字范围是“1、2、3”,分别
代表“慢、中、快”3 档速度。D 代表方向,往右跑显示符号“r”(right 的首字母),往左跑显示符号“L”
(Left 的首字母)。CC 代表计数器,跑马灯每跑完一次,计数器自动加 1,范围是 0 到 99。
(2)【速度】按键 K1。每按一次【速度】按键 K1,速度档位显示的数字在“1、2、3”之间切换。
(3)【方向】按键 K2。跑马灯上电后默认处于“往右跑”的方向,默认显示字符“r”。每按一次【方向】
按键 K2,跑马灯就在“往右跑”与“往左跑”两个方向之间切换,显示的字符在“r、L”之间切换。
(4)【启动暂停】按键 K3。上电后,按下【启动暂停】按键 K3 启动之后,跑马灯处于“启动”状态,4
个 LED 灯挨个依次循环的变亮,给人“跑”起来的感觉,此时再按一次【启动暂停】按键 K3,则跑马灯处于
“暂停”状态,接着又按一次【启动暂停】按键 K3,跑马灯又变回“启动”状态。因此,【启动暂停】按键
K3 是专门用来切换“启动”和“暂停”这两种状态。
代码如下:
#include "REG52.H"
#define KEY_FILTER_TIME 25
#define SCAN_TIME 1
#define VOICE_TIME 50
#define RUN_TIME_SLOW 500 //“慢”档速度的时间参数
#define RUN_TIME_MIDDLE 300 //“中”档速度的时间参数
#define RUN_TIME_FAST 100 //“快”档速度的时间参数
void T0_time();
void SystemInitial(void) ;