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

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

线反转法

第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_valuej) //获得按键的键号

break;

}

P0=tablej;

}

}

}

原理图

仿真结果

相关推荐
集芯微电科技有限公司13 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
lichong95113 天前
让AI自己用电脑!Cua:后台操作鼠标键盘,Mac/Windows/Linux全支持
人工智能·macos·ai·计算机外设·agent·提示词
xxwxx__13 天前
51单片机 + ESP8266 TCP通信实战:从零实现WiFi远程控制
c语言·嵌入式硬件·tcp/ip·51单片机
Saniffer_SH14 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
阿泽·黑核14 天前
05 keyflow 扩展设计方案:矩阵键盘/组合键/事件队列/中断驱动
线性代数·矩阵·计算机外设·嵌入式·agent·vibe coding
智者知已应修善业14 天前
【51单片机串口通信甲机四个按键模拟四位二进制值发送乙机以十进制显示2位数码管】2024-6-14
c++·经验分享·笔记·算法·51单片机
科技每日热闻14 天前
618 AI显示器选购指南!爱攻AGON AI定制芯片电竞显示器AG277UX,适合哪些玩家?
人工智能·科技·游戏·计算机外设
科技每日热闻14 天前
舒视蓝4.0 AI版!EVNIA弈威海王星系列护眼电竞显示器27M4P5501U来袭
人工智能·科技·游戏·计算机外设
开开心心_Every15 天前
界面干净的开源免费电视浏览器
人工智能·科技·智能手机·计算机外设·rabbitmq·语音识别·etcd