
怎样知道单片机的矩阵键盘每个按键的地址?
5个回答
2014-03-01
展开全部
1、比如是一个4行×4列的矩阵键盘。
2、将4行和4列共8根线分别接到单片机的I/O口,比如接P1口,行接低4位(P1.0~P1.3),列接高4位(P1.4~P1.7)。
3、单片机先将行置第电平0,列置高电平1.
4、在键盘扫描程序中,判断是否有任意按键按下:if((P1&0xf0)!=0xf0),表示有按键按下,延时消抖后,再次判断,如果(P1&0xf0)!=0xf0,则表示有按键按下。
5、然后开始逐行扫描:
P1=0xfe; //第一行置为低电平“0”(P1.0输出低电平“0”)
if(P14==0) keyval=1; //如果检测到接P1.4引脚的列线为低电平“0”,可判断是S1键被按下
if(P15==0) keyval=2; //如果检测到接P1.5引脚的列线为低电平“0” ,可判断是S2键被按下
if(P16==0) keyval=3; //如果检测到接P1.6引脚的列线为低电平“0”,可判断是S3键被按下
if(P17==0) keyval=4; //如果检测到接P1.7引脚的列线为低电平“0”,可判断是S4键被按下
P1=0xfd; //第二行置为低电平“0”(P1.1输出低电平“0”)
if(P14==0) keyval=5; //如果检测到接P1.4引脚的列线为低电平“0”,可判断是S5键被按下
if(P15==0) keyval=6; //如果检测到接P1.5引脚的列线为低电平“0”,可判断是S6键被按下
if(P16==0) keyval=7; //如果检测到接P1.6引脚的列线为低电平“0”,可判断是S7键被按下
if(P17==0) keyval=8; //如果检测到接P1.7引脚的列线为低电平“0”,可判断是S8键被按下
P1=0xfb; //第三行置为低电平“0”(P1.2输出低电平“0”)
if(P14==0) keyval=9; //如果检测到接P1.4引脚的列线为低电平“0”,可判断是S9键被按下
if(P15==0) keyval=10; //如果检测到接P1.5引脚的列线为低电平“0”,可判断是S10键被按下
if(P16==0) keyval=11; //如果检测到接P1.6引脚的列线为低电平“0”,可判断是S11键被按下
if(P17==0) keyval=12; //如果检测到接P1.7引脚的列线为低电平“0”,可判断是S12键被按下
P1=0xf7; //第四行置为低电平“0”(P1.3输出低电平“0”)
if(P14==0) keyval=13; //如果检测到接P1.4引脚的列线为低电平“0”,可判断是S13键被按下
if(P15==0) keyval=14; //如果检测到接P1.5引脚的列线为低电平“0”,可判断是S14键被按下
if(P16==0) keyval=15; //如果检测到接P1.6引脚的列线为低电平“0”,可判断是S15键被按下
if(P17==0) keyval=16; //如果检测到接P1.7引脚的列线为低电平“0”,可判断是S16键被按下
依次类推,得到4×4=16个按键的键值。就知道哪个按键被按下。
2、将4行和4列共8根线分别接到单片机的I/O口,比如接P1口,行接低4位(P1.0~P1.3),列接高4位(P1.4~P1.7)。
3、单片机先将行置第电平0,列置高电平1.
4、在键盘扫描程序中,判断是否有任意按键按下:if((P1&0xf0)!=0xf0),表示有按键按下,延时消抖后,再次判断,如果(P1&0xf0)!=0xf0,则表示有按键按下。
5、然后开始逐行扫描:
P1=0xfe; //第一行置为低电平“0”(P1.0输出低电平“0”)
if(P14==0) keyval=1; //如果检测到接P1.4引脚的列线为低电平“0”,可判断是S1键被按下
if(P15==0) keyval=2; //如果检测到接P1.5引脚的列线为低电平“0” ,可判断是S2键被按下
if(P16==0) keyval=3; //如果检测到接P1.6引脚的列线为低电平“0”,可判断是S3键被按下
if(P17==0) keyval=4; //如果检测到接P1.7引脚的列线为低电平“0”,可判断是S4键被按下
P1=0xfd; //第二行置为低电平“0”(P1.1输出低电平“0”)
if(P14==0) keyval=5; //如果检测到接P1.4引脚的列线为低电平“0”,可判断是S5键被按下
if(P15==0) keyval=6; //如果检测到接P1.5引脚的列线为低电平“0”,可判断是S6键被按下
if(P16==0) keyval=7; //如果检测到接P1.6引脚的列线为低电平“0”,可判断是S7键被按下
if(P17==0) keyval=8; //如果检测到接P1.7引脚的列线为低电平“0”,可判断是S8键被按下
P1=0xfb; //第三行置为低电平“0”(P1.2输出低电平“0”)
if(P14==0) keyval=9; //如果检测到接P1.4引脚的列线为低电平“0”,可判断是S9键被按下
if(P15==0) keyval=10; //如果检测到接P1.5引脚的列线为低电平“0”,可判断是S10键被按下
if(P16==0) keyval=11; //如果检测到接P1.6引脚的列线为低电平“0”,可判断是S11键被按下
if(P17==0) keyval=12; //如果检测到接P1.7引脚的列线为低电平“0”,可判断是S12键被按下
P1=0xf7; //第四行置为低电平“0”(P1.3输出低电平“0”)
if(P14==0) keyval=13; //如果检测到接P1.4引脚的列线为低电平“0”,可判断是S13键被按下
if(P15==0) keyval=14; //如果检测到接P1.5引脚的列线为低电平“0”,可判断是S14键被按下
if(P16==0) keyval=15; //如果检测到接P1.6引脚的列线为低电平“0”,可判断是S15键被按下
if(P17==0) keyval=16; //如果检测到接P1.7引脚的列线为低电平“0”,可判断是S16键被按下
依次类推,得到4×4=16个按键的键值。就知道哪个按键被按下。
展开全部
按键,没有地址。
按键,有编码,也有号码。
按键编码,取决于硬件的连线。
按键号码,取决于软件扫描的次序。
按键,有编码,也有号码。
按键编码,取决于硬件的连线。
按键号码,取决于软件扫描的次序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先学习键盘扫描的原理 电路构成及程序结构 再来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-03-01
展开全部
电路原理图上没有吗???
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
得根据电路连接判断,根据按揭后,采集的值确定哪个键按下了
追问
怎么判断。。我的是郭天祥那个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询