单片机实验——查询式键盘实验

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

单片机实验——查询式键盘实验

1.实验目的

(1)掌握查询式按键检测方法

(2)掌握数码管动态扫描汇编语言的编制方法

2.预习要点

(1)按键检测的基本原理

(2)数码管动态扫描显示方法

3.实验设备

计算机、单片机实验箱。

4.实验内容

基本要求:

接实验二的实验内容,通过实验板的4个按键电路,将按键的检测线连接到CPU 的p1.0~p1.3上。当按下按键1到4时,在实验板显示电路分别对应显示30H到33H存储单元的内容。

扩展要求:

30H~33H中放置字母A~D的ASCII码,当按下按键1到4时,A~D字母循环间隔分别为1至4秒

实验3

ORG 0000H

SJMP MAIN

;********************************

;主程序

ORG 0030H

MAIN:MOV SP,#70H

;初始化8155

MOV DPTR,#0100H

MOV A,#03H

MOVX @DPTR,A

LOOP:LCALL KEYSCAN ;键扫描

LCALL DISPLAY ;数码管显示

SJMP LOOP

;********************************

;显示子程序

DISPLAY:

LD0:MOV DPTR,#0102H

MOV A,#0FEH

MOVX @DPTR,A

MOV DPTR,#DTAB

MOV A,R0

MOVC A,@A+DPTR

MOV DPTR,#0101H

MOVX @DPTR,A

LCALL DELAY

RET

;********************************

;字形表

DTAB:

DB 3FH,06H,5BH,4FH,66H

DB 6DH,7DH,07H,7FH,6FH

DB 77H,7CH,39H,5EH,79H

DB 71H

;********************************

;延时1ms

DELAY:

MOV R7,#2

DEL1:MOV R6,#0FFH ;(这里用的是FFH,和250差不多的这里精确度要求不高) DEL2:DJNZ R6,DEL2

DJNZ R7,DEL1

RET

;********************************

;延时20ms ;用来消除抖动用的

DELAY20MS:

MOV R7,#40

DEL11:MOV R6,#0FFH

DEL22:DJNZ R6,DEL22

DJNZ R7,DEL11

RET

;********************************

;键扫描子程序

KEYSCAN:

MOV P1,#0FFH ;给P1全高,如果此时有键按下的话下一瞬间对应的位会马上变0

MOV A,P1

CJNE A,#0FFH,K_NEXT1 ;如果A=FFH则表明没有键按下,退出子程序,有键按下的话跳转到K_NEXT1

RET

K_NEXT1:LCALL DELAY20MS ;延时20ms,用来消除抖动

MOV A,P1

CJNE A,#0FFH,K1 ;再次检测P1是否为FFH,若为FFH说明刚才的是干扰,退出子程序,如果实在有键按下则跳转K1

RET

K1:JB ACC.0,K2 ;下面是逐位检测看看到底是哪一个按键按下,然后执行对应的操作,这里是把要现实的内容放到

MOV R0,#01H ;R0里,ABCD键分别对应1234

RET

K2:JB ACC.1,K3

MOV R0,#02H

RET

K3:JB ACC.2,K4

MOV R0,#03H

RET

K4:JB ACC.3,KRET

MOV R0,#04H

RET

KRET:MOV R0,#00H

RET

;********************************

实验3扩展

ORG 0000H

SJMP MAIN

;*******************************************

ORG 0030H

MAIN: MOV SP,#70H ;主程序

;设置显示缓存区

MOV 30H,#0AH

MOV 31H,#0BH

MOV 32H,#0CH

MOV 33H,#0DH

;初始化8155

MOV DPTR,#0100H

MOV A,#03H

MOVX @DPTR,A

MOV 40H,#0

LOOP:MOV DPTR,#0102H ;关显示(控制字位) 为了使当没有键按下时数码管不亮MOV A,#0FFH

MOVX @DPTR,A

MOV DPTR,#0101H ;关显示(控制字形) 为了使当没有键按下时数码管不亮,其实这两个只取一个就可以了.

MOV A,#0H ;显示间隔标志

MOVX @DPTR,A

LCALL KEYSCAN ;键扫描

MOV R4,40H ;R4为字母变化的间隔

CJNE R4,#0,LOOP1 ;若间隔为0,则表示没有键按下,若不为0,则跳转LOOP1,进行对应间隔的显示

SJMP LOOP

LOOP1:LCALL DISPLAY ;调用显示

SJMP LOOP

;*********************************************

;显示子程序

DISPLAY:

MOV R0,#30H

MOV R3,#0FEH

MOV R4,40H ;显示间隔

LD0:MOV DPTR,#0102H ;送字位

MOV A,R3

MOVX @DPTR,A

NEXT:MOV DPTR,#DTAB ;查表,送字形

MOV A,@R0

MOVC A,@A+DPTR

MOV DPTR,#0101H

MOVX @DPTR,A

NEXT1:LCALL DELAY1 ;延时T=R4*250ms

DJNZ R4,NEXT1

MOV R4,40H

INC R0

CJNE R0,#34H,NEXT ;没有显示完ABCD的话继续显示,显示了跳出子程序

RET

;************************************************8

;字形表

DTAB:

DB 3FH,06H,5BH,4FH,66H

DB 6DH,7DH,07H,7FH,6FH

相关文档
最新文档