📄 灯光控制。2.asm
字号:
;选择定时器T0,方式一,定时一秒,50MS中断一次
;PA口送位码,PB口送段码
SEC1 EQU 30H ;灯数个位存储器(个位)
SEC10 EQU 31H ;灯数十位存储器(十位)
SEC100 EQU 32H ;灯数百位存储器(百位)
SEC EQU 33H ;灯数计数器
ORG 0000H
LJMP START
ORG 000BH
LJMP INT_T0
ORG 0100H
START:
MOV SP,#60H ;调整指针
MOV P1,#00H ;开始灯全灭
MOV R3,P1
MOV R2,#20
MOV SEC,#00H ;初始化为000
MOV SEC1,#00H
MOV SEC10,#00H
MOV SEC100,#00H
MOV DPTR,#7F00H ;赋初值选中命令状态寄存器
MOV A,#03H
MOVX @DPTR,A ;定义PA,PB口为输出口
MOV DPTR,#7F02H
MOV A,#00H
MOVX @DPTR,A ;关闭显示
MOV TMOD,#01H ;选择方式一开中断
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB TR0
SETB ET0
MAIN:
MOV A,SEC ;把灯值数分为个位,十位,百位
MOV B,#100
DIV AB
MOV SEC100,A
MOV A,B
MOV B,#10
DIV AB
MOV SEC10,A
MOV SEC1,B
ACALL DISPLAY
AJMP MAIN
DISPLAY: ;显示子程序
MOV R4,#00000001B
MOV R0,#SEC1
DISP1:
MOV A,R4
MOV DPTR,#7F02H ;送位码
MOVX @DPTR,A
MOV A,@R0 ;送段码
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#7F01H
MOVX @DPTR,A
ACALL DELAY
MOV A,R4
JB ACC.2,EXIT2 ;判断三个数码管是否都显示了
RL A
MOV R4,A
INC R0
SJMP DISP1
EXIT2:
RET
INT_T0: ;中断程序
PUSH ACC
PUSH PSW
MOV TH0,#3CH ;重装定时
MOV TL0,#0B0H
DJNZ R2,EXIT1 ;判断是否到了一秒
INC SEC
INC R3
MOV P1,R3
MOV R2,#20
CJNE R3,#0FFH,EXIT1 ;灯是否全亮,全这则重新计数
MOV SEC,#00H
MOV R3,#00H
MOV P1,R3
EXIT1:
POP PSW
POP ACC
RETI
DELAY: ;2毫秒的廷时子程序
MOV R7,#10
DELAY1:
MOV R6,#100
DJNZ R6,$
DJNZ R7,DELAY1
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;位码0-9 共阳极
;TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;位码0-9 共阴极
;接线:8155 8031
; 12-19-----A0-A7
; 21-28-----a-h
; 29-34-----Y0-Y7
; 4-----RET
; 7-----A14
; 8-----A15
; 9-----RD
; 10-----WR
; 11-----ALE
; 20-----GND
; 40-----5V
; P1口-----数码显示管
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -