嵌入式KL25 键盘中断实验
嵌入式中断实验报告心得

一、实验背景随着物联网、智能制造等领域的快速发展,嵌入式系统在各个行业中扮演着越来越重要的角色。
中断技术作为嵌入式系统的重要组成部分,对于提高系统的实时性、可靠性和响应速度具有重要意义。
为了更好地掌握中断技术,我进行了嵌入式中断实验,以下是我对实验的心得体会。
二、实验目的1. 理解中断的概念、作用及中断处理流程;2. 掌握嵌入式系统中断的配置方法;3. 学会编写中断服务程序;4. 通过实验验证中断技术的应用效果。
三、实验内容1. 硬件环境:嵌入式开发板、仿真器、连接线等;2. 软件环境:嵌入式操作系统、集成开发环境、仿真器驱动程序等;3. 实验步骤:(1)搭建实验环境,包括硬件连接和软件配置;(2)配置中断源,如GPIO、定时器等;(3)编写中断服务程序,实现中断响应和处理;(4)通过仿真器观察实验效果,验证中断技术。
四、实验心得1. 理解中断原理在实验过程中,我首先学习了中断的基本概念和作用。
中断是指当外部事件发生时,系统暂停当前执行的任务,转而执行中断服务程序,处理外部事件。
通过实验,我明白了中断处理流程,包括中断请求、中断响应、中断处理和中断返回等环节。
2. 中断配置方法在实验中,我学习了如何配置中断源。
以GPIO为例,首先需要设置GPIO引脚为中断模式,然后配置中断触发方式(上升沿、下降沿或双边沿触发),最后设置中断优先级。
通过实验,我掌握了中断配置方法,为后续应用中断技术打下了基础。
3. 编写中断服务程序中断服务程序是中断处理的核心,我通过实验学会了编写中断服务程序。
在编写过程中,需要注意以下几点:(1)保护现场:在中断服务程序开始执行前,需要保存当前CPU状态,如寄存器值等;(2)处理中断:根据中断类型,执行相应的处理逻辑;(3)恢复现场:在中断服务程序执行完毕后,需要恢复CPU状态,以便继续执行被中断的任务。
4. 实验效果验证通过仿真器观察实验效果,我发现中断技术能够有效地提高系统的响应速度和实时性。
嵌入式- 按键中断实验

按键中断实验实验目的:1掌握IO口的使用2掌握中断处理程序编写3掌握按键中断的使用实验器材:Sinosys-EA2440实验箱PC机实验原理:在SinoSys-EA2440a中,已经将EINT0、EINT2、EINT19、EINT11作为外部中断源和开发板上位号为SW1、SW2、SW3、SW4的这四个小按键相连,中断按钮的连接图如图1.1:1.1中断按钮结构电路在SinoSys-EA2440a 中,已将EINT0、EINT2、EINT19、EINT11 作为外部中断源和开发板上位号为SW1、SW2、SW3、SW4 的这四个小按键相连,其中,EINT0、EINT2、EINT11、EINT19 分别和GPF0、GPF2、GPG3、GPG11 复用,当GPFCON[5:4]=10、GPFCON[1:0]=10、GPGCON[7:6]=10、GPGCON[23:22]=10 时,I/O 为中断方式。
通过寄存器的控制,可以达到开启中断和控制中断的目的。
实验总结:将4个按键端口设置成EINT0、EINT2、EINT11、EINT19模式。
rGPGCON = rGPGCON & (~((3<<22)|(3<<6))) | ((2<<22)|(2<<6)) ;rGPFCON = rGPFCON & (~((3<<4)|(3<<0))) | ((2<<4)|(2<<0)) ;通过EXTINT寄存器对外部中断触发方式进行设置,这里设置下降沿触发。
rEXTINT0 &= ~(6|(6<<8));rEXTINT0 |= (0|(0<<8));// EINT0、EINT2rEXTINT1 &= ~(7<<12);rEXTINT1 |= (0<<12); // EINT11rEXTINT2 &= ~(0xf<<12);rEXTINT2 |= (0<<12); // EINT19对外部中断挂起寄存器清零,对外部中断屏蔽寄存器时能,同时设置中断服务程序的地址,将中断挂起寄存器清零,开启中断。
嵌入式技术及应用实验中断实验报告

实验步骤与结果分析1、建立工程1)、在工程文件中包含如下文件(int、doc、user、lib、start)2)、选择STM32F103VB芯片3)、分别添加如下文件2、运行过程(1) 使用Keil uVision3 通过ULINK仿真器连接EduKit-M3实验平台,打开实验例程NVIC_test子目录下的NVIC.Uv2例程,编译链接工程;(2) 点击MDK 的Debug菜单,选择Start/Stop Debug Session项或Ctrl+F5键,远程连接EduKit-M3实验平台并下载调试代码到目标系统的RAM中;(3) 程序正常启动运行后,会有以下结果:当第一次发生EXTI9 中断后(按下EduKit-M3实验平台上Key按钮),SysTick 中断的优先级比EXTI0中断优先级高。
因此当EXTI0中断发生时(按下Wakeup按钮),将先执行主要程序代码分析/* Configure one bit for preemption priority */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);主从优先级的选择Group_1,有先占优先级1位,从优先级3位//配置一个比特为抢占优先级/* Enable the EXTI0 Interrupt */ //使能EXTI0中断NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = PreemptionPriorityValue;主优先级的选择PreemptionPriorityValueNVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//从优先级等于0.NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/* Enable the EXTI9_5 Interrupt */ //使能EXTI9_5中断NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//EXTI9_5主优先级的选择等于0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//EXTI9_5主优先级的选择等于0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/* Configure the SysTick Handler Priority: Preemption priority and sub priority */ //配置SysTick处理程序优先级:抢占优先级和子优先级NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, !PreemptionPriorityValue, 0);while (1){if(PreemptionOccured != FALSE)//当PreemptionOccured != FALSE)抢占发生{GPIO_WriteBit(GPIOC, GPIO_Pin_6, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_6)));Delay(0x5FFFF);GPIO_WriteBit(GPIOC, GPIO_Pin_7, (BitAction)(1 -GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_7)));Delay(0x5FFFF);GPIO_WriteBit(GPIOC, GPIO_Pin_8, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_8)));Delay(0x5FFFF);GPIO_WriteBit(GPIOC, GPIO_Pin_9, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_9)));Delay(0x5FFFF);}}void GPIO_Configuration(void){/* Configure PC6, PC7, PC8 and PC9 as output push-pull */ 使能为推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //使能其速度为50MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //使能为推挽输出GPIO_Init(GPIOC, &GPIO_InitStructure);/* Configure GPIOA Pin0 as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 使能为浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);/* Configure GPIOB Pin9 as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 使能为推挽输出入GPIO_Init(GPIOB, &GPIO_InitStructure);}GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);/* Configure EXTI Line0 to generate an interrupt on falling edge */ 配置EXTI Line0产生一个中断在下降沿EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);(写不完时,可调整表结构。
键盘中断微机实验报告

键盘中断微机实验报告1. 引言键盘中断是计算机硬件系统中常见的一种输入设备中断方式,其功能是在用户通过键盘输入时,中断处理器正常运行的流程,将键盘输入的数据传递给操作系统供其处理。
本次实验旨在通过搭建一个简单的键盘中断实验系统,加深对键盘中断原理及操作的理解。
2. 实验原理2.1 键盘中断键盘中断是一种异步的硬件中断方式,即键盘通过给中断控制设备发送中断请求信号,从而将中断信息传递给CPU。
一旦发生键盘中断,CPU将停止当前执行的任务,跳转到事先设置好的中断处理程序,处理键盘中断事件。
2.2 实验系统本次实验使用Intel 8086微处理器、键盘控制器8042和键盘作为实验系统的主要硬件设备。
系统的基本结构如下图所示:与中断控制器连接。
- 打开中断屏蔽位,以允许中断请求通过。
3.4 运行实验程序完成前述步骤后,我们可以运行实验程序,测试键盘中断的正常工作。
当用户按下键盘时,键盘中断会触发,并将键盘输入的数据传递给中断处理程序进行处理。
4. 实验结果与分析经过测试,我们发现实验系统能够正确地接收和处理键盘输入的数据。
嵌入式-中断实验

嵌入式-中断实验
嵌入式中断实验是一种用来测试和学习嵌入式系统中断功能的实验。
中断是嵌入式系统中常用的一种机制,用于处理紧急事件或高优先级任务。
通过中断,系统可以立即响应外部事件,中断当前正在执行的任务,执行与中断事件相关的代码,然后返回到原来的任务中继续执行。
在进行中断实验时,通常需要以下步骤:
1. 确定中断源:确定要模拟的中断事件,比如外部输入的触发事件、定时器到达时间等。
2. 配置中断控制器:根据硬件平台和实验要求,配置中断控制器的相应寄存器,使其能够正确地处理中断信号。
3. 编写中断服务程序(ISR):定义一个中断服务程序,用于
处理中断事件。
ISR应当对事件进行必要的处理,然后返回到
原来的任务中。
4. 测试和调试:连接硬件平台,运行实验程序,并进行测试和调试,确保中断功能正常工作。
5. 扩展和优化:根据需要,可以进一步扩展和优化中断功能,比如增加多个中断源,实现优先级控制,提高系统响应速度等。
通过嵌入式中断实验,可以深入了解中断机制的工作原理和应用方法,提高对嵌入式系统的理解和能力。
嵌入式中断实验

实验2.3 外部中断实验一、实验目的如何捕获一个外部中断和 CC2530 捕获外部中断后的处理流程。
在 EBDCC2530 节点板上运行外部中断程序。
二、实验环境硬件:PC 机,EBDCC2530 节点板,USB 接口仿真器。
软件:Windows98/2000/NT/XP,IAR 集成开发环境。
三、实验原理EBDCC2530 节点板上有两个按键:按键 S1、按键 S2。
我们通过查看电路图可以得知,选通按键 S1 的按键是 P2.0,选通按键 S2 的按键式P0.6。
我们以 S2 所对应的 P0.6 引脚所用到的控制寄存器为例,仔细说明控制寄存器中每一位所代表的意义。
其他控制寄存器所代表的意义请查看 CC2530 数据手册。
P0IEN:各个控制口的中断使能,0 为中断禁止,1 为中断使能。
D7 D6 D5 D4 D3 D2 D1 D0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0P0INP:设置各个 I/O 口的输入模式,0 为上拉/下拉,1 为三态模式。
D7 D6 D5 D4 D3 D2 D1 D0P0.7模式 P0.6模式P0.5模式P0.4模式P0.3模式P0.2模式P0.1模式P0.0模式PICTL:D0~D3 设置各个端口的中断触发方式,0 为上升沿触发,1 为下降沿触发。
D7 控制 I/O引脚在输出模式下的驱动能力。
选择输出驱动能力增强来补偿引脚 DVDD 的低 I/O 电压,确保在较低的电压下的驱动能力和较高电压下相同。
0 为最小驱动能力增强。
1 为最大驱动能力增强。
D7 D6 D5 D4 D3 D2 D1 D0I/O 驱动能力未用未用未用 P2_0~P2_4P1_4~P1_7P1_0~P1_3P0_0~P0_7IEN1:中断使能 1,0 为中断禁止,1 为中断使能。
D7 D6 D5 D4 D3 D2 D1 D0未用未用端口0 定时器4 定时器3定时器2定时器1DMA传输P0IFG :中断状态标志寄存器,当输入端口有中断请求时,相应的标志位将置 1。
嵌入式系统实验三-按键中断实验

《嵌入式系统》课程实验报告学生姓名:所在班级:指导教师:记分及评价:一、实验名称按键中断实验二、实验目的通过实验掌握S3C2410X的中断控制寄存器的使用;通过实验掌握S3C2410X处理器的中断响应过程;通过实验掌握ARM处理器的中断方式和中断处理过程;通过实验掌握ARM处理器中断处理的软件编程方法。
三、实验内容编写程序,当用户在实验箱按下KEY1键或KEY2键时在中断服务子程序中将相关信息打印到串口中,显示在超级终端上。
四、实验原理在本实验平台的主板上设计了两个外部按键,电路原理图如下:EXINT0和EXINT1信号作为CPLD芯片的输入信号。
CPLD内部逻辑图:五、实验结果超级终端上显示以下信息:按下KEY1键或KEY2键,超级终端上显示以下信息。
六、练习题编写程序实现:按下KEY1或KEY2后点亮实验系统的LEDs一段时间后熄灭。
任务:按下KEY1键后LED1点亮一段时间后熄灭;按下KEY2键后点亮LED2一段时间后熄灭。
#define rCPLDIntControl (*(volatile unsigned char*)0x22600000)#define rCPLDIntStatus (*(volatile unsigned char*)0x22200000)#define rCPLDLEDADDR (*(volatile unsigned char*)0x21180000)void __irq int_int(void){unsigned char Status;int i;Status = rCPLDIntStatus;Status = ~(Status & 0x6);if(Status & 0x2){uart_printf(" Eint0 interrupt occurred.\n");rCPLDLEDADDR = (rCPLDLEDADDR | 0xFF )& 0xFE;for(i = 0; i < 100000; i++);rCPLDLEDADDR = rCPLDLEDADDR | 0xFF ;}else if(Status & 0x4){uart_printf(" EINT1 interrupt occurred.\n");rCPLDLEDADDR =(rCPLDLEDADDR | 0xFF) & 0xFD;for(i = 0; i < 100000; i++);rCPLDLEDADDR = rCPLDLEDADDR | 0xFF ;}rEINTPEND=(1<<9);ClearPending(BIT_EINT8_23);}。
嵌入式系统实验中断管理程序设计

