矩阵键盘程序及原理

程序效果:按下任意键,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

  确定矩阵式键盘上何键被按下介绍一种“高低电平翻转法”。

  首先让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” , 再进行译码,最后显示按键号码

程序效果:按下任意键,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

  确定矩阵式键盘上何键被按下介绍一种“高低电平翻转法”。

  首先让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” , 再进行译码,最后显示按键号码


相关文章

  • 红外遥控器的设计
  • 摘 要: 红外线遥控是目前使用最广泛的一种通信和遥控手段,电视机遥控器是红外遥控系统中的典 型代表.由于各厂家经常使用专用的遥控芯片,不同的遥控器之间互不兼容,因此给我们的生活带来一些不便.我的设计是使用常用的芯片AT89C52代替专用的遥 ...查看


  • 单片机完整实验报告设计
  • 实验报告 实验名称: 矩阵键盘控制点阵的显示 专业班级: 控制科学与工程 学号:s20100394 学生姓名: 指导教师: 2013年 1月18日 目 录 一.实验目的 ................................... ...查看


  • 单片机原理实验实验报告册
  • 电子科技大学成都学院 实验报告册 课程名称: 姓 名: 学 号: 院 系: 专 业: 教 师: 年 实验一LED 流水灯 一.实验目的: 1. 掌握并口的使用 2. 掌握移位指令的使用 二.实验原理和内容: 实验原理: 1. 共阳LED ( ...查看


  • 电子琴课程设计 1
  • 四川师范大学成都学院电子工程学院 电子技术课程设计 电子琴 学生姓名 学 号 所在学院 专业名称 班 级 指导教师 成 绩 刘子仪 2013137052 电子工程学院 汽车服务工程 2013级 苏 清 茂 四川师范大学成都学院 二○一五年十 ...查看


  • 基于AT89C51的篮球比赛计分器设计
  • 学校 嵌入式应用基础课程设计报告 课程设计 学 院:学生姓名: 班 级: 学 号: 指导教师: 随着单片机在各个领域的广泛应用,许多用单片机作控制的球赛计分器也应运而生,如用单片机控制LCD 液晶显示器的计分器,用单片机控制LED 七段显示 ...查看


  • 基于51单片机的密码锁设计
  • 基于单片机的密码锁设计 1 引言 1.1设计目的 随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一.电子密码锁就是通过键盘输入一组密码完成开锁过程.研究这种锁的初衷,就是为提高锁的安全性. 目前,国内自行研制开发的电子锁,应 ...查看


  • 基于单片机的电子密码锁及程序
  • 基于单片机的电子密码锁设计 摘要 随着科技和人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤为突出,传统的机械锁由于构造简单,被撬事件屡见不鲜.电子密码锁保密性好,使用灵活性高,收到广大用户的青睐. 本设计是以单片机AT89C52作为 ...查看


  • 基于51单片机的电子琴课程设计
  • 摘要 本设计主要研究基于AT89C52单片机的简易电子琴设计. 它是以单片机作为主控核心,设置键盘.蜂鸣器等外围器件:另外还用到一 些简单器件如:NPN型三极管及电阻等.利用按键实现音符和音调的输入:用NPN 型三极管8550实现低音频功率 ...查看


  • 基于单片机的智能电子秤设计
  • 基于单片机的智能电子秤设计 目录 1 绪论 1.1 选题的背景和意义 ..................................................................................... ...查看


热门内容