单片机实验3LDE数码管动态显示与按键去抖程序

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

1、MAIN.ASM

;====变量定义段====

CS0 BIT P2.0 ;个位位选

CS1 BIT P2.1 ;十位位选

CS2 BIT P2.2 ;百位位选

CS3 BIT P2.3 ;千位位选

CS4 BIT P2.4 ;LED灯位选

DSW EQU 30H ;位选计数

DSB0 EQU 31H ;显示缓冲单元个位

DSB1 EQU 32H ;显示缓冲单元十位

DSB2 EQU 33H ;显示缓冲单元百位

DSB3 EQU 34H ;显示缓冲单元千位

DSB4 EQU 20H ;显示缓冲单元指示灯状态

LD1 BIT DSB4.0 ;指示灯LD1控制位

LD2 BIT DSB4.1 ;指示灯LD2控制位

LD3 BIT DSB4.2 ;指示灯LD3控制位

LD4 BIT DSB4.3 ;指示灯LD4控制位

LD5 BIT DSB4.4 ;指示灯LD5控制位

LD6 BIT DSB4.5 ;指示灯LD6控制位

LD7 BIT DSB4.6 ;指示灯LD7控制位

LD8 BIT DSB4.7 ;指示灯LD8控制位

KEY EQU 21H ;键状态字

SW1 BIT KEY.6 ;SW1键

SW2 BIT KEY.7 ;SW2键

EKEY EQU 22H ;键前沿字

ESW1 BIT EKEY.6 ;SW1键前沿

ESW2 BIT EKEY.7 ;SW2键前沿

KTMR EQU 35H ;键去抖延时器

AJS1 EQU 40H ;每按一次SW1,(AJS2:AJS1)+1 AJS2 EQU 41H ;每按一次SW2,(AJS2:AJS1)-1 ;====常数定义段====

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

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN: INCLUDE "INITIAL.INC"

MLOOP: LCALL DELAY ;延时5ms

LCALL RDKEY ;读键

LCALL DISP

JNB ESW1,M03 ;无SW1键转移

MOV R6,#00H

MOV R7,#01H

SJMP M05

M03: JB ESW2,M04 ;有SW2键转移

LJMP MLOOP

M04: MOV R6,#99H

MOV R7,#99H

M05: MOV A,AJS1 ;(AJS2:AJS1)十进制±1

ADD A,R7

DA A

MOV AJS1,A

MOV A,AJS2

ADDC A,R6

DA A

MOV AJS2,A

MOV A,AJS1 ;(AJS2:AJS1)送显示

ANL A,#0FH

MOV DSB0,A

MOV A,AJS1

SW AP A

ANL A,#0FH

MOV DSB1,A

MOV A,AJS2

ANL A,#0FH

MOV DSB2,A

MOV A,AJS2

SW AP A

ANL A,#0FH

MOV DSB3,A

LJMP MLOOP

;====延时子程序(2*R7+3)*R6+5=5ms====

DELAY: MOV R6,#0AH

DL01: MOV R7,#0F8H

DL02: DJNZ R7,DL02

DJNZ R6,DL01

RET

;====通用子程序段====

INCLUDE "RDKEY.ASM";添加读键状态及去抖处理子程序

INCLUDE "DISP.ASM" ;添加数码管动态扫描显示子程序

END

2、INITIAL.INC

MOV SP,#5FH

MOV R0,#20H

MOV R7,#60H

CLR A

M01: MOV @R0,A ;存储器20H-7FH清零

INC R0

DJNZ R7,M01

MOV DSB0,#03H

MOV DSB1,#01H

MOV DSB2,#01H

MOV DSB3,#07H

MOV R4,#0C8H

M02: LCALL DELAY

LCALL DISP ;显示"7113"1秒

DJNZ R4,M02

CLR A

MOV DSB0,A

MOV DSB1,A

MOV DSB2,A

MOV DSB3,A

END

3、RDKEY.ASM

;====读独立按键子程序(延时去抖)==== RDKEY: ORL P1,#0C0H ;先置1,后读口

MOV A,P1 ;读键

ANL A,#0C0H ;接独立键盘的位保留

XRL A,#0C0H ;求反转正逻辑

MOV R7,A ;新的键状态暂存R7

CJNE A,KEY,RDK0 ;键状态变化则转移

MOV KTMR,#05H ;去抖延时器加载初值

SJMP RDK1

RDK0: MOV A,KTMR ;过了延时时间?

JZ RDK1

DEC KTMR ;延时未结束

MOV R7,KEY ;放弃不稳定的键状态RDK1: MOV A,KEY ;键前沿提取

XRL A,R7

ANL A,R7

MOV EKEY,A

MOV KEY,R7 ;启用键的新状态

RET

END

4、DISP.ASM

;====5位数码管扫描子程序====

DISP: ORL P2,#1FH ;关闭数码显示器

MOV A,DSW ;根据扫描循环变量转移

ANL A,#07H

RL A

MOV DPTR,#DSTAB

JMP @A+DPTR

DSTAB: AJMP DIS0

AJMP DIS1

AJMP DIS2

AJMP DIS3

AJMP DIS4

AJMP DIS0

AJMP DIS0

AJMP DIS0

DIS0: MOV A,DSB0 ;扫描个位数码管

相关文档
最新文档