标题:
能不能介绍一下最简单的单片机矩阵键盘?发代码也行,看了几个例子,越看越糊涂
[打印本页]
作者:
可爱萌萌哒
时间:
2020-5-17 23:12
标题:
能不能介绍一下最简单的单片机矩阵键盘?发代码也行,看了几个例子,越看越糊涂
如题
作者:
wulin
时间:
2020-5-18 06:36
矩阵键盘 仿真数码管显示.zip
(103.59 KB, 下载次数: 28)
2020-5-18 06:36 上传
点击文件名下载附件
作者:
圆就是圈圈
时间:
2020-5-18 08:04
#ifndef __keyc1_H__ //定义延时头文件
#define __keyc1_H__//
//--------------------------------------------------
//-------------各种演示函数声明---------------------
//4x4键盘处理函数
//--------------------------------------------------
//*****************************************************
#include <REG52.H>
#define uchar unsigned char
#define uint unsigned int
#define data_key P2
void delay_1ms(unsigned int x)
{
unsigned int i,j;
for(j=0;j<x;j++)
for(i=0;i<110;i++);
}
/*----------------------------------------------------*/
unsigned char key1()
{
unsigned char i;
unsigned char j;
data_key=0x0f; //行线作为输入,列线输出低电平
i=data_key; //读列线
j=0xff;
if(i!=0x0f)//判断是否有键按下
{delay_1ms(5);//有5ms延迟
i=data_key;//再读列线
if(i!=0x0f)//判断是否有干扰
{data_key=0xf0;//不是干扰,列线作为输入,行线输出低电平
delay_1ms(5);//5ms延迟
j=data_key;//读列线
i=i+j;//行值与列值合并,得到键值
switch(i)
{
case 0x7e:j=0;break;//如果键值是0x7e就赋0号键返回
case 0xbe:j=1;break;//如果键值是0xbe就赋1号键返回
case 0xde:j=2;break;//如果键值是0xbe就赋2号键返回
case 0xee:j=3;break;//如果键值是0xbe就赋3号键返回
case 0x7d:j=4;break;//如果键值是0xbe就赋4号键返回
case 0xbd:j=5;break;//如果键值是0xbe就赋5号键返回
case 0xdd:j=6;break;//如果键值是0xbe就赋6号键返回
case 0xed:j=7;break;//如果键值是0xbe就赋7号键返回
case 0x7b:j=8;break;//如果键值是0xbe就赋8号键返回
case 0xbb:j=9;break;//如果键值是0xbe就赋9号键返回
case 0xdb:j=10;break;//如果键值是0xbe就赋10号键返回
case 0xeb:j=11;break;//如果键值是0xbe就赋11号键返回
case 0x77:j=12;break;//如果键值是0xbe就赋12号键返回
case 0xb7:j=13;break;//如果键值是0xbe就赋13号键返回
case 0xd7:j=14;break;//如果键值是0xbe就赋14号键返回
case 0xe7:j=15;break;//如果键值是0xbe就赋15号键返回
default:j=0xff;break;//如果不是以上键值,就赋0xff无键压下返回
}
}
}
return(j);//返回0xff,表示没有按下键,其他值表示有键按下
}
#endif
//===========================================================================
复制代码
作者:
圆就是圈圈
时间:
2020-5-18 08:09
我的理解是交替扫描,以4*4为例,先是四个行输出口输出,对应的行中有按下去的,那么输入口就会检测到这一行高电平,接着进行交换,刚才的行输出口做输入,输入口做输出,就可以确定是那一列,这样就可以得出是那个按键按下去了
作者:
f556
时间:
2020-5-18 09:54
基本功,必须先看原理图及分析,看程序不行。最经典的是4×4=16键的,刚好一个IO口8线驱动。拉高、拉低你应该清楚了,51机有一个“线与”概念必须清楚,搜一下。
作者:
ourhack
时间:
2020-5-18 10:12
建议新手可以直接使用周立功的键盘扫描芯片ZLG72128之类
作者:
ourhack
时间:
2020-5-18 10:22
扫描,列GPIO作为输出,行GPIO作为输入,比如第一列,首先输出高电平,现在检查所有行,看那个列输入了高电平,比如第2列,那你就知道是第2个键按下了,依次扫描
1 2 3 4
1 - + - -
2 - - - -
3 - - - -
4 - - - -
作者:
随风飘远
时间:
2020-5-18 14:53
矩阵键盘扫描,主要还是要理解原理。 对着代码 自己分析动态扫描怎么实现
作者:
可爱萌萌哒
时间:
2020-5-19 22:07
wulin 发表于 2020-5-18 06:36
收到谢谢,,,
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1