当前课程知识点:单片机原理及应用 > 7 I/O扩展及应用 > 7.7 键盘扫描子程序 > 键盘扫描子程序
同学
你好
前面我们介绍了一下51单片机的键盘技术
以及键盘按键处理的程序
并且我们给出了一个利用8155
来外接一个矩阵键盘的实例
今天
我们还是以上次课的实例为基础来看
按键处理具体完整程序设计的方法
这里我们给出了利用8155
外接一个矩阵键盘的按键处理程序的完整程序
程序很长
指令很多
我们今天将总体的来介绍一下这个程序
每一个模块的功能
具体用指令怎么来实现该功能
我们这个程序中有详细的注释
这个部分请同学们自己去看
我们今天将只注重来介绍程序中的
每一个功能模块的作用
好
我们来看一看程序
程序实际上分成了几大模块
首先我们看这个程序的第一个模块部分
就是从第一条指令KEY1开始
一直到JNZ LK2
这几条指令的功能是什么
这几条指令的功能就是
用软件延时消抖的办法来判断有没有键按下
其中在这指令中会调用几个延时处理程序
通过ACALL TM6ms
ACALL TM12ms
就是分别来调用TM6ms和TM12ms
两个延时子程序来实现
51单片机的延时等待
因此说前面这一部分的模块的功能
就是来实现用延时消抖法来判断
有没有键被按下
好
一旦确认有键被按下之后
中间这一部分
从LK2: MOV R2 , #0FEH
一直到KEND:AJMP KEY1中间
这一长串的指令
这一长串指令的具体的功能就是
通过逐列扫描逐行输入的办法
来判断到底是哪一个键被按下了
如果找到该键之后要把该键的键码获取
这个键码放哪儿呢
获取到的键码会放到累加器A中
所以就是从LK2到KEND这两条指令中间的部分
采用列扫描逐列扫描
逐行输入的办法来实现的
逐列扫描扫描码从哪个端口输出
从8155的PA口来逐列的输出
这个列扫描码
按键的状态信息从哪边输入
就利用8155的PC口
PC口逐行的输入判断是不是有键被按下
所以这里面同学们在读这个程序时要注意
由于用到了8155的PA口和8155的PC口
因此一定要清楚PA口的地址和PC口的地址
怎么来判断8155 PA口和PC口地址
这时候就需要同学们要看一下具体的硬件连线
我们上一节给出的例题中有具体的51单片机
和8155的具体连线
从具体连线中我们可以看出
8155 PA口的地址是0101H
而PC口的地址是0103H
所以在这个软件编程时
首先同学们要观察硬件
通过硬件确定好PA口和PC口的地址
有了PA口和PC口地址之后
在指令中我们可以利用MOVX指令
来对相关的口进行数据的列码的输出
和行码的输入
好
这是中间这一部分就是采用
逐列输出逐行输入的办法来获取键的键码
一旦获取到键码之后
键码会在累加器A中存放
这段程序的后面一部分
KS1 一直到 RET
这一段就是一个判断有无按键按下的子程序
然后TM12ms一直到RET
这一段就是一个12毫秒的一个延时的子程序
然后TM6ms一直到RET
就是一个延时6毫秒的子程序
以上就是我们8155外接键盘的
键盘处理程序的总体功能的介绍
当然相应具体的指令同学们下课之后
请根据注释仔细的来阅读每一条指令
看这些指令是怎么样来实现我们所说的功能
好的
今天我们就给出的是一个
按键处理程序的这样一个完整的程序
同学们下去之后应该好好的
把这个程序仔细的阅读一下
体会一下怎么样用汇编语言来编写
比较复杂的程序
好的
我们的课就到这里
同学们再见
-1.1 单片机的名称
--单片机的名称
-1.2 单片机的相关概念
--单片机的相关概念
-1.3 单片机的设计语言及软件
-1.4 单片机的发展
--单片机的发展
-1.5单片机的应用
--单片机的应用
-1.6 第一单元作业
-2.1 单片机的结构框图
--单片机的结构框图
-2.2 80C51内部结构
-2.3 信号引脚
--信号引脚
-2.4 内部数据存储器RAM
-2.5 特殊功能寄存器
--特殊功能寄存器
-2.6 堆栈
--堆栈
-2.7 内部程序存储器ROM
-2.8 存储器的结构特点
--存储器的结构特点
-2.9 并行输入输出接口电路
-2.10 并口功能与时序
--并口功能与时序
-2.11 工作方式
--工作方式
-2.12 最小应用系统
-- 最小应用系统
-2.13 第二单元作业
-3.1 指令格式
--指令格式
-3.2 立即寻址与直接寻址
-3.3 寄存器寻址与寄存器间接寻址
-3.4 变址间接寻址与位寻址
-3.5 内部RAM传送指令
-3.6 外部RAM传送指令
-3.7 ROM传送指令
--ROM传送指令
-3.8 交换指令
--交换指令
-3.9 堆栈操作指令
--堆栈操作指令
-3.10 传送类指令习题讲解
-3.11 算术运算类指令特点
-3.12 加法指令
--加法指令
-3.13 加法习题、减法和乘除指令
-3.14 逻辑运算指令
--逻辑运算指令
-3.15 布尔变量操作指令
--布尔变量操作指令
-3.16 无条件转移指令
--无条件转移指令
-3.17 条件转移指令
--条件转移指令
-3.18 循环转移指令
--循环转移指令
-3.19 子程序相关指令
--子程序相关指令
-3.20 并口访问指令及指令小结
-3.21 第三单元作业
-4.1 汇编程序约定
--汇编程序约定
-4.2 宏指令
--宏指令
-4.3 汇编控制指令
--汇编控制指令
-4.4 汇编语言程序设计步骤
-4.5 顺序程序举例
-- 顺序程序举例
-4.6 单重分支结构
--单重分支结构
-4.7 多重分支结构
--多重分支结构
-4.8 单重循环结构
--单重循环结构
-4.9 计数控制循环程序
--计数控制循环程序
-4.10 特征控制循环程序
-- 特征控制循环程序
-4.11 多重循环程序
--多重循环程序
-4.12 子程序的概念
--子程序的概念
-4.13 子程序设计注意事项
-4.14 子程序举例
--子程序举例
-4.15 第四单元作业
-5.1 系统扩展
--系统扩展
-5.2 51单片机扩展方法
-5.3 存储器单元位数扩充方法
-5.4 存储器容量单元扩充方法
-5.5 译码线选法
--译码线选法
-5.6 程序存储器的类型
--程序存储器的类型
-5.7 程序存储器的扩展
--程序存储器的扩展
-5.8 数据存储器的扩展
--数据存储器的扩展
-5.9 存储器综合扩展
--存储器综合扩展
-5.10 单片机存储器系统的特点
-- 单片机存储器系统的特点
-5.11 第五单元作业
-6.1 中断技术
--中断技术
-6.2 中断优先级及中断系统内部结构
-6.3 中断控制寄存器及中断响应过程
-6.4 中断请求的撤消
--中断请求的撤消
-6.5 外部中断举例
--外部中断举例
-6.6 定时器/计数器
--定时器/计数器
-6.7 定时计数器工作方式及程序编写
-6.8 定时器举例
--定时器举例
-6.9 第六单元作业
-7.1 并行接口
-- 并行接口
-7.2 并口举例
--并口举例
-7.3 并口扩展芯片
--并口扩展芯片
-7.4 8155连接方式及编程
-7.5 键盘接口技术
--键盘接口技术
-7.6 按键处理程序及举例
-7.7 键盘扫描子程序
-- 键盘扫描子程序
-7.8 显示接口技术
--显示接口技术
-7.9 多位字符静态显示
--多位字符静态显示
-7.10 多位字符动态显示
--多位字符动态显示
-7.11 第七单元作业
-8.1 流水灯控制系统设计
--html
-8.2 数码管显示系统设计
--html
-8.3 按键控制系统设计
--html
-8.4 中断控制系统设计
--html
-8.5 定时计数器系统设计
--html
-8.6 串口通信系统设计
--html
-8.7 汉字显示系统设计
--html
-8.8 单片机烧录方法
--单片机烧录方法
-8.9 第八章作业-作业