汇编语言:矩阵式键盘扫描实验

这篇具有很好参考价值的文章主要介绍了汇编语言:矩阵式键盘扫描实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

要求:

利用4x4矩阵键盘和一个LED数码管构成简单的输入显示系统,实现对键盘的扫描和LED数码管的显示键盘按下键的键号。共有4x4个按键和一个数码管,16个按键的键号分别对应十六进制数字:0~F。单机相应按键,数码管就会显示相应的数字。

电路原理图

汇编语言:矩阵式键盘扫描实验

数码管:这里采用共阳极数码管

CA为共阳极数码管

CC为共阴级数码管

矩阵键盘扫描步骤:

汇编语言:矩阵式键盘扫描实验

 

示范程序:

  ORG 0000H
  AJMP KEY2
  ORG 0100H
KEY2: LCALL KS	    ;调用键盘检测走程序KS;调用键盘检测子程序KS,如有键按下A中内容非0
  JNZ K1            ;A中内容非0,则可能键按下,跳K1
  LCALL D10ms       ;调用10ms延时去抖 
  AJMP KEY2         ;无键按下,返回KEY2处继续检测按键是否按下
K1:  LCALL D10m     ;可能有键按下,调用延时10ms子程序(见例5-8)去抖动,
  JNZ K2            ;再调用键盘检测子程序      
  AJMP KEY2         ;无键按下返回继续检测
K2:  MOV R2,#0EFH   ;将列扫描值P1.4为“0”送入R2暂存
  MOV R4,#00H       ;将第0列号送入R4 (列号计数器)暂存
K3:  MOV P1,R2      ;将R2的列扫描值值送P1口,驱动P1.4为低
L6:  JB P1.0,L1     ;判行线电平,P1.0等于1,则0行无键按下跳L1,检测1行
  MOV A,#00H        ;将0行的首键号送入ACC
  AJMP LK           ;跳转到键号计算程序
L1:  JB P1.1,L2     ;P1.1等于1跳转到L2,检测2行
  MOV A,#04H        ;将1行的首键号送入ACC
  AJMP LK           ;跳转到键号计算程序
L2:  JB P1.2,L3     ;P1.2等于1跳转到L3,检测3行
  MOV A,#08H        ;将2行的首键号送入ACC
  AJMP LK           ;跳转到键号计算程序
L3:  JB P1.3,NEXT   ;P1.3等于1跳转到NEXT处,为扫描下一列做准备
  MOV A,#0CH        ;将3行的首键号送入ACC
LK:  ADD A,R4       ;行值与列值相加后的键值送入A
  PUSH ACC          ;将A中的键号送入堆栈暂存
  LCALL DISPLAY     
NEXT:  INC R4       ;将R2的列扫描值送入A
  MOV A,R2          
  JNB ACC.7,KEY2
  RL A
  MOV R2,A
  AJMP K3
K4:  LCALL KS
  JNZ K4
  POP ACC
  RET
KS:  MOV P1,#0FH
  MOV A,P1
  XRL A,#0FH
  RET    
DISPLAY: MOV DPTR,#TABLE
   MOVC A,@A+DPTR
   MOV P2,A
   RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H
  DB 92H,82H,0F8H,80H,90H,88H
  DB 83H,0C6H,0A1H,86H
  DB 8EH
  D10ms:  MOV R7,#25
D1:   MOV R6,#200
   DJNZ R6,$
   DJNZ R7,D1
   RET
  END

效果图:

 

主要是矩阵键盘的扫描过程。知道如何去判断矩阵式键盘是否有键按下有键按下之后在判断是哪一个键被按下,并输出显示。

1、行扫描,全部输出零,读列线状态,若列线读入为零,代表有键按下。

2、判断哪个按键被按下,逐行输出零,依次读列线状态,如:i 行 j 列。

3、给按键赋值:按键有两种赋值方式:一种是直接赋值,另一种是顺序赋值。

4、提取按键值后,行线送出低电平,读入列线电平状态。若列线全为高电平,就表示按键已被释放。文章来源地址https://www.toymoban.com/news/detail-508044.html

到了这里,关于汇编语言:矩阵式键盘扫描实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 汇编语言(Assembly Language)习题:键盘输入一个字符串,试将其中的小写字母转换为大写字母,其它字符保持不变。

    前置知识:汇编语言常用系统功能调用(如果懂直接跳过看题目详解) 格式: 功能:从键盘输入字符的ASCII码送入寄存器AL中,并送显示器显示。 格式: 功能:将DL寄存器中的字符送显示器显示,如果DL中为〈CTRL〉+〈BREAK〉的ASCII码,则退出。 格式: 功能:将DL寄存器中的字

    2024年02月03日
    浏览(33)
  • 汇编语言笔记(一)——汇编语言基础

    一、开发环境 我使用visual studio 2022 preview,其他版本的设置大同小异。 第一步: 打开visual studio,点击“创建新项目”: 第二步: visual studio并没有专门的汇编项目,所以需要挂羊头卖狗肉,选择C++空项目 第三步: 输入项目名称,点击创建 第四步: 鼠标右键单击项目名称—

    2024年02月05日
    浏览(30)
  • 汇编语言—常见汇编指令汇总

    mov    寄存器 ,数据                如:mov ax ,8 mov   寄存器,寄存器              如:mov ax,bx mov   寄存器,内存单元          如:mov ax,[0] mov   内存单元,寄存器          如:mov [0],ax mov   段寄存器,寄存器          如:mov ds,ax add   寄存器,数据

    2024年02月10日
    浏览(28)
  • 5.6 汇编语言:汇编高效数组寻址

    数组和指针都是用来处理内存地址的操作,二者在C语言中可以互换使用。数组是相同数据类型的一组集合,这些数据在内存中是连续存储的,在C语言中可以定义一维、二维、甚至多维数组。多维数组在内存中也是连续存储的,只是数据的组织方式不同。在汇编语言中,实现

    2024年02月11日
    浏览(32)
  • 5.8 汇编语言:汇编高效除法运算

    通常情况下计算除法会使用 div/idiv 这两条指令,该指令分别用于计算无符号和有符号除法运算,但除法运算所需要耗费的时间非常多,大概需要比乘法运算多消耗10倍的CPU时钟,在Debug模式下,除法运算不会被优化,但Release模式下,除法运算指令会被特定的算法经过优化后转

    2024年02月11日
    浏览(33)
  • 5.7 汇编语言:汇编高效乘法运算

    乘法指令是一种在CPU中实现的基本算术操作,用于计算两个数的乘积。在汇编语言中,乘法指令通常是通过 mul(无符号乘法) 和 imul(有符号乘法) 这两个指令实现的。由于乘法指令在执行时所消耗的时钟周期较多,所以编译器在优化代码时通常会尝试将乘法操作转换为更

    2024年02月11日
    浏览(21)
  • 汇编语言第一讲:计算机的组织架构和汇编语言介绍

    第一讲:计算机的组织架构和汇编语言介绍 汇编语言 计算机组织架构 数字电路 术语回顾 数制 数字电路 硬件电路 数字电路的问题 汇编语言的开始 程序的节(sections) 调用操作系统的系统调用 列出文件(Listing files) 汇编和链接 调试汇编程序 反汇编现有的程序 附录 课程资源

    2024年04月09日
    浏览(38)
  • 5.10 汇编语言:汇编过程与结构

    过程的实现离不开堆栈的应用,堆栈是一种后进先出 (LIFO) 的数据结构,最后压入栈的值总是最先被弹出,而新数值在执行压栈时总是被压入到栈的最顶端,栈主要功能是暂时存放数据和地址,通常用来保护断点和现场。 栈是由 CPU 管理的线性内存数组,它使用两个寄存器 (S

    2024年02月11日
    浏览(29)
  • 南京邮电大学汇编语言程序设计实验一(汇编语言语法练习与代码转换)

    排除语法错误:给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的信息对源程序进行修改,知道没有语法错误为止。然后进行链接,并执行相应可

    2024年02月08日
    浏览(45)
  • 低级语言汇编真的各个面不如汇编吗?

    今日话题,低级语言汇编真的各个面不如C语言吗?C语言因其可移植性、开发效率和可读性而在各领域广泛使用,市场占有率极高。然而,汇编语言在特定场景下仍然具有独特优势,稳固地占据一席之地。如果你对这方面感兴趣,我可以分享一套包含各类语言和嵌入式行业教

    2024年02月06日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包