找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3284|回复: 2
打印 上一主题 下一主题
收起左侧

单片机课程实验程序请教——键盘扫描及其应用

[复制链接]
跳转到指定楼层
楼主
ID:71271 发表于 2014-12-28 16:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

请大神相助,实在不知如何做到,凭空我也想不出来啊,我只能明白如何用用C语言实现,但老师要求是汇编,网上找了一圈没有,我这水平实在有限,坐着想上几天也出不来的啊,上几周已饱受实验课的折磨,实在是有心无力了,希望有懂的人能指点指点


实验六、键盘扫描及其应用

要求

2、掌握本实验中键值编码与显示结果的关系。

3、当多键同时按下时,其优先级如何确定。

4、实现键盘功能0----F排列的行列颠倒。

5、实现按特定功能键分别显示PASS及Err

按照前几周实验看,只需在参考程序上改动就好了

三、参考程序

OUTBIT equ 0e101h ; 位控制口

CLK164 equ 0e102h ; 段控制口(接164时钟位)

DAT164 equ 0e102h ; 段控制口(接164数据位)

IN equ 0e103h ; 键盘读入口

ORG 0000H

LJMP STAR

ORG 0030H

STAR: mov sp,#80h

MOV R0,#7FH ;清零00H--7FH

CLR A

STAR1: MOV @R0,A

DJNZ R0,STAR1

WAIT: MOV DPTR,#0E100H ;8155初始化

MOV A,#03H

MOVX @DPTR,A

MOV 38H,#3fH

MOV 39H,#06H

MOV 3AH,#5bH

MOV 3BH,#4fH

MOV 3CH,#66H

MOV 3DH,#6dH

WAIT1: LCALL GETKEY ;调键值显示

LCALL MLOOP4

;通过8155C口得到被按下键行信号

Jnb 01h, WAIT1 ;无键按下则跳转

LCALL KEY1

MOV        38H,39H

MOV        39H,3AH

MOV 3AH,3BH

MOV        3BH,3CH

MOV        3CH,3DH

MOV A,R7

ANL A,#0FH

MOV DPTR,#TAB1

MOVC A,@A+DPTR

MOV         3DH,A

SJMP WAIT1

;==========================================================================

TAB1:

Q0124:         DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H        ;?.[Ofm}.

Q012C:         DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H        ;ow|9^yq

TAB2:

DB 0CH, 08H, 04H, 00H, 0DH, 09H, 05H, 01H        ;........

Q013C:         DB 0EH, 0AH, 06H, 02H, 0FH, 0BH, 07H, 03H        ;........

Q0144:         DB 10H, 11H, 12H, 13H, 14H, 15H, 16H        ;.......

;==========================================================================

; ;键值显示 ;

GETKEY: MOV 30H,#20H ;初始显示数据定位

MOV 3EH,#00H ;初始偏移量定位

GETKEY1: MOV A,3EH

SUBB A,#06H

JNC GOON2 ;显示已满六位

MOV DPTR,#0E101H ;        关LED显示

CLR A

MOVX @DPTR,A

MOV A,#38H ;38H为显示缓冲首地址

ADD A,3EH ;3EH为地址偏移量

MOV R0,A

MOV A,@R0

MOV 31H,A

MOV 3FH,#00H

GETKEY2: MOV A,3FH

clr c

SUBB A,#08H

JNC GOON1 ;移位已达到八次

MOV A,31H

MOV DPTR,#0E102H

JNB ACC.7,KLOOP

movx         a,@dptr

orl a,#01h

anl a,#0fdh

SJMP KLOOP1

;;==========================================

KLOOP: movx a,@dptr

anl a,#0fch

KLOOP1:

MOVX @DPTR,A

NOP

MOVX A,@DPTR

ORL A,#02H

MOVX @DPTR,A

NOP

movx a,@dptr

ANL A,#0FDH

MOVX @DPTR,A

MOV A,31H

rl a

MOV 31H,A

INC 3FH

SJMP GETKEY2

;;==========================================

GOON1: MOV DPTR,#0E101H

MOV A,30H

MOVX @DPTR,A

RR A

MOV 30H,A

MOV R7,#01H

LCALL MLOOP

INC 3EH

SJMP GETKEY1

GOON2: RET

;;==========================================

MLOOP: MOV 35H,R7 ;延时

MLOOP1: MOV 36H ,#64H ;

MLOOP2:         DJNZ 36H,MLOOP2

DJNZ 35H,MLOOP1

MLOOP3: RET

;==========================================================================

MLOOP4: ;查询是否有键按下

MOV DPTR,#0E101H ;关显示 ,同时将键盘列置零

CLR A

CLR 01H

MOVX @DPTR,A

MOV DPTR,#0E103H

MOVX A,@DPTR

CPL A

ANL A,#0FH

jz         s1

setb 01h

s1: RET

;==========================================================================

;键盘扫描

KEY1: MOV 33H,#05H ;键盘列数 0--5

MOV 32H,#20H ;键盘列扫描初值

KEY2: MOV A,32H

CPL A

MOV DPTR,#0E101H

MOVX @DPTR,A

MOV A,32H

RR A

MOV 32H,A ;为下次列扫描做准备

MOV DPTR,#0E103H

MOVX A,@DPTR ;读行信号

CPL A

ANL A,#0FH

jnz KEYDIS

mov A,33H

JZ         S3

dec 33h

sjmp key2

KEYDIS: MOV 34H,A

MOV A,33H

RL A         ;键值=(列数*4+行数)--查表

RL         A

MOV 33H,A

MOV A,34H

JNB ACC.1,TESTKEY

INC 33H

SJMP TESTKEY2

TESTKEY: JNB ACC.2,TESTKEY1

INC 33H

INC 33H

SJMP TESTKEY2

TESTKEY1: JNB ACC.3,TESTKEY2

MOV A,#03H

ADD A,33H

MOV 33H,A

TESTKEY2: MOV DPTR,#0E101H ;按键释放查询

CLR A

MOVX @DPTR,A

TESTKEY3: MOV R7,#9AH

LCALL MLOOP

LCALL MLOOP4

JB 01H, TESTKEY3

MOV A,33H

MOV DPTR,#TAB2

MOVC A,@A+DPTR

MOV R7,A

CLR 01H

S3: RET

;==========================================================================

TESTKEY4:         DB 22H        ;"

;==========================================================================

TESTKEY5: MOV R7,#0FFH

RET

;==========================================================================

END


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2015-1-5 22:18 | 只看该作者
此帖仅作者可见

使用道具 举报

板凳
ID:77081 发表于 2015-4-15 21:02 | 只看该作者
此帖仅作者可见

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表