文档视界 最新最全的文档下载
当前位置:文档视界 › 矩阵键盘程序及原理

矩阵键盘程序及原理

程序效果:按下任意键,LED显示P0读回的数据其中4*4的矩阵键盘接P0口
*/
#include //头文件
unsigned char key=0xff; //定义一个变量用于存放按键值
void readkey(); //读按键子函数,获取键值
void main() //主函数
{
while(1)
{
readkey(); //读按键值
if(key!=0xff) //判断是否有按键按下
P2=~key;//这里取反:是因为LED为共阴,显示所按下的值
}
}
void readkey() //读键盘子函数
{
P0=0xfe; //将第一列拉低,扫描是否有按键按下,第一列键值为:0,4,8,C
key=P0; //读取键盘值
if(key!=0xfe) //若key!=0xfe,说明有按键按下,则返回
return; //否则继续扫描下一列
P0=0xfd;
key=P0;
if(key!=0xfd)
return;
P0=0xfb;
key=P0;
if(key!=0xfb)
return;
P0=0xf7;
key=P0;
if(key!=0xf7)
return;
key=0xff;
}




 键盘扫描程序:
从以上分析得到键盘扫描程序的流程图所示。程序如下
SCAN: MOV P1,#0FH
MOV A,P1
ANL A,#0FH
CJNE A,#0FH,NEXT1
SJMP NEXT3
NEXT1: ACALL D20MS
MOV A,#0EFH
NEXT2: MOV R1,A
MOV P1,A
MOV A,P1
ANL A,#0FH
CJNE A,#0FH,KCODE;
MOV A,R1
SETB C
RLC A
JC NEXT2
NEXT3: MOV R0,#00H
RET
KCODE: MOV B,#0FBH
NEXT4: RRC A
INC B
JC NEXT4
MOV A,R1
SWAP A
NEXT5: RRC A
INC B
INC B
INC B
INC B
JC NEXT5
NEXT6: MOV A,P1
ANL A,#0FH
CJNE A,#0FH,NEXT6
MOV R0,#0FFH
RET
<2>确定矩阵式键盘上何键被按下介绍一种“高低电平翻转法”。
首先让P1口高四位为1,低四位为0,。若有按键按下,则高四位中会有一个1翻转为0,低四位不会变,此时即可确定被按下的键的行位置。
然后让P1口高四位为0,低四位为1,。若有按键按下,则低四位中会有一个1翻转为0,高四位不会变,此时即可确定被按下的键的列位置。
最后将上述两者进行或运算即可确定被按下的键的位置。
键盘处理程序就作这么一个简单的介绍,实际上,键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等等问题,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再去写代码,这样,才能快速有效地写好代码。
3 矩阵键盘实验
3.1 实验目的
1. 了解 4*4 矩阵键盘的工作原理。
2. 掌握利用行列扫描法读取按键信息及软件消抖的方法。
3. 熟悉掌握 VHDL 语言和 QUARTUS 2 软件的使用。
4. 理解状态机的工作原理和设计方法。

5. 掌握利用 EDA 工具进行自顶向下的电子系统设计方法。
3.2 实验任务
设计制作一个检测 4*4 矩阵键盘的按键编码的实验, 把实际按键的 键值的八位编码先转换成从 0000—1111 的编码,再译成数码管能识别 的八位编码, 在数码管动态显示时, 矩阵键盘的第一行对应 00—03, 4*4 第二行对应 04—07,第三行 08—11,第四行对应 12—15。
3.3 实验原理
1.键盘的工作原理: .键盘的工作原理: 按键设置在行、列线交点上,行、列线分别连接到按键开关的 两端。行线通过上拉电阻接到+5V 电源上。无按键按下时,行线处 于高电平的状态, 而当有按键按下时, 行线电平与此行线相连的列 线电平决定。 2.行列扫描法原理: 原理: .行列扫描法原理 第一步, 使行线为编程的输入线,列线是输出线,拉低所有的列线, 判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则 所有的行线都为高电平。 第二步, 在第一步判断有键按下后, 延时 10ms 消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下 一步,否则返回第一步重新判断。第三步,开始扫描按键位置,采用逐 行扫描,每间隔 1ms 的时间,分别拉低第一列,第二列,第三列,第四 列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置, 分别把行值和列值储存在寄存器里。第四步,从寄存器中找到行值和列 值并把其合并,得到按键值,对此按键值进行编码,按照从第一行第一 个一直到第四行第四个逐行进行编码,编码值从“0000” 至“1111” , 再进行译码,最后显示按键号码

相关文档
相关文档 最新文档