键盘中断实验

合集下载

DSP实验报告

DSP实验报告

实验一数字IO应用实验—、实验目的1. 了解DSP开发系统的组成和结构2. 在实验设备上完成I/O硬件连接,编写I/O实验程序并运行验证。

3. 内存观察工具的使用二、实验设备计算机,CCS3.1版本软件,DSP仿真器,教学实验箱三、实验原理2.键值读取程序:该部分有两种方法进行键值的判断。

方法1:利用内存观察工具进行观察方法2:利用LED1-LED8的亮灭对应显示键值。

a)外部中断1的应用参照实验五;b)内存观察键值:程序中定义了三个变量“W”“row”和“col”。

“W”代表是CPLD中键盘的扫描数值,“row”和“col”分别代表键盘的行和列,由行和列可以判定按键的位置。

上述三个变量可以在观察窗口中观察的。

c)利用LED灯显示键值原理,参看实验一。

具体的LED灯显示值以查表的形式读出,请参看“”库文件。

本实验的CPLD地址译码说明:基地址:0x0000,当底板片选CS0为低时,分配有效。

CPU的IO空间:基地址+0x0200 LED灯output 8位外部中断用XINT1:由CPLD分配,中断信号由键盘按键产生。

中断下降沿触发。

KEY_DAT_REG(R):基地址+0x0004;四、实验步骤和内容1.2407CPU板JUMP1的1和2脚短接,拨码开关S1的第一位置ON,其余置OFF;2.E300板上的开关SW4的第一位置ON,其余OFF;SW3的第四位置ON其余的SW置OFF“DEBUG→Connect”)4.打开系统项目文件 \e300.test\ normal \05_key interface \;“\Debug\”文件“Debug\Go Main”跳到主程序的开始;7.指定位置设置断点;8.View--〉Watch Window打开变量观察窗口;9. 将变量“w”“row”和“col”添加到观察窗口中,改变变量观察窗口的显示方式为HEX显示。

“Debug--〉Animate”全速运行,然后点击E300板上键盘按键,观察窗口中变量变化,同时LED1-LED8灯也相应变化,指示键值。

实验二 按键中断实验

实验二  按键中断实验

实验二按键中断实验一、实验目的了解中断的含义二、实验内容板子加电后,按动板子上K1-K3按键,可控制对应的LED1-LED3的亮灭,该实验学习了外部中断(EXTI)程序的编制及控制流程。

三、实验仪器、设备计算机、开发板、keil软件四、硬件设计在开发板上V6、V7、V8分别与MCU的PB5、PD6、PD3相连,如下图所示键盘部分如下图所示:例程所用到的列扫描线:PC5,PC2,PC3。

例程所用到的行扫描线(EXTI中断线):PE2。

五、实验要求和步骤开发板上有3个蓝色状态指示灯V6(LED1),V7(LED2),V8(LED3),通过对应的按键K1-K3,控制LED的亮灭,将PE2引脚配置为外部中断,当其上出现下降沿时产生一个中断,根据扫描PC5,PC2,PC3来判别是哪个按键按下。

首先我们了解一下什么是外部中断/事件控制器(EXTI)。

外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。

每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。

每个输入线都可以被独立的屏蔽。

挂起寄存器保持着状态线的中断要求。

EXTI控制器的主要特性如下:每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达19 个中断/事件请求检测脉冲宽度低于APB2 时种宽度的外部信号如要产生中断,中断线必须事先配置好并被激活。

这是根据需要的边沿检测通过设置2个触发寄存器,和在中断屏蔽寄存器的相应位写“1”到来允许中断请求。

当需要的边沿在外部中断线上发生时,将产生一个中断请求,对应的挂起位也随之被置1。

通过写“1”到挂起寄存器,可以清除该中断请求。

为产生事件触发,事件连接线必须事先配置好并被激活。

这是根据需要的边沿检测通过设置2个触发寄存器,和在事件屏蔽寄存器的相应位写“1”到来允许事件请求。

当需要的边沿在事件连线上发生时,将产生一个事件请求脉冲,对应的挂起位不被置1。

进程管理实验报告分析(3篇)

进程管理实验报告分析(3篇)

第1篇一、实验背景进程管理是操作系统中的一个重要组成部分,它负责管理计算机系统中所有进程的创建、调度、同步、通信和终止等操作。

为了加深对进程管理的理解,我们进行了一系列实验,以下是对实验的分析和总结。

二、实验目的1. 加深对进程概念的理解,明确进程和程序的区别。

2. 进一步认识并发执行的实质。

3. 分析进程争用资源的现象,学习解决进程互斥的方法。

4. 了解Linux系统中进程通信的基本原理。

三、实验内容1. 使用系统调用fork()创建两个子进程,父进程和子进程分别显示不同的字符。

2. 修改程序,使每个进程循环显示一句话。

3. 使用signal()捕捉键盘中断信号,并通过kill()向子进程发送信号,实现进程的终止。

4. 分析利用软中断通信实现进程同步的机理。

四、实验结果与分析1. 实验一:父进程和子进程分别显示不同的字符在实验一中,我们使用fork()创建了一个父进程和两个子进程。

在父进程中,我们打印了字符'a',而在两个子进程中,我们分别打印了字符'b'和字符'c'。

实验结果显示,父进程和子进程的打印顺序是不确定的,这是因为进程的并发执行。

2. 实验二:每个进程循环显示一句话在实验二中,我们修改了程序,使每个进程循环显示一句话。

实验结果显示,父进程和子进程的打印顺序仍然是随机的。

这是因为并发执行的进程可能会同时占用CPU,导致打印顺序的不确定性。

3. 实验三:使用signal()捕捉键盘中断信号,并通过kill()向子进程发送信号在实验三中,我们使用signal()捕捉键盘中断信号(按c键),然后通过kill()向两个子进程发送信号,实现进程的终止。

实验结果显示,当按下c键时,两个子进程被终止,而父进程继续执行。

这表明signal()和kill()在进程控制方面具有重要作用。

4. 实验四:分析利用软中断通信实现进程同步的机理在实验四中,我们分析了利用软中断通信实现进程同步的机理。

arm编程实验(键盘功能)

arm编程实验(键盘功能)

5*4键盘控制实验设备1、硬件:Embest EDUKIT-II/III实验平台,Embest ARM标准/增强型方针器套件,PC机;2、软件:Embest IDE Pro 2004集成开发环境,Windows98/200/NT/XP。

实验内容1、使用实验板上5*4用户键盘,编写程序接收键盘中断;2、通过I2C总线读入键值,并讲读到的键值发送到窜口。

实验原理1、用户设计行列键盘接口,一般采用3种方法读取键值,分别是中断式、扫描法和反转法。

中断式:在按键按下时产生一个外部中断通知CPU,并由中断处理程序通过不同的地址读取数据线上的状态,判断哪个按键被按下。

本实验采用中断方式实现用户键盘接口。

扫描法:对键盘上的某一行发送低电平,其他为高电平,然后读取列值。

若列值中有一位是低,表明该行与低电平对应列的按键被按下,否则扫描下一行。

反转法:先将所有行扫描线输出低电平,读取列值。

若列值有一位是低,表明有按键按下;接着所有列扫描线输出低电平,再读取行值。

根据读到的值组合就可以查到键码。

2、使用ZLG7290的键盘电路设计原理(1)、ZLG7290的特点:1)I2C串行接口,提供键盘中断信号,方便与处理器接口;2)可驱动8位共阴极数码管或64只独立LED和64个按键;3)可控制扫描位数,可控制任一数码管闪烁;4)提供数据译码、循环、位移、段寻址等控制;5)8个功能键,可检测任一键的连击次数;6)无需外接元件,即直接驱动LED,可扩展驱动电流和驱动电压;7)提供工业级器件,多种封装形式PDIP24、SO24。

(2)、ZLG7290的引脚说明:采用引脚封装,如下图(3)ZLG7290的寄存器说明:1)系统寄存器:地址00H,复位值11110000B。

系统寄存器保存ZLG7290的系统状态,并可对系统运行状态进行配置。

2)KeyAvi置1时表示有效的按键动作,/INT引脚信号有效;清零表示无按键动作,/INT引脚信号无效。

实验报告四中断系统实验

实验报告四中断系统实验

实验报告四中断系统实验实验报告四:中断系统实验一、实验目的本次中断系统实验的主要目的是深入理解计算机中断系统的工作原理和机制,掌握中断的处理过程,以及学会如何在实际编程中有效地运用中断来提高系统的性能和响应能力。

二、实验原理中断是指计算机在执行程序的过程中,当出现某种随机事件或异常情况时,暂停现行程序的执行,转而执行相应的中断处理程序,处理完后再返回原程序继续执行的过程。

中断系统主要由中断源、中断控制器和中断处理程序组成。

中断源可以是外部设备(如键盘、鼠标、打印机等)发送的信号,也可以是内部事件(如定时器溢出、算术运算错误等)产生的条件。

中断控制器负责对多个中断源进行优先级管理和分配,确定哪个中断请求能够被响应。

中断处理程序则是用于处理具体中断事件的一段代码。

在中断处理过程中,计算机需要保存当前程序的上下文(包括程序计数器、寄存器等),以便在中断处理完成后能够正确地恢复原程序的执行。

同时,中断处理程序需要尽快完成处理任务,以减少对系统性能的影响。

三、实验设备与环境本次实验使用的设备包括一台计算机、开发板以及相应的编程软件。

开发板上集成了中断控制器和相关的外部设备接口,以便进行中断实验的操作和观察。

编程软件采用了常见的集成开发环境(IDE),如 Keil、IAR 等,用于编写和调试中断处理程序。

四、实验步骤1、硬件连接首先,将开发板与计算机通过数据线连接,并确保连接稳定。

然后,根据实验要求,将外部设备(如按键、传感器等)正确连接到开发板的相应接口上。

2、软件开发(1)在编程软件中创建一个新的项目,并选择适合开发板的芯片型号。

(2)配置中断控制器的相关参数,如中断优先级、触发方式等。

(3)编写中断处理程序,在程序中实现对中断事件的具体处理逻辑。

例如,当按键被按下时,控制 LED 灯的亮灭;当传感器检测到特定值时,进行数据采集和处理。

(4)编写主程序,在主程序中初始化系统,并开启中断功能。

3、编译与下载完成程序编写后,对代码进行编译,确保没有语法错误和逻辑错误。

实验6:键盘接口系统实验

实验6:键盘接口系统实验

实验六:键盘接口系统实验一、实训目的1.熟悉中断键盘、非编码键盘、矩阵键盘的电路结构特点;2.实现中断键盘、非编码键盘、矩阵键盘的软件编程;二、实验仪器、材料1.微型计算机(PⅣ以上)2.编程、汇编与模拟平台软件Keil uVision33.电子技术专业仿真软件protues运行平台4.单片机实训开发电路板三、实验内容和步骤1.INT01)ORG 0000HSJMP STARTORG 0003HLOOP:JNB P3.2,LOOPLCALL DISPLYRETIORG 0030HST ART:MOV P0,#0C0HMOV R0,#00HMOV P2,#0FHMOV TCON,#00HMOV IE,#81HSJMP $DISPLY: INC R0CJNE R0,#10H,DISPLY1MOV R0,#00HDISPLY1: MOV A,R0ADD A,#03H ;对A进行地址修正MOVC A,@A+PC ;查字形码表MOV P0,A ;2RET ;1DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳极字型码DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH// DT AB:DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH ;共阴极字型码// DB 77H,7cH,39H,5eH,79H,71H,00H,0f3H,76H,80H,40HEND2.非编码P2.7按键+共阳极4位数码管静态显示(递加)1)系统电路原理图如上2)参考源程序设计如下:ORG 0000HST ART: MOV P0,#0C0HMOV R0,#00HMOV P2,#0FHLOOP: JB P2.7,LOOPLCALL DISPLYSJMP LOOPDISPLY: JNB P2.7,DISPLYINC R0CJNE R0,#10H,DISPLY1MOV R0,#00HDISPLY1: MOV A,R0ADD A,#03H ;对A进行地址修正MOVC A,@A+PC ;查字形码表MOV P0,A ;2RET ;1DT AB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳极字型码DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH // DT AB: DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH ;共阴极字型码// DB 77H,7cH,39H,5eH,79H,71H,00H,0f3H,76H,80H,40HEND3.矩阵4*4键盘+共阳极4位数码管并行显示(递加)2)参考源程序设计如下:KEY_DAT A DATA 30HORG 0000HAJMP MAINORG 0030HMAIN: MOV SP,#60HLOOP: LCALL SCANMOV A,KEY_DAT AMOV DPTR,#T ABMOVC A,@A+DPTRMOV P0,ALCALL DELAJMP LOOPSCAN: PUSH ACCPUSH PSWMOV A,#0FH ;列输出低电平MOV P1,AMOV A,P1 ;读行状态ANL A,#0FH ;屏蔽高4位的列值CJNE A,#0FH,KEYSCAN ;若有键按下,则KEYSCANSJMP EXITKEYSCAN:LCALL DEL ;去抖MOV R2,#7FH ;列值扫描初值MOV R3,#4 ;列数MOV R0,#00H ;列值计数器KEYSM1:MOV A,R2MOV P1,ARR A ;列扫描右移MOV R2,AMOV A,P1ANL A,#0FHCJNE A,#0FH,JSADDINC R0DJNZ R3,KEYSM1 ;未扫描完一遍,则循环EXIT: MOV A,#0FFHSJMP DONEJSADD:JB ACC.0,JSADD1MOV A,#0 ;行值送AAJMP JSADD4JSADD1:JB ACC.1,JSADD2MOV A,#4 ;行值送AAJMP JSADD4JSADD2:JB ACC.2,JSADD3MOV A,#8 ;行值送AAJMP JSADD4JSADD3:JB ACC.3,JSADD4MOV A,#12 ;行值送AJSADD4:ADD A,R0 ;行值+列值送入A,得到键值MOV KEY_DATA,ADONE: POP PSWPOP ACCRETDEL: MOV R6,#50DEL1: MOV R5,#200DJNZ R5,$DJNZ R6,DEL1RETKEY_TAB:DB 00H,01H,02H,03H,04H,05H,06H,07H ;0--8DB 08H,09H,0AH,0BH,0CH,0DH,0EH,0FH ;9--16// T AB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;0--9// DB 77H,7CH,39H,5EH,79H,71H ;A--FT AB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳极字型码DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH四、实训总结与分析。

Freescale单片机实验指导书2【2024版】

Freescale单片机实验指导书2【2024版】

一般性实验实验一普通I/O口操作实验实验目的:1、熟悉SDIDE开发环境,熟悉GP32基本程序结构2、理解Freescale MCU的编程框架3、熟悉编程调试环境,编译、调试、下载运行第一个程序4、掌握I/O的基本编程方法范例程序:① A01_简单IO及程序框架\ FrmMain.ASM② C01_简单IO及程序框架\纯C\prgframe.prj③ C01_简单IO及程序框架\C&ASM混编\prgframe.prj实验要求:1、参看教材6.4节,熟悉实验板结构2、运行并读懂教材第7章的关于I/O口操作的LED灯控制程序3、按下列要求新建一程序:根据PB口低2位(PTB1和PTB0)的状态输出四种不同的LED显示效果,要求用最简洁的语句实现以下各效果。

(1)PTB1=0,PTB0=0时,效果为:8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。

(效果1)(2)PTB1=0,PTB0=1时,效果为:8个LED中只有两个连在一起的灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。

(效果2)(3)PTB1=1,PTB0=0时,效果为:8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约8秒。

(效果3)(4)PTB1=1,PTB0=1时,效果自定。

(效果4)实验二串行通信实验实验目的:1、理解串行通信基本原理,掌握MCU串行通信基本编程方法2、理解串行通信的查询方式和中断方式原理及其编程范例程序:1、C02_1串行通信查询方式\ H08SCI_1.prj2、C02_2串行通信中断方式\ H08SCI_2.prj3、A02_1串行通信查询方式\ SCIMain1.asm4、A02_2串行通信中断方式\ SCIMain2.asm5、以上四目录都有VB_SCI目录,该目录是对应Visual Basic6.0程序,运行在PC方,用来接收和发送数据。

键盘中断实验(1)

