📄 keyin.s
字号:
;******************************************************************************
; 文件名:KEYIN.S
; 功能:键盘输入。当检测到有按键输入时,对发光二极管LED4进行取后控制。
; 使用I/O口输入方式对按键KEY1进行扫描。
; 说明:将跳线器JP4_LED4短接。
;******************************************************************************
INCLUDE LPC2294.INC ; 引入头文件
EXPORT MAIN
LEDCON EQU 0x02000000 ; P0.25引脚控制LED4,低电平点亮
KEY1 EQU 0x00010000 ; P0.16引脚连接KEY1
AREA KEYINC,CODE,READONLY
CODE32 ; 使用ARM指令
MAIN LDR R0,=PINSEL0 ; 装载寄存器地址,PINSEL0
MOV R1,#0x00000000 ; 设置数据,即设置管脚连接GPIO
STR R1,[R0],#4 ; [R0] <= R1,R0 = R0+4
STR R1,[R0]
LDR R0,=IO0DIR
LDR R1,=LEDCON
STR R1,[R0] ; 设置LED控制口为输出,其它I/O为输入
MAIN_LOOP LDR R1,=LEDCON ; 设置GPIO控制参数
LEDSET LDR R0,=IO0SET
STR R1,[R0] ; LED控制I/O置位,即LED4熄灭
BL WAITKEY
LEDCLR LDR R1,=LEDCON
LDR R0,=IO0CLR
STR R1,[R0] ; LED控制I/O复位,即LED4点亮
BL WAITKEY
B MAIN_LOOP
;******************************************************************************
; 名称:WAITKEY
; 功能:等待一个有效按键。本程序有去抖功能。
; 入口参数:无
; 出口参数:无
; 占用资源:R0、R1、R7
;******************************************************************************
WAITKEY
; 等待KEY1键按下
WAITKEY_DOWN
LDR R0,=IO0PIN ; 装载寄存器地址,IO0PIN
LDR R1,[R0] ; 读取I/O口的值
ANDS R1,R1,#KEY1 ; 屏蔽有效位,判断KEY1键是否按下
BNE WAITKEY_DOWN ; 若没有按下,则等待
; 去抖动
MOV R7,#0x00003F00
WAITKEY_L1 SUBS R7,R7,#1
BNE WAITKEY_L1
LDR R1,[R0] ; 读取I/O口的值,判断KEY1键是否仍按下
ANDS R1,R1,#KEY1
BNE WAITKEY_DOWN
; 等待按键放开
WAITKEY_UP LDR R1,[R0]
ANDS R1,R1,#KEY1
BEQ WAITKEY_UP
MOV PC,LR ; 返回
ALIGN ; 数据字对齐
LTORG ; 声明文字池
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -