单片机课程设计4x8矩阵键盘

合集下载

单片机 矩阵键盘实验 实验报告

单片机 矩阵键盘实验 实验报告

实验五矩阵键盘实验一、实验内容1、编写程序,做到在键盘上每按一个数字键(0-F)用发光二极管将该代码显示出来。

按其它键退出。

2、加法设计计算器,实验板上有12个按键,编写程序,实现一位整数加法运算功能。

可定义“A”键为“+”键,“B”键为“=”键。

二、实验目的1、学习独立式按键的查询识别方法。

2、非编码矩阵键盘的行反转法识别方法。

三、实验说明1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。

2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。

3、识别键的闭合,通常采用行扫描法和行反转法。

行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。

行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。

然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。

这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。

由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。

行反转法识别按键的过程是:首先,将4个行线作为输出,将其全部置0,4个列线作为输入,将其全部置1,也就是向P1口写入0xF0;假如此时没有人按键,从P1口读出的值应仍为0xF0;假如此时1、4、7、0四个键中有一个键被按下,则P1.6被拉低,从P1口读出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚才从P1口读出的数的低四位置1后再写入P1口,即将0xBF写入P1口,使P1.6为低,其余均为高,若此时被按下的键是“4”,则P1.1被拉低,从P1口读出的值为0xBE;这样,当只有一个键被按下时,每一个键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被按下了。

单片机 矩阵键盘实验 实验报告

单片机 矩阵键盘实验 实验报告

单片机矩阵键盘实验实验报告一、实验目的本次实验的目的是掌握原理和方法,利用单片机识别矩阵键盘并编程实现键码转换功能,控制LED点亮显示。

二、实验原理矩阵键盘是一种由多路单向控制器输入行选择信号与列选择信号连接而形成的一一对应矩阵排列结构。

它广泛应用于电子游戏机、办公自动化设备、医疗仪器、家电控制及书籍检索机器等方面。

本次实验采用的矩阵键盘是一个4 x 4矩阵,用4段数码管显示按键编码,每个按键都可以输入一个代码,矩阵键盘连接单片机,实现一个软件算法来识别键码转化。

从而将键盘中的按键的按下信号转换成程序能够识别的代码,置于相应的输出结果中,控制LED点亮,从而可以实现矩阵键盘按键的转换功能。

三、实验方法1.硬件搭建:矩阵键盘(4行4列)与单片机(Atmel AT89C51)相连,选择引脚连接,并将数码管和LED与单片机相连以实现显示和点亮的功能。

2.程序设计:先建立控制体系,利用中断服务子程序识别和码值转换,利用中断服务子程序实现从按键的按下信号转换为程序能够识别的代码,然后将该代码段编写到单片机程序中,每次按下矩阵键盘按键后单片机给出相应的按键编码输出,用数码管显示,控制LED点亮。

四、实验结果经过实验,成功实现了矩阵键盘与单片机之间的连接,编写了中断服务子程序,完成了按键编码输出与LED点亮的功能。

实验完成后,数码管显示各种按键的编码,同时LED会点亮。

本次实验介绍了矩阵键盘的原理,论述了键码转换的程序设计步骤,并实验完成矩阵键盘与单片机的连接,实现用LED点亮以及数码管显示按键的编码。

通过本次实验,受益匪浅,使我对使用单片机编写算法与程序有了更深入的认识,同时丰富了课堂学习的内容,也使我更加热爱自己所学的专业。

单片机矩阵键盘原理

单片机矩阵键盘原理

单片机矩阵键盘原理单片机矩阵键盘是一种常见的输入装置,它可以实现对数字、字母、符号等不同类型的输入,是单片机控制系统中不可或缺的一部分。

下面详细介绍单片机矩阵键盘的原理。

1. 键盘的基本原理键盘是一种能够将人体按压的操作转换成电信号输出的输入设备。

它由按键、矩阵电路和接口电路等多个部分组成。

其中最关键的是矩阵电路,它起到了连接按键和接口电路的桥梁作用。

2. 矩阵电路的构成矩阵电路主要由行列式组成,其中行和列的数量决定了键盘能够输入的按键数量。

例如一个4行4列的矩阵电路可以连接16个按键。

