单片机键盘接口全接触

合集下载

单片机与键盘的接口设计与实现方法

单片机与键盘的接口设计与实现方法

单片机与键盘的接口设计与实现方法一、引言单片机作为嵌入式系统中的重要组成部分,广泛应用于各个领域。

而键盘作为输入设备,是单片机常用的外部设备之一。

本文将探讨单片机与键盘之间的接口设计与实现方法,以便更好地实现单片机与键盘之间的数据交互。

二、接口设计1. PS/2接口PS/2接口是一种常见的键盘接口标准,通常使用4根引线进行连接,分别是VCC、GND、DATA和CLK。

其中,DATA和CLK引线用于传输键盘数据和时钟信号。

在单片机中,可以通过GPIO口模拟PS/2接口,实现与PS/2键盘的通信。

2. USB接口USB接口是一种更先进的键盘接口标准,传输速度更快,适用于高性能的计算机系统。

在单片机中,可以通过USB主机控制器芯片与USB键盘进行通信,实现数据的传输与交互。

三、接口实现方法1. PS/2接口实现首先,将PS/2接口的DATA和CLK引线连接到单片机的GPIO口,通过对数据引脚和时钟引脚的读取,可以获取键盘发送的数据。

接着,根据PS/2协议解析数据,获取键盘的按键信息。

最后,将按键信息传输到单片机的内部处理单元,实现对键盘输入的响应。

2. USB接口实现对于USB接口,单片机需要搭载USB主机控制器芯片,以实现USB键盘和单片机之间的通信。

USB主机控制器芯片负责解析USB协议,接收USB键盘发送的数据,并将数据传输到单片机内部处理单元。

通过USB接口的实现,可以实现更高速率的数据传输和更强大的功能支持。

四、总结通过本文对单片机与键盘接口设计与实现方法的探讨,可以更好地理解单片机与键盘之间的数据交互原理和实现方式。

PS/2接口和USB接口是两种常见的键盘接口标准,单片机可以通过相应的接口设计与实现方法实现与键盘的数据交互。

希望本文对您的单片机与键盘接口设计与实现提供一定的帮助。

单片机与PC键盘接口

单片机与PC键盘接口

单片机与PC键盘接口于印泉 佴晓东 王兆娟 摘要:单片机在应用中常使用的键盘为非标准非编码键盘,这类键盘一般价格较贵,且需要专门为其编写上电复位、按键扫描、通信等程序。

PC用键盘则恰恰相反,不但价格便宜,稳定可靠,而且是编码键盘,可自动扫描键盘并通过键盘用标准5芯插口发送按键的扫描码。

因此,用PC键盘或对其加以改造而应用于单片机系统是一种很好的选择。

本文通过实例对PC键盘工作原理及接口做一介绍,并提供了通信用参考程序。

关键词:单片机 键盘 串行通信 于印泉、佴晓东、王兆娟,北方交通大学,100044北京市收稿日期:1999206201,修回日期:2000201212图 1 1 PC系列键盘工作原理PC系列键盘采用16行×8列2维矩阵行列结构,键盘的扫描控制电路核心是8048单片机。

8048采用行列扫描法识别按下的按键,当有按键按下时,8048通过五芯插座向PC传送与按键位置相对应的键盘扫描码。

8048与五芯插头的连接如图1所示。

一旦有键被按下,8048将相应的键盘扫描码通过数据线DAT A OUT(“2”脚)在时钟线C LOCK OUT(“1”脚)的时钟定时下,以串行方式送入键盘接口。

键盘扫描码的串行序列按串行异步通信格式,为一位起始位“0”,八位数据位(低位在先),一位奇偶位,一位停止位“1”。

CPU也可通过键盘接口利用“1”和“2”脚向8048传送串行数据,以便控制键盘的动作。

2 单片机与键盘接口 本应用中采用8051单片机,接口电路如图1所示。

其中P312为双向时钟线,P313为双向数据线。

系统支持的键盘命令共10条,其定义与用法如下:(1)FFH:复位键盘。

系统通过此软件复位命令使键盘进入程序复位和内部自测试,称为基本保证测试(BAT)。

复位键盘过程如下:①键盘接收到FFH后立即回送ACK(FAH)作答;②键盘接口收到ACK后,使键盘时钟和数据线置为高电平;③键盘检测到此状态后,开始BAT操作;④若BAT正确完成,键盘发送AAH以表示结束,否则以FDH表示诊断有误。

单片机键盘接口技术47页

单片机键盘接口技术47页

JNB P1.2,FUNC3
JNB P1.3,FUNC4
RETI ;无任何键按下由此返回
FUNC1: …… ;做P1.0要求的“功能1” RETI
FUNC2: …… ;做P1.1要求的“功能2” RETI
延时10ms
K1=0? N
Y
左移
K2=0? N Y
延时10ms
返主
K2=0?
N
Y
右移
按键释放了? N
返主
程序(法一):
ORG 0000H AJMP MAIN ORG 0100H MAIN: LCALL KEY SJMP MAIN
KEY:
JB K1,LP1 CALL DELAY JB K1,LP1 MOV A,K1 RL A
图 8031与4×4键盘的接口电路(行扫描法)
键输入原理:
通过按键的接通与断开,产生两种相 反的逻辑状态
低电平“0”与高电平“1”。
键功能的实现:
对于一组键或一个键盘,需通过接 口电路与单片机相连。
1.采用查询或中断方式测试有无键按下;
2.确定是哪一个键按下,将该键号送入累 加器ACC;
二、独立式键盘
1.独立式键盘结构及与单片机的连接 (通过I/O口连接)
+5v
P1.0 P1.1
P1.7
每个按键单独占有பைடு நூலகம்根I/O接口引线。
独立连接式键盘例1: 条件:按K1:灯左移,K2:灯右移。 K1 EQU P1.0 K2 EQU P1.1 主程序流程:
调用键盘子程序
子程序流程(法一):
K1=0? N Y
独立式键盘:
+5v
P1.0 P1.1 P1.7
按键组连接方式:独立式键盘与矩阵式键盘

单片机与键盘的连接.

单片机与键盘的连接.

for(i=t;i>0;i--) for(j=200;j>0;j--);
}
case 2:P0=~P0;delay(250);break;
case 3:P0=0xff;break;
}
}
}
模块7 系统扩展与接口技术
中断服务函数
void isr_int0() interrupt 0
{
unsigned char kdata;
kdata=P1;kdata=kdata^0xff;
kdata>>=1;
if(kdata!=0)
{
kdata>>=1;
if(kdata!=0) flag=3;
else
flag=2;
}else
flag=1;
}
模块7 系统扩展与接口技术
二、矩阵式键盘接口技术
1、矩阵式键盘的结构
在键盘中按键数量较多时,为了减少I/O口的占用 ,通常将按键排列成矩阵形式。在矩阵式键盘中, 每条水平线和垂直线在交叉处不直接连通,而是通 过一个按键加以连接。这样,一个端口(如P1口) 就可以构成4*4=16个按键,在需要的键数比较多时 ,采用矩阵法来做键盘是合理的。
模块七 系统扩展与接口技术
7.2 单片机与键盘的连接
模块7 系统扩展与接口技术
7.2.1 键盘及其抖动问题
键盘是由若干按键组成的开关矩阵,它是微型计算 机最常用的输入设备,用户可以通过键盘向计算机 输入指令、地址和数据。一般单片机系统中采用非 编码键盘,非编码键盘是由软件来识别键盘上的闭 合键,它具有结构简单,使用灵活等特点,因此被 广泛应用于单片机系统。
模块7 系统扩展与接口技术
1、矩阵式键盘的结构

单片机与键盘输入接口设计思路

单片机与键盘输入接口设计思路

单片机与键盘输入接口设计思路简介:在很多嵌入式系统中,需要与外部设备进行交互,而键盘作为一个常见的输入设备在这个过程中起到了非常重要的作用。

本文将针对单片机与键盘输入接口的设计思路进行详细介绍,包括硬件和软件方面的设计。

一、硬件设计思路1. 选择适当的键盘类型:首先,我们需要根据具体的应用需求选择合适的键盘类型。

常见的键盘类型有矩阵键盘、独立键盘和密码键盘等。

根据实际情况,我们可以选择具有足够按键数量、稳定性良好的键盘。

2. 连接键盘和单片机:硬件方面,我们需要将键盘与单片机进行连接。

首先,确定键盘的引脚定义,根据键盘的类型和尺寸,找到对应的按键引脚。

其次,根据单片机的引脚数和类型,连接键盘对应的行和列。

通常情况下,我们使用矩阵键盘连接方式,将行和列以矩阵的形式连接到单片机的GPIO口上。

3. 使用适当的电平转换器:键盘输出的电平一般为12V或者5V,在单片机运行的时候,为了保证其正常工作,需要使用电平转换器将键盘的输出电平转换成单片机能够接受的电平。

常见的电平转换器有晶体管、光电耦合器等,具体选择根据实际应用情况来确定。

4. 增加合适的防抖电路:由于按键可能存在抖动问题,为了保证按键的稳定性,我们需要在硬件设计中增加合适的防抖电路。

常见的防抖电路有RC电路、LC电路和施密特触发电路等。

根据实际需求,选择合适的防抖电路来消除按键的抖动。

二、软件设计思路1. 配置IO口和中断:在单片机的软件设计中,首先需要配置相应的IO口来接收键盘输入信号。

根据硬件设计中连接的行和列,将行设置为输出,列设置为输入。

接下来,配置中断服务程序,当检测到按键按下或抬起的变化时,触发相应的中断。

2. 执行扫描程序:在接收到键盘输入信号之后,单片机需要执行扫描程序来获取具体的按键值。

扫描程序中,通过逐行扫描并与之前的状态进行比较,判断按键是否有变化。

如果有按键按下,则记录下相应的按键值。

3. 实现按键功能:根据具体的需求,通过判断所按下的按键值来实现相应的功能。

单片机与键盘接口及编程

单片机与键盘接口及编程

单片机的键盘接口与编程一键盘接口和数码管接口是构成单片机人机界面的主要方法,对于一个初学者来说,这部分的内容也是较难的,我们将用四节课的时间来学习这方面的知识。

这一课先来讨论键盘的接口原理与编程方法。

键盘是单片机应用系统不可缺少的重要输入设备,主要负责向计算机传递信息,我们可以通过键盘向计算机输入各种指令、地址和数据。

它一般由若干个按键组合成开关矩阵,按照其接线方式的不同可分为两种:一种是独立式接法,一种是矩阵式接法,这一课先来讲解独立式键盘的工作原理和编程方法。

一.独立式键盘的工作原理和编程方法独立式键盘具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统中,那么它是如何来工作的呢?我们慢慢往下看:1.独立式键盘的接线原理独立式键盘是由若干个机械触点开关构成的,把它与单片机的I/O 口线连起来,通过读I/O 口的电平状态,即可识别出相应的按键是否被按下,如果按键不被按下,其端口就为高电平;如果相应的按键被按下,则端口就变为低电平。

在这种键盘的连接方法中,我们通常采用上拉电阻接法,即各按键开关一端接低电平,另一端接单片机I/O 口线并通过上拉电阻与VCC 相连,如上图所示。

这是为了保证在按键断开时,各I/O 口线有确定的高电平,当然,如果端口内部已经有上拉电阻,则外电路的上拉电阻可以省去,想想看,哪几个并行口内部是有上拉电阻的?通常我们用来做键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的触点式微动开关。

这种开关具有结构简单,使用可靠的优点,但当我们按下按键或释放按键的时候它有一个特点,就是会产生抖动,看上图的按键脉冲波形,这种抖动对于人来说是感觉不到的,但对单片机来说,则是完全可以感应到的,因为计算机处理的速度是在微秒级的,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个很“漫长”的过程了。

下面我们通过一个实验来验证一下,实验程序如下:把这个程序下载到单片机,我们会发现,当按下相应的按键时,灯并不是想象中的按一下亮,再按一下就灭,而是有时灵,有时不灵,为什么会这样呢?原来,当你按了一次按键,可是单片机却早已执行了好多次,如果执行的次数正好是奇数次,那么结果正如您所料;如果执行的次数是偶数次,那结果就不对了。

单片机键盘显示器接口

单片机键盘显示器接口
单片机键盘显示器接口
ME830 矩阵式摁键
P1口: 低4位作为列线 高4位作为行线
0
P1.2 8 9 10 11
P1.1 12 13 14 15 P1.0
KS: MOV MOV MOV MOV ANL RET
A,#00H
P1,A
;全扫描字#00H送P1口
P1,#0FH
;保留第4位(行)
A,P1
;读入P1口状态
A,#0FH
;取低4位
;返回,A=0表示有键按下
单片机键盘显示器接口
定时扫描方式
;入口地址表
PROM0:………………….. …………………..
;0号键功能程序
LJMP START
;0号键处理完返回键盘扫描
.
.
.
.
PROM7:………………….. …………………..
;7号键功能程序
LJMP START
;7号键处理完返回键盘扫描
单片机键盘显示器接口
类似ME830中的例程三
例子:按三个按键中 的任一键均对应相应
定时扫描方式就是每隔一段时间对键盘扫描一 次,它利用单片机内部的定时器产生一定时间(例 如10 ms)的定时,当定时时间到就产生定时器溢 出中断。CPU响应中断后对键盘进行扫描,并在有 键按下时识别出该键,再执行该键的功能程序。
中断扫描方式
为提高CPU工作效率,可采用中断扫描工作方 式。其工作过程如下:当无键按下时,CPU处理自 己的工作,当有键按下时,产生中断请求,CPU转 去执行键盘扫描子程序,并识别键号。
JNB ACC.4, P4F ;查询4号键
JNB ACC.5, P5F JNB ACC.6, P6F
;查询5号键 ;查询6号键

51单片机键盘接口电路(含源程序)

51单片机键盘接口电路(含源程序)

51单片机键盘接口电路(含源程序)键盘是由若干按钮组成的开关矩阵,它是单片机系统中最常用的输入设备,用户能通过键盘向计算机输入指令、地址和数据。

一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。

按钮开关的抖动问题组成键盘的按钮有触点式和非触点式两种,单片机中应用的一般是由机械触点组成的。

在下图中,当开<键盘结构图>< P> 图1 < P> 图2关S未被按下时,P1。

0输入为高电平,S闭合后,P1。

0输入为低电平。

由于按钮是机械触点,当机械触点断开、闭合时,会有抖动动,P1。

0输入端的波形如图2所示。

这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全能感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。

前面我们讲到中断时曾有个问题,就是说按钮有时灵,有时不灵,其实就是这个原因,你只按了一次按钮,可是计算机却已执行了多次中断的过程,如果执行的次数正好是奇数次,那么结果正如你所料,如果执行的次数是偶数次,那就不对了。

为使CPU能正确地读出P1口的状态,对每一次按钮只作一次响应,就必须考虑如何去除抖动,常用的去抖动的办法有两种:硬件办法和软件办法。

单片机中常用软件法,因此,对于硬件办法我们不介绍。

软件法其实很简单,就是在单片机获得P1。

0口为低的信息后,不是立即认定S1已被按下,而是延时10毫秒或更长一些时间后再次检测P1。

0口,如果仍为低,说明S1的确按下了,这实际上是避开了按钮按下时的抖动时间。

而在检测到按钮释放后(P1。

0为高)再延时5-10个毫秒,消除后沿的抖动,然后再对键值处理。

不过一般情况下,我们常常不对按钮释放的后沿进行处理,实践证明,也能满足一定的要求。

当然,实际应用中,对按钮的要求也是千差万别,要根据不一样的需要来编制处理程序,但以上是消除键抖动的原则。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机键盘接口全接触作者:杜洋2005-10-25一般的具有人机对话的单片机系统少不了会有键盘。

键盘接口的原理与应用许多的教材都有介绍,但通常各有各的方法,各有各的优劣。

下面就我现有的对单片机键盘接口的了解和应用将众家的单片机直接驱动键盘的接口原理及应用作一个总结,并附加相应键盘的汇编子程序和C语言子函数。

希望大家可以从中受益。

本文我们以键盘的数目来选择键盘最适合的接法和最佳的编程方法,对各键盘接口的方法的优缺点加以说明。

本文旨在让大家掌握一种方法,而不要读死书,举一反三创造更新更好的接口方式才是学习的极致。

我最喜欢爱因斯坦的一句话:“想象力比知识更重要,想象力可以创造知识,而知识却只是别人的想象”。

1~4按键的单片机键盘接口:当键盘的数目最多为4个时,我们最佳的接口方案当然是独立式接法了,即每一个I/O口上只接一个按键,按键的另一端接电源或接地(一般接地)。

占用的I/O口数最大为4条。

(注意:1~4按键的键盘的接法许多,如果接成扫描式可以占用更少的I/O口,但从程序复杂性和系统稳定性的综合考虑的话,独立式键盘接法应该是首选)独立式键盘的实现方法是利用单片机I/O口读取口的电平高低来判断是否有键按下。

例如,我们将常开按键的一端接地,另一端接一个I/O口,程序开始时将此I/O口置于高电平,平时无键按下时I/O口保护高电平。

当有键按下时,此I/O口与地短路迫使I/O口为低电平。

按键释放后,单片机内部的上拉电阻使I/O 口仍然保持高电平。

我们所要做的就是在程序中查寻此I/O口的电平状态就可以了解我们是否有按键动作了。

值得注意的事,我们在用单片机对键盘处理的时候涉及到了一个重要的过程,那就是键盘的去抖动。

这里说的抖动是机械的抖动,是当键盘在未按到按下的临界区产生的电平不稳定正常现象,并不是我们在按键时通过注意可以避免的。

这种抖动一般在10~200毫秒之间,这种不稳定电平的抖动时间对于人来说太快了,而对于时钟是微秒级的单片机而言则是慢长的。

为了提高系统的稳定,我们必须去除或避开它。

目前的技术有硬件去抖动和软件去抖动,硬件去抖动就是用部分电路对抖动部分加之处理,但是实现的难度较大又会提高了成本。

软件去抖动不是去掉抖动,而是避开抖动部分的时间,等键盘稳定了再对其处理。

这里我们只研究软件去抖动,实现方法是先查寻按键当有低电平出现时立即延时10~200毫秒以避开抖动(经典值为20毫秒),延时结束后再读一次I/O口的值,这一次的值如果为1表示低电平的时间不到10~200毫秒,视为干扰信号。

当读出的值是0时则表示有按键按下,调用相应的处理程序。

图14~16按键的单片机键盘接口:当键盘数为4~16键时再用独立方法实现就得占用4~16的I/O口,显然是一种浪费。

这时我们就用行列扫描式方案,行数加上列数就等于我们的按键总数,这样我们要16个按键时只要8个I/O口,也就是占用了一个字节I/O口,这种16键行列扫描是最常用的一种了。

下面就16个按键的键盘为例,说一下行列键盘的扫描方法。

逐点扫描法:设P1口的低4位置为0,高4位置为1,当无按键时P1口的数据始终保持F0H不变。

当有按键时,高位中的高电平会和低位中的低电平短路。

此时高位中的高电平就会被拉低(任何高电平遇到低电平都为低),即高4位中有0出现。

当单片机读P1口的值不为F0H时则表示有键按下,经过去抖处理后就开始扫描这一个键的位置了。

先把P1的高4位置0,低4位置1,下面置低第1列线并置高第1行,之后再读第1行的电平,为高说明不是第1行第1列的键被按下,跳到下一个点的扫描(第1列第2列)。

当其为0时表示第1行第1列的键被按下,调用相应处理程序。

逐点扫描的优点是它的编程简单,易于理解,可以作同时按多个键的识别。

缺点是它的速度慢,处理程序代码较长。

逐行扫描法:和逐点扫描的方法相似,只是数据的处理是以一行的4位数据直接处理,也就是先使能第1行(置低电平),然后看哪一列的数据变成低电平了,如果高4位数据没有变为低电平则使能下一行。

找到了按键所在的行并测出列数据就可以调用相应处理程序。

逐行扫描的照逐点扫描要好的多,程序相对简单,速度快,也支持同时多按键处理。

一般的扫描键盘多用此法。

全局扫描法:全局扫描是只先设P1的高4位为1,低4位为0,即F0H,然后读取P1口的数据如果不为F0H说明有键按下,经过延时去抖处理后读出P1口的值,因为低4位是0无论按键如果都不会影响它,只有高4位被改变。

将数据寄存起来后再把P1的状态反过来,将P1的高4位置0,低4位置1,即0FH,再读一次数据。

这时高4位的值是0依然不变。

这样两次读取我们就得到了2个字节的数据(XXXX0000和0000XXXX,X为读到的数据),最后我们将这两个数相或(将两个半字节数据溶合为一个字节),就得到了一个新的字节,用这个字节和我们的设定的数据比较来决定键值。

全局扫描只用两次扫描,速度快,易学易用,程序简单,可是它不支持同时多键处理,最佳适用4*4扫描键盘,可以用在一般的用途。

图2大于16按键的单片机键盘接口:当按键数目大于16时用行列扫描方式驱动是比较常用的,增加I/O口来达到行列扫描的键盘数,扫描方法多为逐行扫描,这里不多介绍。

下面来了解一个用8个I/O口接36个按键的方法(参考《电子制作》杂志139期的“扩展单片机输入键的另一种方法”)。

它采用了独特的硬件接法和逐点扫描的方法完成对36个按键的扫描,是一种很好的节省硬件资源的方法。

8个I/O口的任意两个都有一个按键的同时,其各I/O口对地也都有一个按键,可以说是一个非常有新意的方法。

(详见原文)图31-1、独立键盘接口程序:ORG 0000HJMP MAIN程序开始,从MAIN执行ORG 0030HMAIN:JNB P1.0, KEY1查寻P1.0接的独立键盘是否有键接下,为低电平按下。

JNB P1.1, KEY2同上JNB P1.2, KEY3同上······JMP MAIN查寻键盘的循环体KEY1:CALL DL20MS调用延时20毫秒,去除机械抖动JB P1.0, MAIN重新查寻,亦去抖。

CALL PRO1确认有键按下,调用真正处理程序JMP MAIN执行结束,返回查寻循环KEY2:CALL DL20MS同上JB P1.1, MAINCALL PRO2JMP MAIN·······DL20MS:20毫秒延时子程序,去抖用。

MOV R6,#100DL20MS_1:MOV R7,#100DJNZ R7,$DJNZ R6, DL20MS_1RET1-2、独立式键盘接口程序:键盘接在P1口,P2口LED显示ORG 0000HAJMP MAIN真正的程序入口ORG 030HMAIN:MOV P2,#0FFH显示初始化MOV A,#0FFH设定累加器值MOV P1,A P1口全置“1”MOV A,P1将P1口键盘值送入ACJNE A,#0FFH,GO1查键值查看A中是否有键按下,有键则跳到GO1 AJMP MAIN P1口全为“1”表示无键,返回循环查寻程序GO1:ACALL DEL延时去抖动P1口中有“0”出现,则延时去抖动。

CJNE A,#0FFH,GO2再次查寻AJMP MAIN为干扰则返回循环程序GO2:MOV DPTR,#TAB DPTR装入散转表的首址MOV R0,#00H键值查寻R0初始化,以备累加L1: RRC A累加器带C右移JNC N1查每一个位,如果为0则跳出INC R0键值寄存器SJMP L1此位不为“0”继续查下一位N1:MOV A,R0取得键值RLC A乘3处理,用于散转JMP @A+DPTR散转TAB:AJMP PR0散转表AJMP PR1AJMP PR2AJMP PR3AJMP PR4AJMP PR5AJMP PR6AJMP PR7PR0:MOV P2,#0FEH真正处理程序ACALL DELAJMP MAINPR1:MOV P2,#0FCHACALL DELAJMP MAINPR2:MOV P2,#0F8HACALL DELAJMP MAINPR3:MOV P2,#0F0HACALL DELAJMP MAINPR4:MOV P2,#0E0HACALL DELAJMP MAINPR5:MOV P2,#0C0HACALL DELAJMP MAINPR6:MOV P2,#80HACALL DELAJMP MAINPR7:MOVP2,#00HACALL DELAJMP MAINDEL:MOV R7,#0FFH延时程序DEL1:MOV R6,#0FFHDEL2:DJNZ R6,DEL2DJNZ R7,DEL1RET逐行扫描程序:;===============;4*4行列键盘程序;=================;;; 键盘接P3口,高4位接5.1K上拉电阻; 用2号实验板完成,在按各键时,从LED屏上显示0~F.; dy 20050511pm;=================================================;ORG 0000HJMP MAINORG 30HMAIN:;----------------------------------------------------初始化定义MOV P2,#0HMOV P0,#00HMOV R0,#00HMOV R1,#00HSTART:;---------------------------------------------------扫描程序开始MOV P3,#0FHMOV A,P3CJNE A,#0FH,GO1 ;是否有键接下JMP START ;无键时返回GO1:CALL DL20MS ;延时去抖CJNE A,#0FH,GO2 ;再次查寻JMP START ;为干扰则返回GO2:MOV R2,#0EFH ;行列扫描初始化MOV R0,#00HST:MOV P3,R2 ;送入首列使能信号MOV A,P3 ;得到数据送入AJB ACC.0,ONE ;行读键值,为“0”表示有键MOV A,#01HJMP LKPJB ACC.1,TWO ;同上MOV A,#05HJMP LKPTWO:JB ACC.2,THRMOV A,#09HJMP LKPTHR:JB ACC.3,NEXT ; 如行无键时,则使能下一列MOV A,#0DHLKP:ADD A,R0 ; 得到键值处理CJNE A,#0FH,LKP1MOV A,#00HLKP1:MOV R1,A ;将键值送入R1并退出JMP STARTNEXT: ;列使能控制INC R0CJNE R0,#04H,L1MOV R0,#00HJMP STL1: ;列初值键码CJNE R2,#0EFH,L2MOV R2,#0DFHJMP STL2:CJNE R2,#0DFH,L3MOV R2,#0BFHJMP STL3:CJNE R2,#0BFH,L4MOV R2,#7FHJMP STCJNE R2,#7FH,REMOV R2,#0EFHRE: ;未扫描到键值则返回JMP STARTTAB_TT:;----------------------------------------------------散转表处理JMP PPY9JMP PPY00JMP PPY15JMP PPY14JMP PPY13JMP PPY1JMP PPY4JMP PPY7JMP PPY10JMP PPY2JMP PPY5JMP PPY8JMP PPY0JMP PPY3JMP PPY6JMP PPY9JMP PPY11RETPPY: ;真正处理程序PPY0:MOV P0,#0C0HLJMP STARTPPY1:MOV P0,#0F9HLJMP STARTPPY2:MOV P0,#0A4HLJMP STARTPPY3:MOV P0,#0B0HLJMP START·······PPY15:MOV P0,#8EH-DYDIY-LJMP STARTPPY00:MOV P0,#0FFHLJMP STARTDL20MS: MOV R6,#100;-----------------------延时子程序DL1: MOV R7,#100DL2: DJNZ R7,DL2DJNZ R6,DL1RETEND==END==E-mail: dydiy@主页:- 11 -。

相关文档
最新文档