⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex9-6.asm

📁 《单片机原理实用教程——基于Proteus虚拟仿真》一书的配套光盘
💻 ASM
字号:
	ORG 0000H
START: 	LJMP MAIN
	ORG 0030H
MAIN:   MOV SP,#60H
 	MOV 7AH,#00
	MOV 7BH,#01
	MOV 7CH,#02
	MOV 7DH,#03
	MOV 7EH,#04
	MOV 7FH,#05
	MOV   DPTR,#7F00H          ;8155命令口地址
	MOV   A,#03H               ;置8155PA、PB口为输出,PC口为输入      
	MOVX @DPTR,A 
LOOP:	LCALL DISP
	LCALL KEY
	MOV A,R4
	CJNE A,#88H,DSP
	SJMP LOOP
DSP:	MOV 7AH,A		   ;键值送入显示缓冲区单元7AH
	MOV 7BH,#010H
	MOV 7CH,#010H
	MOV 7DH,#010H
	MOV 7EH,#010H
	MOV 7FH,#010H
	SJMP LOOP	
;按键识别子程序
KEY:	MOV    R4,#00H             ;0→键号寄存器R4
	MOV    R2,#01H             ;扫描模式01H→R2
KEY1:   MOV    DPTR,#7F02H
	MOV    A,R2
	MOVX   @DPTR,A             ;扫描模式→8155PB口
	INC    DPTR
	MOVX   A,@DPTR             ;读8155PC口
	JB     ACC.0,KEY2          ;0列无键闭合,转判1列
	MOV    A,#00H              ;0列有键闭合,0→A
	AJMP   KEY5
KEY2:  	JB     ACC.1,KEY3          ;1列无键闭合,转判2列
	MOV    A,#01H              ;1列有键闭合,列线号01H→A
	AJMP   KEY5
KEY3:  	JB     ACC.2,KEY4          ;2列无键闭合,转判3列
	MOV    A,#02H              ;2列有键闭合,02H→A
	AJMP   KEY5
KEY4:  	JB     ACC.3,NEXT          ;3列无键闭合,转判下一行
	MOV    A,#03H              ;3列有键闭合,03H→A
KEY5:  	ADD    A,R4                ;列线号+(R4)作为键值→A
	MOV    R4,A                ;键值→R4
	RET                        ;返回
NEXT:  	MOV    A,R4;
	ADD    A,#04               ;键号寄存器加4
	MOV    R4,A
	MOV    A,R2
	JB     ACC.3,NEXT1         ;判别是否已扫描到最后一行
	RL     A                   ;扫描模式左移一位
	MOV    R2,A
	AJMP   KEY1                ;重新开始扫描下一行
NEXT1: 	MOV    R4,#88H             ;扫描到最后一行仍无按键置无键闭合标志
	RET       
;数码管显示组程序
DISP:	MOV   R0,#7AH              ;置显示缓冲器指针初值
	MOV   R3,#01H              ;置扫描模式初值
DISPB1:	MOV   DPTR,#7F02H          ;8155 PB口地址
	MOV   A,#0h		   ;熄灭所有LED
	MOVX  @DPTR,A                             
	MOV   DPTR,#7F01H          ;8155 PA口地址
	MOV   A,  @R0              ;取显示数据
	ADD   A,#014H              ;加偏移量
	MOVC  A, @A+PC             ;查表取段码
	MOVX  @DPTR,A              ;段码→8155 PA口 	
	MOV   A,R3
	MOV   DPTR,#7F02H          ;8155 PB口地址
	MOVX  @DPTR,A              ;扫描模式→8155 PB口       
	ACALL DELAY                ;延时
	INC   R0
	MOV   A,R3
	JB    ACC.6,DISPB2         ;判6位LED显示完否
	RL    A                    ;扫描模式左移1位
	MOV   R3,A
	AJMP  DISPB1
DISPB2:	MOV   R3,#01H
	RET
SEGPT2:	Db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h   ;段码表
	db 7fh,6fh,77h,7ch,39h,5eh,79h,71h
	db 00h,02h,08h,00h,59h,0fh,76h
 ;延时子程序                     
DELAY:	MOV   R4,#0FFH                     
DELAY1:	DJNZ  R4,DELAY1
	RET


	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -