单片机。键盘中断模块编程实例.doc
文本预览下载声明
9.2 汇编语言键盘中断模块编程实例
(2)键盘编程汇编语言子程序
下面给出有关键盘编程的汇编语言子程序。它们是:键盘中断初始化子程序、扫描法读取键值子程序、键值转为定义值子程序。即使不使用中断方式识别按键,三个子程序仍然需要使用。只不过键盘初始化子程序中改为不允许中断进入。扫描法读取键值与键值转为定义值两个子程序在键盘编程中通常需要使用的。
KBsub.ASM
*------------------------------------------------------*
*文件描述:包含3个键盘子程序,分别为: *
* (1)键盘初始化子程序(KB_Init) *
* (2)扫描读取键值子程序(KB_Scan) *
* (3)键值转为定义值子程序(KB_Def) *
*------------------------------------------------------*
*===================以下为子程序源代码=================*
KB_P EQU PTA ;键盘接在PTA口上
KB_D EQU DDRA ;相应的方向寄存器
KB_PUE EQU PTAPUE ;相应的上拉电阻允许寄存器
*KB_Init:键盘初始化子程序------------------------------*
*功能:初始化键盘中断的引脚,但未开放键盘中断 *
*入口:无 *
*出口:无 *
*堆栈深度:2 *
*------------------------------------------------------*
KB_Init:
PSHA ;保护A
LDA #$00 ;复位相应寄存器
STA KB_P
LDA # ;定义7-4为输入,3-0为输出
STA KB_D
LDA # ;定义输入引脚有内部上拉电阻
STA KB_PUE
BSET 1,INTKBSCR ;屏蔽键盘中断(IMASK=1)
LDA # ;允许输入引脚的中断可进入
STA INTKBIER
BSET 2,INTKBSCR ;清除键盘中断请求(ACKK=1)
PULA ;恢复A
RTS
*KB_Scan:扫描读取键值子程序----------------------------*
*功能:扫描4*4键盘,读取键值-A,无按键,为$FF *
*入口:无 *
*出口:A=键值 *
*堆栈深度:2+2=4 *
*------------------------------------------------------*
KB_Scan:
AIS #-!2 ;开辟临时变量
LDA # ;使第一根行线为0(低电平)
STA !1,SP
LDA #$04 ;将扫描4根行线
STA !2,SP
KB_Scan1:
LDA KB_P ;取KB_P-A
ORA # ;KB_P.7-4保留,KB_P.3-0为1
AND $1,SP ;令KB_P.n=0,n=0、1、2、3
STA KB
显示全部