3. 按键的工作原理按键的工作原理是利用按键触点的开闭状态来变换电路状态,进而实现输入信号的转换。

按键的触点现在主要分为二态和三态两种,二态触点只能够开闭两种状态,而三态触点则可以在按键未按下、按下瞬间和按下保持三个状态之间变换。

在设计矩阵电路时需要根据按键的触点类型进行对应的接线方式。

4. 矩阵键盘的工作流程单片机矩阵键盘的工作流程主要包括按键扫描、按键代码转换和按键响应处理三步。

按键扫描的原理是利用矩阵电路的行列结构来进行扫描,每次扫描只需要对一个行和一个列进行检测,判断当前按键是否被按下。

如果检测到按键被按下,则会对应生成相应的按键代码,并将其发送到单片机系统进行处理。

5. 按键的编程实现在单片机的程序中,实现矩阵键盘的输入需要用到外部中断和定时器两个功能模块。

其中定时器用于产生定时器中断,从而保证按键信号的稳定性和准确性;而外部中断则在扫描矩阵电路时检测按键是否被按下,用于触发中断并响应按键事件。

总的来说,单片机矩阵键盘的原理涉及到电路接线、按键触点类型、按键扫描算法以及编程实现等多个方面。

在设计和实现过程中需要考虑多种因素,才能确保键盘输入的可靠性和稳定性。

单片机c语言程序设计---矩阵式键盘实验报告

单片机c语言程序设计---矩阵式键盘实验报告

单片机c语言程序设计---矩阵式键盘实验报告课程名称:单片机c语言设计实验类型:设计型实验实验项目名称:矩阵式键盘实验一、实验目的和要求1.掌握矩阵式键盘结构2.掌握矩阵式键盘工作原理3.掌握矩阵式键盘的两种常用编程方法,即扫描法和反转法二、实验内容和原理实验1.矩阵式键盘实验功能:用数码管显示4*4矩阵式键盘的按键值,当K1按下后,数码管显示数字0,当K2按下后,显示为1,以此类推,当按下K16,显示F。

(1)硬件设计电路原理图如下仿真所需元器件(2)proteus仿真通过Keil编译后,利用protues软件进行仿真。

在protues ISIS 编译环境中绘制仿真电路图,将编译好的“xxx.hex”文件加入AT89C51。

启动仿真,观察仿真结果。

操作方完成矩阵式键盘实验。

具体包括绘制仿真电路图、编写c源程序(反转法和扫描法)、进行仿真并观察仿真结果,需要保存原理图截图,保存c源程序,总结观察的仿真结果。

完成思考题。

三、实验方法与实验步骤1.按照硬件设计在protues上按照所给硬件设计绘制电路图。

2.在keil上进行编译后生成“xxx.hex”文件。

3.编译好的“xxx.hex”文件加入AT89C51。

启动仿真,观察仿真结果。

四、实验结果与分析void Scan_line()//扫描行{Delay(10);//消抖switch ( P1 ){case 0x0e: i=1;break;case 0x0d: i=2;break;case 0x0b: i=3;break;case 0x07: i=4;break;default: i=0;//未按下break;}}void Scan_list()//扫描列{Delay(10);//消抖switch ( P1 ){case 0x70: j=1;break;case 0xb0: j=2;break;case 0xd0: j=3;break;case 0xe0: j=4;break;default: j=0;//未按下break;}}void Show_Key(){if( i != 0 && j != 0 ) P0=table[ ( i - 1 ) * 4 + j - 1 ];else P0=0xff;}五、讨论和心得。

《单片机矩阵键盘》课件

《单片机矩阵键盘》课件

矩阵键盘的原理
深入了解矩阵键盘的组成结构、工作原理和扫描方式。
组成结构 工作原理
矩阵键盘由按键和行列引脚组成的矩阵状结构。 通过扫描按键矩阵的行和列,确定被按下的按键。
扫描方式
逐行、逐列或矩阵扫描,用于检测按键的状态。
矩阵键盘的接口设计
详细介绍矩阵键盘的电路设计、接口连接和设计注意事项。
电路设计
设计适合矩阵键盘的电路,确保 信号的正确传输和按键的可靠检 测。
接口连接
将矩阵键盘与单片机进行正确的 接线连接,以实现按键信号的读 取。
设计注意事项
注意接口的稳定性、防抖动处理 和按键状态的判别。
矩阵键盘的编程实现
教授GPIO口的配置、矩阵键盘的扫描方法和状态码处理的编程实现。
1
GPIO口的配置
设置单片机的GPIO引脚,用于连接和控
实验效果演示
展示实验结果,演示矩阵键盘 的按键功能。
总结和展望
总结本课程的学习内容,展望矩阵键盘在更多应用场景中的发展。
1 总结本课程的学习内容
2 展望更多应用场景
回顾矩阵键盘的原理、接口设计和编程实现, 总结学习收获。
探讨矩阵键盘在电子设备、控制系统等领域 的应用前景。
矩阵键盘的扫描方法
ቤተ መጻሕፍቲ ባይዱ
2
制矩阵键盘的行和列。
编写扫描程序,逐行或逐列扫描矩阵键
盘,读取按键状态。
3
状态码处理
根据读取的按键状态码,进行相应的处 理和响应,实现按键功能。
实验演示
展示实验环境的介绍、实验步骤和实验效果。
实验环境介绍
介绍搭建实验所需的硬件和软 件环境。
实验步骤
详细说明进行实验的步骤和操 作流程。

矩阵式键盘设计实训报告

矩阵式键盘设计实训报告

一、实验目的1. 掌握矩阵式键盘的工作原理及电路设计方法。

2. 熟悉单片机与矩阵键盘的接口连接及编程技巧。

3. 提高动手实践能力,培养创新意识。

二、实验设备1. 单片机实验平台2. 矩阵键盘模块3. 数字多用表4. 编译器(如Keil51)5. 连接线三、实验原理矩阵键盘是一种常用的键盘设计方式,通过行列交叉点连接按键,从而实现多个按键共用较少的I/O端口。

矩阵键盘通常采用逐行扫描的方式检测按键状态,当检测到按键按下时,根据行列线的电平状态确定按键位置。

四、实验内容1. 矩阵键盘电路设计2. 矩阵键盘编程3. 矩阵键盘测试与调试五、实验步骤1. 电路设计(1)根据矩阵键盘的规格,确定行线和列线的数量。

(2)将行线和列线分别连接到单片机的I/O端口。

(3)在行线上串联电阻,防止按键抖动。

(4)连接电源和地线。

2. 编程(1)初始化单片机的I/O端口,将行线设置为输出,列线设置为输入。

(2)编写逐行扫描程序,逐行拉低行线,读取列线状态。

(3)根据行列线状态判断按键位置,并执行相应的操作。

3. 测试与调试(1)将编写好的程序下载到单片机中。

(2)连接矩阵键盘,观察按键是否正常工作。

(3)使用数字多用表检测行列线电平,确保电路连接正确。

(4)根据测试结果,对程序进行调试,直到矩阵键盘正常工作。

六、实验结果与分析1. 电路连接正确,按键工作正常。

2. 逐行扫描程序能够正确检测按键位置。

3. 按键操作能够触发相应的程序功能。

七、实验总结1. 通过本次实训,掌握了矩阵式键盘的工作原理及电路设计方法。

2. 熟悉了单片机与矩阵键盘的接口连接及编程技巧。

3. 提高了动手实践能力,培养了创新意识。

八、心得体会1. 在实验过程中,遇到了电路连接错误和程序调试困难等问题,通过查阅资料、请教老师和同学,最终成功解决了问题。

2. 本次实训让我深刻体会到理论知识与实际操作相结合的重要性,同时也认识到团队合作的重要性。

九、改进建议1. 在电路设计过程中,可以考虑增加去抖动电路,提高按键稳定性。

矩阵式键盘的接口设计与编程


;<--------------------------判断是否真的有键按下--------------------->
T_KEY:
ACALL
DL_20MS
;调用延时子程序
ACALL
P_KEY
;再次调用“有无按键按下子程序”
JNZ
IN_SCAN
;若有键按下,则执行逐行扫描程序
AJMP
SCAN
;若无键按下,则不断查询
;<--------------------------扫描数据初始化----------------------->
单片机原理及应用技术
—1—
one 矩阵式键盘接口设计——基于行反转法
4×4矩阵式键盘接 口设计如图所示
—2—
图中P1口的低4位作为行线,P2口的低4位作为列线。行线通过74LS21进行逻辑与操作后作为单 片机的外部中断源输入,当有键按下时以中断形式去执行相应的按键处理程序。
行反转法因判键时将输入与输出线反转互换而得名,步骤如下:
PB口作为扫描口需要设为输出,PA口设为读入。 逐行扫描时,PB口的状态为:
PB7 PB6 PB5 PB4 111 1 111 1 111 1 111 1 111 0 110 1 101 1 011 1
PB3 PB2 PB1 PB0 1 110 1 101 1 011 0 111 1 111 1 111 1 111 1 111
—3—
【例9-3】 行反转法判断按键编号,并存入40H单元,程序如下
ORG
0000H
LJMP
MAIN
ORG
0003H
LJMP
INT0
ORGБайду номын сангаас

单片机矩阵按键课程设计

单片机矩阵按键课程设计一、课程目标知识目标:1. 学生能理解单片机矩阵按键的基础知识,掌握矩阵按键的原理及其在电路中的应用。

2. 学生能描述单片机I/O口操作方法,并运用此知识实现矩阵按键的编程控制。

3. 学生能解释并运用行、列扫描法进行按键识别,实现按键的消抖处理。

技能目标:1. 学生能够独立完成矩阵按键电路的连接,并进行调试。

2. 学生能够运用所学知识,编写程序实现矩阵按键的扫描与功能分配。

3. 学生能够通过实验,分析和解决矩阵按键编程过程中遇到的问题。

情感态度价值观目标:1. 学生培养对单片机技术的兴趣,增强对电子工程领域的认识。

2. 学生在学习过程中,培养解决问题的耐心和毅力,树立团队协作意识。

3. 学生能够认识到单片机技术在现实生活中的应用价值,增强创新实践能力。

课程性质:本课程为实践性较强的电子技术课程,要求学生在掌握理论知识的基础上,注重动手实践。

学生特点:学生具备一定的单片机基础知识,对电子技术有较高的兴趣,但编程和动手能力参差不齐。

教学要求:结合学生特点,课程注重理论与实践相结合,充分调动学生的积极性,提高学生的动手能力和创新能力。

通过课程学习,使学生在知识、技能和情感态度价值观方面均有所提升。

二、教学内容1. 矩阵按键原理:介绍矩阵按键的电路结构、工作原理以及其在单片机系统中的应用。

- 教材章节:第二章第二节《矩阵键盘的工作原理》2. 单片机I/O口操作:回顾并加深理解单片机I/O口的基本操作,为矩阵按键编程打下基础。

- 教材章节:第一章《单片机基础》3. 行列扫描法:讲解如何运用行列扫描法进行按键识别,包括消抖处理方法。

- 教材章节:第二章第三节《矩阵键盘的编程方法》4. 矩阵按键编程实践:指导学生编写程序,实现矩阵按键的扫描与功能分配。

- 教材章节:第二章第四节《矩阵键盘应用实例》5. 电路连接与调试:学生动手实践,完成矩阵按键电路的连接,并进行调试。

- 教材章节:实验指导书《矩阵键盘实验》6. 问题分析与解决:针对编程和调试过程中遇到的问题,引导学生进行分析和解决。

单片机矩阵键盘

单片机矩阵键盘
汇报人: 202X-01-04
contents
目录
• 单片机矩阵键盘概述 • 单片机矩阵键盘硬件设计 • 单片机矩阵键盘软件编程 • 单片机矩阵键盘调试与测试 • 单片机矩阵键盘优化与扩展
01 单片机矩阵键盘 概述
定义与特点
定义
单片机矩阵键盘是一种由行线和 列线组成的键盘,通过按键的行 和列交叉点来识别按键。
用于显示输入的信息或状态, 如数码管、液晶显示屏等。
电源模块
为整个系统提供稳定的电源, 保证系统的正常工作。
电路连接
01
矩阵键盘的行线和列线分别连接到单片机的输入/输出端口,通 过软件扫描方式检测按键状态。
02
单片机控制模块与显示模块连接,将需要显示的信息传输给显
示模块。
电源模块为整个系统提供稳定的电源,保证系统的正常工作。
在通讯设备领域,单片机矩阵键盘可以用 于手机、电话等设备的操作面板,实现拨 号、挂断等功能。
பைடு நூலகம்
02 单片机矩阵键盘 硬件设计
硬件组成
01
02
03
04
矩阵键盘模块
由行线和列线组成的键盘矩阵 ,按键被安排在行线和列线的
交叉点上。
单片机控制模块
用于接收和处理来自矩阵键盘 的信号,控制整个系统的运行

显示模块
软件编程
编写单片机程序,用于扫描矩阵键盘并识 别按键按下事件。
测试方法
按键响应时间测试
测试从按键按下到单片机响应 的时间,确保在合理范围内。
按键防抖测试
测试按键防抖功能是否正常, 即在按键按下和释放时是否能 够正确识别。
多键同时按下测试
测试在多个按键同时按下时, 单片机是否能够正确识别并处 理。

单片机矩阵键盘实验

单片机独立按键和矩阵键盘操作[实验要求]独立按键操作: 试操作P3.4~P3.7控制的四个独立按键中的某一个, 每按一次, 数码管上显示数字作一次加1或减1变化, 显示数字在0~9之间.矩阵键盘操作: 依次按下4*4 矩阵键盘上从第1 到第20 个键,同时在六位数码管上依次显示0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。

[实验原理](1) 按键识别去抖动原理:我们在手动按键的时候, 由于机械抖动或是其它一些非人为的因素很有可能造成误识别, 一般手动按下一次键然后接着释放, 按键两片金属膜接触的时间大约为50ms 左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们在首次检测到键被按下后延时10ms 左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。

(2) 独立按键识别: 判断是否按下键盘,当单片机上电时所有I/O 口为高电平,参照实验电路图, S2 键一端接地另一端接P3.4,所以当键被按下时P3.4 口直接接地,此时检测P3.4 肯定为低电平。

(3) 矩阵键盘识别: 参照实验电路图, 矩阵键盘的四行分别与P3.0-P3.3 连接,四列分别与P3.4-P3.7 连接。

如识别第1列按键, 可给P3.4送低电平,其余为高电平, 把P3口数据读回, 判断其第4位是否全为1, 如果全为1,则该列无键按下, 可继续判断下1列, 如有某位为0, 则有键按下,并可根据其位置识别按键所在行,从而确定该按键位置和键值. 其它各列按键识别类同.[实验目的](1)掌握独立按键的识别方法.(2)掌握按键去抖动的基本原理。

(3)了解矩阵键盘检测的操作方法。

(4)进一步巩固掌握数码管的显示操作方法.[硬件电路]图1 独立键盘和矩阵键盘电路图图2 矩阵键盘接口图。

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

单片机原理与应用课程设计矩阵式键盘与显示班级:机102-1姓名:许传栋学号:201056502133组号:六组组员:孔令伟、张叶荣、尚桂香、许传栋、刘金林目录:一、设计要求 (3)二、硬件设计 (3)三、键盘的运行 (6)四、数码管的显示 (6)五、键盘键值的确定 (6)六、按键顺序码的显示 (7)七、74LS48的应用 (8)八、数码管接口引脚 (9)九、程序设计 (10)附录 (18)一、设计要求1、完成单片机与32键矩阵式键盘的连接方法。

2、识别是否有键按下,并将键值用两位数码管显示出来。

3、用软件延时取出按键抖动。

二、硬件设计1、总体构思本次设计为32键矩阵式键盘,因此采用4x8式按键分布。

分为4行8列的布局。

如图T2_1图T2_1当行线和列线分别置一和置零时,按键两端的电压将发生改变。

将键盘的所有引线连出,行线联接到P2口的低四位,列线联接到P1口,从而构成了单片机对键盘按钮动作的读取电路。

将键值用两位数码管显示,因此要利用两片数码管。

由于单片机通过P0口进行输出,因此将P0口的高四位和低四位分别输出数码管的十位和个位,并在单片机与数码管之间接入74LS48。

