苏州大学实验报告-实验三键盘中断实验报告.doc_第1页
苏州大学实验报告-实验三键盘中断实验报告.doc_第2页
苏州大学实验报告-实验三键盘中断实验报告.doc_第3页
苏州大学实验报告-实验三键盘中断实验报告.doc_第4页
苏州大学实验报告-实验三键盘中断实验报告.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

苏州大学实验报告院、系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期实验名称: 键盘中断实验一实验目的通过该实验实习,能够熟练运用MT-IDE嵌入式开发系统环境、汇编和C语言以及调试方式;复习SCI的内容;加强键盘中断的基本原理及编程原理的理解;能够理解“行扫描”法的原理并且运用它进行键盘中断的编程。 二实验内容理解键盘模块和键盘中断点的原理,使用“行扫描”法编写一个中断方式的的键盘程序,并转化成定义值后,通过串口分别发往PC机的VB编写的界面中显示。三实验过程(一)接线图MCU内部电阻图1 键盘接线原理图87654321行线m1 m2 m3 m4列线 n1 n2 n3 n4(二)基本原理GP32的A口的8根引脚与键盘中断模块(KBI)的引脚复用。作为KBI引脚时,8个引脚分别称为KBIE7- KBIE0。它们提供了以中断方式识别是否有按键按下的硬件手段。当然,如果不以中断方式识别键盘按键,可以屏蔽键盘中断,把A口作为一般I/O口对待。 CPU对键盘扫描可以采取程序控制的随机方式,CPU可以在空闲时扫描键盘。也可以采用定时控制,每隔一定时间,对键盘扫描一次,CPU可以随时响应键盘输入中断。采用中断方式,当键盘上有键闭合时,键盘向CPU请求中断,CPU响应键盘输入中断,对键盘扫描,以识别哪一个键处于闭合状态,并对键盘输入信息作出响应处理。CPU对键盘上闭合键的键号确定,可以根据行线和列线的状态计算求得,也可以通过行线和列线的状态查表求得。四编程(一)流程图开始开始SCI初始化子程序头文件和声明等待键盘按键中断事件的发生扫描键盘得到键值发往串口显示键盘初始化子程序查表取得键值对应的定义值设置键盘中断允许,开放总中断,把B口置为输出,初始暗发往串口显示PTB键定义值结束人工复位1 ?结束图2 键盘中断流程图(中断方式主程序及其中断子程序)(二)所用寄存器名称及其各个位键盘状态和控制寄存器(Keyboard Status and Control Register,INTKBSCR)数据位 D7 D6 D5 D4 D3 D2 D1 D0定义 KEY ACKK IMASKK MODEK复位 0 0 0 0 0 0 0 0键盘中断允许寄存器(Keyboard Interrupt Enable Register,INTBIER)数据位 D7 D6 D5 D4 D3 D2 D1 D0定义KBIE7 KBIE6 KBIE5 KBIE4 KBIE3 KBIE2 KBIE1 KBIE0复位 0 0 0 0 0 0 0 0(三)主要代码段1 汇编方式:键盘中断方式的主程序及其中断子程序部分代码MainInit: /复位后程序从此开始执行 /系统初始化 SEI /关中断 /1.堆栈初始化为RAM最高端 LDHX #RAMEndAddr /HX=#RAMEndAddr TXS /HX-SP /2.系统初始化 JSR MCUInit /初学时跳过此处 /3.串行口初始化 JSR SCIInit /4.B口初始化 LDA #0xff STA DDRB STA PTB /5.键盘初始化 JSR KB_Init /调键盘初始化子程序 BCLR #1,INTKBSCR /开放键盘中断(IMASK=0) CLI /开中断 /程序总循环入口MainLoop: NOP NOP BRA MainLoop键盘中断方式的子程序部分代码/KB_Int:键盘中断处理程序-*/功能:键盘中断程序,把键定义值从串口发送出去 */调用子程序:(1)扫描法读取键值子程序(KB_Scan) */ (2)键值转为定义值子程序(KB_Def) */-*KB_Int:SEI /关总中断PSHH /保护HBSET #1,INTKBSCR /禁止键盘中断NOPNOPNOPNOPNOPJSR KB_Scan /扫描键盘,读取键值-AJSR SCISend1 /发送键值JSR KB_Def /转成键定义值-ACBEQA #$00,KB_Int_1JSR SCISend1 /发送键定义值COMA STA PTB /小灯显示按键的ASCII码值KB_Int_1:JSR Delay1000JSR KB_InitBCLR #1,INTKBSCR /开放键盘中断(IMASKK=0)PULH /恢复HCLI /开总中断RTI2C语言方式:键盘中断方式的主程序部分代码/主函数void main() DisableMCUInterrupt(); /禁止总中断 MCUInit(); /芯片初始化 SCIInit(); /串行口初始化 KB_Init(); /键盘模块初始化 DDRB=0xff; /B口为输出 PTB=0xff; /初始时灯暗 EnableKBInt(); /开放键盘中断 EnableMCUInterrupt(); /开放总中断 /主循环 while(1) 键盘中断方式的子程序部分代码#pragma interrupt_handler isrKBIvoid isrKBI(void) unsigned char KB_valve; DisableMCUInterrupt(); /禁止总中断 DisableKBInt(); /屏蔽键盘中断(IMASKK=1) KB_valve=KB_Scan(); /扫描键值 SCISend1(KB_valve); KB_valve=KB_Def(KB_valve); /键值转化为定义值 if(KB_valve) SCISend1(KB_valve); PTB=KB_valve; /小灯显示按键的ASCII码值 KB_Init(); /重新初始化键盘 EnableKBInt(); /打开键盘中断(IMASKK=0) EnableMCUInterrupt(); /开放总中断五实验问答(根据实验指导书所列举的问题)1本实验中用的是键盘中断编程方式,也可以使用查询编程方式,请尽量少修改代码改用查询编程方式重新编写相应的子程序和主程序。提示:注意重键问题。答:只要把键盘中断子程序的内容放到主函数的循环中就可以了。同时去掉中断向量表中关于键盘中断的中断设置。 2识别是否有键按下以及哪个键被按下有哪些方法?答:识别是否有键被按下,主要有查询法、定时扫描法与中断法。而要识别键盘上哪个键被按下主要有行扫描法和行反转法。 3有哪些方法可以用来消除键盘抖动?答:当按下一个键时,会出现所按的键在闭合位置和断开位置之间跳几下才稳定到闭合位置的情况,当释放一个按键时也会出现类似情况,这就是抖动问题。在软件上,解决抖动问题的方法通常是延迟等待抖动的消失或多次识别判定。 4课本中的键盘中断编程是如何解决重键问题?答:所谓重键就是有两个及两个以上按键同时处于闭合位置的情况。在软件上,处理重键问题通常有连锁法和巡回法。5课本中的样例直接用小灯检验程序的运行情况。怎样检验?提示:用接线图来说明。答:如果小灯的显示结果是按键对应的ASCII码值,说明程序运行正确,否则程序中或硬件上可能有错误。 6在上题中改用万用表来检验,请

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论