键盘中断实验(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口通信的知识,在熟悉代码的前提下在主函数里初始化波特率何在中断函数里添加一个接收函数就可以。

LPC2138实验程序 中断 定时器 led 扫描 键盘

LPC2138实验程序 中断 定时器 led 扫描 键盘

LPC2138实验程序(尾部附有电路图)①实现键盘1中断(1~9数字),数码管1显示按键数字,同时用7个LED显示数码管1的相应位,即每个LED对应数码管相应位(a~g)。

②实现按键1中断,7个LED实现流水灯;实现按键2中断,7个LED实现跑马灯。

③实现按键3中断,7个LED闪烁10次,延时采用定时器#include <LPC213X.H>#define uchar unsigned charint k=0; //定时器中断计数器uchar a=0; //LED闪烁函数标志void delay(int x) //普通延时函数{int i;for(;x>0;x--)for(i=10000;i>0;i--);}void ms(unsigned int x) //定时器中断延时函数{T0TCR = 0X01;while(k!=x);T0TCR = 0X00;T0TC = 0;T0PC = 0;k=0;}void LED_1() //流水灯函数{unsigned char i;for(i=0;i<7;i++){IO1SET = 1<<(i+16);delay(20);IO1CLR = 1<<(i+16);}}void LED_2() //跑马灯函数{unsigned char i;for(i=0;i<15;i++){if(i<7){IO1SET = 1<<(i+16);delay(20);IO1CLR = 1<<(i+16);}else{IO1SET = 1<<(29-i);delay(20);IO1CLR = 1<<(29-i);}}}void LED_3() //LED闪烁函数{unsigned char i;for(i=0;i<10;i++){IO1SET = 0x7F<<16;delay(20);IO1CLR = 0X7F<<16;delay(20);}}void display(uchar x) /*数码管显示函数x为显示的数字*/ {unsigned char table[10]={0x00, 0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};IO0SET = (table[x]<<25);IO1SET = (table[x]<<16);delay(20);IO0CLR = (table[x]<<25);IO1CLR = (table[x]<<16);}void key_w() //键盘按行低电平扫描函数{IO0SET = 0X7<<20;IO0CLR = 1<<20;delay(2);IO0SET = 1<<20;IO0CLR =1<<21;delay(2);IO0SET =1<<21;IO0CLR =1<<22;delay(2);IO0SET =1<<22;}unsigned char key_r() /*键盘按列读取扫描数值返回值为键盘对应数字*/ {int a=0,b;switch(IO0PIN&(7<<16)){case 0x00060000:b=1;break;case 0x00050000:b=2;break;case 0x00030000:b=3;break;default:break;}switch(IO0PIN&(7<<20)){case 0x00600000:a=1;break;case 0x00500000:a=2;break;case 0x00300000:a=3;break;default :break;}if(a!=0)a=(a-1)*3+b;else a=0;return(a);}void EINT0()__irq //外部中断0服务函数,对应矩阵键盘{unsigned char num;num=key_r();display(num);EXTINT = 0x0f;VICVectAddr=0;}void EINT1()__irq //外部中断1服务函数,对应流水灯{LED_1();VICVectAddr=0;}void EINT2()__irq //外部中断2服务函数,对应跑马灯{LED_2();EXTINT = 0x0f;VICVectAddr=0;}void EINT3()__irq //外部中断3服务函数,对应LED闪烁标志a=1 {a=1;EXTINT = 0x0f;VICVectAddr=0;}void time0()__irq //定时器服务函数,对应k++{k++;T0IR = 1;VICVectAddr = 0;}void init () //初始化函数,引脚功能设置{PINSEL0 = 0X000CC0CC;PINSEL1 = 0X0;IO0DIR = 0XFE700000;IO1DIR = 0X00FF0000;}void EXTinit (uchar x,uchar y) /*外部中断初始化设置x为中断触发方式,y为中端极性,x,y为两位HEX*/{EXTMODE = x;EXTPOLAR = y;}void TIMEinit() //定时器初始化(未给使能){T0TC = 0;T0PR = 0;T0PC = 0;T0MCR= 0x03;T0MR0= 1105920;}void VIC() //中断标志,优先级,指向函数设置{VICIntSelect&= (~(0xF<<14));VICIntSelect&= (~(0x1<<4));VICVectCntl1 = 0x20|14;VICVectAddr1 = (unsigned int)EINT0;VICVectCntl2 = 0x20|15;VICVectAddr2 = (unsigned int)EINT1;VICVectCntl3 = 0x20|16;VICVectAddr3 = (unsigned int)EINT2;VICVectCntl4 = 0x20|17;VICVectAddr4 = (unsigned int)EINT3;VICVectCntl0 = 0x20|4;VICVectAddr0 = (unsigned int)time0;EXTINT = 0x0f;VICIntEnable|= 0xF<<14;VICIntEnable|= 0x1<<4;}int main(void) //主函数{init();EXTinit(0x00,0x00);VIC();TIMEinit();while(1){key_w();if(a==1){LED_3();a=0;}}}。

键盘接口实验实验报告总结及程序.doc

键盘接口实验实验报告总结及程序.doc

实验六键盘接口实验姓名专业通信工程学号成绩一、实验目的1.掌握 Keil C51 软件与 Protues 软件联合仿真调试的方法;2.掌握单片机的键盘接口电路;3.掌握单片机键盘扫描原理;4.掌握键盘的去抖原理及处理方法。

二、实验仪器与设备1.微机 1 台 C51 集成开发环境 3 。

Proteus 仿真软件三、实验内容1.用 Proteus 设计一矩阵键盘接口电路。

要求利用 P1口接一 4*4 矩阵键盘。

串行口通过一 74LS164接一共阴极数码管。

参考电路见后面。

2. 用线反转法编写矩阵键盘识别程序,要求采用中断方式(列线通过 4 输入与门 74LS20接 /INT0 ),无按键按下时,数码管循环画“ 8”;有按键按下时产生中断并将按键的键值 0~F 通过串行口输出,在数码管上显示 3秒钟后返回;返回后,数码管继续循环画“ 8”。

3.将 P1 口矩阵键盘改为 8 个独立按键(用中断方式设计),键盘通过74LS30 (8 输入与非门)和 74LS04(六反相器)与 /INT0 相连,重新编写识别和显示程序。

四、实验原理矩阵键盘识别一般应包括以下内容:1)判别有无键按下。

2)键盘扫描取得闭合键的行、列号。

3)用计算法火或查表法得到键值。

4)判断闭合键是否释放,如果没释放则继续等待。

5)将闭合键的键值保存,同时转去执行该闭合键的功能。

五、实验步骤1.用 Proteus 设计键盘接口电路;2.在Keil C51中编写键盘识别程序,编译通过后,与Proteus 联合调试;3.按动任意键,观察键值是否能正确显示。

六、电路设计及调试、程序1)程序设计:矩阵键盘#include<>#define uchar unsigned char#define uint unsigned intuchar codetable1[]={0x00,0x01,0x21,0x61,0x65,0x6d,0x7d,0x7f};uchar codekey_table[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};R4S6S5 S4S3 1nF19XTAL1P0.0/AD0 39S2X138S1 P0.1/AD1 U1S0CRYSTALP0.2/AD2 3736 9SRG8R318 XTAL2P0.3/AD3 R35P0.4/AD4C1348P0.5/AD5 C1/->3322pF9P0.6/AD6 32RSTP0.7/AD71 31uFP2.0/A8 212&1DR1722P2.1/A923 4S0P2.2/A1029 2410kPSEN P2.3/A11S130 25 5ALE P2.4/A123126EAP2.5/A13S2 27 6P2.6/A1428P2.7/A1510S3P1.0 1P1.0 P3.0/RXD 10P1.1 2 1111S4P1.1 P3.1/TXDP1.2 3 12P1.2 P3.2/INT0P1.3 4 1312S5P1.3 P3.3/INT1P1.4 5 14P1.4 P3.4/T0P1.5 6 1513S6P1.5 P3.5/T1 P1.6 7 16P1.6 P3.6/WRP1.7 81774LS164P1.7 P3.7/RDP1.0P1.1P1.2P1.3 P1.4 P1.5 P1.6 P1.71U3:A2 64 574LS21R41nF 19XTAL1P0.0/AD039X138P0.1/AD1U1CRYSTALP0.2/AD2 3736 9SRG8R318 XTAL2P0.3/AD3 R35 P0.4/AD434 8C1P0.5/AD5 C1/->33P0.6/AD622pF932RSTP0.7/AD713&1uFP2.0/A8 21 21DR1722P2.1/A923 4S0P2.2/A10R1 R2 R5 R6 R7 R8 R9 R1029 PSEN24 10kP2.3/A11 5S110k10k10k10k10k10k10k10k30ALE P2.4/A12 253126EAP2.5/A13276S2 P2.6/A14 28P2.7/A15S310P1.0 1 P1.0 P3.0/RXD 10P1.1 2 1111S4P1.1 P3.1/TXDP1.2 3 12P1.2 P3.2/INT0P1.3 4 13 12S5 P1.3 P3.3/INT1 P1.4 5 14 P1.4 P3.4/T0P1.5 6 1513S6P1.5 P3.5/T1P1.6 7 16P1.6 P3.6/WR P1.781774LS164P1.7P3.7/RD2U2:A74LS0411U323485 6 11 1274LS30验中在做矩阵键盘实验时, 会出现进入中断一次后跳出来再按键不会再进入中断显示的情况原因是:没有在中断函数最后令 P1=0xf0,在边沿触发方式下退出中断程序时P1=0xf ,外部中断 0 为低电平,不会有下降产生, 仅执行一次中断后再不会有中断产生,即使有按键按下。

《8259中断控制器实验》的实验报告

《8259中断控制器实验》的实验报告

实验六8259中断控制器实验6.1 实验目的(1) 学习中断控制器8259的工作原理。

(2) 掌握可编程控制器8259的应用编程方法。

6.2 实验设备PC微机一台、TD-PIT+实验系统一套。

6.3 实验内容1. 单中断应用实验(1)编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示一个字符。

(2)编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示“Hello”,中断5次后退出。

2.扩展多中断源实验利用实验平台上8259控制器对扩展系统总线上的中断线INTR进行扩展。

编写程序对8259控制器的IR0和IR1中断请求进行处理。

6.4 实验原理1. 8259控制器的介绍中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。

它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。

同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。

它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU传送中断类型号。

8259A的内部结构和引脚如图6-1所示。

8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。

8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1-OCW3分别写入初始化命令寄存器组和操作命令寄存器组。

ICW1-ICW4各命令字格式如图6-2所示,OCW1-OCW3各命令字格式如图6-3所示,其中OCW1用于设置中断屏蔽操作字,OCW2用于设置优先级循环方式和中断结束方式的操作命令字,OCW3用于设置和撤销特殊屏蔽方式、设置中断查询方式以及设置对8259内部寄存器的读出命令。

操作系统实验,实验6软中断信号及处理

操作系统实验,实验6软中断信号及处理

设置一个时间值(闹钟时间),在将来的某个时刻该时间值会被超过。 当所设置的时间值被超过后,产生SIGALRM信号 如果不忽略或不捕捉此信号,则其默认动作是终止该进程 每个进程只能有一个闹钟时间。如果在调用alarm时,以前已为该进 程设置过闹钟时间,而且它还没有超时,则该闹钟时间的余留值作 为本次alarm函数调用的值返回。以前登记的闹钟时间则被新值代换
#include<unistd.h> #include<signal.h>
void handler() { printf("hello\n");} int main() { int i; signal(SIGALRM,handler); alarm(5); for(i=1;i<7;i++){ printf("sleep %d ...\n",i); sleep(1); } }
else { /*父进程*/ sleep(3); kill(pid,SIGKILL); /*向子进程发送SIGKILL信号*/ printf("parent send signal to kill child!\n"); waitpid(pid,NULL,0); /*等待pid退出*/ printf("child process exit!\n"); exit(0); } }
信号事件的发生有两个来源
硬件来源,比如我们按下了键盘或者其它
硬件故障 软件来源,最常用发送信号的系统函数是 kill, raise, alarm和setitimer以及sigqueue 函数,软件来源还包括一些非法运算等操 作
Linux中有30个软中断信号和31个实时
软中断信号

嵌入式软件开发基础实验报告 4×4键盘控制

嵌入式软件开发基础实验报告 4×4键盘控制

上海电力学院嵌入式软件开发基础实验报告题目:【ARM】 4x4 键盘控制实验专业:电子科学与技术年级:姓名:学号:一、实验目的通过实验掌握键盘控制与设计方法。

熟练编写ARM 核处理器S3C44B0X 中断处理程序。

二、实验设备硬件:Embest EduKit-III 实验平台,Embest ARM 标准/增强型仿真器套件,PC 机。

软件:Embest IDE Pro ARM 集成开发环境,Windows 98/2000/NT/XP三、实验内容使用实验板上5x4 用户键盘,编写程序接收键盘中断。

通过IIC 总线读入键值,并同将读到的键值发送到串口。

四、实验原理用户设计行列键盘接口,一般常采用三种方法读取键值。

一种是中断式,另两种是扫描法和反转法。

中断式在键盘按下时产生一个外部中断通知CPU,并由中断处理程序通过不同的地址读取数据线上的状态,判断哪个按键被按下。

本实验采用中断式实现用户键盘接口。

扫描法对键盘上的某一行送低电平,其他为高电平,然后读取列值,若列值中有一位是低,表明该行与低电平对应列的键被按下。

否则扫描下一行。

反转法先将所有行扫描线输出低电平,读列值,若列值有一位是低,表明有键按下;接着所有列扫描线输出低电平,再读行值。

根据读到的值组合就可以查表得到键码。

五、实验设计1. 键盘硬件电路设计(1) 键盘控制电路(2) 工作过程键盘动作由芯片ZLG7290 检测,当键盘按下时,芯片检测到后在INT 引脚产生中断触发电平通知处理器,处理器通过IIC 总线读取芯片中保存的键值。

六、实验操作步骤1. 准备实验环境使用Embest 仿真器连接目标板,使用Embest EduKit-III 实验板附带的串口线,连接实验板上的UART0 和PC 机的串口。

2. 串口接收设置在PC 机上运行windows 自带的超级终端串口通信程序(波特率115200、1 位停止位、无校验位、无硬件流控制);或者使用其它串口通信程序。

键盘和中断实验课程设计

键盘和中断实验课程设计

键盘和中断实验课程设计一、教学目标本课程的学习目标主要包括知识目标、技能目标和情感态度价值观目标。

知识目标要求学生掌握键盘和中断的基本概念、原理和应用。

技能目标要求学生能够运用所学的知识进行键盘和中断实验,并能够分析实验结果。

情感态度价值观目标要求学生培养对科学实验的兴趣和热情,增强团队合作意识和问题解决能力。

通过本课程的学习,学生将能够理解键盘和中断在计算机系统中的重要作用,掌握相关的实验操作技能,并能够运用所学知识解决实际问题。

同时,学生也将培养对科学实验的兴趣和热情,增强团队合作意识和问题解决能力。

二、教学内容本课程的教学内容主要包括键盘和中断的基本概念、原理和应用。

首先,将介绍键盘的基本结构和原理,包括键盘的组成、工作原理和编码方式。

然后,将介绍中断的概念和作用,包括中断的类型、处理过程和在中断中进行的操作。

最后,将结合实际案例,介绍键盘和中断在计算机系统中的应用,如键盘输入处理、中断服务例程的编写等。

教学内容的安排将根据学生的学习情况和教学进度进行调整,确保学生能够充分理解和掌握所学知识。

教材将选用权威的专业书籍,并结合实际的案例和实验来进行教学。

三、教学方法本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。

首先,通过讲授法向学生传授键盘和中断的基本概念和原理。

然后,通过讨论法引导学生进行思考和交流,培养学生的批判性思维和问题解决能力。

接着,通过案例分析法让学生结合实际案例进行分析和讨论,加深对知识的理解和应用。

最后,通过实验法让学生亲自动手进行实验,培养学生的实践能力和创新精神。

教学方法的选择将根据学生的学习情况和教学目标进行调整,以最大程度地激发学生的学习兴趣和主动性。

四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备等。

教材将选用权威的专业书籍,以保证学生能够获得准确和全面的知识。

参考书将提供更多的相关资料和案例,以丰富学生的学习体验。

多媒体资料将通过图像、视频等形式展示键盘和中断的原理和实验过程,以帮助学生更好地理解和记忆。

Linux0.01键盘中断的C语言实现

Linux0.01键盘中断的C语言实现
ln u c o gfn

2 键 盘中断设 计与实现
由于 c语言程序无法直接实现诸 如 ps 、o 、 uh pp
it r 等汇 编语 言指令 , 以键 盘 中断 的主 框架仍 用 汇 e 所
编语 言 实现 , 将其 键 盘处理 功 能用 C语 言 编程实 现 .
2 1 A CI . S I 码映射 表
Vo . 2 № 8 13
Au . 2 1 g 01
Ln x0 O iu . 1键 盘 中 断的 C语 言 实现
于 江 涛 曲 波 ,
(. 1 通化 师范学 院 计算机科学系 , 吉林 通化 14 0 ;. 3 0 2 2 南京 晓庄学院 数学与信息技术 学院, 江苏 南京 2 17 ) 11 1
以适 当改 造 , 在 当前 Ln x平 台编 译 运行 , 常 可于按 键 的 扫 描码 , 标 变 量 下
对应 于 A CI . S I码 例如 按下 “ S ” , E C 键 该键 的扫描 码
为 “ ” 其对应 的 A CI 1, S I码为 “7 . 2” 由于 Lns iu 是芬 兰人 , 以 当初 Ln x .1的键 所 iu O 0 盘 映射是按 芬 兰键 盘 设计 的. 笔者 在 本程 序 中使 用 通用 的美 国键盘 映射 . Si 组 合键 及 At 合 键 的 映 射 表 与 此类 似 , hf t l组

要 : 阐述了用 c语 言改写 L u . 1 文章 i x 0 键盘模块的技术要 点 , n 0 包括 A CI S I码映射表 、 盘处理子程 序跳转表 、 盘处理 键 键
程序、 键盘 中断程序 的编程 方法及 关键代码. 关键词 :iu . 1键 盘 中断 ; Ln x 0 ; 0 C语言编程 中图分类号 :P 1 文献标志码 : 文章编号 :0 8— 9 4 2 1 )8— 0 4—0 T 36 A 10 7 7 (0 10 0 1 3

操作系统实验报告 中断操作

操作系统实验报告 中断操作

实验一时钟中断事件模拟实习目的模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序。

通过实习了解中断及中断处理程序的作用。

本实习模拟“时钟中断事件”的处理,对其它中断事件的模拟处理,可根据各中断事件的性质确定处理原则,制定算法。

实习内容现代计算机系统的硬件部分都设有中断机构,它是实现多道程序设计的基础。

中断机构能发现中断事件,且当发现中断事件后迫使正在处理器上执行的进程暂时停止执行,而让操作系统的中断处理程序占有处理器去处理出现的中断事件。

对不同的中断事件,由于它们的性质不同,所以操作系统应采用不同的处理。

实习原理及编程思想(1) 出现中断事件,硬件就把它记录在中断寄存器中。

中断寄存器的每一位可与一个中断事件对应,当出现某中断事件后,对应的中断寄存器的某一位就被置成“1”。

本实习中,用从键盘读入信息来模拟中断寄存器的作用,用计数器加1来模拟处理器执行了一条指令当读入信息=0时,表示无中断事件发生,继续执行指令;当读入信息=1时,表示发生了时钟中断事件,转时钟中断处理程序。

(2)计算机系统有一时钟,按电源频率(50Hz)产生中断请求信号,即每隔20毫秒产生一次中断请求信号,称时钟中断信号,时钟中断的间隔时间(20毫秒)称时钟单位。

我们可用自己确定的频率在键盘上键入“0”或“1”来模拟按电源频率产生的时钟中断信号。

(3) 中断处理程序应首先保护被中断的现行进程的现场(通用寄存器内容、断点等),现场信息可保存在进程控制块中;然后处理出现的中断事件,根据处理结果修改被中断进程的状态;最后转向处理器调度,由处理器调度选择可运行的进程,恢复现场使其运行。

本实习主要模拟中断事件的处理,用打印相应的字符代替保护现场和处理器调度的工作。

(4) 为模拟时钟中断的处理,先分析一下时钟中断的作用。

利用时钟中断可计算日历时钟,也可作定时闹钟等。

定时闹钟——对需要定时的场合,例如,处理器调度采用“时间片轮转”策略调度时,可把轮到运行的进程的时间片值(以时钟单位计算)送到称为“定时闹钟”的工作单元中,每产生一次时钟中断就把定时闹钟值减1,当该值为“0”时,表示确定的时间已到,起到定时的作用。

中断以及da、ad实验讲解

中断以及da、ad实验讲解

SBUF=0x5e; //发送的是什么??? while(!TI); TI=0; SBUF=0x77; while(!TI); TI=0; delayms(1500);
}
实验八、串口发送显示原理
74LS164为8位串入并出移位寄 存器,其引脚如图所示; 1、2为 串行输入端,Q0~Q7 为并行输出端,CLK为移位时钟脉 冲,上升沿移入一位;MR为清零 端,低电平时并行输出为零。
DA转换时序
直通方式
注意ile,cs,wr1,wr2和xfer信号满足高低低低 低的要求即可 实验九选作:利用da生成一个类似鱼的图形
DA转换时序
void main() { uchar val,y; P2=0; while(1) { if(val%2==0) //这里如何要分 { y=80*sin(1.48*val/100)+140; //为什么要选这些参数?? P2=y; if(val<127)val+=5; //为何这里要有两个增量 if(val>127) val+=3; if(val>=255) val=0; delayms(3); }
DA转换时序(续)
else { y=80*sin(1.48*val/100+3.14)+140; P2=y; if(val<127)val+=5; if(val>127) val+=3; if(val>=255) val=0; delayms(5); } } }
建议与要求
大家课后一定要多发时间 用点心思来做课题 没有办不成的事情,只要我们用心去做
void main(){ EA=1; //全局中断允许打开 EX0=1; //打开外部中断0 EX1=1; //打开外部中断1 PX1=1; //设外部中断1为高优先中断 PX0=0; //设外部中断0为低优先中断 IT0=0; //设外部中断0为电平触发 IT1=0;// 设外部中断1为电平触发 ……} void I0()interrupt 0//外部中断0中断程序 { if(P3^2==0)//键盘去抖 {delay(10); if(P3^2==0) {// 具体的功能} } }

键盘中断微机实验报告

键盘中断微机实验报告

键盘中断微机实验报告1. 引言键盘中断是计算机硬件系统中常见的一种输入设备中断方式,其功能是在用户通过键盘输入时,中断处理器正常运行的流程,将键盘输入的数据传递给操作系统供其处理。

本次实验旨在通过搭建一个简单的键盘中断实验系统,加深对键盘中断原理及操作的理解。

2. 实验原理2.1 键盘中断键盘中断是一种异步的硬件中断方式,即键盘通过给中断控制设备发送中断请求信号,从而将中断信息传递给CPU。

一旦发生键盘中断,CPU将停止当前执行的任务,跳转到事先设置好的中断处理程序,处理键盘中断事件。

2.2 实验系统本次实验使用Intel 8086微处理器、键盘控制器8042和键盘作为实验系统的主要硬件设备。

系统的基本结构如下图所示:![实验系统结构图](- 键盘:作为输入设备,接收用户的键盘输入。

- 键盘控制器8042:负责控制键盘与计算机之间的数据传输。

- CPU:处理器负责执行键盘中断的相关指令。

3. 实验步骤3.1 搭建实验系统首先,需要将键盘控制器8042插入到计算机的适当位置,并将键盘连接到控制器上。

确保硬件的连接正确无误。

3.2 编写中断处理程序在编程方面,我们使用汇编语言编写键盘中断的处理程序。

具体而言,我们需要完成以下任务:- 将中断向量表中对应键盘中断的入口地址设置为我们编写的处理程序的入口地址。

- 编写处理键盘中断的程序代码,实现对键盘输入数据的接收和处理。

3.3 设置中断控制器在实验中,要进行正确的中断处理,还需要设置中断控制器8042。

具体而言,我们需要完成以下任务:- 将中断请求线IRQ1(对应键盘中断)与中断控制器连接。

- 打开中断屏蔽位,以允许中断请求通过。

3.4 运行实验程序完成前述步骤后,我们可以运行实验程序,测试键盘中断的正常工作。

当用户按下键盘时,键盘中断会触发,并将键盘输入的数据传递给中断处理程序进行处理。

4. 实验结果与分析经过测试,我们发现实验系统能够正确地接收和处理键盘输入的数据。

信号实训实验报告

信号实训实验报告

信号实训实验报告实验目的本次实训的目的是通过实际操作和实验验证,帮助学生理解信号的概念、信号的特性以及信号在实际工程中的应用。

实验环境本次实训使用的是基于Linux系统的开发环境,采用C语言进行编程。

实验内容实验一:信号的基本概念和处理实验二:信号的传递机制和多进程间的信号通信实验三:信号处理函数的编写和应用场景实验一:信号的基本概念和处理在第一个实验中,我们首先学习了信号的基本概念和处理方法。

通过编写一个简单的C程序,我们能够了解信号的产生方式以及信号的处理过程。

在程序中,我们使用signal函数注册了对SIGINT信号(即键盘中断信号)的处理函数。

当用户按下键盘的Ctrl+C组合键时,程序会收到该信号,并执行相应的处理函数。

我们通过在处理函数中输出一条提示信息的方式,验证了该信号处理函数的正确性。

实验二:信号的传递机制和多进程间的信号通信在第二个实验中,我们学习了信号的传递机制以及多进程间的信号通信。

我们编写了一个父子进程的程序,通过使用fork函数创建子进程,并在父子进程间进行信号的传递。

在程序中,父进程首先发送一个自定义的信号给子进程,然后子进程收到信号后执行相应的处理函数。

通过输出一条提示信息,我们验证了信号的传递和接收是可行的。

实验三:信号处理函数的编写和应用场景在第三个实验中,我们学习了信号处理函数的编写和在实际工程中的应用场景。

我们编写了一个简单的程序,模拟了一个网络服务器的功能,通过使用signal 函数注册对SIGCHLD信号(即子进程退出信号)的处理函数,实现了对子进程的回收处理。

当子进程退出时,会发送该信号给父进程,父进程收到信号后执行相应的处理函数。

在处理函数中,我们调用了waitpid函数进行子进程的回收,并输出了子进程的退出状态。

实验结果与分析通过以上三个实验,我们深入了解了信号的概念、信号的处理方法以及信号在实际工程中的应用场景。

信号在进程间通信、异常处理等方面起着重要的作用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南通大学实验报告
院系:计算机科学与技术姓名:
课程名称:接口技术成绩:
学号:1213022013
指导教师:李跃华同组实验者:
实验日期:2014-5-7
实验名称:键盘中断实验
一.实验目的
1.熟练运用CodeWarrior 嵌入式开发系统环境、C 语言、调试方式。

2.复习串行通信接口(SCI)的内容。

3.加强键盘中断基本原理及编程原理的理解。

4.理解“行扫描”法的原理并能进行键值识别和键值编码二.实验内容
键盘的 c 语言编程:
1)初始化,先按IO 口方式初始化,即定义列线为输入且上拉,行线为输出,然后依
输入口的键盘功能初始化相应的寄存器。

2)定义键值表
3)扫描一次,读取键值
4)获得键盘定义值
行扫描法是使键盘的某一行输出为低电平,其余行为高电平,然后读取列值,如果列值
中有某位为低电平,则表明该行和列交点处的键被按下;若为全高则再扫描下一行,直至扫
描完全部的行线为止。

这样就可以确定是哪一行哪一列交点的键被按下。

2. 软件设计
三程序流程图
主程序中构件初始

在主函数里添加波特率
在中断中加接受函数
Tool测试
按键值在pc上显示
四编程
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++;
//位选位+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_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,波特率9600
LEDInit(); //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口通信的知识,在熟悉代码的前提下在主函数里初始化波特率何在中断函数里添加一个接收函数就可以。

设置键盘中断允许寄存器,当键盘有键被按下时,立即产生中断,中断程序处理按键事件,比如确定哪个键被按下,然后转换为该键的定义值。

相关文档
最新文档