单片机。键盘中断模块编程实例
单片机中断触发方式代码

单片机中断触发方式代码【实用版】目录1.单片机中断概述2.中断触发方式3.代码实例解析正文【单片机中断概述】单片机中断是指在程序运行过程中,由于某种原因导致的程序执行流程被暂时打断,转去处理其他任务,待处理完毕后再回到原程序继续执行。
中断在单片机系统中具有重要作用,例如按键、传感器、通信等外部事件的处理,以及系统异常情况的监测等。
【中断触发方式】在单片机中,中断可以通过以下几种方式触发:1.硬件触发:外部硬件设备通过引脚触发中断,例如按键、传感器等。
2.软件触发:程序内部通过函数或指令触发中断,例如定时器溢出、计数器溢出等。
3.串行通信触发:通过串行通信接口接收到的数据触发中断,例如UART 接收到数据。
4.异常触发:单片机内部检测到异常情况触发中断,例如复位、看门狗超时等。
【代码实例解析】以硬件触发方式为例,使用单片机的定时器触发中断。
以下是一个简单的示例代码:#include <reg52.h>#include <intrins.h>sbit T0_TRG = P1^0; // 定时器 0 触发端口定义void timer0_isr() interrupt 1 // 定时器 0 中断服务函数{TH0 = 0x00; // 清除定时器 0 中断标志TL0 = 0x00; // 清除定时器 0 中断标志// 在这里添加中断处理代码}void main(){TMOD = 0x20; // 定时器 0 工作在方式 2,即 16 位自动重装模式TH0 = 0x00; // 设置定时器 0 计数值为 0TL0 = 0x00; // 设置定时器 0 计数值为 0EA = 1; // 开总中断ET0 = 1; // 开定时器 0 中断TR0 = 1; // 启动定时器 0while (1){// 在这里添加主程序代码}```在上述代码中,定时器 0 的触发端通过引脚 P1^0 连接到外部硬件设备,当外部硬件设备产生触发信号时,定时器 0 会触发中断。
51单片机:中断实现按键按一下数码管从00加到99循环(C语言)

51单⽚机:中断实现按键按⼀下数码管从00加到99循环(C语⾔)51单⽚机:中断实现按键按⼀下数码管从00加到99循环(C语⾔)
题⽬要求:
在51单⽚机上通过C语⾔编写代码,使⽤中断,按键按⼀下数码管上⾯的数字从00开始加1,实现00——99的循环
准备⼯作:
keil建⽴⼯程
proteus仿真验证
代码如下:
/*
*功能:⽤中断实现开关每按⼀次,数码管数字加⼀,
*实现00-99的循环
*/
#include<reg52.h>
sbit SEG1 = P1^0;//定义显⽰⼗位数码管
sbit SEG2 = P2^0;//定义显⽰个位数码管
sbit key = P3^2;//定义按键
int sum =0;
int i,j;
unsigned char code DSY_CODE[]={0xC0,0xF9,0xA4,
0xB0,0x99,0x92,
0x82,0xF8,0x80,0x90};//共阳极数码管
void main()
{
IE =0x81;//使⽤外部中断0
IT0 =1;
while(1);
}
void EX0_INT(void) interrupt 0
{
sum++;
i = sum/10;//⼗位数字
j = sum%10;//个位数字
if(sum ==100)
{
sum =0;
}
P1 = DSY_CODE[i];//数码管显⽰⼗位数字
P2 = DSY_CODE[j];//数码管显⽰个位数字
}
(写的不是很规范,仅供参考)
仿真结果:。
有关51单片机中断的形式和C语言编程格式[精选5篇]
![有关51单片机中断的形式和C语言编程格式[精选5篇]](https://img.taocdn.com/s3/m/c8b7e398f021dd36a32d7375a417866fb84ac0eb.png)
有关51单片机中断的形式和C语言编程格式[精选5篇]第一篇:有关51单片机中断的形式和C语言编程格式有关51单片机中断的形式和C语言编程格式void INT0()interrupt 0 using 1 {.........} interrupt 0 指明是外部中断0; interrupt 1 指明是定时器中断0; interrupt 2 指明是外部中断1; interrupt 3 指明是定时器中断1; interrupt 4 指明是串行口中断;using 0 是第0组寄存器; using 1 是第1组寄存器; using 2 是第2组寄存器; using 3 是第3组寄存器;例如:/*-----------------外部中断程序-----------------*/ void ISR_Key(void)interrupt 0 using 1 { P1=~P1;//s3按下触发一次,P1取反一次 }/*-----------------串口中断程序-----------------*/ void UART_SER(void)interrupt 4 //串行中断服务程序 {unsigned char Temp;//定义临时变量if(RI)//判断是接收中断产生{RI=0;//标志位清零Temp=SBUF;//读入缓冲区的值P1=Temp;//把值输出到P1口,用于观察SBUF=Temp;//把接收到的值再发回电脑端}if(TI)//如果是发送标志位,清零TI=0;}第二篇:--单片机C语言编程实训实习报告实习地点:201机房实习时间:2014.12.1——2014.12.6 实习项目:单片机C语言编程实训指导老师:骆乐姓名:班级:电信3121一、实习内容 1.计算字符的ASCII码编写一个程序,在终端输入一个字符,输出它的ASCII码。
解题思路:通常我们输出一个字符一般用printf(“%c”,c);的形式,因为输出格式规定的是“%c”,因此表示以字符的形式输出,所以我们看到的是相对应的ASCII码的字符形式。
4.2 中断方式矩阵键盘

d
E
F
第3行
C1
30pF
R5
10k
C2
30pF
U1 X1 19 XTAL1
CRYSTAL 18 XTAL2
9 RST
C3
10uF
29 30 31
PSEN ALE EA
U2
P1.0 18 P1.1 17 P1.2 16 P1.3 15 P1.4 14 P1.5 13 P1.6 12
11
B0 B1 B2 B3 B4 B5 B6 B7
批
文
子上的电话铃响了。
件
➢她读或写完正在读或写的字或 电话铃响
接 电
话
句子后,去接电话。
➢听完电话以后,她又从打断的
批 文
件
地方继续读或写。
单片机 应用技术
项目四 键盘的设计与实现
认识中断
中断
1. 当CPU正在执行某个程序时,由单片机内部 主
或外部的原因引起的紧急事件,向CPU发出 请求处理的信号;
项目四 键盘的设计与实现
中断方式矩阵键盘电路
ROL0 ROL1 ROL2 ROL3 COL0 COL1 COL2 COL3
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6
第0列
R4
10k
第1列
R3
10k
第2列
第3列
R2
R1
10k
10k
0
1
2
3
第0行
4
5
6
7
第1行
8
9
A
b
第2行
C
设计一个4×4中断方式矩阵键盘
任务要求
1. 当键盘无键按下时,单片机正常工作,不执行键盘扫 描程序;
stm32实训:中断、按键、灯光综合

实训题目:按键控制LED模式并使用中断
描述:在这个实训中,你将使用STM32L151C8T6微控制器编写一个程序,以通过三个按键来控制两个LED灯的状态,而且这次LED有不同的模式,并使用中断来检测按键的状态变化。
具体要求如下:
要求:
使用STM32CubeIDE或其他适合的开发环境创建一个新的STM32L151C8T6项目。
配置两个GPIO引脚分别用于控制两个LED灯的开关,将其设置为输出模式。
配置三个GPIO引脚作为按键的输入引脚。
配置外部中断(例如,使用EXTI线路)以检测按键的状态变化(按下和释放)。
在中断处理程序中检测按键的状态变化,并实现以下LED模式切换:
当按下按键1时,切换LED1的模式(例如,常亮、闪烁、呼吸等)。
当按下按键2时,切换LED2的模式。
当按下按键3时,同时熄灭两个LED。
为每个LED模式实现不同的效果。
例如,如果选择闪烁模式,LED应该以不同的频率闪烁;如果选择呼吸模式,LED应该逐渐变亮和变暗。
编写一个无限循环,以让程序持续运行,允许按键切换LED的模式和控制LED的开关。
测试你的程序,确保按下不同的按键会导致相应的LED模式切换和LED状态变化。
这个实训题目要求你不仅要处理按键的状态变化,还要实现多种LED模式,每种模式有不同的效果。
这将帮助你深入了解STM32的GPIO配置、中断处理以及复杂的LED控制。
51单片机中断系统程序实例

51单片机中断系统程序实例(STC89C52RC)51单片机有了中断,在程序设计中就可以做到,在做某件事的过程中,停下来先去响应中断,做别的事情,做好别的事情再继续原来的事情。
中断优先级是可以给要做的事情排序。
单片机的学习不难,只要掌握学习方法,学起来并不难。
什么是好的学习方法呢,一定要掌握二个要点:1. 要知道寄存器的英文全拼,比如IE = interrupt中断不知道全拼,要去猜,去查。
这样就可以理解为什么是这个名称,理解了以后就不用记忆了。
2. 每个知识点要有形像的出处比如看到TF0,脑子里马上要形像地定位到TCON寄存器的某位看到ET0, 马上要形像地定位到IE寄存器的第2位/tuenhai/独家揭秘:形像是记忆的最大技巧。
当人眼看到某个图时,是把视觉信号转化成电信号,再转化成人能理解的形像。
当我们回忆形像时,就是在重新检索原先那个视觉信号,并放大。
在学习过程中,不断练习检索、放大信号,我们的学习能力就会越来越强。
写程序代码时,也要把尽量把每行代码形像化。
51单片机内中断源8051有五个中断源,有两个优先级。
与中断系统有关的特殊功能寄存器有IE(中断允许寄存器)、IP(中断优先级控制寄存器)、中断源控制寄存器(如TCON、SCON的有关位)。
51单片机的中断系统结构如下图(注意,IF0应为TF0):8052有6个中断源,它比8051多一个定时器/计数器T2中断源。
8051五个中断源分别是:(1)51单片机外部中断源8051有两个外部中断源,分别是INT0和INT1,分别从P3.2和P3.3两个引脚引入中断请求信号,两个中断源的中断触发允许由TCON的低4位控制,TCON的高4位控制运行和溢出标志。
INT0也就是Interrupt 0。
在这里应该看一下你的51单片机开发板的电路原理图。
离开形像的记忆是没有意义的。
读到上面这句,你应该回忆起原理图上的连接。
任何记忆都转化为形像,这是学习的根本原理,我们通过学习单片机要学会这种学习方法,会让你一辈子受益无穷。
单片机——中断和矩阵键盘

主讲人:陶旭辉
三 . 外部中断的处 理过程
3.1 中断请求
在中断允许的情况下,单片 机收到外部的低电平或者下 降沿时,可认为外部发出了 中断请求。
外电路如何发出低电平信号 或者下降沿信号呢?
主讲人:陶旭辉
3.11 中断响应条件
在满足以下2个条件时,CPU将响应中断。
1)有中断源发出中断请求; 2)中断允许 a 中断总允许位 EA=1 ; b 发出请求的中断源被允许中断; c CPU没有在执行一个同级或者优先级更高的中断服务 程序。
主讲人:陶旭辉
矩阵键盘
一、按键的抖动与消抖 为什么要消抖 按键按下瞬间会产生一段时间的毛刺(持续10mS左右)然后才稳 定的现象,如果不加消抖措施会在程序中误判为多次按下按键 通常采取软件消抖的方法,即程序检测到按键按下后,延时 10mS以上再次检测按键状态,如果状态仍然按下则为一次可靠 的按下。
主讲人:陶旭辉
自然优先级:
低
断串 口 中
中定 断时 器
高
断外 部 中
中定 断时 器 断外 部 中 0
1
主讲人:陶旭辉
1
0
中断系统结构图
主讲人:陶旭辉
五、中断的应用
初始化步骤: a.开放CPU中断并允许有关中断源中断(IE) b.确定中断优先级(IP) c.确定中断触发方式(TCON) 配置实例: void init_int1(void)//初始化INT1 { IP = 0x00;//使用自然中断优先级 EX1 = 1;// INT1中断开 IT1 = 1;// INT1下降沿触发(为0则为低电平触发) }
0x0003
外部中断0
0x000B
定时器0
0x0013
51单片机中断程序例子

51单片机中断程序例子1. 外部中断程序:外部中断是指由外部设备或外部信号触发的中断。
在51单片机中,通过设置中断允许位和中断优先级来实现对外部中断的响应。
例如,当外部设备发出一个信号时,单片机可以立即停止当前任务,转而执行外部中断程序。
外部中断程序的编写需要根据具体的外部设备和信号进行相应的处理,如读取设备状态、处理数据等。
通过外部中断程序,可以实现单片机与外部设备的互动和数据交换。
2. 定时器中断程序:定时器中断是指通过设置定时器的计数值和中断允许位,使得在指定的时间间隔内触发中断。
在51单片机中,可以通过定时器中断来实现定时任务的执行。
例如,可以设置一个定时器,在每隔一定的时间就触发中断,然后在中断程序中执行相应的任务,如数据采集、数据处理等。
通过定时器中断程序,可以实现定时任务的自动执行,提高系统的实时性和可靠性。
3.串口中断程序:串口中断是指通过串口通信接口接收或发送数据时触发的中断。
在51单片机中,可以通过设置串口中断允许位和中断优先级来实现对串口数据的中断处理。
例如,当接收到一个完整的数据包时,单片机可以立即停止当前任务,转而执行串口中断程序,对接收到的数据进行处理。
通过串口中断程序,可以实现单片机与外部设备的数据交换和通信。
4. ADC中断程序:ADC(模数转换器)中断是指在进行模数转换时触发的中断。
在51单片机中,可以通过设置ADC中断允许位和中断优先级来实现对模数转换结果的中断处理。
例如,当模数转换完成后,单片机可以立即停止当前任务,转而执行ADC中断程序,对转换结果进行处理和分析。
通过ADC中断程序,可以实现对模拟信号的采集和处理,用于实时监测和控制。
5. 外部中断优先级设置:在51单片机中,可以通过设置外部中断的中断优先级来确定中断的响应顺序。
中断优先级越高,优先级越高的中断会先被响应。
通过合理设置中断优先级,可以确保关键任务的及时响应和执行。
例如,当多个外部设备同时发出中断信号时,可以通过设置优先级,确保先响应优先级高的设备,保证系统的正常运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
KB_lnit:P SHA LDA STA LDA STA LDA STA#$00 ;KB_P #%00001111 KB_D #%11110000 KB PUE保护A 复位相应寄存器定义7-4为输入,3-0为输出 定义输入引脚有内部上拉电阻 屏蔽键盘中断(IMASK=1) 允许输入引脚的中断可进入 BSET 1,INTKBSCR ; LDA #%11110000 ;STA INTKBIER BSET 2,INTKBSCR ; PULA ;RTS*KB_Scan:扫描读取键值子程序 扫描4*4键盘,读取键值 ->A,无按键,为$FF 无A=键值清除键盘中断请求(ACKK=1) 恢复A*功能 *入口*出口* 堆栈深度:2+2=4 ** KB_Scan:AIS #-!2 ;LDA #%11111110 STA !1,S P LDA #$04; STA !2,S P KB_Scan1: LDA KB P ;开辟临时变量使第一根行线为0(低电平) 将扫描4根行线取 KB P->A9.2 汇编语言键盘中断模块编程实例(2)键盘编程汇编语言子程序下面给出有关键盘编程的汇编语言子程序。
它们是:键盘中断初始化子程序、 扫描法读取键值子程序、键值转为定义值子程序。
即使不使用中断方式识别按键, 三个子程序仍然需要使用。
只不过键盘初始化子程序中改为不允许中断进入。
扫描法读取键值与键值转为定义值两个子程序在键盘编程中通常需要使用的。
KBsub.ASM**文件描述 :包含3个键盘子程序,分别为:* (1) 键盘初始化子程序(KB_Init)* (2)扫描读取键值子程序 (KB_Scan) * (3)*键值转为定义值子程序 (KB_Def)KB_P EQU PTA ; KB_D EQU DDRA ; KB_PUE EQU PTAPUE ; *KB_Init:键盘初始化子程序*功能:初始化键盘中断的引脚,但未开放键盘中断 *入口 :无*出口 :无 *堆栈深度:2*:以下为子程序源代码========== ; 键盘接在PTA 口上相应的方向寄存器相应的上拉电阻允许寄存器台匕ORA #%00001111 ;KB P.7-4 保留,KB P.3-0 为 1AND $1,S P ; 令KB_P.n=0,n=0、1、2、3STA KB_PNOPNOPLDA KB_P ; 看第n行是否有键按下AND #%11110000 ;KE LP.7-4 保留,令低4位=0CBEQA #$F0,KB_Scan2 ; 本行无键按下,转KB_Scan2LDA KB_P ; 本行有键按下BRA KB_Scan_ExitKB_Scan2:SEC ;C=1ROL $1,S P ; 使下一个行线为0DBNZ !2,S P,KB_Scan1 ; 对行线循环LDA #$FF ; 没有键被按下返回$FFKB_Scan_Exit:AIS #!2 ; 释放临时变量RTS*KB_Def:键值转为定义值子程序----------------- * *功能:键值转为键盘定义值**入口:A=键值* *出口:A=键定义值**堆栈深度:2+3=5 * **KB_Def:P SHH ; 保护HXP SHXAIS #-!1 ; 开辟临时变量STA !1,S P ; 把键值存入(!1,SP)LDHX #KB_Table ; 取键盘定义表首地址KB_Def1:LDA ,XCMP #$00 ; 与0(定义表结束标志)相比较BEQ KB_Def3 ;=0, 表示即表中无次定义值CMP $1,S P ; 与键值相比较BNE KB_Def2 ; 不等,未找到转KB_Def2AIX #!1 ; 找到LDA ,X ; 取键定义值-〉ABRA KB_DefRKB_Def2:AIX #!2 ; 指向下一个键值BRA KB_Def1 ; 继续判断KB_Def3:LDA #$FF ; 无此定义,用FF标志KB_DefR:AIS #!1 ; 释放临时变量P ULX ; 恢复HXP ULHRTS;键盘定义表KB_Table FCB $EE,"1",$DE,"2",$BE,"3",$7E,"A"FCB $ED,"4",$DD,"5",$BD,"6",$7D,"B"FCB $EB,"7",$DB,"8",$BB,"9",$7B,"C"FCB $E7,"*",$D7,"0",$B7,"#",$77,"D"FCB $00922键盘中断编程举例下面给出的实例程序的功能是, 当按下键盘上任何一个键, 产生键盘中断,在键盘中断 程序中,通过串行口发送“键值”及“键定义值”。
PC 机方程序,接收它们,并显示。
(1)键盘中断编程汇编主程序实例编号:A03路径:\ASM\ A03_键盘实验(Keyboard.asm)键盘实验*[头文件]$include "GP 32ASM.H" *[两个起始地址] RAMstartAddr equ $0040 ;RAM 的起始地址 FlashStartAddr equ $8000 ; 程序开始地址KB Int:SEI ; 关总中断P SHH;保护HBSET 1,INTKBSCR ;禁止键盘中断JSR KB_Scan ; 扫描键盘,读取键值->A JSR SCISend1 ; 发送键值 JSR KB_Def ; 转成键定义值->A JSR SCISend1 ;发送键定义值 JSR KB_InitBCLR 1,INTKBSCR ; 开放键盘中断(IMASKK=0) P ULH; 恢复H CLI;开总中断RTI*文件名:Keyboard.asm*硬件连接: *程序描述: *目 *注的:意:PTA.7-4接键盘4根列线,PTA.3-0 接键盘 按下键盘按键,串口发送对应的键值 键盘扫描,键盘中断,键值识别,键盘编码 如果键盘插在实验板的上排插孔,无须连线 插孔,需手工接线 * --《嵌入式应用技术基础教程》教学实例4根行线 * ,若插在下排**[主程序]org FlashStartAddr ; MainInit:;;[ 系统初始化]SEI;LDHX #$023F TXS JSR JSRJSR程序起始地址 复位后程序从此开始执行 关中断GP 32Init SCIInit KB Init调系统初始化子程序 GP 32Init 调串行口初始化子程序 SCIInit 调键盘初始化子程序开放键盘中断(IMASK=0) 开中断BCLR 1,INTKBSCR CLI ;;[程序总循环入口,无中断时空操作MainLo op:NOP NOPBRA MainLoo p*==================以下为子程序存放处 *KB_Int:键盘中断处理程序 ------------*功能:键盘中断程序,把键定义值从串口发送出去 *调用子程序:(1)扫描法读取键值子程序 *(2)键值转为定义值子程序 (KB_Scan)(KB_Def)*[外部子程序存放处]$include "GP 32init.asm" $include "SCIInit.asm" $include "H08SCI.asm" $include "KBsub.asm" *[中断向量]ORG $FFE0 ;DW KB_Int ORG $FFFE ; DW MainInit(2)键盘中断编程的PC 机方的VB 界面与程序图9-4为针对上述 MCU 程序的PC 机方的VB 界面。
通过它可以清楚地知道定义值与键值的对应关系,若显示不对,可以修改键值转为定义值子程序中的键值表。
实例编号:A03 路径:\ASM\A03 键盘实验\VB KB'程序描述:把接收到的数据显示在接收窗口中键盘中断矢量 复位矢量Op tion Exp licit'Dim RecvData() As Byte P rivate Sub Form_Load() '清空有关文本框Txthex.Text ="" Txtchr.Text ="" '串行口初始化Call SCIinit(MSComm1, 1, "9600,N,8,1") '开放串行中断MSCommI.RThreshold = 1 End SubPublic Sub MSComm1_OnComm() Dim i As IntegerDim S1 As String, S2 As String MSCommI.RThreshold = 0 'RecvData = MSComml.In put 51 = Hex(RecvData(0)) 52 = Chr(RecvData(1)) Txthex.Text = S2 Txtchr.Text = S1 MSCommI.RThreshold = 1 ' End SubP rivate Sub CmdCLR_Click()' Txthex.Text ="" Txtchr.Text ="" End Sub检查未经声明的变量接收数据数组 '串行接收中断关闭串行中断开放串行中断 单击"清空-按钮图9-4键盘中断编程的PC 机方的VB 界面9.3 08C 语言键盘中断模块编程实例本节给出与汇编程序相对应的08C 语言程序。
PC 机部分的VB 程序相同。
931按键识别与键盘定义函数H08KB.CKB_P=0x00; //KB_D=0b00001111; // KB_P UE=0b11110000; //INTKBSCR|= (1<<IntBit);//INTKBIER=0b11110000; // INTKBSCR|=(1<<ACKKBit); // 复位KB_P定定义7-4为输入,3-0为输出 定义输入引脚有内部上拉电阻 屏蔽键盘中断(IMASKk=1) 允许输入引脚的中断可进入清键盘中断请求(ACKK=1)Scan:扫描读取键值函数 ---------------------能:扫描一次 4*4键盘上的按键,读取键值->*p ,若无按键,* P 为 0xf f数:无回:扫描到的键值*/unsigned char KB_Scan(void) {unsigned char line,i,t mp; line=0b11111110; //for(i=1;i<=4;i++)//*键盘初始化函数 --------- ------------------------能:初始化键盘中断的引脚,但未开放键盘中断 数:无 回:无*/void KB_lnit(void) {*//* *[以下为子程序源代码]*/ /*[头文件]*/ #include "GP 32C.H" #include "KB.h" /*KB Init: *功 *参} /*KB.*功 *使第一根行线为0(低电平)将扫描4根行线}if(i==5) tmp=0xff; return(t mp);}/*KB_Def: *功 *参 *返 *{tm p=KB_P; tmp |=0b00001111; KB_P=tmp&line;asm("NO P"); asm("NO P"); tmp=KB_ P; tmp&=0b11110000; if(tmp !=0xf0) //{ tmp=KB_ P;break;} else//line=(line<<1)|0x01;// //KB _P .7-4// //// 取 KB_P->tmp保留,KB_P.3-0 为 1 令KB_P.n=0,n=0、1、2、3 等待,消除按键抖动看第n 行是否有键按下 本行有键按下本行无键按下,扫描下一行键值转为定义值函数 能:键值转为定义值 数:键值回:键定义值*///键盘定义表const unsigned char KB_Table[]= {0xEE,'1',0xDE,'2',0xBE,'3',0x7E,'A', 0xED,'4',0xDD,'5',0xBD,'6',0x7D,'B', 0xEB,7',0xDB,8,0xBB,'9',0x7B,C, 0xE7,'*',0xD7,'0',0xB7,'#',0x77,'D', 0x00};unsigned char KB_Def(unsigned char KB_valve) {unsigned char KeyP ress; unsigned char i; unsigned char j; i=0; while(1) {j=KB_Table[i];// 与0(定义表结束标志)相比较 if (j==0)//=0,{Key Press=0xff; break;} // else //与键值相比较if (j==KB_valve) //{Ke yP ress=KB_Table[i+1];break;} // else i+=2;};return KeyP ress; }//即表中无次定义值 返回0xff找到取键定义值指向下一个键值,继续判断932键盘中断编程08C语言举例(1)键盘中断编程实例的08C主函数实例编号:C03 路径:\C\ C03 C03 键盘实验/* --------------- 键盘实验 ------------------------------ ** 工程名:Keyboard.prj **硬件连接:PTA.7-4 接键盘4根列线,PTA.3-0 接键盘4根行线**程序描述:按下键盘按键,串口发送对应的键值* 的:键盘扫描,键盘中断,键值识别,键盘编码*意:如果键盘插在实验板上排插孔,无须连线,若插在下* 排插孔,需手工接线《嵌入式应用技术基础教程》教学实例/*[头文件]*/#include "GP 32C.H"#include "KB.h"/*[主程序]*/void main(){asm("SEI");KB_Init();INTKBSCR&=〜(IvvIntBit); //asm("CLI"); //// 无中断时空操作while(1);} */// // 键盘中断头文件关总中断打开键盘中断(IMASKk=1) 开总中断(2)键盘中断编程实例的08C中断矢量表文件vectors08.c/* ---------------------------------------* 文件名:vectors08.c*功能:用于定义中断矢量表*//*[头文件]*/#include "GP 32C.H"#include "KB.h"#include "SCI.h"/*键盘中断处理函数-----------#p ragma interr up t_handler isrKBIvoid isrKBI(void){*/ unsigned char KB_valve; asmC'SEI");INTKBSCR|= (1<<IntBit);KB_valve=KB_Scan(); SCISend1(KB_valve);KB_valve=KB_Def(KB_valve); // SCISend1(KB_valve);KB_Init();INTKBSCR&=〜(KvIntBit); //asm("CLI"); //////////关总中断屏蔽键盘中断(IMASKK=1) 扫描键值键值转化为定义值重新初始化键盘打开键盘中断(IMASKK=O)开总中断}//#p ragma interr up t_handler isrDummy void isrDummy(void){}//中断矢量表,需定义中断函数,可修改下表中的相应项目#p ragma abs address:Oxffdc //中断向量表起始地址未定义的中断处理函数,本函数不能删除/* ----------------------------------------*文件描述:本文件包含了H08C键盘中断子函数,分别为:*(1)KB_Init: 键盘初始化函数*void KB_Init(void) **(2)KB_Scan: 扫描读取键值函数*unsigned char KB_Scan(void)*(3)KB_Def: 键值转为定义值函数*unsigned char KB_Def(unsigned char KB_valve) *。