第8章-嵌入式键盘课件

上传人:沈*** 文档编号:241661333 上传时间:2024-07-14 格式:PPT 页数:37 大小:622KB
返回 下载 相关 举报
第8章-嵌入式键盘课件_第1页
第1页 / 共37页
第8章-嵌入式键盘课件_第2页
第2页 / 共37页
第8章-嵌入式键盘课件_第3页
第3页 / 共37页
点击查看更多>>
资源描述
嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践第8章 键盘主要内容:键盘基本问题与GP32的键盘中断口 汇编语言键盘中断模块编程实例 08C语言键盘中断模块编程实例 嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践8.1 键盘基本问题8.1.1 键盘模型及接口 键盘模型:键盘的基本电路是一个接触开关,通、断两种状态分别表示0和1,微处理器可以容易的检测到开关的闭合。当开关打开时,提供逻辑“1”;当开关闭合时,提供逻辑“0”。嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践键盘接口 键盘接口按照不同的标准有不同的分类方法。键盘接口按照不同的标准有不同的分类方法。按键盘排布的方式:分成独立方式和矩阵方式;按键盘排布的方式:分成独立方式和矩阵方式;按读入键值的方式:分为直读方式和扫描方式;按读入键值的方式:分为直读方式和扫描方式;按是否进行硬件编码:分成非编码方式和硬件编按是否进行硬件编码:分成非编码方式和硬件编码方式;码方式;按微处理器响应方式:分为中断方式和查询方式。按微处理器响应方式:分为中断方式和查询方式。嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践以下介绍较为常用的两种方式以下介绍较为常用的两种方式 独立方式:独立方式:独立方式是指将每个独立按键按一对一的方式直独立方式是指将每个独立按键按一对一的方式直接接到接接到I/OI/O输入线上。读键值时直接读输入线上。读键值时直接读I/OI/O口,每口,每一个键的状态通过读入键值来反映,所以也称这一个键的状态通过读入键值来反映,所以也称这种方式为一维直读方式,按习惯称为独立式。这种方式为一维直读方式,按习惯称为独立式。这种方式查键实现简单,但占用种方式查键实现简单,但占用I/OI/O资源较多,一般资源较多,一般在键的数量较少时采用在键的数量较少时采用 。嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践矩阵方式:矩阵方式是用n条I/O线组成行输入口,m条I/O线组成列输出口,在行列线的每一个交点上设置一个按键,如图11-3所示。读键值方法一般采用扫描方式,即输出口按位轮换输出低电平,再从输入口读入键信息,最后获得键码。这种方式占用I/O线较少,在实际应用系统中采用较多。嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践独立键盘和矩阵键盘如图所示:行线列线独立键盘矩阵键盘GND5V5V嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践8.1.2 键盘的基本问题 为了能实现对键盘的编程至少应该了解下面几个问题:一、如何识别键盘上的按键 二、如何区分按键是被真正地按下,还是抖动 三、如何处理重键问题 嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践一、键的识别 如何知道键盘上哪个键被按下就是键的识别问题。若键盘上闭合键的识别由专用硬件实现,称为编码键盘;而靠软件实现的称为未编码键盘。在这里我们主要讨论未编码键盘的接口技术和键盘输入程序的设计。识别是否有键被按下,主要有查询法、定时扫描法与中断法等。而要识别键盘上哪个键被按下主要有行扫描法与行反转法。嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践二、抖动问题 当手按下一个键时,会出现所按的键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况,当释放一个按键时也会出现类似的情况,这就是抖动问题。抖动持续的时间因操作者而异,一般为510ms之间,稳定闭合时间一般为十分之几秒几秒,由操作者的按键动作所确定。在软件上,解决抖动的方法通常是延迟等待抖动的消失或多次识别判定。嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践三、重键问题 所谓重键问题就是有两个及两个以上按键同时处于闭合状态的处理问题。在软件上,处理重键问题通常有连锁法与巡回法。嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践44键盘的结构 5k4 列线 n1 n2 n3 n4行线m1m2m3m4+5V嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践 8.1.3 MC908GP32单片机的键盘中断模块 MC908GP32单片机的A口的8根引脚与键盘中断模块(Keyboard Interrupt Module KBI)的引脚复用,作为KBI引脚时,下面把8个引脚分别称为KBIE7 pinKBIE0 pin。嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践(1)键盘状态和控制寄存器(Keyboard Status and Control Register,INTKBSCR)数据位数据位 D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0定义定义KEYFKEYFACKKACKK IMASIMASKKKKMODEKMODEK复位复位0 00 00 00 00 00 00 00 0嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践(2)键盘中断允许寄存器(Keyboard Interrupt Enable Register,INTBIER)(3)键盘中断编程相关问题数据位数据位D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0定义定义KBIE7KBIE7 KBIE6KBIE6 KBIE5KBIE5 KBIE4KBIE4 KBIE3KBIE3 KBIE2KBIE2 KBIE1KBIE1 KBIE0KBIE0 复位复位0 00 00 00 00 00 00 00 0嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践 8.2 汇编语言键盘中断模块编程实例VDD MCU内部上拉电阻PTA0PTA1PTA2PTA3PTA7PTA6PTA5PTA4 列线 n1 n2 n3 n4行线m1 m2m3m4 1 2 3 A 4 5 6 B 7 8 9 C *0#D4444键盘与单片机接法示例键盘与单片机接法示例键盘与单片机接法示例键盘与单片机接法示例 嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践 8.2.1 按键识别与键盘定义子程序按键识别与键盘定义子程序 1 EE 2 DE 3 BE A 7E 4 ED 5 DD 6 BD B 7D 7 EB 8 DB 9 BB C 7B*E7 0 D7#B7 D 77定义值键值(1)键值计算方法)键值计算方法按上图的接法可以得出键值表,按上图的接法可以得出键值表,如下图。键值可以通过扫描法如下图。键值可以通过扫描法获得,由键值通过查表法编程获得,由键值通过查表法编程得到定义值。得到定义值。(2)键盘编程汇编语言子程序)键盘编程汇编语言子程序嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践 8.2.2 键盘中断编程举例键盘中断编程举例 下面给出的实例程序的功能是,当按下键盘上任何一个键,产生键盘中断,下面给出的实例程序的功能是,当按下键盘上任何一个键,产生键盘中断,下面给出的实例程序的功能是,当按下键盘上任何一个键,产生键盘中断,下面给出的实例程序的功能是,当按下键盘上任何一个键,产生键盘中断,在键盘中断程序中,通过串行口发送在键盘中断程序中,通过串行口发送在键盘中断程序中,通过串行口发送在键盘中断程序中,通过串行口发送“键值键值键值键值”及及及及“键定义值键定义值键定义值键定义值”。PCPC机用机用机用机用7.5.37.5.3节介节介节介节介绍的串口调试器,接收并显示。键盘中断汇编工程文件组织如表绍的串口调试器,接收并显示。键盘中断汇编工程文件组织如表绍的串口调试器,接收并显示。键盘中断汇编工程文件组织如表绍的串口调试器,接收并显示。键盘中断汇编工程文件组织如表8-18-1所示。所示。所示。所示。表表8-1 键盘中断汇编工程文件键盘中断汇编工程文件工程文件名工程文件名KeyBoard_Int.prj所在路径所在路径MC08Ex2007GP32GP32SS04_键盘中断编程键盘中断编程文件类型文件类型文件名文件名功能简述功能简述讲解章节讲解章节头文件头文件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)(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/Vectors08.s中断处理子程序与中断向量表中断处理子程序与中断向量表-*-*/功能功能:*:*/(1)/(1)定义中断处理子程序定义中断处理子程序 */(2)/(2)放置中断向量表放置中断向量表 */本文件包含本文件包含:*:*/(1)/(1)键盘中断处理函数键盘中断处理函数 */(2)/(2)未定义的中断处理函数未定义的中断处理函数 */说明说明:该文件与芯片具体型号有关该文件与芯片具体型号有关 */(1)/(1)芯片型号芯片型号MC68HC908GP32 *MC68HC908GP32 */(2)/(2)注意本文件内容的顺序不能变动注意本文件内容的顺序不能变动 */-*/-*/isrKeyBoard:/isrKeyBoard:键盘中断处理程序键盘中断处理程序-*-*/功能功能:识别按键并发送键值识别按键并发送键值,把键值转换成对应的把键值转换成对应的 *定义值定义值,再从再从 */串口发送出去串口发送出去 */调用子程序调用子程序:*:*/(1)/(1)扫描法读取键值子程序扫描法读取键值子程序(KBScan)*(KBScan)*/(2)/(2)键值转为定义值子程序键值转为定义值子程序(KBDef)*(KBDef)*/-*/-*嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践isrKeyBoard:isrKeyBoard:SEI /SEI /关总中断关总中断 PSHH /H PSHH /H进栈进栈(保护寄存器保护寄存器H)H)BSET#1,INTKBSCR /BSET#1,INTKBSCR /禁止键盘中断禁止键盘中断 JSR KBScan /JSR KBScan /扫描键盘扫描键盘,读取键值读取键值-A-A JSR SCISend1 /JSR SCISend1 /发送键值发送键值 JSR KBDef /JSR KBDef /转成相应的定义值转成相应的定义值-A-A JSR SCISend1 /JSR SCISend1 /发送定义值发送定义值 JSR KBInit /JSR KBInit /键盘初始化键盘初始化 BCLR#1,INTKBSCR /BCLR#1,INTKBSCR /开放键盘中断开放键盘中断(IMASKK=0)(IMASKK=0)PULH /H PULH /H出栈出栈(恢复寄存器恢复寄存器H)H)CLI /CLI /开总中断开总中断 RTI RTI/未定义的中断处理子程序未定义的中断处理子程序,本子程序不能删除本子程序不能删除嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践isrDummy:isrDummy:RTI RTI/中断矢量表中断矢量表,用户若需开放某中断用户若需开放某中断,可修改下表中的相应项目可修改下表中的相应项目/(interrupt service routine,isr/(interrupt service routine,isr 中断处理程序中断处理程序).area memory(abs).area memory(abs).org 0 xffdc /.org 0 xffdc /中断向量表起始地址中断向量表起始地址(注意注意:与芯片型号有关与芯片型号有关)vectab:vectab:/省略其他未使用的中断向量定义省略其他未使用的中断向量定义 .word isrKeyBoard/.word isrKeyBoard/键盘中断键盘中断/省略其他未使用的中断向量定义省略其他未使用的中断向量定义 (3)键盘中断编程的键盘中断编程的PC机方程序机方程序利利用用串串口口调调试试工工具具,接接收收按按键键后后的的键键值值,通通过过它它可可以以清清楚楚地地知知道道定定义义值值与与键键值值的的对对应应关关系系,若若显显示示不不对对,可可以以修修改改键键值值转转为为定定义义值值子子程程序序中的键值表。中的键值表。嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践8.3 08C语言键盘中断模块编程实例本本本本节节节节给给给给出出出出与与与与汇汇汇汇编编编编程程程程序序序序相相相相对对对对应应应应的的的的08C08C语语语语言言言言程程程程序序序序,键键键键盘盘盘盘中中中中断断断断08C08C工工工工程程程程文文文文件件件件组组组组织织织织如表如表如表如表8-28-2所示。所示。所示。所示。表表8-2 键盘中断键盘中断08C工程文件工程文件工程文件名工程文件名KeyBoard_Int.prj所在路径所在路径MC08Ex2007GP32GP32CC04_键盘中断编程键盘中断编程文件类型文件类型文件名文件名功能简述功能简述讲解章节讲解章节头文件头文件GP32C.hGP32 MCU映像寄存映像寄存名定义头文件名定义头文件08C工程文件组织工程文件组织5.3EnDisInt.h开放或禁止开放或禁止MCU各模块中断各模块中断头文件头文件08C工程文件组织工程文件组织5.3Type.h类型别名定义头文件类型别名定义头文件用用typedef定义类型定义类型5.2.1008C工程文件组织工程文件组织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主函数文件主函数文件本章本章嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践8.3.1 按键识别与键盘定义函数(1)(1)键盘函数定义头文件键盘函数定义头文件/KB.h/KB.h键键盘盘函函数数定定义义头头文文件件-#include GP32C.h /MCU#include GP32C.h /MCU映像寄存器名定义映像寄存器名定义#include EnDisInt.h /#include EnDisInt.h /开放或禁止开放或禁止MCUMCU各模块中断的宏定义各模块中断的宏定义#include Type.h /#include Type.h /类型别名定义类型别名定义/键盘控制引脚定义键盘控制引脚定义#define KB_P PTA /#define KB_P PTA /键盘接在键盘接在PTAPTA口上口上#define KB_D DDRA /#define KB_D DDRA /相应的方向寄存器相应的方向寄存器#define KB_PUE PTAPUE /#define KB_PUE PTAPUE /相应的上拉电阻允许寄存器相应的上拉电阻允许寄存器#define ACKKBit 2 /#define ACKKBit 2 /键盘中断应答位键盘中断应答位/函数声明函数声明void KBInit(void);/void KBInit(void);/键盘初始化键盘初始化INT8U KBScan(void);/INT8U KBScan(void);/扫描读取键值扫描读取键值INT8U KBDef(INT8U valve);/INT8U KBDef(INT8U valve);/键值转为定义值键值转为定义值嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践(2)(2)键盘函数定义键盘函数定义/KB.c/KB.c键盘函数定义键盘函数定义-*-*/本文件包含本文件包含:*:*/(1)KBInit:/(1)KBInit:初始化键盘控制及中断的相关寄存器初始化键盘控制及中断的相关寄存器 */(2)KBScan:/(2)KBScan:扫描扫描4*44*4键盘键盘,读取键值读取键值-A *-A */(3)KBDef:/(3)KBDef:键值转为定义值键值转为定义值 */硬件连接硬件连接:*:*/PTA7-4/PTA7-4接键盘接键盘4 4根列线根列线,PTA3-0,PTA3-0接键盘接键盘4 4根行线根行线 */-*/-*#include KB.h /#include KB.h /该头文件包含键盘控制引脚定义及该头文件包含键盘控制引脚定义及KB.cKB.c用到的相关头文件用到的相关头文件/KBInit:/KBInit:键盘初始化函数键盘初始化函数-*-*/功能功能:初始化键盘控制及中断的相关寄存器初始化键盘控制及中断的相关寄存器,但未开放键盘中断但未开放键盘中断 */参数参数:无无 */返回返回:无无 */-*/-*void KBInit(void)void KBInit(void)/复位相应寄存器复位相应寄存器 KB_P =0 x00;KB_P =0 x00;KB_D =0b00001111;/KB_D =0b00001111;/使列线使列线(7-4(7-4位位)为输入为输入,使行线使行线(3-0(3-0位位)为输出为输出 KB_PUE=0b11110000;/KB_PUE=0b11110000;/输入引脚输入引脚(列线列线)有内部上拉电阻有内部上拉电阻 DisableKBInt();/DisableKBInt();/屏蔽键盘中断屏蔽键盘中断(IMASKK=1)(IMASKK=1)INTKBIER =0b11110000;/INTKBIER =0b11110000;/允许输入引脚的中断可进入允许输入引脚的中断可进入 INTKBSCR|=(1 ACKKBit);/INTKBSCR|=(1 ACKKBit);/清除键盘中断请求清除键盘中断请求(ACKK=1)(ACKK=1)嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践/KBScan:/KBScan:扫描读取键值函数扫描读取键值函数-*-*/功能功能:扫描扫描4*44*4键盘键盘,返回扫描到的键值返回扫描到的键值,若无按键若无按键,返回返回0 xff *0 xff */参数参数:无无 */返回返回:扫描到的键值扫描到的键值 */-*/-*INT8U KBScan(void)INT8U KBScan(void)INT8U line,i,tmp;INT8U line,i,tmp;line=0b11111110;/line=0b11111110;/使第一根行线为使第一根行线为0(0(低电平低电平)for(i=1;i=4;i+)/for(i=1;i=4;i+)/最多将扫描最多将扫描4 4根行线根行线 /当前扫描的一行当前扫描的一行,输出低电平输出低电平 tmp =KB_P;tmp =KB_P;tmp|=0b00001111;tmp|=0b00001111;KB_P=tmp&line;KB_P=tmp&line;asm(NOP);asm(NOP);嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践asm(NOP);asm(NOP);/读取键盘口数据寄存器读取键盘口数据寄存器 tmp =KB_P;tmp =KB_P;/通过观察通过观察4 4根列线中是否出现低电平来判断当前行有无按键根列线中是否出现低电平来判断当前行有无按键 tmp&=0b11110000;/tmp&=0b11110000;/仅保留列线的值仅保留列线的值 if(tmp!=0 xf0)/if(tmp!=0 xf0)/当前行有键按下当前行有键按下 tmp=KB_P;/tmp=KB_P;/读取扫描到的键值读取扫描到的键值 break;/break;/退出循环不再扫描退出循环不再扫描 else /else /当前行无按键当前行无按键,准备扫描下一行准备扫描下一行 line=(line 1)|0 x01;line=(line 1)|0 x01;if(i=5)/if(i=5)/无按键无按键,以后将返回以后将返回0 xff0 xff tmp=0 xff;tmp=0 xff;return(tmp);return(tmp);嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践/KBDef:/KBDef:键值转为定义值函数键值转为定义值函数-*-*/功能功能:键值转为定义值键值转为定义值 */参数参数:键值键值 */返回返回:键定义值键定义值 */-*/-*/键盘定义表键盘定义表const INT8U KBTable=const INT8U KBTable=0 xEE,1,0 xDE,2,0 xBE,3,0 x7E,A,0 xEE,1,0 xDE,2,0 xBE,3,0 x7E,A,0 xED,4,0 xDD,5,0 xBD,6,0 x7D,B,0 xED,4,0 xDD,5,0 xBD,6,0 x7D,B,0 xEB,7,0 xDB,8,0 xBB,9,0 x7B,C,0 xEB,7,0 xDB,8,0 xBB,9,0 x7B,C,0 xE7,*,0 xD7,0,0 xB7,#,0 x77,D,0 xE7,*,0 xD7,0,0 xB7,#,0 x77,D,0 x00 0 x00;嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践INT8U KBDef(INT8U valve)INT8U KBDef(INT8U valve)INT8U KeyPress;/INT8U KeyPress;/键定义值键定义值 INT8U i;INT8U i;i=0;i=0;KeyPress=0 xff;KeyPress=0 xff;while(KBTablei!=0 x00)/while(KBTablei!=0 x00)/在键盘定义表中搜索欲转换的键值在键盘定义表中搜索欲转换的键值,直至表尾直至表尾 if(KBTablei=valve)/if(KBTablei=valve)/在表中找到相应的键值在表中找到相应的键值 KeyPress=KBTablei+1;/KeyPress=KBTablei+1;/取出对应的键定义值取出对应的键定义值 break;break;i+=2;/i+=2;/指向下一个键值指向下一个键值,继续判断继续判断 return KeyPress;return KeyPress;嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践 8.3.2 键盘中断编程08C语言举例(1)(1)键盘中断编程实例的键盘中断编程实例的键盘中断编程实例的键盘中断编程实例的08C08C主函数主函数主函数主函数 /-*/-*/工工 程程 名名:KeyBoard_Int.prj *:KeyBoard_Int.prj */硬件连接硬件连接:*:*/(1)MCU/(1)MCU的的A A口接键盘口接键盘(见见KB.sKB.s文件中的说明文件中的说明)*)*/程序描述程序描述:按下键盘按键按下键盘按键,串口发送对应的键值串口发送对应的键值 */目目 的的:键盘中断键盘中断,键盘扫描键盘扫描,键值识别键值识别,键值转换键值转换 */说说 明明:*:*/注注 意意:如果键盘插在实验板的上排插孔如果键盘插在实验板的上排插孔,无须连线无须连线,若若 *插在下排插在下排 */插孔插孔,需手工接线需手工接线 */日日 期期:2007.01.03 *:2007.01.03 */-/-清华清华20072007版嵌入式技术基础与实践实例版嵌入式技术基础与实践实例-*-*嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践#include Includes.h /#include Includes.h /总头文件总头文件/主函数主函数void main()void main()DisableMCUInt();/DisableMCUInt();/禁止总中断禁止总中断 MCUInit();/MCUInit();/芯片初始化芯片初始化 SCIInit();/SCIInit();/串行口初始化串行口初始化 KBInit();/KBInit();/键盘初始化键盘初始化 EnableKBInt();/EnableKBInt();/开放键盘中断开放键盘中断 EnableMCUInt();/EnableMCUInt();/开放总中断开放总中断 /主循环主循环 while(1)while(1)嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践(2)键盘中断编程实例的键盘中断编程实例的08C中断矢量表文件中断矢量表文件/Vectors08.c/Vectors08.c中断处理函数与中断向量表中断处理函数与中断向量表-*-*/功能功能:*:*/(1)/(1)定义中断处理子程序定义中断处理子程序 */(2)/(2)放置中断向量表放置中断向量表 */本文件包含本文件包含:*:*/(1)/(1)键盘中断处理函数键盘中断处理函数 */(2)/(2)未定义的中断处理函数未定义的中断处理函数 */说明说明:该文件与芯片具体型号有关该文件与芯片具体型号有关 */(1)/(1)芯片型号芯片型号MC68HC908GP32 *MC68HC908GP32 */-*/-*嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践/头文件头文件#include Type.h /#include Type.h /类型别名定义类型别名定义#include EnDisInt.h /#include EnDisInt.h /开放或禁止开放或禁止MCUMCU各模块中断的宏定义各模块中断的宏定义#include SCI.h /#include SCI.h /该头文件包含串行通信函数声明该头文件包含串行通信函数声明#include KB.h /#include KB.h /该头文件包含键盘模块函数声明该头文件包含键盘模块函数声明/isrKeyBoard:/isrKeyBoard:键盘中断处理函数键盘中断处理函数-*-*/功能功能:识别按键并发送键值识别按键并发送键值,把键值转换成对应的定义值把键值转换成对应的定义值,再从串口发送出去再从串口发送出去*/调用函数调用函数:*:*/(1)/(1)扫描法读取键值函数扫描法读取键值函数(KBScan)*(KBScan)*/(2)/(2)键值转为定义值函数键值转为定义值函数(KBDef)*(KBDef)*/-*/-*嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践嵌入式技术基础与实践#pragma interrupt_handler isrKeyBoard#pragma interrupt_handler isrKeyBoardvoid isrKeyBoard(void)void isrKeyBoard(void)INT8U valve;INT8U valve;DisableMCUInt();/DisableMCUInt();/关总中断关总中断 DisableKBInt();/DisableKBInt();/屏蔽键盘中断屏蔽键盘中断 valve=KBScan();/valve=KBScan();/扫描键值扫描键值,存于存于valuevalue中中 SCISend1(valve);/SCISend1(valve);/发送键值发送键值 SCISend1(KBDef(valve);/SCISend1(KBDef(valve);/键值转化为定义值并发送键值转化为定义值并发送 KBInit();/KBInit();/键盘初始化键盘中断键盘初始化键盘中断 EnableKBInt();/EnableKBInt();/开放键盘中断开放键盘中断 EnableMCUInt();/EnableMCUInt();/开总中断开总中断 提问与解答环节Questions And Answers谢谢聆听 学习就是为了达到一定目的而努力去干,是为一个目标去战胜各种困难的过程,这个过程会充满压力、痛苦和挫折Learning Is To Achieve A Certain Goal And Work Hard,Is A Process To Overcome Various Difficulties For A Goal
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!