74LS48的作用是将P0的四位输出转化为八位,并且作为晶体管的驱动,74LS48的输出电流为6mA,刚好满足数码管的电流。

连接电路如图T2_2图T2_2单片机将数据从P0口输出后经过74LS48的转换与驱动带动,数码管进行数码的显示,通过数码管的显示判断出按钮的位置。

将上述键盘和显示电路联接到单片机上:键盘的行线联接到单片机的P2.0~P2.3上,列线联接到单片机的P1口,P0.0~P0.3,P0.4~P0.7分别连接到两片74LS48的输入端口。

再接入单片机的晶振电路和复位电路,构成单片机的总体电路设计。

如图T2_3图T2_3根据总体电路图的联接,设计出实际的物品。

三、键盘的运行将32个按钮按照4x8的方式排列并连接到电路后。

先将行线全部置一列线全部置零,在将列线置一行线全部置零,检测各行线和列线的的键值,若键值产生变化则表明有按钮按下,否则表示没有按键按下。

对于有按键按下的线路将其中变化的键值,通过软件查表得出其对应的顺序码,并将其保存。

四、数码管的显示将从键盘处读取的顺序码转换为BCD 码从P0口处进行输出。

因此用P0口的高四位和低四位分别代表十位和个位进行输出。

数码管需要8根输入,并且连接到单片机上需要驱动,因此选择采用74LS48进行转换与驱动。

五、键盘键值的确定由于行线和列线分别置一和置零,当按下按钮后,该按钮所在的行线和列线上所检测到的电位将会发生变化,曾而判断出不同的按钮所对应的位置和顺序码,确定数码管显示的数值。

个按键的键值如图T5_1图T5_1如图T5_1所示,在线左侧,键值的最后一位均为F;在线右侧,键值对低二位均为F。

因此可根据F所在位置的不同判断按键在线左侧还是右侧。

且出去为F的为后左侧和右侧的键值时一一对应相等的。

在查询按键键位位置时,只需建立一个相同的表即可。

六、按键顺序码的显示先将顺序码定制为FFH,再在差表时,将顺序码逐次加一,当查找到对应的键值的同时也取得了在表中相应的顺序码。

当按键所在的位置为线的左侧时顺序码纪委输出置,在线的右侧时则需将顺序码加16在进行输出。

输出由两片数码管进行显示,所以要将十六进制数转化为BCD码进行输出。

将八个输出端口分成两组,一组输出为十位、另一组输出为个位。

并将十位于个位分别联接到不同的74LS48的输入端进行译码,控制晶体管的显示。

达到显示的目的。

七、74LS48的应用八、数码管接口引脚九、程序设计1、程序设计流程:如图T8_1图T8_1按照电路图联接电路,确定行线与列线所对应的I/O接口。

通过MOV指令将行线所在的端口P2口赋值为0FH,列线所在端口P1口赋值为00H。

读取P2口的低四位存入R0。

通过MOV指令将行线所在的端口P2口赋值为00H,列线所在的端口P1口赋值为FFH。

取P1口的高四位存入R2,P1口的低四位存入R1。

取P2的低四位作为高四位分别与P1的低四位和高四位组合为新的八位二进制数,并分别保存在R4和R7中。

判断P1的高四位是否等于0F0H。

若相等,表明对应于P1低四位的按钮有动作,在进行查表,确定该键所对应的顺序码;若不相等,则表明对应于P1高四位的按钮有动作,进行跳转,跳转到判断P1高四位顺序码的指令,进行查表。

由于键值的原因,两组所查的表完全相同。

当动作的按钮在低位时,将顺序码存入到30H单元;当动作的按钮在高四位时,将顺序码加16再存入30H。

将顺序码除后10,将整数部分与余数部分组成一个新的八位二进制,并将其通过P0口进行输出。

在检测到有按键按下后,通过演示程序,对按键进行去抖操作。

