实验三 键盘扫描控制
- 格式:doc
- 大小:340.50 KB
- 文档页数:7
一、实验目的1. 理解按键扫描的基本原理,掌握按键扫描电路的设计方法。
2. 学习并运用单片机编程技术,实现按键的识别与处理。
3. 掌握按键防抖技术,提高按键识别的准确性。
4. 熟悉数码管显示电路的连接与编程,实现按键值的实时显示。
二、实验原理按键扫描是单片机应用中常见的一种输入方式,通过扫描电路检测按键状态,并转换为单片机可识别的信号。
本实验采用行列扫描法,通过单片机的I/O口输出低电平,逐行扫描按键,同时读取列线状态,判断是否有按键被按下。
三、实验设备1. 单片机实验板(如51单片机实验板)2. 按键(如按钮、触摸按键等)3. 数码管(如7段数码管)4. 电阻、电容等电子元件5. 编程软件(如Keil、IAR等)四、实验步骤1. 电路连接(1)将按键的行线连接到单片机的I/O口,列线连接到数码管的输入端。
(2)数码管的共阳极或共阴极连接到单片机的I/O口。
(3)在按键和数码管之间接入电阻和电容,实现防抖功能。
2. 编程实现(1)初始化单片机的I/O口,将行线设置为输出模式,列线设置为输入模式。
(2)编写按键扫描函数,逐行扫描按键,读取列线状态,判断是否有按键被按下。
(3)编写数码管显示函数,根据按键值显示对应的数字或字符。
(4)编写防抖函数,消除按键抖动干扰。
3. 实验测试(1)上电后,观察数码管显示是否正常。
(2)按下按键,观察数码管是否显示对应的数字或字符。
(3)多次按下按键,观察数码管显示是否稳定。
五、实验结果与分析1. 按键扫描结果实验结果表明,按键扫描电路能够正确识别按键状态,并转换为单片机可识别的信号。
按键按下时,数码管显示对应的数字或字符,按键释放时,数码管显示前一个数字或字符。
2. 防抖效果通过实验发现,防抖函数能够有效消除按键抖动干扰,提高按键识别的准确性。
在按键按下和释放过程中,数码管显示的数字或字符稳定,没有出现跳动现象。
3. 数码管显示实验结果表明,数码管显示电路能够正确显示按键值。
一、实验目的1. 理解键盘扫描的基本原理。
2. 掌握使用C语言进行键盘扫描程序设计。
3. 学习键盘矩阵扫描的编程方法。
4. 提高单片机应用系统的编程能力。
二、实验原理键盘扫描是指通过检测键盘矩阵的行列状态,判断按键是否被按下,并获取按键的值。
常见的键盘扫描方法有独立键盘扫描和矩阵键盘扫描。
独立键盘扫描是将每个按键连接到单片机的独立引脚上,通过读取引脚状态来判断按键是否被按下。
矩阵键盘扫描是将多个按键排列成矩阵形式,通过扫描行列线来判断按键是否被按下。
这种方法可以大大减少引脚数量,降低成本。
本实验采用矩阵键盘扫描方法,使用单片机的并行口进行行列扫描。
三、实验设备1. 单片机开发板(如51单片机开发板)2. 键盘(4x4矩阵键盘)3. 连接线4. 调试软件(如Keil)四、实验步骤1. 连接键盘和单片机:将键盘的行列线分别连接到单片机的并行口引脚上。
2. 编写键盘扫描程序:(1)初始化并行口:将并行口设置为输入模式。
(2)编写行列扫描函数:逐行扫描行列线,判断按键是否被按下。
(3)获取按键值:根据行列状态,确定按键值。
(4)主函数:调用行列扫描函数,读取按键值,并根据按键值执行相应的操作。
3. 调试程序:将程序下载到单片机,观察键盘扫描效果。
五、实验程序```c#include <reg51.h>#define ROW P2#define COL P3void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 123; j++);}void scan_key() {unsigned char key_val = 0xFF;ROW = 0xFF; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值}void main() {while (1) {scan_key();if (key_val != 0xFF) {// 执行按键对应的操作}}}```六、实验结果与分析1. 实验结果:程序下载到单片机后,按键按下时,单片机能够正确读取按键值。
键盘扫描原理
键盘是计算机输入设备中最常用的一种,它通过将人们的按键操作转换成计算机可以识别的信号,从而实现了人机交互。
而键盘的核心部分就是键盘扫描原理,它是如何实现的呢?
首先,我们需要了解键盘的工作原理。
当我们按下键盘上的某一个按键时,就会产生一个按键信号,这个信号会通过键盘的电路传输到计算机主机上。
而键盘扫描原理就是指计算机是如何检测到这个按键信号的。
键盘扫描原理的核心就是矩阵扫描。
键盘上的每一个按键都对应着一个电路,这些电路会以矩阵的形式排列在键盘的背后。
当我们按下某一个按键时,对应的电路就会闭合,从而产生一个按键信号。
计算机会通过扫描这个矩阵来检测到按键信号的产生。
具体来说,计算机会以一定的频率扫描键盘上的每一个按键,检测它们是否产生了按键信号。
这个扫描的频率通常很高,所以我们按下按键时几乎可以立即得到响应。
一旦计算机检测到有按键信号产生,它就会将这个信号转换成相应的键值,从而实现了按键的输入。
除了矩阵扫描,现代键盘还采用了一些其他技术来提高性能和稳定性。
比如采用了多种防抖动技术,防止因按键抖动而产生误操作;采用了多种按键轮询技术,提高了按键的灵敏度和反应速度;还采用了多种按键编码技术,提高了按键的识别准确性和稳定性。
总的来说,键盘扫描原理是键盘工作的核心,它通过矩阵扫描等技术实现了对按键信号的检测和转换,从而实现了人机交互。
随着技术的不断发展,键盘的性能和稳定性会不断提高,为人们的使用体验带来更多的便利和舒适。
按键扫描课程设计一、课程目标知识目标:1. 学生能够理解按键扫描的基本概念及其在信息技术中的应用。
2. 学生能够掌握按键扫描的原理,了解其工作流程。
3. 学生能够掌握编程语言中实现按键扫描的相关函数和语法。
技能目标:1. 学生能够运用所学知识,独立编写简单的按键扫描程序。
2. 学生能够通过实验和操作,学会调试和优化按键扫描程序,提高程序运行的稳定性和效率。
情感态度价值观目标:1. 学生培养对信息技术的兴趣,激发学习编程的热情。
2. 学生在合作学习过程中,培养团队协作精神和沟通能力。
3. 学生能够认识到信息技术在生活中的应用,提高社会责任感和创新意识。
课程性质:本课程为信息技术课程,结合学生年级特点,注重理论知识与实践操作的相结合,提高学生的动手能力和解决问题的能力。
学生特点:六年级学生具备一定的信息技术基础,思维活跃,好奇心强,对编程和实验操作有较高的兴趣。
教学要求:教师应注重启发式教学,引导学生主动探索,通过实例分析和实践操作,帮助学生掌握按键扫描的相关知识,培养其编程思维和实际操作能力。
同时,关注学生的个别差异,给予个性化指导,确保每位学生都能达到课程目标。
在教学过程中,将课程目标分解为具体的学习成果,便于后续的教学设计和评估。
二、教学内容本章节教学内容依据课程目标,结合课本第四章“输入输出控制”内容进行组织,具体安排如下:1. 按键扫描原理:介绍按键扫描的基本概念、工作原理和常见的按键扫描方式,使学生理解按键输入在信息技术中的应用。
2. 编程语言中的按键扫描实现:结合教材内容,以C语言为例,讲解实现按键扫描的相关函数和语法,如:while循环、if判断语句等。
3. 按键扫描程序编写与调试:指导学生运用所学知识,编写简单的按键扫描程序,通过实验和操作,学习调试和优化程序,提高程序运行的稳定性和效率。
4. 实践案例分析:分析实际应用案例,如:智能家居、电子游戏等,让学生了解按键扫描在实际项目中的应用和价值。
实验4 键盘实验一、实验目的:1.掌握8255A编程原理。
2.了解键盘电路的工作原理。
3.掌握键盘接口电路的编程方法。
二、实验设备:CPU挂箱、8031CPU模块三、实验原理:1.识别键的闭合,通常采用行扫描法和行反转法。
行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如所读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。
本实验例程采用的是行反转法。
行反转法识别键闭合时,要将行线接一并行口,先让它工作于输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口往各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。
然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上的输入值,那么,在闭合键所在的行线上的值必定为0。
这样,当一个键被按下时,必定可以读得一对唯一的行线值和列线值。
2.程序设计时,要学会灵活地对8255A的各端口进行方式设置。
3.程序设计时,可将各键对应的键值(行线值、列线值)放在一个表中,将要显示的0~F字符放在另一个表中,通过查表来确定按下的是哪一个键并正确显示出来。
实验题目利用实验箱上的8255A可编程并行接口芯片和矩阵键盘,编写程序,做到在键盘上每按一个数字键(0~F),用发光二极管将该代码显示出来。
四、实验步骤:将键盘RL10~RL17接8255A的PB0~PB7;KA10~KA12接8255A的PA0~PA2;PC0~PC7接发光二极管的L1~L8;8255A芯片的片选信号8255CS接CS0。
五、实验电路:六、程序框图7.程序清单八、附:8251/8255扩展模块该模块由8251可编程串行口电路和8255可编程并行口电路两部分组成,其电源、数据总线、地址总线和片选信号均由接口挂箱上的接口插座提供。
一、8251可编程串行口电路(1)8251可编程串行接口芯片引脚及功能8251A是通用同步/异步收发器USART,适合作异步起止式数据格式和同步面向字符数据格式的接口,其功能很强。
实验三 键盘扫描及静态串行显示实验一、实验目的1、掌握数字、字符转换成显示段码的软件译码方法2、静态显示的原理和相关程序的编写3、键盘扫描方法二、实验电路1、静态显示,电路如电路图所示。
显示器由4个共阴极LED 数码管组成。
输入只有两个信号,它们是串行数据线DIN 和移位信号CLK 。
1个串入/并出移位寄存器芯片74LS164连接显示器各数码管的各段,为选信号由CPU 的P2.0~P2.3提供。
74LS164的引脚图如图所示。
74LS164为8位串入并出移位寄存器,1、2为 串行输入端,Q0~Q7为并行输出端,CLK 为移位时钟脉冲,上升沿移入一位;MR为清零端,低电平时并行输出为零。
三、实验内容及步骤单片机的P3.0作数据串行输出,P3.1作移位脉冲输出,串口通讯方式采用方式0,即8位移位寄存器方式。
输出的字形码通过串口通信方式输入到74LS164芯片,该芯片并行输出8位字形码,驱动数码管显示。
需要显示的字符来自于键盘输入。
键盘扫描子程序不停地扫描键盘是否有按键按下,如果有按键按下,扫描程序返回按键的行和列号。
键码获取子程序根据键盘编号而获得各键码的字形符。
按键的字符按从左到右的次序依次显示,即首先按下的字符显示在最左边,当另有按键按下时,前一个字符向右移一位,当前字符显示在最左端,以此类推。
1、使用单片机最小应用系统1模块,用导线连接RXD 、TXD 到串行静态显示模块的DIN 、CLK 端。
2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,打开仿真器电源。
3、启动计算机,打开伟福仿真软件,进入仿真环境。
选择仿真器型号、仿真头型号、CPU 类型;选择通信端口,测试串行口。
4、编写自己的程序,并进行编译链接,通过硬件仿真的方法达到实验要求。
四、流程图及源程序1、流程图串口发送程序参考教材P194的例7.1;键盘扫描程序参考教材P201的例7.4五、电路图74LS164。
扫描键盘的原理
键盘扫描原理是通过一种叫做"矩阵扫描"的技术来实现的。
它
主要依靠键盘上方的一组电路来完成输入信号的检测和传递。
具体来说,键盘通常有多行多列的布局。
每个按键都与一个特定的行和列相连,形成一个按键矩阵。
当我们按下某个按键时,键盘的控制器会首先激活按键所在的行,然后依次检查每一列。
如果有任何一列检测到有电流通过,就说明该按键被按下。
为了实现这个过程,键盘内部的控制器会周期性地激活行,并读取列上的电流状况。
它会通过一个循环的方式,每次激活一行并读取所有列的状态,以此来获得所有按键的输入信号。
这种矩阵扫描的方式可以同时检测多个按键的状态,从而实现多键同时按下的功能。
一旦控制器检测到按键被按下,它会将相应的按键码发送给计算机,然后由操作系统或相应的应用程序来处理这个输入。
键盘控制器和计算机之间的通信通常是通过USB或PS/2接口完
成的。
总的来说,键盘的扫描原理就是基于矩阵扫描技术,通过激活行和读取列的方式,检测按键的输入信号,并将其传递给计算机进行处理。
单片机键盘检测与控制实验是嵌入式系统和数字电子技术领域的一个常见实验,通过该实验,可以学习到单片机输入输出的基本原理、数字信号的处理方法以及键盘输入的检测和控制技术。
以下是这个实验的基本原理和步骤:**实验目的:**1. 了解单片机的输入输出原理。
2. 掌握键盘输入的检测原理。
3. 实现对键盘输入的基本控制。
**实验原理:**1. **单片机输入输出原理:** 单片机通常具有一些通用输入输出引脚,用于与外部设备进行信息交互。
这些引脚可以配置为输入或输出模式。
在实验中,我们主要使用单片机的输入引脚,将键盘连接到这些引脚上,以便单片机可以读取键盘的输入信号。
2. **键盘输入的检测原理:** 键盘通常是由多个按键组成的矩阵结构。
每个按键都与键盘的一行和一列相连。
通过扫描键盘的行和列,可以检测到哪个按键被按下。
具体步骤如下:- **行扫描:** 单片机首先选择一行,将该行置为低电平,同时检测每一列的状态。
如果某一列为低电平,说明该列对应的按键被按下。
- **列扫描:** 单片机依次选择每一列,将该列置为低电平,同时检测每一行的状态。
如果某一行为低电平,说明该行对应的按键被按下。
3. **实现对键盘输入的基本控制:** 一旦检测到按键按下的信号,单片机可以采取相应的措施,例如在数码管上显示按下的键值、驱动LED灯等。
**实验步骤:**1. **连接键盘:** 将键盘的行和列引脚连接到单片机的相应引脚上。
2. **编写程序:** 使用编程语言(如C语言或汇编语言)编写程序,实现键盘输入的检测和控制逻辑。
3. **下载程序:** 将编写好的程序下载到单片机中。
4. **运行实验:** 接通电源,运行实验,观察键盘输入的检测和相应控制的效果。
**实验注意事项:**1. 确保键盘连接正确,行和列的对应关系准确。
2. 程序中的扫描算法要正确,确保能够准确检测到键盘的按键状态。
3. 在程序中加入防抖动处理,防止由于按键机械弹性导致的多次触发。
实验三LED数码管动态显示及4 X4 键盘控制实验一、实验目的1.巩固多位数码管动态显示方法。
2.掌握行扫描法矩阵式按键的处理方法。
3.熟练应用AT89S52学习板实验装置,进一步掌握keil C51的使用方法。
二、实验内容使用AT89S52学习板上的4位LED数码管和4 X 4矩阵键盘阵列做多位数码管动态显示及行扫描法键盘处理功能实验。
用P0口做数据输出,利用P1做锁存器74HC573的锁存允许控制,编写程序使4位LED数码管按照动态显示方式显示一定的数字;按照行扫描法编写程序对4 X 4矩阵键盘阵列进行定期扫描,计算键值并在数码管上显示。
三、实验系统组成及工作原理1.4位LED数码管和4 X 4矩阵键盘阵列电路原理图2.多位数码管动态显示方式a b c d e f g dp com a b c d e f g dpcoma b c d e f g dpcoma b c d e f g dpcomD0IO(2)IO(1)说明4位共阴极LED动态显示3456数字的工作过程首先由I/O口(1)送出数字3的段选码4FH即数据01001111到4个LED共同的段选线上,接着由I/O口(2)送出位选码××××0111到位选线上,其中数据的高4位为无效的×,唯有送入左边第一个LED的COM端D3为低电平“0”,因此只有该LED的发光管因阳极接受到高电平“1”的g、d、c、b、a段有电流流过而被点亮,也就是显示出数字3,而其余3个LED因其COM端均为高电平“1”而无法点亮;显示一定时间后,再由I/O口(1)送出数字4的段选码66H即01100110到段选线上,接着由I/O 口(2)送出点亮左边第二个LED的位选码××××1011到位选线上,此时只有该LED的发光管因阳极接受到高电平“1”的g、f、c、b段有电流流过因而被点亮,也就是显示出数字4,而其余3位LED不亮;如此再依次送出第三个LED、第四个LED的段选与位选的扫描代码,就能一一分别点亮各个LED,使4个LED从左至右依次显示3、4、5、6。
实验4 键盘实验一、实验目的:1.掌握8255A编程原理。
2.了解键盘电路的工作原理。
3.掌握键盘接口电路的编程方法。
二、实验设备:CPU挂箱、8031CPU模块三、实验原理:1.识别键的闭合,通常采用行扫描法和行反转法。
行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如所读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。
本实验例程采用的是行反转法。
行反转法识别键闭合时,要将行线接一并行口,先让它工作于输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口往各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。
然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上的输入值,那么,在闭合键所在的行线上的值必定为0。
这样,当一个键被按下时,必定可以读得一对唯一的行线值和列线值。
2.程序设计时,要学会灵活地对8255A的各端口进行方式设置。
3.程序设计时,可将各键对应的键值(行线值、列线值)放在一个表中,将要显示的0~F字符放在另一个表中,通过查表来确定按下的是哪一个键并正确显示出来。
实验题目利用实验箱上的8255A可编程并行接口芯片和矩阵键盘,编写程序,做到在键盘上每按一个数字键(0~F),用发光二极管将该代码显示出来。
四、实验步骤:将键盘RL10~RL17接8255A的PB0~PB7;KA10~KA12接8255A的PA0~PA2;PC0~PC7接发光二极管的L1~L8;8255A芯片的片选信号8255CS接CS0。
五、实验电路:六、程序框图7.程序清单八、附:8251/8255扩展模块该模块由8251可编程串行口电路和8255可编程并行口电路两部分组成,其电源、数据总线、地址总线和片选信号均由接口挂箱上的接口插座提供。
一、8251可编程串行口电路(1)8251可编程串行接口芯片引脚及功能8251A是通用同步/异步收发器USART,适合作异步起止式数据格式和同步面向字符数据格式的接口,其功能很强。
实验三4*4键盘扫描显示控制一、实验目的实现一4×4键盘的接口,并在两个数码管上显示键盘所在的行与列。
即将8255单元与键盘及数码管显示单元连接,编写实验程序扫描键盘输入,并将扫描结果送数码显示,键盘采用4×4键盘,每个数码管值可以为0到F,16个数。
将键盘进行编号记作0—F当按下其中一个按键时将该按键对应的编号在一个数码管上显示出来,当按下下一个按键时便将这个按键的编号在下一个数码管上显示出来,且数码管上可以显示最近6次按下按键的编号。
二、实验要求1、接口电路设计:根据所选题目和所用的接口电路芯片设计出完整的接口电路,并进行电路连接和调试。
2、程序设计:要求画出程序框图,设计出全部程序并给出程序设计说明。
三、实验电路四、实验原理说明图2 数码管引脚图图1为AT89C51引脚图,说明如下:VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH 编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口同时为闪烁编程和编程校验接收一些控制信号。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
图2为数码管引脚图,功能说明如下:显示字形g f e d c b a 段码0 0 1 1 1 1 1 1 3fh1 0 0 0 0 1 1 0 06h2 1 0 1 1 0 1 1 5bh3 1 0 0 1 1 1 1 4fh4 1 1 0 0 1 1 0 66h5 1 1 0 1 1 0 1 6dh6 1 1 1 1 1 0 1 7dh7 0 0 0 0 1 1 1 07h8 1 1 1 1 1 1 1 7fh9 1 1 0 1 1 1 1 6fhA 1 1 1 0 1 1 1 77hb 1 1 1 1 1 0 0 7chC 0 1 1 1 0 0 1 39hd 1 0 1 1 1 1 0 5ehE 1 1 1 1 0 0 1 79hF 1 1 1 0 0 0 1 71h五、实验流程图六、程序清单OUTBIG EQU 8002H ; 位控制口OUTSEG EQU 8004H ; 段控制口 KEYIN EQU 8001H ; 键盘读入口READY: MOV 20H,#3FH ;缓冲器设初值,赋值到6个数码管 MOV 21H,#3FH MOV 22H,#3FH否是 是否开始 显示缓冲区初始化LED 显示读取键值键值转换为显示数据开始输出列扫描信号列扫描信号移位该列有键输入?读入行信号返回6列扫描完?有键输入?初始化地址参数按照行列计算键值查表得键码等待按键释放返回MOV 24H,#3FHMOV 25H,#3FHMAIN: LCALL DISPLAY ;无键码输入,调用显示模块LCALL TESTJZ MAIN ;累加器为0即说明无按键,则转移继续显示 LCALL SEARCH ;有键值输入,寻找输入键值所在的行和列MOV 20H,21H ;数码管显示出输入的键值MOV 21H,22HMOV 22H,23HMOV 23H,204MOV 24H,25HMOV DPTR,#LEDTABMOVC A,@A+DPTRMOV 25H,ASJMP MAINDISPLAY: ;显示模块MOV R0,#20H ;缓冲区从20H处开始MOV R1, #6 ;共 6个八段管MOV R2, #00100000B ;从左边开始显示灯亮为1,灭为0,LOOP: MOV DPTR, #OUTBIGMOV A, #0MOVX @DPTR, A ; 位选码初值设为0,即关闭所有八段管MOV A, @R0 ;将以20H为首地址的内存值发送到段码输出口8004H MOV DPTR, #OUTSEGMOVX @DPTR,AMOV DPTR, #OUTBIG ;输出位选通信号,使每次只显示一位八段管MOV A, R2MOVX @DPTR, ALCALL DELAY ;延时MOV A, R2RR A ;位选信号右移一位,即动态显示下一个数码管 MOV R2, AINC R0 ;内存地址加一,提供段码输出DJNZ R1, LOOPRETDELAY: MOV R7,#01H ; 延时子程序DEL1: MOV R6,#00HDEL2: DJNZ R6, DEL2DJNZ R7, DEL1RETTEST: MOV DPTR,#OUTBIG ;检测有无键值输入MOV A,#00HMOVX @DPTR,A ;输出线置为0MOVX A,@DPTR ;读入键状态CPL A ;累加器求反ANL A,#0FH ;高四位不用RETSEARCH: ;找出键值所在的的位置(行和列)MOV R1,#00100000BMOV R2,#06HMOV R5,#00HMOV R4,#03HLSEARCH: ;找出列所在位置后MOV A,R1CPL AMOV DPTR,#OUTBIGMOVX @DPTR,ACPL ARR A ;通过判断循环几次进位为1来实现计数的功能,从而得知行所在位置MOV R1,AMOV DPTR,#KEYINMOVX A,@DPTRCPL AANL A,#0FHJNZ HSEARCH ;找到所在列,继续寻找行所在位置INC R5DJNZ R2,LSEARCHHSEARCH:MOV R7,#04HLOOP2: RRC AJC GETDEC R4DJNZ R7, LOOP2GET: ;确定输入的键码值MOV A,R4 ;键值=行*6+列,R4*6+R5->AMOV B,#6HMUL ABADD A,R5MOV DPTR,#KEYTAB ;取出键码所在位置MOVC A,@A+DPTRMOV 26H,A ;将取出键值暂时保存在内存中,以免数据丢失WAIT: MOV DPTR,#OUTBIG ;等键释放CLR AMOVX @DPTR,ALCALL DELAYLCALL TESTJNZ WAITMOV A,26H ;释放出键盘输入值RETLEDTAB: ; 八段管显示码DB 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hDB 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hKEYTAB: ;键盘码DB 07H,08H,09H,0AH,00H,00HDB 04H,05H,06H,0BH,00H,00HDB 01H,02H,03H,0CH,00H,00HDB 00H,0FH,0EH,0DH,00H,00HEND七、实验总结通过这次实验,我基本上完成了题目中所给的要求,设计出了4*4键盘的接口,并且在两个数码管上能够显示键盘所在的行值和列值。
同时深刻体会到理论与实践相结合的重要性,也懂得如何使用手中的资料。
使我能够综合运用以前在课堂中学到的知识做一些简单的电子产品的仿真,使我对汇编语言有了更好的掌握和运用,用其进行软件编程更加顺手。
初步掌握了这些,可以编写一个较完整的实用程序。
本次课设使我初步了解了单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试等。
更重要的是,使我明白了无论是设计硬件电路还是编写相应的软件程序,我们应该时刻都要仔细认真。
因为在这个过程中哪怕是出现一个小小的错误,都会导致不能仿真出正确的结果甚至根本不会出结果。
实验是一个不断学习的过程,我们需要充分利用好网络资源和身边的资料来解决我们在课设过程中遇到的问题,只有将遇到的问题解决好,才能真正的学到一些知识。