按键矩阵(多键有效)
来源:互联网 发布:linux怎样进入grub 编辑:程序博客网 时间:2024/06/06 01:40
每次对应上电某个输出口,读取输入数据。若有输入,则检测输入,跳至相关按键处理;若无,则设置下次上电的输出口。
代码:
CLRHALTFLAG:
LD A,#0
LD (HALTTIME1),A
LD (HALTTIME0),A
LD A,(HALTFLAG)
AND A,#0111B
LD (HALTFLAG),A
SET #1,(PWM_CTRL)
SET #1,(PWM_CTRL)
ldpch SERVICEIO_OK
jmp SERVICEIO_OK
; RETS
SERVICEIO:
LDMAH #0
ld a,(scankeydelay)
cmp a,#0fh
jnz EXITIO
ld a,(scankeyline)
cmp a,#0001b
ldpch scankeyportb0
jz scankeyportb0
cmp a,#0010b
ldpch scankeyportb1
jz scankeyportb1
setportb0:
set #0,(data_pb)
clr #1,(data_pb)
ld a,#0001b
ld (scankeyline),a
ld a,#0000b
ld (scankeydelay),a
EXITIO:
LD A,#0000B
LD (KEYDELAY),A
ldpch SERVICEIO_OK
jmp SERVICEIO_OK
; RETS
scankeyportb0:
set #0,(data_pb)
clr #1,(data_pb)
ld a,(data_pa)
and a,#0111b
xor a,(KEYFLAGB0)
ldpch setportb1
jz setportb1
ld a,(data_pa)
and a,#0111b
cmp a,(keybutfer)
ldpch scankeyportb00
jz scankeyportb00
ld (keybutfer),a
ldpch EXITIO
jmp EXITIO
scankeyportb00:
CLR #1,(PWM_CTRL)
CLR #1,(PWM_CTRL)
LD A,(KEYDELAY)
AND A,#0010B;;;;;;;;2*8=16MS
JZ CLRHALTFLAG
LD A,#0000B
LD (KEYDELAY),A
LD A,(KEYBUTFER)
XOR A,(KEYFLAGB0)
AND A,(KEYBUTFER)
LD (KEYLFLAG),A
LD A,(KEYBUTFER)
LD (KEYFLAGB0),A
LD A,(KEYLFLAG)
AND A,#0001B
ldpch key01rin
JNZ key01rin
ld a,(keyflag)
and a,#0001b
jz CLRHALTFLAG
LD A,(KEYLFLAG)
AND A,#0010B
jnz key02rin
LD A,(KEYLFLAG)
AND A,#0100B
jnz key03rin
JMP CLRHALTFLAG;;;;;FALL KEY MASK
setportb1:
set #1,(data_pb)
clr #0,(data_pb)
ld a,#0010b
ld (scankeyline),a
ld a,#0000b
ld (scankeydelay),a
ldpch EXITIO
jmp EXITIO
scankeyportb1:
set #1,(data_pb)
clr #0,(data_pb)
ld a,(data_pa)
and a,#0111b
xor a,(KEYFLAGB1)
ldpch setportb0
jz setportb0
ld a,(data_pa)
and a,#0111b
cmp a,(keybutfer)
ldpch scankeyportb10
jz scankeyportb10
ld (keybutfer),a
ldpch EXITIO
jmp EXITIO
scankeyportb10:
CLR #1,(PWM_CTRL)
CLR #1,(PWM_CTRL)
LD A,(KEYDELAY)
AND A,#0010B;;;;;;;;2*8=16MS
JZ CLRHALTFLAG
LD A,#0000B
LD (KEYDELAY),A
LD A,(KEYBUTFER)
XOR A,(KEYFLAGB1)
AND A,(KEYBUTFER)
LD (KEYLFLAG),A
LD A,(KEYBUTFER)
LD (KEYFLAGB1),A
ld a,(keyflag)
and a,#0001b
jz CLRHALTFLAG
LD A,(KEYLFLAG)
AND A,#0001B
ldpch key04rin
JNZ key04rin
LD A,(KEYLFLAG)
AND A,#0010B
jnz key05rin
LD A,(KEYLFLAG)
AND A,#0100B
jnz key06rin
JMP CLRHALTFLAG;;;;;FALL KEY MASK
;------------ 华丽的分割线 ------------
KEY01RIN:
scankeydelay 在每次中断时增加,为0fH时不再增加。
代码:
ld a,(scankeydelay)
cmp a,#0fh
jz scankeydelay_ok
inc (scankeydelay)
scankeydelay_ok:
0 0
- 按键矩阵(多键有效)
- 按键矩阵(单键有效)
- 按键矩阵
- 矩阵按键
- GPIO按键驱动分析(包括矩阵按键)
- 六、矩阵按键(4*4)
- 单片机(四)__矩阵按键
- 矩阵按键(4*4阵列)
- 独立按键和矩阵按键
- STM32按键总结(低电平有效及上升沿有效))
- 矩阵按键扫描电路
- 矩阵按键扫描
- 关于矩阵按键
- 矩阵按键的事
- 【按键】短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动)--- 矩阵键盘
- android输入子系统(以矩阵按键为例)
- 【C51】单片机独立按键与矩阵按键
- 单片机矩阵按键长短按
- python调用解释器
- SEO已步入白炽化:是继续还是转战?
- 关于自己写博客的感想
- 糗事百科DEMO
- OC学习之-----类的初始化方法的使用
- 按键矩阵(多键有效)
- 第 8 章 计时器
- Python练习册,第 0000 题
- AlarmManager, WakeLock and IntentService
- linux postgresql安装配置详解
- 青蛙约会(欧几里得扩展)
- Maven实战 第8章聚合与继承
- ACM北大的第1001题
- Python练习册,第 0001 题