具体程序及注释如下:ORG0000HLJMP STARTORG0100H;识别键盘有无按下程序首地址START:MOV P1,#00H;所有列线置低电平MOV P2,#0FH;所有行线置高电平MOV A,P2;读P2口ANL A,#0FH;取出低四位MOV R0,A;P2低四位暂存到R0 MOV P1,#0FFH;所有列线置高电平MOV P2,#00H;所有的行线置低电平MOV A,P1;读P1口MOV R3,A;p1口暂存到R3ANL A,#0FH;取出低四位MOV R1,A;P1口低四位暂存到R1 MOV A,R3;读取P1口给累加器ANL A,#0F0H;取出P1口高四位MOV R2,A;P1口的高四位暂存到R2 MOV A,R0;读取P2口的低四位给累加器ASWAP A;累加器A中低四位和高四位交换ORL A,R1;P1口的低四位与P2口的低四位逻辑或运算重新组合,存在累加器A MOV R4,A;P1口的低四位与P2口的低四位逻辑或运算重新组合暂存到R4MOV A,R0;读取P2口的低四位给累加器AORL A,R2;P1口的高四位与P2口的低四位逻辑或运算重新组合,存在累加器ASWAP A;累加器A中低四位和高四位交换MOV R7,A;P1口的高四位与P2口的低四位逻辑或运算重新组合暂存到R7KEY0:CJNE R2,#0F0H,KEY1;p1口的高四位不全为高电平,跳转到KEY1MOV SP,#70H;软件延时子程序,软件消抖MOV A,R0PUSH ACCMOV A,R1PUSH ACCMOV R0,#64HMOV R1,#64HNET:DJNZ R1,NETDJNZ R0,NETPOP ACCMOV R1,APOP ACCMOV R0,ACJNE R2,#0F0H,KEY_IN1;p1口的高四位不全为高电平,跳转到KEY_IN1KEY_IN1:MOV A,R4;p2低四位与P1低四位组合给累加器AMOV B,A;将按键的特征编码暂存到BMOV DPTR,#KEY_TABLE1MOV R6,#0FFHKEY_IN2:INC R6;顺序码加1MOV A,R6;顺序码值给累加器AMOVC A,@A+DPTR;查表CJNE A,B,KEY_IN3;比较,若相同则找到按键的特征编码MOV A,R6;找到特征编码后,取顺序码MOV30H,A;存入30H单元MOV B,#0AH;B=0AHDIV AB;累加器A除以B,商存在A,余数存在BSWAP A;高四位与低四位互换ORL A,B;A中高四位与B低四位取逻辑或重新组合MOV P0,A;从P0口输出LJMP STARTKEY_IN3:CJNE A,#00H,KEY_IN2;未完,继续查RET;00H为结束码KEY1:CJNE R1,#0FH,START;比较,P1低四位不全为高电平,跳转到START MOV SP,#70H;软件延时子程序,软件消抖MOV A,R0PUSH ACCMOV A,R1PUSH ACCMOV R0,#0AHMOV R1,#0AHNET2:DJNZ R1,NET2DJNZ R0,NET2POP ACCMOV R1,APOP ACCMOV R0,AMOV A,R7;P2低四位P1低四位(R7)给累加器AMOV B,A;累加器A暂存到BMOV DPTR,#KEY_TABLE1MOV R6,#0FFHKEY_IN4:INC R6;顺序码加1MOV A,R6;顺序码值给累加器AMOVC A,@A+DPTR;查表CJNE A,B,KEY_IN5;比较,若相同则找到按键的特征编码MOV A,R6;找到特征编码后,取顺序码ADD A,#10H;累加器A加上16给累加器AMOV30H,A;存入30H单元MOV B,#0AH;B=0AHDIV AB;累加器A除以B,商存在A,余数存在BSWAPA;高四位与低四位互换ORL A,B;A中高四位与B低四位取逻辑或重新组合MOV P0,A;从P0口输出LJMP STARTKEY_IN5:CJNE A,#00H,KEY_IN4;未完,继续查RET;00H为结束码KEY_TABLE1:DB0EEH,0DEH,0BEH,07EH;顺序码DB0EDH,0DDH,0BDH,07DH;顺序码DB0EBH,0DBH,0BBH,07BH;顺序码DB0E7H,0D7H,0B7H,077H;顺序码00H;结束码END附录:参考文献新编单片机原理及应用(机械工业出版社)74LS48芯片资料。

相关文档
最新文档