嵌入式系统实验中断管理程序设计下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
本文下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Downloaded tips: This document is carefully compiled by the editor. I hope that after you download them, they can help you solve practical problems. The documents can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, our shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!嵌入式系统作为当今信息技术领域的热门话题,已经广泛应用于汽车、智能家居、医疗器械等各个领域。
键盘中断实验(1)

南通大学实验报告院系:计算机科学与技术姓名:课程名称:接口技术成绩:学号:1213022013指导教师:李跃华同组实验者:实验日期:2014-5-7实验名称:键盘中断实验一.实验目的1.熟练运用CodeWarrior 嵌入式开发系统环境、C 语言、调试方式。
2.复习串行通信接口(SCI)的内容。
3.加强键盘中断基本原理及编程原理的理解。
4.理解“行扫描”法的原理并能进行键值识别和键值编码二.实验内容键盘的c 语言编程:1)初始化,先按IO 口方式初始化,即定义列线为输入且上拉,行线为输出,然后依输入口的键盘功能初始化相应的寄存器。
2)定义键值表3)扫描一次,读取键值4)获得键盘定义值行扫描法是使键盘的某一行输出为低电平,其余行为高电平,然后读取列值,如果列值中有某位为低电平,则表明该行和列交点处的键被按下;若为全高则再扫描下一行,直至扫描完全部的行线为止。
这样就可以确定是哪一行哪一列交点的键被按下。
2. 软件设计三程序流程图四编程1.内核定时器中断void tpm0_isr(void){static uint_32 TPMCounter = 0; //计时器uint_8 value; //键盘变量static uint_8 LEDindex=0; //位选口声明uint_8 LEDDataBuffer[4]; //LED显示缓冲区uint_8 i;//LED缓冲区赋值LEDDataBuffer[0]='0';LEDDataBuffer[1]='2';LEDDataBuffer[2]='3';LEDDataBuffer[3]='5';//LCD显示缓冲区,其中.表示按下的数字uint_8 kbv[32]="The keyboard you just input is .";if((TPM_SC_REG(TPM0_BASE_PTR) & TPM_SC_TOF_MASK) == TPM_SC_TOF_MASK) {TPMCounter++;}BSET(TPM_SC_TOF_SHIFT,TPM_SC_REG(TPM0_BASE_P TR)); //中断置标志位写1清0//处理LED部分LEDindex++;//位选位+1if (LEDindex>=4) LEDindex=0; //大于4位选口置0i=LEDchangeCode(LEDDataBuffer[LEDindex]-'0');//转码LEDshow1(LEDindex,i);//显示LEDif(TPMCounter>100){TPMCounter = 0;//键盘得到扫描值value = KBScanN(2);//扫描键值,存于value中if(KBDef(value) != 0xff) //发送键值{//修改.成为按键值kbv[31] = KBDef(value);//通过LCD显示出来LCDShow(kbv);uart_send_string(UART_2,kbv);//键盘发送信息}}}2.程序的入口int main(void){//1.声明主函数使用的局部变量uint_8 * g_DispalyInit;//2.关总中断enter_critical();//3.初始化底层模块uart_init (UART_1,BUSCLK, 9600); //串口1初始化, 总线时钟24000Khz,波特率9600LEDInit();//LED初始化LCDInit();//LCD初始化KBInit(); //键盘初始化tpm_init(TPM0,TPM_CLKSRC_PLL,1000);//初始化TPM模块,1ms中断一次//4.缓冲区赋值g_DispalyInit = (uint_8 *)"Wait Receiving..Soochow 2013.01.";//5.开中断tpm_enable_int(0);init_critical();//6.lcd显示初始字符LCDShow(g_DispalyInit);//================================= ================================== ========for(;;){}//============================================return 0;}四.实验小结在这次实验中主要让我们熟悉掌握gpio口通信的知识,在熟悉代码的前提下在主函数里初始化波特率何在中断函数里添加一个接收函数就可以。
嵌入式KL键盘中断实验

嵌入式KL键盘中断实验
嵌入式KL键盘中断实验是一种使用嵌入式系统的KL键盘进
行中断方式实验的方法。
在嵌入式系统中,中断是一种常用的机制,用于实现多任务处理和实时系统。
在键盘输入中断实验中,我们可以利用KL键
盘的中断功能,实现在用户按下键盘按键时自动触发中断,并进行相应的处理。
实验步骤如下:
1. 准备硬件环境:使用KL键盘连接到嵌入式系统的对应接口。
2. 配置中断:通过编程设置KL键盘对应的中断引脚,使其可
以触发中断。
具体实现方法根据所用的嵌入式系统和开发工具不同而有所差异,可以查阅相应的文档和资料进行配置。
3. 编写中断处理程序:在嵌入式系统中,中断处理程序是在中断发生时被调用的函数。
我们需要编写一个中断处理程序来响应键盘中断,并进行相应的处理,比如读取键盘输入的字符并进行显示或其他操作。
4. 注册中断处理程序:将编写的中断处理程序注册到嵌入式系统的中断向量表中,以便系统在中断发生时能够找到并执行该程序。
5. 运行实验:启动嵌入式系统,按下KL键盘的按键,触发中
断并执行中断处理程序。
根据编写的中断处理程序的功能,可以在显示屏上显示按下的按键字符或进行其他操作。
需要注意的是,不同的嵌入式系统和开发工具对于中断的实现方式和配置方法可能存在差异,具体的实验步骤和代码实现可能需要根据具体的情况进行调整。
建议在进行实验前充分了解相关的文档和资料,以确保正确实施实验。
嵌入式实验3按键实验(中断方式)

嵌入式实验3按键实验(中断方式)河南机电高等专科学校《嵌入式系统开发》课程实验报告系部:电子通信工程系班级:电信1##姓名: ######学号: 120######实验三按键实验(中断方式)一.实验简介在实验一的基础上,使用按键控制流水灯。
二.实验目的熟练使用库函数操作GPIO,掌握中断配置和中断服务程序编写方法,掌握通过全局变量在中断服务程序和主程序间通信的方法。
三.实验内容实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。
下载代码到目标板,查看运行结果。
四.实验设备硬件部分:PC计算机(宿主机)、STM32实验板。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。
五.实验步骤1在实验一代码的基础上,编写中断初始化代码2在主程序中声明全局变量,用于和中断服务程序通信,编写完成主程序3编写中断服务程序4编译代码,下载到实验板5.单步调试6记录实验过程,撰写实验报告六.实验结果及测试中断方式的按键式实验,是通过配置外部中断寄存器和中断嵌套(NVIC)控制器来实现按键按下控制LED灯亮灭。
通过按键中断打断主函数,执行LED1取反一次。
主函数初始化中断配置和LED配置,点亮LED1后一直等待中断,每中断一次,LED1取反一次。
int main(void){LED_GPIO_Config();LED1_ON;CLI();SEI();EXTI_PA0_Config();while(1){}}中断嵌套控制寄存器的配置为中断嵌套分组1;抢占优先级0;响应优先级0 代码如下:void NVIC_Configuration(void){NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}外部中断按键的配置源码如下:配置PA0位中断线,并使能AFIO 时钟void EXTI_PA0_Config(void){GPIO_InitTypeDef GPIO_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);NVIC_Configuration();GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);}产生中断后程序进入中断服务子程序,将LED1取反,并软件清除标志位,中断服务子程序如下:void EXTI0_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line0) != RESET){LED1_TOGGLE;EXTI_ClearITPendingBit(EXTI_Line0);}}七.实验总结通过这次实验,课程知识的实用性很强,因此实验就显得非常重要,刚开始做实验的时候,由于自己的理论知识基础不好,在实验过程遇到了许多的难题,也使我感到理论知识的重要性。
实验三 键盘中断实验报告

苏州大学实验报告院、系 年级专业 姓名 学号 课程名称 成绩 指导教师 同组实验者 实验日期 实验名称: 键盘中断实验一.实验目的通过该实验实习,能够熟练运用MT-IDE 嵌入式开发系统环境、汇编和C 语言以及调试方式;复习SCI 的内容;加强键盘中断的基本原理及编程原理的理解;能够理解“行扫描”法的原理并且运用它进行键盘中断的编程。
二.实验内容理解键盘模块和键盘中断点的原理,使用“行扫描”法编写一个中断方式的的键盘程序,并转化成定义值后,通过串口分别发往PC 机的VB 编写的界面中显示。
三.实验过程(一)接线图(二)基本原理GP32的A 口的8根引脚与键盘中断模块(KBI )的引脚复用。
作为KBI 引脚时,8个引脚分别称为KBIE7- KBIE0。
它们提供了以中断方式识别是否有按键按下的硬件手段。
当然,如果不以中断方式识别键盘按键,可以屏蔽键盘中断,把A 口作为一般I/O 口对待。
CPU 对键盘扫描可以采取程序控制的随机方式,CPU 可以在空闲时扫描键盘。
也可以采用定时控制,每隔一定时间,对键盘扫描一次,CPU 可以随时响应键盘输入中断。
采用中断方式,当键盘上有键闭合时,键盘向CPU 请求中断,CPU 响应键盘输入中断,对键盘扫描,以识别哪一个键处于闭合状态,并对键盘输入信息作出响应处理。
CPU 对键盘上闭合键的键号确定,可以根据行线和列线的状态计算求得,也可以通过行线和列线的状态查表求得。
四.编程图1 键盘接线原理图行线(一)流程图(二)所用寄存器名称及其各个位1.汇编方式:图2 键盘中断流程图(中断方式主程序及其中断子程序)2.C语言方式:1.本实验中用的是键盘中断编程方式,也可以使用查询编程方式,请尽量少修改代码改用查询编程方式重新编写相应的子程序和主程序。
提示:注意重键问题。
答:只要把键盘中断子程序的内容放到主函数的循环中就可以了。
同时去掉中断向量表中关于键盘中断的中断设置。
2.识别是否有键按下以及哪个键被按下有哪些方法?答:识别是否有键被按下,主要有查询法、定时扫描法与中断法。
嵌入式Linux应用开发(中断实验指导)

嵌入式Linux应用开发(中断实验指导)
嵌入式Linux应用开发
——中断按键点亮LED实验
一、中断控制设计流程
<1>由中断控制器汇集各类外设发出的中断信号,然后向CPU发出处理请
求。
<2>CPU保存当前程序的运行环境,调用中断服务程序(ISR,Interrupt Service
Rout)处理这些中断。
<3>在ISR中通过读取中断控制器、外设相关寄存器来识别当前中断是哪
个中断,并进行相应处理。
<4>清除中断:通过读写中断控制器和外设的相关寄存器来实现。
<5>最后恢复被中断程序的运行环境(即前面保存的各个寄存器等),继续执
行。
二、程序设计组成框架
程序由head.s、init.c、interrupt.c、makefile四个程序模块组成head.s:初始化,设置中断模式、系统模式的栈,设置中断处理函数,设置各类异常的向量地址。
init.c:关看门狗(WA TCHDOG),否则CPU会不断重启。
初始化LED、初始化外部中断、使能外部中断、设置外设中断的触发方式。
interrupt.c:设计代码根据识别出来的中断(即按键)点亮LED,然后清除中断。
写上主函数,主函数只是个不做任何工作的无限循环。
Makefile: Linux中使用make命令编译程序以提高编译效率,makefile既是make所要执行的命令。
三、程序设计结果
将所编写程序通过H-JTAG烧写到实验箱中观察结果,按下按键,LED亮;再次按下按键,LED灭,循环往复。
实验三键盘中断实验

昆明理工大学信息工程与自动化学院学生实验报告(2011 —2012 学年第 2 学期)课程名称:嵌入式技术基础与实验开课实验室:信自楼234 2012 年 5 月 10 日年级、专业、班自动化092 学号姓名成绩实验项目名称键盘中断实验指导教师教师评语教师签名:年月日注:报告内容按实验须知中七点要求进行。
一、实验目的1、熟练运用CodeWarrior嵌入式开发系统环境、汇编、C语言、调试方式;2、复习串行通信接口(SCI)的内容;3、加强键盘中断基本原理及编程原理的理解;4、理解行扫描法的原理并能进行键值识别和键值编码;5、理解键盘接线原理图。
(如图5-1所示)二、实验原理及基本技术路线图(方框原理图)本实验采用4x4矩阵式键盘。
PTG4、PTD2、PTD3、PTD7分别接四根线,定义为输入且上拉,PTG0-PTG3分别接四根行线,且定义为输出行扫描法是使每一行输出低电平,,其余行为高电平,然后读取列值,如果列值中有低电平,则表明该行和列交点处的键被按下;若为全高则再扫描下一行,知道扫描完全部的行为止。
这样就可以知道哪一行哪一列交点键被按下。
MCU与键盘接线原理如下图3-1 I/O 口引脚的连接图三、所用仪器、材料(设备名称、型号、规格等)飞思卡尔试验箱四、实验方法、步骤低电平1、资源使用键盘的-数据线分别接在MCU G 口的 0-4 号引脚、 D 口的 2、3、7号引脚。
MCU 的SCI 发送引脚 E 口的 0号引脚接MAX232的TTL 电平接收引脚( 11号),MCU 的SCI 接收引脚 E 口的 1号引脚接MAX232的TTL 电平发送引脚( 12号)2、硬件设计先阅读源程序,查看相应的端口的宏定义,再根据端口号来接线。
3、软件设计(主要的程序流程图)AW60 键盘 MAX232 计算机4、编程(关键性程序段)PC接收函数private void SCIPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e){String str = String.Empty;bool Flag;//标记串口接收数据是否成功int len;//标记接收的数据的长度//调用串口接收函数,并返回结果Flag = sci.SCIReceiveData(SCIPort,ref PublicVar.g_ReceiveByteArray);if (Flag == true)//串口接收数据成功{len = PublicVar.g_ReceiveByteArray.Length;//对于字符串形式,考虑到可能有汉字,//直接调用系统定义的函数,处理整个字符串str = Encoding.Default.GetString(PublicVar.g_ReceiveByteArray);SCIUpdateRevtxtbox(TbShowString, str);//十进制和十六进制形式按字节进行处理for (int i = 0; i < len; i++){//十进制都是按照三位来显示,字节之间有空格表示区分SCIUpdateRevtxtbox(TbShowDec,PublicVar.g_ReceiveByteArray[i].ToString("D3") + " ");//十六进制都是按照两位来显示,字节之间有空格表示区分SCIUpdateRevtxtbox(TbShowHex,PublicVar.g_ReceiveByteArray[i].ToString("X2") + " ");}this.TSSLState.Text = "过程提示:数据接收成功!";}//接收数据失败elsethis.TSSLState.Text = "过程提示:数据接收失败!";}main函数#include "Includes.h"void main(void){//1 关总中断DisableInterrupt(); //禁止总中断//2 芯片初始化MCUInit();//3 模块初始化//3.1 SCI初始化SCIInit(SCI_NUM_1,SYSTEM_CLOCK,38400);//用SCI1,系统时钟为时钟源,波特率为9600 //3.2 键盘初始化KBInit();//4 开中断//4.1 开键盘中断EnableKBint();//4.2 开总中断EnableInterrupt();键盘中断函数#include "isr.h"//-------------------------------------------------------------------------*//函数名: isrKeyBoard *//功能: 扫描键盘,向串口发送键值和定义值*//参数: 无*//返回: 无*//说明: 调用了KBScanN、SCISend1、KBInit函数*//-------------------------------------------------------------------------*interrupt void isrKeyBoard(void){uint8 value;uint16 i;for(i=0; i<1000; i++);DisableInterrupt(); //关总中断DisableKBint(); //屏蔽键盘中断value = KBScanN(10); //扫描键值,存于value中if(value!=0xFF){SCISend1(SCI_NUM_1, value); //发送键值SCISend1(SCI_NUM_1,KBDef(value));//键值转化为定义值并发送}KBInit(); //键盘初始化键盘中断EnableKBint(); //开放键盘中断EnableInterrupt() ; //开总中断}五、实验过程原始记录(数据、图表、计算等)六、实验结果、分析和结论(误差分析与数据处理、成果总结等。
嵌入式实验 中断实验报告

嵌入式实验报告中断实验报告指导教师:高金山实验者:13410801 房皓13410802 张耀荣一、实验目的:1.理解中断向量表的结构2.理解中断处理的过程3.学习编写中断处理程序的方法二、实验要求:1.修改源程序,通过中断方式响应按键,当1-16键按下时,数码管显示0-F。
2.提高内容:以FIQ方式,替代IRQ方式,实现按下任何一个键,数码管显示按键号的功能。
三、实验内容:1.设计主程序,使8个LED以一定的时间间隔从右到左依次点亮,循环显示;(实验一的内容)2.当有键按下时,在七段数码管上,显示对应的16个键盘编码值 0-9 a-f(实验二、三的内容)四、程序编辑:;boot.sIMPORT postDelayIMPORT osStack;IMPORT post_initStackIMPORT init_StackIMPORT post_initGpioIMPORT post_initMemIMPORT post_initKeyIMPORT dummyOsIMPORT FIQ_HandlerIMPORT ICMRIMPORT init_ICMRIMPORT FIQIMPORT init_FIQ;IMPORT PSSRAREA boot ,CODE ,READONLYENTRYB Reset_HandlerB Undefined_HandlerB SWI_HandlerB Prefetch_HandlerB DataAbort_HandlerNOPB Reset_HandlerB FIQ_HandlerUndefined_HandlerB Undefined_HandlerSWI_HandlerB SWI_HandlerPrefetch_HandlerB Prefetch_HandlerDataAbort_HandlerB DataAbort_HandlerIRQ_HandlerB IRQ_Handler ;Defined by yourself Reset_Handler;*************************;Check if run in the SDRAM;*************************MOV R0,PCCMP R0,#0x0000003CBNE Stack;**************************;Init Memory;**************************mov r14,pc;ldr pc,=init_Memoryldr pc,=post_initMem;**************************;Init Stack;************************** Stackmov r14,pcldr pc,=init_Stack;ldr pc,=post_initStack;**************************;Init Gpio;**************************mov r14, pcldr pc, =post_initGpio;***************************;Enable & Set Interrupt;***************************mrs r1, CPSRbic r1, r1,#0x40msr CPSR_c, r1ldr r1, =ICMRldr r2, =init_ICMRstr r2,[r1]ldr r1, =FIQldr r2, =init_FIQstr r2, [r1];****************************;Init Keypad;****************************mov r14,pcldr pc,=post_initKey;***************************;Power Manager Sleep Status Register;***************************;ldr r1, =PSSR;mov r2, #0x30;str r2, [r1];***************************;Loop;***************************ldr r0,=postDelaypostLoopsub r0,r0,#0x1cmp r0,#0x0bne postLoopldr pc,=dummyOsEND;handler_IRQ.sIMPORT IRQ_Function;IMPORT ICMREXPORT FIQ_HandlerAREA FIQ_Handler,CODE,READONLY;****************************SUB LR, LR, #0x4STMFD SP!,{R0-R12,LR}BL IRQ_FunctionLDR R0,=0x41500000; by gaoLDR R1,[R0] ;by gaoLDMFD SP!,{R0-R12,PC}^;*******************************END;keypad.c#include <stdio.h>#include "register_variant.h"#define LED_CS2 (*((volatile unsigned short int *)(0x10300000))) //LED1 and LED2#define LED_CS3 (*((volatile unsigned short int *)(0x10400000))) //LED3 and LED4#define KPDK_VALUE (*((volatile unsigned char *)(0x41500008)))//Direct Keypad#define KPMK_VALUE (*((volatile unsigned char *)(0x41500020)))//Matrix Keypad#define LED_CS4 (*((volatile unsigned char *)(0x10500000)))#define LED_VALUE (0xff)void IRQ_Function(void){char i,j; //j by gaounsigned short int kbd_buff;i = KPDK_VALUE;switch (i){case 0x40: //key-press 1LED_CS2 = 0x8079;break;case 0x02: //key-press 2LED_CS2 =0x8024;break;case 0x04: //key-press 3LED_CS2 = 0x8030;break;case 0x20: //key-press 4LED_CS2 =0x8019;break;default: kbd_buff=0x8F8F; break;}i = KPMK_VALUE ;switch (i){case 0x00: //key-press 5LED_CS2 =0x8012;break;case 0x01: //key-press 6LED_CS2 = 0x8002;break;case 0x02: //key-press 7LED_CS2 =0x8078;break;case 0x05: //key-press 8LED_CS2 =0x8000;break;case 0x10: //key-press 9LED_CS2 =0x8010;break;case 0x11: //key-press 10LED_CS2 = 0x4079;break;case 0x12: //key-press 11LED_CS2 =0x7979;break;case 0x15: //key-press 12LED_CS2 =0x2479;break;case 0x20: //key-press 13LED_CS2 =0x3079;break;case 0x21: //key-press 14LED_CS2 = 0x1979;break;case 0x22: //key-press * 15 LED_CS2 =0x1279;break;case 0x25: //key-press # 16 LED_CS2 =0x0279;break;default: break;}}//int i;void Delay(unsigned int x){unsigned int i, j, k;for (i =0; i <=x; i++)for (j = 0; j <0xff; j++)for (k = 0; k <0xff; k++);}void button_statusFetch(void){char i = 0;unsigned short int kbd_buff;i = KPDK_VALUE ;switch (i){case 0x40: //key-press 1 LED_CS2 = 0x8079;break;case 0x02: //key-press 2 LED_CS2 =0x8024;break;case 0x04: //key-press 3 LED_CS2 = 0x8030;break;case 0x20: //key-press 4 LED_CS2 =0x8019;break;default: kbd_buff=0x8F8F; break;}}void button_statusFetch1(void){char i = 0;//unsigned short int kbd_buff;i = KPMK_VALUE ;switch (i){case 0x00: //key-press 5 LED_CS2 =0x8012;break;case 0x01: //key-press 6 LED_CS2 = 0x8002;break;case 0x02: //key-press 7 LED_CS2 =0x8078;break;case 0x05: //key-press 8 LED_CS2 =0x8000;break;case 0x10: //key-press 9LED_CS2 =0x8010;break;case 0x11: //key-press 10LED_CS2 = 0x4079;break;case 0x12: //key-press 11LED_CS2 =0x7979;break;case 0x15: //key-press 12LED_CS2 =0x2479;break;case 0x20: //key-press 13LED_CS2 =0x3079;break;case 0x21: //key-press 14LED_CS2 = 0x1979;break;case 0x22: //key-press * 15 LED_CS2 =0x1279;break;case 0x25: //key-press # 16 LED_CS2 =0x0279;break;default: break;}}void dummyOs(void){//int led_sharp;int temp=~0;int i;LED_CS2 = temp;LED_CS3 = temp;while(1){LED_CS4 = 0xff;for (i = 0; i < 8; i++){LED_CS4 = (LED_VALUE << i) -1;Delay(5);}//button_statusFetch();//Delay(10);// button_statusFetch1();// Delay(10);}}五、实验结果:程序运行时,实验箱上的八个LED灯在自左向右闪烁,当按下键盘上的按钮时,七段数码管吗会显示出对应的编码六、实验总结:通过本次实验,我锻炼了自己的操作能力,加深了对理论知识的理解,并对对中断工作方式有了初步的认识,理解了通过IRQ和FIQ两种不同的中断方式控制程序的运行的方法。
实验三(实验报告) - 键盘中断 (1)

实验三中断程序设计学号 201216008 姓名孙坤专业电子信息科学与技术成绩【实验目的】(1)认识微机系统的中断特性。
(2)学习8259中断控制器的工作原理。
(3)学习8259中断控制器的应用编程。
(4)掌握使用PC机内8259的方法(5)掌握修改中断向量的方法。
【实验原理及内容】1、实验原理:我们利用IBM-PC机的8259A,利用键盘输入作为中断请求信号,通过IRQ1来申请中断。
2、实验内容:当用户每按下一次键盘上的按键时,即相当于从IRQ1端向计算机内部的8259A发送一次中断请求,该中断的服务是将“THIS IS A INTERRUPT!”显示在屏幕上。
中断10次后程序退出。
3、编程提示:1)PC微机系统中的8259在80x86系列PC微机系统中,系统中包含了两片8259A中断控制器,经级连可以管理15级硬件中断,但其中部分中断号已经被系统硬件占用,具体使用情况如下表所示。
两片8259A的端口地址为:主片8259使用020H和021H两个端口;从片使用0A0H和0A1H 两个端口。
系统初始化两片8259的中断请求信号均采用上升沿触发,采用全嵌套方式,优先级的排列次序为0级最高,依次为1级、8级~15级,然后是3级~7级。
在扩展系统总线上的INTR对应的中断线就是PC机保留中断其中的一个。
对INTR中断的初始化PC机已经完成,在使用时主要是将其中断屏蔽打开,修改中断向量。
2)键盘中断注意事项PC机中使用的是编码键盘,在键盘内部有一单片机对整个键盘上的字符键、功能键、控制键和组合键进行管理,当从键盘上键入一个键时,键盘上的处理器首先向微机产生硬件中断请求(IRQ1),然后将改键的扫描码传送给主机。
而PC主机在IRQ1中断的作用下,调用INT 09硬件中断读入键盘的扫描码,并转换成ASCII码,存入键盘缓冲区。
本实验中的键盘中断处理程序必须对键盘控制器完成键盘复位 1.复位键盘控制器只需读出端口61H的内容,并将最高位置1,再写入该端口。
实验三 键盘中断实验

实验三 键盘中断实验一.实验目的1.熟练运用MT-IDE 嵌入式开发系统环境、汇编、C 语言、调试方式。
2.复习串行通信接口(SCI )的内容。
3.加强键盘中断基本原理及编程原理的理解。
4.理解运行课本中的程序代码。
5.理解“行扫描”法的原理并能进行键值识别和键值编码。
6.理解键盘接线原理图(如图3-1)。
实验箱提供一个16键键盘,用于键盘中断信号的输入。
系统提供两种接线方式: ①当将键盘接入上一排插孔时为固定接线,键盘接线原理图如图3-1所示。
②当将键盘接入下一排插孔时为手动接线,连线的位置在键盘的左边。
二.预习要求1.仔细阅读本实验指导书。
2.复习有关的键盘中断和串行通信接口(SCI )的章节。
3.熟悉GP32键盘模块的工作方法及编程。
4.根据实验内容要求编写好程序,为实验做充分地准备。
行线m 1 m 2 m 3 m 4 接MCU 的PTA 引脚三.实验设备及其连接1.PC机一台2.MT-IDE嵌入式开发系统一台3.串行通信线一根4.小键盘一个5.万用表一个四.实验内容1.理解键盘模块及键盘中断的原理。
2.运行与理解各子程序。
3.主程序运行课本的样例程序。
4.编制一个中断方式的16键键盘程序,使用“行扫描”法识别按键。
采用键盘中断方式。
PTA7-PTA4为列线(输入),定义有内部上拉电阻,PTA3-PTA0为行线(输出),没有内部上拉电阻,允许INTBIER的KBIE7-KBIE4定义为中断输入引脚。
要求按下的一个键的键值和键面定义值(键的ASCII码值)通过串口在PC方软件界面显示,同时用小灯显示按键的键面定义值(键的ASCII码值)。
键盘与MCU的PTA7-PTA0相连。
PTB7-PTB0口与小灯相连。
五.编程提示1.按照结构要求写好编程代码和注释。
2.键盘一般都是矩阵排列的,行和列分别接在MCU的I/O口上,其中列线通过设置内部上拉电阻接+5V,该端口先定义为输入端,行线直接与端口相连,该端口定义为输出端。
(完整word版)嵌入式-中断实验

实验五中断控制实验(一)实验目的了解中断的作用;掌握嵌入式系统中断的处理流程;掌握ARM中断编程。
(二)实验设备计算机;ARM硬件仿真器;ARM开发板(三)实验硬件设置在做实验之前,先将开发板电源接好,将仿真器的USB连线与电脑相连,通电,然后按核心板的复位键。
(四)实验原理1. 中断的基本概念CPU与外设之间传输数据的控制方式通常有三种:查询方式、中断方式和DMA方式。
DMA 方式将在后续实验中说明。
查询方式的优点是硬件开销小,使用起来比较简单。
但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环等待,不能执行其它程序,这样就浪费了CPU的大量时间,降低了CPU的利用率。
为了解决这个矛盾,通常采用中断传送方式:即当CPU进行主程序操作时,外设的数据已存入输入端口的数据寄存器;或端口的数据输出寄存器已空,由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定的条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后CPU再返回并继续执行原来被中断的主程序。
这样CPU就避免了把大量时间耗费在等待、查询状态信号的操作上,使其工作效率得以大大地提高。
能够向CPU发出中断请求的设备或事件称为中断源。
系统引入中断机制后,CPU与外设(甚至多个外设)处于“并行”工作状态,便于实现信息的实时处理和系统的故障处理。
中断方式的原理示意图如下所示。
图5-7 中断处理示意图1)中断响应中断源向CPU发出中断请求,若优先级别最高,CPU在满足一定的条件下,可以中断当前程序的运行,保护好被中断的主程序的断点及现场信息。
然后,根据中断源提供的信息,找到中断服务子程序的入口地址,转去执行新的程序段,这就是中断响应。
CPU响应中断是有条件的,如内部允许中断、中断未被屏蔽、当前指令执行完等。
2)中断服务子程序CPU响应中断以后,就会中止当前的程序,转去执行一个中断服务子程序,以完成为相应设备的服务。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式KL25 键盘中断实验
实验五键盘中断实验
一、实验目的
1.熟练运用CodeWarrior嵌入式开发系统环境、C语言、调试方式。
2.复习串行通信接口(SCI)的内容。
3.加强键盘中断基本原理及编程原理的理解。
4.理解“行扫描”法的原理并能进行键值识别和键值编码。
5.理解键盘接线原理图(如图5-1)。
二、知识要点
本实验采用的是4×4矩阵式键盘(以下简称键盘)。
PTG4、PTD2、PTD3、PTD7分别接四根列线,定义为输入且上拉,PTG0~PTG3分别接四根行线,且定义为输出。
行扫描法是使键盘的某一行输出为低电平,其余行为高电平,然后读取列值,如果列值中有某位为低电平,则表明该行和列交点处的键被按
下;若为全高则再扫描下一行,直至扫描完全部的行线为止。
这样就可以确定是哪一行哪一列交点的键被按下。
MCU与键盘接线原理图:
键盘的c语言编程:
1)初始化,先按IO口方式初始化,即定义列线为输入且上拉,行线为输出,然后依输
入口的键盘功能初始化相应的寄存器。
2)定义键值表
3)扫描一次,读取键值
4)获得键盘定义值
行扫描法是使键盘的某一行输出为低电平,其余行为高电平,然后读取列值,如果列值中有某位为低电平,则表明该行和列交点处的键被按下;若为全高则再扫描下一行,直至扫描完全部的行线为止。
这样就可以确
定是哪一行哪一列交点的键被按下。
设置键盘中断允许寄存器,当键盘有键被按下时,立即产生中断,中断程序处理按键事件,比如确定哪个键被按下,然后转换为该键的定义值。
键盘的键面标示码(即定义值)与MCU 识别的键值对应关系通过列表对应起来,即键
盘定义表对应表示。
当通过“行扫描”法获得某个键的键值时,通过查表法就可以得到它的定义值。
该键盘中断方式程序的主程序主体是一个死循环,且是一个空循环体,所有处理的过程
代码放在中断程序中。
三、演示性实验
在光盘资料中提供读者键盘实例程序文件夹。
编程采用规范要求编写,将键盘独立成一个构件,如C 语言中,形成key.h 头文件和key.c 源文件。
头文件对键盘的所用端口寄存器或引脚进行宏定义以及初始化函数和驱动函数声明。
源文件对初始化函数和驱动函数
进行定义。
具体实现代码见光盘。
四、设计性实验
要求按下的一个键的键值和键面定义值(键的ASCII 码值)通过串口在PC 方软件界面显示。
当键值被按下时,高端虚拟键盘被按下,或者在高端PC 机中显示对应按键值。
1、资源使用
键盘的数据线分别接在MCU 口的号引脚、口的号引脚。
2、硬件设计(标识引脚名)
图5-2 4×4 键盘按键的信息显示在PC机界面的连线图
3、软件设计
1)MCU 端程序流程图
2)编程
(1)下面填写主程序main。
(填写主程序main.c)
键盘中断程序
(填写C 语言编写的键盘中断程序)
#include "includes.h" //包涵总头文件
int main(void)
{
//1.声明主函数使用的局部变量
uint_8 * g_DispalyInit;
//2.关总中断
enter_critical();
//3.初始化底层模块
LEDInit(); //LED初始化 LCDInit(); //LCD初始化
KBInit();
uart_init (UART_1,BUSCLK, 9600); //串口1、2使用总线时钟24000Khz
uart_send_string(UART_1, "Hello Uart_1!\r\n");
//键盘初始化
tpm_init(TPM0,TPM_CLKSRC_PLL,1000); //初始化TPM模块,1ms 中断一次
//4.缓冲区赋值
g_DispalyInit = (uint_8 *)"Wait Receiving..Soochow 2013.01."; //5.开中断
tpm_enable_int(0);
init_critical();
//6.lcd显示初始字符
LCDShow(g_DispalyInit);
//================================================================== =========
for(;;)
{
}
//================================================================== =========
return 0;
}
(2)PC端软件的SCI接收函数
(填写PC机的SCI接收函数)
//================================================================== =========
//文件名称:isr.c
//功能概要:中断底层驱动构件源文件
//版权所有:苏州大学飞思卡尔嵌入式中心()
//更新记录:2013-03-12 V1.2
//================================================================== =========
#include "includes.h"
void tpm0_isr(void)
{
static uint_32 TPMCounter = 0; //计时器
uint_8 value; //键盘变量
static uint_8 LEDindex=0; //位选口声明
uint_8 LEDDataBuffer[4]; //LED显示缓冲区
uint_8 i;
//LED缓冲区赋值
LEDDataBuffer[0]='0';
LEDDataBuffer[1]='2';
LEDDataBuffer[2]='3';
LEDDataBuffer[3]='5';
//LCD显示缓冲区,其中.表示按下的数字
uint_8 kbv[32]="The keyboard you just input is ."; if((TPM_SC_REG(TPM0_BASE_PTR) & TPM_SC_TOF_MASK) ==
TPM_SC_TOF_MASK)
{
TPMCounter++;
}
BSET(TPM_SC_TOF_SHIFT,TPM_SC_REG(TPM0_BASE_PTR)); //中断置标志位写1清0
//处理LED部分
LEDindex++; //位选位+1 if (LEDindex>=4) LEDindex=0; //大于4位选口置0
i=LEDchangeCode(LEDDataBuffer[LEDindex]-'0'); //转码
LEDshow1(LEDindex,i); //显示LED if(TPMCounter>100)
{
TPMCounter = 0;
//键盘得到扫描值
value = KBScanN(2);
//扫描键值,存于value中
if(KBDef(value) != 0xff) //发送键值
{
//修改.成为按键值
kbv[31] = KBDef(value);
//通过LCD显示出来
LCDShow(kbv);
uart_send1(UART_1, kbv[31]);
}
}
}
五、注意事项
实验前应该首先确认所使用硬件设备的正常与否。
MCU测试、键盘测试方法如第二章所述,否则,若出现问题,将难以确认问题所在。
不过,第二章所述键盘测试的方法是软件的方法,也可以采用硬件方法,方法如下:
将扩展板供电,取一根导线,一端接小灯,一端接键盘某个行线引脚;用手按住该行某个按键不放,另取一根导线,一端接扩展板GND,另一端接键盘列线。
若小灯亮,该按键正常,否则不正常。
另外,请注意:
1、如果实验箱没有所需的实验模块,可利用实验箱中的扩展区按照所设计的电路图连线,进行实验。
2、送电实验前,先将所编写的程序编译后,下载至MCU中,接着将所需部件和导线连接至实验箱中,然后送电。
注意:不要带电操作。
3、键盘接上排插孔无需连线(自动),接下排插孔需手动连线(手工)。
端口和不同引脚连接键盘,其他程序不改变,观察效果。
六、实验总结
通过该实验上机,熟练运用CodeWarrior嵌入式开发系统环境、C语言、调试方式。
复习串行通信接口(SCI)的内容。
加强键盘中断基本原理及编程原理的理解。
理解“行扫描”法的原理并能进行键值识别和键值编码。
,
第11页共11页。