- MCU: 8051系列单片机
- 编程语言: C
这是一个为实际项目写的初期验证demo。
实际应用中可能碰到每天定期执行不同的任务的项目,比如某试验设备每天2:00-7:00需开加热器保温,8:00-9:00加湿,12:00-2:00需开启风扇通风,20:00-24:00需开启光照等等。由于成本限制加之需求单一,未采用PLC或其他成熟控制器产品方案,且设备为嵌入其他电子设备安装,安装空间十分紧凑,有低功耗要求。综合考虑后,决定采用廉价、成熟的8051系列控制器做主控芯片,设计一款带时钟显示、多组定时器的小型闹钟。为尽量减小面板面积,仅采用了两个按键。此项目是实际项目初期本人编写的验证性的demo,与实际有改动,但基本功能体现完整。
- 时钟功能:本定时器时钟具备基本的时间显示功能。
- 闹钟功能: 最多可以设置0-7号共8个不同的闹钟时段,每个时段分别对应P1.0~P1.7的IO接口,在闹钟时段内,IO输出1,反之输出0。
- 开机后,从EEPROM中读取闹钟设置,此时屏幕显示"-";
- 进入正常显示后,显示当前时间,冒号每2s闪烁一次;
- 显示状态短按控制键,可分别在"时间-日期-年份-闹钟0起始-闹钟0结束-闹钟1起始-...闹钟n结束-时间"这几种显示状态间循环(闹钟的起始时间时,冒号的第一点亮;结束时间时,冒号的第二点亮)。在某显示状态长时间停留,会自动回到时间显示状态。
- 在某种显示状态时,长按设置键,可进入更改界面,正在更改的字段会闪烁。
- 更改界面,短按控制键可增加相应字段的值,控制键可长按;短按设置键可切换更改字段(闪烁提示),长按设置键可保存当前值并返回当前值的显示状态。
-
/lib lib文件夹内为8051系列的一些常用硬件类库,编译时需引用此类库。
-
/状态机按键demo 一个纯粹的按键状态机demo,实现了干扰滤除、短按、连发功能。
-
/src 源码文件
使用状态机模式进行按键处理,使用一个计数器来判断按键的状态,从而在各个状态间流转,实现了按键的干扰滤除、短按、长按连发的功能,尽量减少了实体按键数量。
利用程序状态机结合按键状态机,实现了不同设置界面时按键响应也不同。