线反转法实现矩形键盘按键识别

由于行、列线为多键共用,各按键彼此将相互发 生影响,必须将行、列线信号配合起来并作适当的处 理,才能确定闭合键的位置。

线反转法

第1步:列线输出为全低电平,则行线中电平由高变低 的所在行为按键所在行。

第2步:行线输出为全低电平,则列线中电平由高变低 所在列为按键所在列。

综合上述两步,可确定闭合按键所在行和列。

程序代码

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

/*共阴极数码管0至F的段码*/

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0x7d,0x07,0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

/*0至F的键值*/

uchar code key_value[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,

0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,

0xe7,0xd7,0xb7,0x77};

void delay();

void delay()

{

uint i;

for(i=0;i<1000;i++);

}

uchar key_dis()

{

uchar key_buf;

uchar key_state;

P2=0xf0;

key_buf=P2;

if(key_buf!=0xf0)

{

delay();

if(P2==key_buf)

{

key_state=key_buf&0xf0;

P2=0x0f;

key_buf=P2;

key_buf&=0x0f;

key_state=key_state|key_buf;

return key_state;

}

else

return 0;

}

else

return 0;

}

void main(void)

{

uchar j,key_num;

P0=0x00; // 开机黑屏

while(1)

{

key_num=key_dis();

if(key_num!=0)

{

for(j=0;j<16;j++)

{

if(key_num==key_value[j]) //获得按键的键号

break;

}

P0=table[j];

}

}

}

原理图

仿真结果

相关推荐
nashane44 分钟前
HarmonyOS 6学习:外接键盘CapsLock与长截图功能的实战调试与完整解决方案
学习·华为·计算机外设·harmonyos
ACP广源盛139246256735 小时前
iOS 27 开放 AI 生态@ACP#小型化扩展黄金风口,IX8008全面超越 ASM2806,铸就嵌入式 AI 扩展核心
人工智能·嵌入式硬件·macos·ios·计算机外设·objective-c·cocoa
Jwest20219 小时前
工业显示器什么牌子质量最好性价比最高?
计算机外设
hudawei99616 小时前
RK R87 Pro AI键盘,AI功能设置与连接教程
人工智能·计算机外设·使用说明·rk r87 ai键盘
byte轻骑兵1 天前
【HID】规范精讲[16]: 蓝牙键盘默认状态玄机——连接中断后,那些设置为何会重置?
人工智能·计算机外设·人机交互·蓝牙键盘·蓝牙鼠标
代码对我眨眼睛2 天前
Mac 如何单独修改鼠标滚动方向,而不影响触控板
macos·计算机外设·策略模式
国产芯片设计2 天前
小家电单段码屏项目实战|YL1621 LCD驱动开发与调试心得
驱动开发·stm32·单片机·mcu·51单片机
兴通物联科技2 天前
工业手持终端 PDA 键盘化设计与现场作业效率优化 —— 以 XT8001D 为例
大数据·物联网·计算机视觉·计算机外设·硬件架构
XTIOT6662 天前
工业数据采集设备选型 —— 实体键盘 PDA 的技术优势与场景适配(基于 XT8001D 实践)摘要
大数据·嵌入式硬件·物联网·计算机外设
脑瓜嗡2 天前
AutoHotkey按下方向键将鼠标左键按住向上滑动
计算机外设