非编码键盘的扫描程序设计.docx
- 文档编号:30470686
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:9
- 大小:22.64KB
非编码键盘的扫描程序设计.docx
《非编码键盘的扫描程序设计.docx》由会员分享,可在线阅读,更多相关《非编码键盘的扫描程序设计.docx(9页珍藏版)》请在冰豆网上搜索。
非编码键盘的扫描程序设计
非编码键盘的扫描程序设计
武汉理工大学《计算机控制技术》课程设计说明书 目录 1设计任务及要求......................................................................................1 初始条件........................................................................................1要求完成的主要任务....................................................................12方案比较及认证......................................................................................13键盘扫描原理..........................................................................................34系统硬件设计..........................................................................................4 选用元器件....................................................................................4 8031单片机.........................................................................48155芯片.............................................................................7硬件电路.....................................................................................10 矩阵式键盘电路................................................................10时钟电路和复位电路........................................................11非编码键盘的总电路........................................................12 5系统软件设计........................................................................................13 软件思想......................................................................................13程序流程图.................................................................................14源程序..........................................................................................156调试记录及结果分析...........................................................................18心得体会...................................................................................................19
武汉理工大学《计算机控制技术》课程设计说明书 下。
识别具体按键的方法:
首先逐列置零电平,其余各列置为高电平,然后检查各行线电平的变化,如果某行电平高电平变为零电平,则可确定此行此列交叉点处的按键被按下。
4系统硬件设计 选用元器件 8031单片机 8031单片机共有40条引脚,其中有2条专用于主电源的引脚,2条外接晶体的引脚,4条控制或与其它电源复用的引脚,32条输入/输出引脚。
其引脚图如图4-1所示。
图4-18031单片机引脚图 下面按其引脚功能分为四部分叙述这40条引脚的功能。
主电源引脚VCC和VSSVCC——接+5V电压;VSS——接地。
外接晶体引脚XTAL1和XTAL2 XTAL1接外部晶体的一个引脚。
在单片机内部,它是一个反相放大 4 武汉理工大学《计算机控制技术》课程设计说明书 器的输入端,这个放大器构成了片内振荡器。
当采用外部振荡器时,对HMOS单片机,此引脚应接地;对CHMOS单片机,此引脚作为驱动端。
XTAL2接外晶体的另一端。
在单片机内部,接至上述振荡器的反相放大器的输出端。
采用外部振荡器时,对HMOS单片机,该引脚接外部振荡器的信号,即把外部振荡器的信号直接接到内部时钟发生器的输入端;对XHMOS,此引脚应悬浮。
控制或与其它电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/VPP①RST/VPD当振荡器运行时,在此脚上出现两个机器周期的高电平将使单片机复位。
推荐在此引脚与VSS引脚之间连接一个约的下拉电阻,与VCC引脚之间连接一个约10μF的电容,以保证可靠地复位。
VCC掉电期间,此引脚可接上备用电源,以保证内部RAM的数据不丢失。
当VCC主电源下掉到低于规定的电平,而VPD在其规定的电压范围内,VPD就向内部RAM提供备用电源。
②ALE/PROG:
当访问外部存贮器时,ALE的输出用于锁存地址的低位字节。
即使不访问外部存储器,ALE端仍以不变的频率周期性地出现正脉冲信号,此频率为振荡器频率的1/6。
因此,它可用作对外输出的时钟,或用于定时目的。
然而要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。
ALE端可以驱动8个LS型的TTL输入电路。
对于EPROM单片机,在EPROM编程期间,此引脚用于输入编程脉冲。
③PSEN:
此脚的输出是外部程序存储器的读选通信号。
在从外部程序存储器取指令期间,每个机器周期两次PSEN有效。
但在此期间,每当访问外部数据存储器时,这两次有效的PSEN信号将不出现。
PSEN同样可以驱动8个LS型的TTL输入。
④EA/VPP:
当EA端保持高电平时,访问内部程序存储器,但在PC值超过0FFFH或1FFFH时,将自动转向执行外部程序存储器内的程序。
当EA保持低电平时,则只访问外部程序存储器,不管是否有内部程序存储器。
对于常用的8031来说,无内部 5 武汉理工大学《计算机控制技术》课程设计说明书 程序存储器,所以EA脚必须常接地,这样才能只选择外部程序存储器。
对于EPROM型的单片机,在EPROM编程期间,此引脚也用于施加21V的编程电源。
输入/输出引脚P0、P1、P2、P3 ①P0口:
是双向8位三态I/O口,在外接存储器时,与地址总线的低8位及数据总线复用,能以吸收电流的方式驱动8个LS型的TTL负载。
②P1口:
是准双向8位I/O口。
于这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。
P1口能驱动4个LS型的TTL负载。
对8052、8032,引脚的第二功能为T2定时/计数器的外部输入,引脚的第二功能为T2EX捕捉、重装触发,即T2的外部控制端。
对EPROM编程和程序验证时,它接收低8位地址。
③P2口:
是准双向8位I/O口。
在访问外部存储器时,它可以作为扩展电路高8位地址总线送出高8位地址。
在对EPROM编程和程序验证期间,它接收高8位地址。
P2可以驱动4个LS型的TTL负载。
④P3口:
是准双向8位I/O口,在MCS-51中,这8个引脚还用于专门功能,是复用双功能口。
P3能驱动4个LS型的TTL负载。
作为第一功能使用时,就作为普通I/O口用,功能和操作方法与P1口相同。
作为第二功能使用时,各引脚的定义如表4-1所示。
P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。
表4-1P3各口线的第二功能定义 6 武汉理工大学《计算机控制技术》课程设计说明书 口线 引脚1011121314151617第二功能RXDTXDINT0INT1T0T1WRRD8155芯片 8155芯片是为8086系列微机开发出的系列通用可编程I/O接口芯片。
8155不仅可以提供三个并行的I/O端口,在其内部还集成有256个字节的RAM存储空间、一个14位的定时/计数器,因此非常适合与MCS-51单片机连接实现系统功能的扩展。
8155的引脚图如图4-2所示:
图4-28155引脚图 8155各引脚功能说明如下:
7 武汉理工大学《计算机控制技术》课程设计说明书 RST:
复位信号输入端,高电平有效。
复位后,3个I/O口均为输入方式。
AD0~AD7:
三态的地址/数据总线。
与单片机的低8位地址/数据总线相连。
单片机与8155之间的地址、数据、命令与状态信息都是通过这个总线口传送的。
RD:
读选通信号,控制对8155的读操作,低电平有效。
WR:
写选通信号,控制对8155的写操作,低电平有效。
CE:
片选信号线,低电平有效。
IO/M:
8155的RAM存储器或I/O口选择线。
当IO/M=0时,则选择8155的片内RAM,AD0~AD7上地址为8155中RAM单元的地址;当IO/M=1时,选择8155的I/O口,AD0~AD7上的地址为8155I/O口的地址。
ALE:
地址锁存信号。
8155内部设有地址锁存器,在ALE的下降沿将单片机P0口输出的低8位地址信息及,IO/的状态都锁存到8155内部锁存器。
因此,P0口输出的低8位地址信号不需外接锁存器。
PA0~PA7:
8位通用I/O口,其输入、输出的流向可程序控制。
PB0~PB7:
8位通用I/O口,功能同A口。
PC0~PC5:
有两个作用,既可作为通用的I/O口,也可作为PA口和PB口的控制信号线,这些可通过程序控制。
TIMERIN:
定时/计数器脉冲输入端。
TIMEROUT:
定时/计数器输出端。
VCC:
+5V电源。
8155的地址编码及工作方式 在单片机应用系统中,8155是按外部数据存储器统一编址的,为16位地址,其高8位片选线提供,CE=0,选中该片。
当CE=0,IO/M=0时,选中8155片内RAM,这时8155只能作片外RAM使用,其RAM的低8位编址为00H~FFH;当CE=0,IO/M=1时,选中8155的I/O口,其端口地址的低8位AD7~AD0确定,如表4-2所示。
8
武汉理工大学《计算机控制技术》课程设计说明书 这时,A、B、C口的口地址低8位分别为01H、02H、03H。
表4-28155芯片的I/O口地址CE0000000IO/M1111110A7-A3XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXA2A1A0000001010011100101XXX所选端口命令/状态寄存器A口B口C口计数器低8位计数器高8位RAM单元8155的A口、B口可工作于基本I/O方式或选通I/O方式。
C口可工作于基本I/O方式,也可作为A口、B口在选通工作方式时的状态控制信号线。
当C口作为状态控制信号时,其每位线的作用如下:
PC0:
AINTRPC1:
ABFPC2:
ASTBPC3:
BINTRPC4:
BBFPC5:
BSTB8155的I/O工作方式选择是通过对8155内部命令寄存器设定控制字实现的。
命令寄存器只能写入,不能读出,命令寄存器的格式如图4-3所示。
TM2TM1IEBIEAPC2PC1PBPA图4-38155命令寄存器的格式PB、PA:
A、B口工作方式:
0输入;1输出。
PC2、PC1:
C口工作方式:
00ALT1;01ALT2;10ALT3;11ALT4。
9 武汉理工大学《计算机控制技术》课程设计说明书 IEBIEA:
A、B口中断允许位:
0禁止中断;1允许中断。
TM2TM1:
计数器工作方式:
00无操作;01停止计数;10计满后停止;11开始计数。
在ALT1~ALT4的不同方式下,A口、B口及C口的各位工作方式如下:
ALT1:
A口,B口为基本输入/输出,C口为输入方式。
ALT2:
A口,B口为基本输入/输出,C口为输出方式。
ALT3:
A口为选通输入/输出,B口为基本输入/输出。
PC0为AINTR,PC1为ABF,PC2为,PC3~PC5为输出。
ALT4:
A口、B口为选通输入/输出。
PC0为AINTR,PC1为ABF,PC2为,PC3为BINTR,PC4为BBF,PC5为。
8155内还有一个状态寄存器,用于锁存输入/输出口和定时/计数器的当前状态,供CPU查询用。
状态寄存器的端口地址与命令寄存器相同,低8位也是00H,状态寄存器的内容只能读出不能写入。
所以可以认为8155的I/O口地址00H是命令/状态寄存器,对其写入时作为命令寄存器;而对其读出时,则作为状态寄存器。
硬件电路 矩阵式键盘电路 矩阵式键盘将按键设置在行列线的交叉点上,行列线分别连接到按键的两端。
行线通过上拉电阻接至+5V电压,即行线的输出被钳位到高电平状态;判断有无按键按下时通过列线送出扫描信号,然后行线读取状态得到。
其方法是依次给列线送低电平,检查行线的输入。
若行线为高电平,则代表所在行无按键被按下,如果行线出现低电平,则低电平所在的行和出现低电平的列的交叉点处有按键按下。
矩阵式键盘电路如图4-4所示。
10 武汉理工大学《计算机控制技术》课程设计说明书 图4-4矩阵式键盘电路 时钟电路和复位电路 时钟振荡器是单片机工作节奏的原始动力,单片机的所有工作时序都是靠时钟振荡信号来控制的,没有时钟振荡,单片机就无法工作。
8031的内部时钟电路实际上仅是一个可以构成振荡器的电路。
使用时还要外接元件才能变成振荡器。
外部连接的晶振电路如图4-5所示。
11 武汉理工大学《计算机控制技术》课程设计说明书 图4-5晶振电路 复位的目的是对单片机的片内电路重新进行初始化,使有关部件都恢复到原先规定的初始工作状态。
8031的外接复位电路如图4-6所示。
图4-6复位电路 非编码键盘的总电路 图4-7为总电路图。
总电路是用8031单片机控制,通过8155扩展I/O口组 12 武汉理工大学《计算机控制技术》课程设计说明书 成的6×6行列式键盘电路。
其中8031的P0口与8155的AD0~AD7相连,传递地址、数据、命令与状态信息。
PA0~PA5作为列线输出,PC0~PC5作为行线输入。
PC0~PC5通过上拉电阻接到+5V上,而当有按键按下时,行线电平状态与此行线相连的列线电平决定。
列线电平如果为低,则行线电平为低;列线电平如果为高,则行线电平亦为高。
进行扫描时,先令PA0~PA5均输出0,确定有没有键被按下,若有键被按下,则令PA0~PA5逐个输出为0,其它输出为1,然后读入PC口的数据,看哪一行为零电平,则此行与此列的交叉处的键被按下。
图4-7非编码键盘总电路图 5系统软件设计 软件思想 编程的依据是键盘扫描的原理。
在程序里,先将PA口置零输出,然后读取PC口的值,看PC口有没有为低电平的位,如果有,则表示有按键按下,接下来将PA0~PA5逐位置零,读取PC口的值,看哪一位为零,则改行与该列交点处的按键被按下,计算键值入栈保存。
13
武汉理工大学《计算机控制技术》课程设计说明书 本次选择使用编程扫描的方法,所以在一开始的时候就要通过初始化程序定义8155PA、PB、PC口的工作方式。
本次选用软件方法去抖动,所以要编写去抖动延时程序。
程序流程图 程序流程图如图5-1所示。
图5-1键盘扫描流程图 开始否有键闭合?
是调用去抖动延时子程序否有键闭合?
是计算键值并入栈保护否闭合键释放?
是键号A,出栈返回14 武汉理工大学《计算机控制技术》课程设计说明书 源程序 ORG0000HAJMPMAINORG0100HMAIN:
NOP;8155控制字 KD1:
MOVDPTR,#7F00H ;PA,PBMOVA,#03HMOVX@DPTR,A LCALLKEY1 ;KEY1:
ACALLKS1 ;JNZ LK1 ; AJMPKEY1 ;LK1:
ACALLDELA12 ;12msACALLKS1 ;JNZ LK2 ; AJMPKEY1 ;LK2:
MOVR2,#0FEH ;R2=11111110B MOV R4,#00H LK4:
MOVDPTR,#7F01HMOVA,R2MOVX@DPTR,A INCDPTR ;INCDPTRMOVX A,@DPTR JB,LONE ; 口为输出,PC口为输入调用扫描子程序有无键按下子程序有键按下,转去抖延时程序 无键按下,继续扫描 延时程序调用判断键是否真正按下有键按下,转逐列扫描 无键按下,继续扫描 存放键值 使PA0=0 指向PC口 读入行状态 第0行无键按下,转LONE 15 ;R4 ; ;武汉理工大学《计算机控制技术》课程设计说明书 MOVA,#00H ;有键按下,设置行首键号AJMP LKP ;转求键号 ;第1行无键按下,转LTWO LONE:
JB,LTWO MOV A,#06H ;有键按下,设置行首键号 AJMPLKP ;转求键号 LTWO:
JB,LTHRMOV A,#0CH ; AJMPLKP LTHR:
JB,LFOR MOVA,#012H LFOR:
JB,LFIV MOVA,#18HLFIV:
JB,NEXT MOVA,#1EH LKP:
ADDACC,R4 ; PUSHACC ;LK3:
ACALLKS1 ;JNZLK3 ;POP ACC ; AJMPOVER ;NEXT:
INCR4 ;MOV A,R2 ;JNB,KND RLA ;MOVR2,A ; AJMPLK4 ;LTHR:
JB,NEXT MOVA,#18H ;LKP:
ADDA,R4 ; ;第2行无键按下,转LTHR 有键按下,设置行首键?
;转求键号 ;第3行无键按下,查下一列 ;有键按下,设置行首键 求键号,键号=行首键号+列号保护键号 等待键释放键未释放,继续等待键释放,键号送A 键扫描结束 列号加1,指向下一列 判断8列扫描完否 ;8列扫描完,继续 扫描字左移一位送扫描字转下一列扫描 ;第3行无键按下,查下一列 有键按下,设置行首键 求键号,键号=行首键号+列号 16 武汉理工大学《计算机控制技术》课程设计说明书 PUSHACC ;保护键号 LK3:
ACALLKS1 ;等待键释放 JNZLK3 ;键未释放,继续等待POPACC ;键释放,键号送AAJMP OVER ;键扫描结束 NEXT:
INCR4 ;列号加1,指向下一列 MOVA,R2JNB,KND ;8列扫描完,继续 RLA ;字左移一位MOVR2,A ;送扫描字AJMPLK4 ;下一列扫描 KND:
AJMPKEY1 OVER:
RET ;扫描结束KS1:
MOVDPTR,#7F01H ;向PA口 MOVA,#00H ;扫描字MOVX @DPTR,A ;描字送PA口 INCDPTRINCDPTRMOVX ;向PC口 A,@DPTR ;入PC口状态 CPL ;高电平表示有键按下ANLA,#0FH ;蔽高4位RET ;晶振为6MHz时的12ms延时子程序DELL:
MOVR7,#12DEL:
MOVR6,#250NN:
DJNZR6,NN DJNZR7,DELRET 17 武汉理工大学《计算机控制技术》课程设计说明书 END 6调试记录及结果分析 程序调试,是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。
这是保证计算机信息系统正确性的必不可少的步骤。
编完计算机程序,必须送入计算机中测试。
在调试过程中,会发现程序中的错误,例如分号不是在英文输入状态下输入的,为使程序正常运行,要对这些错误进行改正。
编写的程序能够完成按键识别和去抖动的功能。
18
武汉理工大学《计算机控制技术》课程设计说明书 心得体会 通过这次课程设计,我对计算机控制技术这门课程的知识有了更深的理解。
这次的课设是关于键盘扫描的,这方面的知识在课堂上涉及得很少,所以需要去查阅很多资料,这在无形中提高我查阅资料和自学的能力。
这次画电路图用的是proteus,通过电路图的绘制,我初步掌握了proteus的使用方法。
通过编程,进一步了解了单片机的指令。
这次课程设计,我首先去学习一些初级原理。
例如为什么按键会产生抖动、去抖动有哪些方法、键盘扫描的原理是什么,有哪几种方式以及它们的区别。
理解后,通过比较,选择了编程扫描法和编程去抖动法。
然后,我进一步学习了8031单片机和8155芯片的工作原理以及引脚的功能,然后用proteus绘制出了电路图。
最后,我通过一些例子弄懂了如何编程来控制键盘扫描的过程。
自己绘制了流程图,编写出了源程序,经过修改,最后的到正确的源程序。
在课程设计的过程中,我认识到了理论与实践结合的重要性。
感觉在理论上已经理解的知识,当应用到实践中去的时候,还是会出现各种各样的问题,通过学习解决了之后才是对知识真正的掌握。
我们应该把学到的知识应用到实践中去,这样才能不断加深理解,使各方面的知识融会贯通。
这次我做的设计达到了任务书上的要求,但仍然有美中不足的地方,在以后的学习中我将进一步提高和完善自己。
19 武汉理工大学《计算机控制技术》课程设计说明书
武汉理工大学《计算机控制技术》课程设计说明书 LFIV:
JB,NEXT MOVA,#
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编码 键盘 扫描 程序设计