第8章 键盘

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《嵌入式技术基础与实践》第8章键盘主要内容:•键盘基本问题与GP32的键盘中断口•汇编语言键盘中断模块编程实例•08C语言键盘中断模块编程实例《嵌入式技术基础与实践》8.1键盘基本问题•8.1.1键盘模型及接口键盘模型:键盘的基本电路是一个接触开关,通、断两种状态分别表示0和1,微处理器可以容易的检测到开关的闭合。当开关打开时,提供逻辑“1”;当开关闭合时,提供逻辑“0”。《嵌入式技术基础与实践》•main:•LDHX#__SEG_END_SSTACK;•TXS•CLI;enableinterrupts•mainLoop:•;Insertyourcodehere•NOP•mov#%11111101,PTBDD•loop:•brclr1,PTBD,light•bclr0,PTBD•braloop•light:bset0,PTBD•braloop《嵌入式技术基础与实践》•键盘接口键盘接口按照不同的标准有不同的分类方法。按键盘排布的方式:分成独立方式和矩阵方式;按读入键值的方式:分为直读方式和扫描方式;按是否进行硬件编码:分成非编码方式和硬件编码方式;按微处理器响应方式:分为中断方式和查询方式。《嵌入式技术基础与实践》•以下介绍较为常用的两种方式独立方式:独立方式是指将每个独立按键按一对一的方式直接接到I/O输入线上。读键值时直接读I/O口,每一个键的状态通过读入键值来反映,所以也称这种方式为一维直读方式,按习惯称为独立式。这种方式查键实现简单,但占用I/O资源较多,一般在键的数量较少时采用。《嵌入式技术基础与实践》•矩阵方式:矩阵方式是用n条I/O线组成行输入口,m条I/O线组成列输出口,在行列线的每一个交点上设置一个按键,如图11-3所示。读键值方法一般采用扫描方式,即输出口按位轮换输出低电平,再从输入口读入键信息,最后获得键码。这种方式占用I/O线较少,在实际应用系统中采用较多。《嵌入式技术基础与实践》独立键盘和矩阵键盘如图所示:行线列线独立键盘矩阵键盘GND+5V+5V《嵌入式技术基础与实践》8.1.2键盘的基本问题为了能实现对键盘的编程至少应该了解下面几个问题:一、如何识别键盘上的按键二、如何区分按键是被真正地按下,还是抖动三、如何处理重键问题《嵌入式技术基础与实践》一、键的识别如何知道键盘上哪个键被按下就是键的识别问题。若键盘上闭合键的识别由专用硬件实现,称为编码键盘;而靠软件实现的称为未编码键盘。在这里我们主要讨论未编码键盘的接口技术和键盘输入程序的设计。识别是否有键被按下,主要有查询法、定时扫描法与中断法等。而要识别键盘上哪个键被按下主要有行扫描法与行反转法。《嵌入式技术基础与实践》二、抖动问题当手按下一个键时,会出现所按的键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况,当释放一个按键时也会出现类似的情况,这就是抖动问题。抖动持续的时间因操作者而异,一般为5~10ms之间,稳定闭合时间一般为十分之几秒~几秒,由操作者的按键动作所确定。在软件上,解决抖动的方法通常是延迟等待抖动的消失或多次识别判定。《嵌入式技术基础与实践》三、重键问题所谓重键问题就是有两个及两个以上按键同时处于闭合状态的处理问题。在软件上,处理重键问题通常有连锁法与巡回法。《嵌入式技术基础与实践》4×4键盘的结构5k×4列线n1n2n3n4行线m1m2m3m4+5V《嵌入式技术基础与实践》8.1.3MC908GP32单片机的键盘中断模块MC908GP32单片机的A口的8根引脚与键盘中断模块(KeyboardInterruptModule—KBI)的引脚复用,作为KBI引脚时,下面把8个引脚分别称为KBIE7pin—KBIE0pin。《嵌入式技术基础与实践》键盘中断模块结构框图《嵌入式技术基础与实践》(1)键盘状态和控制寄存器(KeyboardStatusandControlRegister,INTKBSCR)数据位D7D6D5D4D3D2D1D0定义KEYFACKKIMASKKMODEK复位00000000《嵌入式技术基础与实践》•(2)键盘中断允许寄存器(KeyboardInterruptEnableRegister,INTBIER)•(3)键盘中断编程相关问题数据位D7D6D5D4D3D2D1D0定义KBIE7KBIE6KBIE5KBIE4KBIE3KBIE2KBIE1KBIE0复位00000000《嵌入式技术基础与实践》8.2汇编语言键盘中断模块编程实例VDDMCU内部上拉电阻PTA0PTA1PTA2PTA3PTA7PTA6PTA5PTA4列线n1n2n3n4行线m1m2m3m4123A456B789C*0#D4×4键盘与单片机接法示例《嵌入式技术基础与实践》8.2.1按键识别与键盘定义子程序1EE2DE3BEA7E4ED5DD6BDB7D7EB8DB9BBC7B*E70D7#B7D77定义值键值(1)键值计算方法按上图的接法可以得出键值表,如下图。键值可以通过扫描法获得,由键值通过查表法编程得到定义值。(2)键盘编程汇编语言子程序《嵌入式技术基础与实践》8.2.2键盘中断编程举例下面给出的实例程序的功能是,当按下键盘上任何一个键,产生键盘中断,在键盘中断程序中,通过串行口发送“键值”及“键定义值”。PC机用7.5.3节介绍的串口调试器,接收并显示。键盘中断汇编工程文件组织如表8-1所示。表8-1键盘中断汇编工程文件工程文件名KeyBoard_Int.prj所在路径MC08Ex2007\GP32\GP32S\S04_键盘中断编程文件类型文件名功能简述讲解章节头文件GP32ASM.h芯片头文件[汇编工程文件组织]4.3Includes.h总头文件[汇编工程文件组织]4.3KB.h键盘子程序定义头文件[本章]SCI.h串行通信头文件[参见本工程实例]汇编语言子程序文件MCUinit.s芯片初始化文件[初始化及PLL编程实例]14.2.5EnDisInt.s开放或禁止MCU各模块[参见本工程实例]Vectors08.s中断处理子程序与中断向量表文件[本章]SCI.s串行通信文件[参见本工程实例]KB.s键盘子程序定义文件[本章]汇编语言主程序文件Main.s主程序文件[本章]《嵌入式技术基础与实践》(1)键盘中断编程汇编主程序//--------------------------------------------------------------------------------------------*//工程名:KeyBoard_Int.prj*//硬件连接:*//(1)MCU的A口接键盘(见“KB.s“文件中的说明)*//程序描述:按下键盘按键,串口发送对应的键值*//目的:键盘中断,键盘扫描,键值识别,键值转换*//注意:如果键盘插在实验板的上排插孔,无须连线,若插在*//下排插孔,需手工接线*//日期:2007.07*//--------清华2007版《嵌入式技术基础与实践》实例-------------------------*//头文件.includeIncludes.h//总头文件//主程序.areaflash(abs).orgFlashStartAddr《嵌入式技术基础与实践》键盘中断编程汇编主程序MainInit:://复位后从此处执行(见Vectors08.s文件末尾处)SEI//关总中断//1.堆栈初始化为RAM最高端LDHX#RAMendAddr+1//HX=#RAMendAddr+1TXS//HX-1-SP//2.系统初始化JSRMCUinit//初学时跳过此处//3.串行口初始化JSRSCIinit//4.键盘初始化JSRKBinitJSREnableKBint//开放键盘中断CLI//开总中断《嵌入式技术基础与实践》//程序总循环入口MainLoop:NOPNOPBRAMainLoop//包含本工程的其他文件-----------------------------------.includeMCUinit.s//芯片初始化.includeSCI.s//串行通信.includeKB.s//键盘子程序.includeEnDisInt.s//允许/禁止MCU各模块中断//包含中断处理子程序与中断向量表文件Vectors08.s--------//注意:这个包含语句的存放位置必须放在最后.includeVectors08.s//中断处理子程序与中断向量表《嵌入式技术基础与实践》(2)键盘中断处理程序//[Vectors08.s]中断处理子程序与中断向量表---------*//功能:*//(1)定义中断处理子程序*//(2)放置中断向量表*//本文件包含:*//(1)键盘中断处理函数*//(2)未定义的中断处理函数*//说明:该文件与芯片具体型号有关*//(1)芯片型号MC68HC908GP32*//(2)注意本文件内容的顺序不能变动*//------------------------------------------------*//isrKeyBoard:键盘中断处理程序--------------------*//功能:识别按键并发送键值,把键值转换成对应的*定义值,再从*//串口发送出去*//调用子程序:*//(1)扫描法读取键值子程序(KBScan)*//(2)键值转为定义值子程序(KBDef)*//------------------------------------------------*《嵌入式技术基础与实践》isrKeyBoard::SEI//关总中断PSHH//[H进栈](保护寄存器H)BSET#1,INTKBSCR//禁止键盘中断JSRKBScan//扫描键盘,读取键值-AJSRSCISend1//发送键值JSRKBDef//转成相应的定义值-AJSRSCISend1//发送定义值JSRKBInit//键盘初始化BCLR#1,INTKBSCR//开放键盘中断(IMASKK=0)PULH//[H出栈](恢复寄存器H)CLI//开总中断RTI//未定义的中断处理子程序,本子程序不能删除《嵌入式技术基础与实践》isrDummy::RTI//中断矢量表,用户若需开放某中断,可修改下表中的相应项目//(interruptserviceroutine,isr中断处理程序).areamemory(abs).org0xffdc//中断向量表起始地址(注意:与芯片型号有关)vectab:://…………省略其他未使用的中断向量定义.wordisrKeyBoard//键盘中断//…………省略其他未使用的中断向量定义(3)键盘中断编程的PC机方程序利用串口调试工具,接收按键后的键值,通过它可以清楚地知道定义值与键值的对应关系,若显示不对,可以修改键值转为定义值子程序中的键值表。《嵌入式技术基础与实践》8.308C语言键盘中断模块编程实例本节给出与汇编程序相对应的08C语言程序,键盘中断08C工程文件组织如表8-2所示。表8-2键盘中断08C工程文件工程文件名KeyBoard_Int.prj所在路径MC08Ex2007\GP32\GP32C\C04_键盘中断编程文件类型文件名功能简述讲解章节头文件GP32C.hGP32MCU映像寄存名定义头文件[08C工程文件组织]5.3EnDisInt.h开放或禁止MCU各模块中断头文件[08C工程文件组织]5.3Type.h类型别名定义头文件[用typedef定义类型]5.2.10[08C工程文件组织]5.3Includes.h总头文件[08C工程文件组织]5.3KB.h键盘函数定义头文件[本章]SCI.h串行通信头文件[串行通信子函数]7.4.1C语言子函数文件MCUInit.c芯片初始化文件[初始化及PLL编程实例]14.2.5SCI.c串行通信文件[串行通信子函数]7.4.1KB.c键盘驱动文件[本章]Vectors08.c中断处理函数与中断向量表文件[08C工程文件组织]5.3C语言主函数Main.c主函数文件[本章]《嵌入式技术基础与实

1 / 38
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功