一 . 题目要求
- 用单片机制作作息时间控制器;
- 用四位数码管显示实时时钟(时、分,24小时制、12小时制),有秒闪,小时十位有零消隐;
- 可用数字键或+、-键校时(可快速+、-)被校位(时、分)闪烁;
- 作息时间可设定(最多16个时间点),可以任意查询、添加、删除;
- 设定时间到,发出提示音(5秒),时钟显示闪烁。
设计思考
设计要求使用的单片机是51系列的单片机,并提供了键盘和数码管显示的印刷电路板,所以我们首先制作一个单片机的最小系统,将最小系统的PIN脚引出通过线和键盘,数码管的电路板相连接,软件方面是初始化,然后按键扫描,并输出键值和键盘被按下的信息,后面的程序依据此进行判断,执行相应的操作的,数码管刷新的程序放在定时器0中,记时的功能放在了这个定时器1中。
三. 电路原理
硬件部分
- 单片机最小系统
电源:单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚,电容C4为退耦电容。
振荡电路:单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚即可。
复位(RST,第9引脚):只要在RESET引脚上出现了持续24个时钟振荡脉冲(两个机器周期)以上的高电平,单片机就能够实现复位。
蜂鸣器电路:使用P20引脚控制三极管驱动蜂鸣器工作发出提示音。
- 按键电路
电路使用4*4矩阵式键盘进行按键控制,先令D1为高电平D2、D3、D4为低电平,扫描D5、D6、D7、D8的状态,令D2、D3、D4依次为高电平,扫描D5、D6、D7、D8的状态,则可知道是那个按键按下。
- 数码管驱动电路
从P0口输出时要加上上拉电阻(RP1),P0口输出的是段选码,P1口输出的是位选码。P0口控制数码管显示的数据,P1口控制六位数码管的选通,当循环的频率十分快时,在人的肉眼看来是六位数码管都是同时工作。
软件部分
主流程图
子程序流程图
按键处理
按键扫描
四.调试及总结
程序调试时,蜂鸣器发声不太正常,由于单片机输出带负载能力较差,后来改进电路,程序编写过程中出现了数据存储器不足问题,使用了较多的全局变量,后来虽然一定程度上改进了,但数据存储器的空间剩下的仍然不多,段码的编写一开始直接试,效率较低,以后应先分析引脚的功能,然后编程,提高效率,在程序开始部分应对程序中用到的pin脚的定义,增强可读性,对一些常用缩写定义方便使用的。