动态显示4个数码管 11个引脚。怎么动态扫描? 我在做数字钟。。

2020-05-16 科技 187阅读

LEDBUF EQU 30H ;显示码缓存区

HOUR EQU 40H

MINUTE EQU 41H

SECOND EQU 42H

C100us EQU 43H

TICK EQU 10000 ;置中断次数

T100us EQU 256-100 ;置定时器初始值

LJMP START ;跳转至主程序

ORG 000BH ;定时器0中断入口

T0INT: PUSH PSW  ;状态保护

PUSH ACC

MOV A,C100us+1

JNZ GOON ;计数值是否为0

DEC C100us

GOON: DEC C100us+1

MOV A,C100us

ORL A,C100us+1

JNZ EXIT

MOV C100us,#HIGH(TICK) ;重置计数值

MOV C100us+1,#LOW(TICK)

INC SECOND ;秒值加一

MOV A,SECOND

CJNE A,#60,EXIT ;判断秒值是否为60

MOV SECOND,#0 ;秒值为60,则清0

INC MINUTE ;分值加一

MOV A,MINUTE

CJNE A,#60,EXIT ;判断分值是否为60

MOV MINUTE,#0 ;分值为60,则清0

INC HOUR ;小时值加一

MOV A,HOUR

CJNE A,#24,EXIT ;判断小时值是否为24

MOV HOUR,#0 ;小时值为24,则清0

EXIT: POP ACC

POP PSW

RETI

DELAY:          ;延时子程序

MOV R7,#0FFH

DELAYLOOP:

DJNZ R7,DELAYLOOP

DJNZ R6,DELAYLOOP

RET

LEDMAP: DB 3FH,06H,5BH,4FH ;八段数码管显示码

DB 66H,6DH,7DH,07H

DB 7FH,6FH,77H,7CH

DB 39H,5EH,79H,71H

DISPLAYLED:

MOV R0,#LEDBUF

MOV R1,#6 ;共6个八段管

MOV R2,#01111111B ;位扫描码初值

LOOP: MOV A,#0

MOV P0,A ;关所有八段管

MOV A,@R0

MOV P0,A

MOV A,R2

MOV P3,A ;显示一位八段管

MOV R6,#01H

CALL DELAY

MOV A,R2 ;显示下一位

RR A

MOV R2,A

INC R0

DJNZ R1,LOOP

RET

T0LED: MOV DPTR,#LEDMAP ;将字段码转换显示码

MOVC A,@A+DPTR

RET

START: MOV TMOD,#02H ;定时器工作方式2

MOV TH0,#T100us ;置定时器初始值

MOV TL0,#T100us

MOV IE,#10000010B ;EA=1,IT0=1

MOV HOUR,#0 ;显示初始值

MOV MINUTE,#0

MOV SECOND,#0

MOV C100us,#HIGH(TICK)

MOV C100us+1,#LOW(TICK)

SETB TR0 ;启动定时器0

MLOOP: MOV A,HOUR ;显示小时值十位

MOV B,#10

DIV AB

CALL T0LED

MOV LEDBUF,A ;将十位值送显示码缓存区

MOV A,B ;显示小时值个位

CALL T0LED

ORL A,#80H ;显示小数点

MOV LEDBUF+1,A ;送显示码缓存区

MOV A,MINUTE ;显示分钟值十位

MOV B,#10

DIV AB

CALL T0LED

MOV LEDBUF+2,A ;将十位值送显示码缓存区

MOV A,B ;显示分钟个位值

CALL T0LED   

ORL A,#80H ;显示小数点

MOV LEDBUF+3,A ;送显示码缓存区

MOV A,SECOND

MOV B,#10 ;显示秒十位值

DIV AB

CALL T0LED

MOV LEDBUF+4,A ;送显示码缓存区

MOV A,B

CALL T0LED

MOV LEDBUF+5,A

CALL DISPLAYLED ;调用显示子程序

LJMP MLOOP

END

声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com