2025-11-08 05:33:31
得先扫一圈键盘看看有没有按键被按下然后判断是哪个数字在数码管上显示出来。单片机得用I/O口接按键和数码管得先配置好端口模式。比如P1口接8个按键P0口接6个数码管段选。得用定时器中断控制扫描速度每隔5毫秒扫一次按键。当检测到按键按下时要消抖处理延时10毫秒再确认。消抖完发现按键还在按就记录对应的数字比如按键1对应数码管显示1。数码管显示得用动态扫描流点亮每个数码管。每个数码管亮1毫秒间隔0.5毫秒这样人眼看起来就是同时亮了。这样总共扫描6个数码管需要6毫秒扫描8个按键需要8毫秒总耗时14毫秒刚好在定时器中断50赫兹的20毫秒周期内完成。这样就能实现按键输入数字实时显示。
因为单片机需要先确认按键稳定所以加了消抖程序延时10毫秒查表法找对应的数字码然后数码管动态扫描频率得在50赫兹以上不然会有闪烁现象。查表法是把每个按键编号和对应的段码存到数组里比如按键0对应0x3F段码。动态扫描时得先送段码到P0口再选通对应的数码管。比如显示数字1时要先送0x01到P0口再置P2.0为高电平。这样每个数码管轮流显示总时间不能超过20毫秒否则会丢帧。实测用50赫兹扫描频率每个数码管显示1毫秒正好20毫秒完成全部扫描。消抖延时10毫秒是参考按键抖动最大20毫秒的数据手册要求。这样设计既保证按键响应又避免数码管闪烁。
本题链接: