51单片机矩阵键盘程序示例

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

;lab5_asm

;vol

1.0

;zqy

;2012/2/18

;定义初始化

LED_CHABIT PSW.5;数码管显示标志位,为1显示十位,为0显示个位;数字0-9

ORG 00H

JMP START

ORG 000BH

JMP INT_T0;转到中断服务程序,更改数码管显示

ORG 0100H

LED_TAB1:DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH

DB 0FDH,87H,0FFH,0EFH,0BFH

DB 86H,0DBH,0CFH,0E6H,0EDH,0FDH

LED_TAB2:

DB 0BFH,0BFH,0BFH,0BFH,0BFH

DB 0BFH,0BFH,0BFH,0BFH,0BFH

DB 86H,86H,86H,86H

DB 86H,86H,86H

START:

;工作寄存器和某些数据单元的初始化

MOV R0,#0

;数码管显示初始化

SETB LED_CHA

MOVDPTR, #8300H;位选地址赋给DPTR高八位P2口,选中U13锁存器MOVA,#0FEH;位选数据,选中个位数码管,置低为选中

MOVX@DPTR, A;位选数据,对片外I/O口的外设芯片访问

MOVDPTR,#8200H;段选地址

MOVA,#0BFH;段选数据,个位显示0

MOVX@DPTR, A

;定时器初始化

MOV IE,#82H;开启定时器T0中断

MOV TMOD,#01H;设定定时器T0为模式1

MOV TH0,#0D8H

MOV TL0,#0F0H;装入初值,10MS延时12MHZ

SETB TR0 ;启动定时器T0

KEY:

;按键处理

LCALL KEY_START;调用判断有无键按下子程序

JZ KEY;无键按下,重新扫描

LCALL KEY_DELAY;有键按下,延时去抖LCALL KEY_START

JZ KEY

LCALL KEY_NEXT;判断哪一个键被按下LCALL DECODE;键值译码

LCALL KEY_END;判断按键释放

LJMP KEY

KEY_START:

MOV DPTR, #8000H;键盘地址

MOV A,#0F0H

MOVX @DPTR,A;行全部输出0

NOP

NOP

NOP

MOVX A,@DPTR;扫描键盘

CPL A;取正逻辑,1为按下

ANL A,#0FH

RET

KEY_NEXT:

MOV R1,#0;扫描行计数器

MOV R2,#0;扫描列计数器

MOV R3,#0FEH;首行扫描字送R3 MOV DPTR, #8000H

MOV A,R3

MOVX @DPTR,A

MOVX A,@DPTR

CPL A

ANL A,#0FH

MOV R4,#4

S0123: JNZ SKEY0;不为全0,有键按下;全为0,进行下一行扫描

INC R1;行计数器加1

MOV A,R3

RL A

MOV R3,A

MOV DPTR,#8000H

MOVX @DPTR,A

NOP

NOP

NOP

MOVX A,@DPTR

CPL A

ANL A,#0FH

DJNZ R4,S0123

LJMP KEY

EKEY:

RET

SKEY0:;列号译码

JB

ACC.0,SKEY1

JB

ACC.1,SKEY2

JB

ACC.2,SKEY3

JB

ACC.3,SKEY4

SKEY1:MOV A,#00H;存列号0 MOV R2,A

AJMP EKEY

SKEY2:MOV A,#01H;存列号1 MOV R2,A

AJMP EKEY

SKEY3:MOV A,#02H;存列号2

MOV R2,A

AJMP EKEY

SKEY4: MOV A,#03H;存列号3 MOV R2,A

AJMP EKEY

DECODE:

;行号在R1,列号在R2

;键值译码

MOV A,R1

MOV B,#04H

MUL AB

ADD A,R2

INC A

MOV R0,A

RET

KEY_END:

MOV DPTR,#8000H;键盘地址MOVX A,@DPTR;扫描键盘CPL A;取正逻辑,1为按下ANL A,#0FH

JNZ KEY_END

LCALL KEY_DELAY

JNZ KEY_END

RET

KEY_DELAY:

MOV R5,#10H

DS1:MOV R6,#0FFH

DS2:NOP

DJNZ R6,DS2

DJNZ R5,DS1

RET

INT_T0:;中断服务程序,更改数码管显示

MOV R7,A

JB LED_CHA,DISP_L;检查数码管显示标志位

CPL LED_CHA

MOVDPTR, #8200H;段选地址

MOV A,#0

MOVX @DPTR,A

MOVDPTR,#8300H;位选地址赋给DPTR高八位P2口,选中U13锁存器MOVA, #0FEH;位选数据,选中个位数码管,置低为选中

MOVX@DPTR, A;位选数据,对片外I/O口的外设芯片访问

;判断需要显示的个位数字

MOV A,R0

相关文档
最新文档