需要理解
Q:
- 按键消抖时间在20ms左右
- CLK为12MHz的51单片机的指令周期大约是2us(1ms约可执行500条指令)(意在说明不影响程序正常运行,例如数码管刷新效果可以维持下去)
S:
- 用定时器产生1ms中断,维持键盘“实时”扫描
- 沿用
行列扫描的思维,形成扫描循环(即 释放当前输出引脚,拉低下次的输出引脚)
U:
- 一个定时器中断
- 8个I/O接口
- 约5ms的执行时间
A:
## Config ##
## 注意:该驱动扫描为行索引,即每次扫描 一行 ,每 1ms 扫描一次
全键盘4ms扫描完成,按键经4次(即 16ms)确认后判为按下(KeySta变为0,触发KeyAction)
回弹后,16ms恢复状态(KeySta变为1)
KEY_OUT_1 = P*^*; //扫描输出
KEY_OUT_2 = P*^*;
KEY_OUT_3 = P*^*;
KEY_OUT_4 = P*^*;
KEY_IN_1 = P*^*; //扫描输入
KEY_IN_2 = P*^*;
KEY_IN_3 = P*^*;
KEY_IN_4 = P*^*;
//“实时”状态缓冲区
u8 KeySta[4][4] = {
{
1, 1, 1, 1}, {
1, 1, 1, 1}, {
1, 1, 1, 1}, {
1, 1, 1, 1} };
u8 code KeyCodeMap[


3608

被折叠的 条评论
为什么被折叠?



