📄 last.asm
字号:
OUTBIT equ 08002h ; 位控制口
OUTSEG equ 08004h ; 段控制口
RowLow equ 0B002h; 行低八位地址
RowHigh equ 0B003h; 行高八位地址
ColLow equ 0B000h; 列低八位地址
ColHigh equ 0B001h; 列高八位地址
bitmask equ 40h ; 点阵显示位控制
base equ 42h ; 显示数据缓冲
org 0000h ;主程序入口
ljmp main
org 0003h ; 中断入口
ljmp allred
main:
mov TCON, #01h ; 设置INT0中断
mov IE, #81h ; 中断允许
NB:mov r0,#25 ;南北通行25秒显示
mov r1,#20
mov 2fh,#0 ;把要显示的第一个 字首地址给2bh
dib:mov r6,#60
dia:mov p1,#00100001b ;南北绿 东西红
lcall jiaotixianshi ;调用 八段数码管循环显示程序
djnz r6,dia ;循环 使总时间为一秒
dec r0 ;25秒递减
djnz r1,dib ;20秒递减
flash: mov r0,#05 ;五秒黄灯闪烁
mov r1,#05
fic:mov r7,#2 ;每秒一次循环亮和熄灭
mov p1,#00010001b ;南北黄 东西红
fib:mov r6,#30
fia:lcall jiaotixianshi ;调用 八段数码管循环显示程序
djnz r6,fia ;循环
mov p1,#00000001b ;亮红灯
djnz r7,fib
dec r0 ;五秒递减
djnz r1,fic
DX: mov r0,#10 ;东西方向显示,如下部分与南北雷同
mov r1,#15
mov 2fh,#1
gib:mov r6,#60
gia: mov p1,#00001100b ;南北红东西绿
lcall jiaotixianshi
djnz r6,gia
dec r1
djnz r0,gib
his:mov r0,#05
mov r1,#05
hic:mov r7,#2
mov p1,#00001010b ;南北红东西黄
hib:mov r6,#30
hia:
lcall jiaotixianshi
djnz r6,hia
mov p1,#00001000b ;南北黄灯亮
djnz r7,hib
dec r0
djnz r1,hic
ljmp NB ;返回南北显示
allred:
mov p1,#09h ; 全红
push 2fh
kis:mov 60h,#10
mov 61h,#10
mov 2fh,#2
kib:mov 62h,#60
kia:mov 63h,#00100000b
lcall close
mov a,63h
klo:mov dptr, #OUTBIT
movx @dptr, a
mov b,#10
mov a,60h
div ab
push b
lcall xianshi
lcall close
mov a,63h
rr a
mov dptr, #OUTBIT
movx @dptr, a
pop b
mov a,b
lcall xianshi
mov 63h,#00000010b
lcall close
mov a,63h
mov dptr, #OUTBIT
movx @dptr, a
mov b,#10
mov a,61h
div ab
push b
lcall xianshi
lcall close
mov a,63h
rr a
mov dptr, #OUTBIT
movx @dptr, a
pop b
mov a,b
lcall xianshi
djnz 62h,kia
dec 61h
djnz 60h,kib
pop 2fh
reti
LEDMAP:
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
delay:mov r4,#100
dl5: mov r3,#5
dl6: djnz r3,dl6
djnz r4,dl5
ret
close: mov dptr, #OUTBIT ;关闭所有八段管显示
mov a, #0
movx @dptr, a
ret
xianshi: mov dptr,#ledmap ;显示一个数码管
movc a,@a+dptr
mov dptr, #OUTSEG
movx @dptr,a
lcall tuxiang ;16点阵显示
lcall delay ;延迟一秒
ret
jiaotixianshi:
lcall close
mov r5,#00100000b ;亮第一个管
mov a,r5
mov dptr, #OUTBIT
movx @dptr, a ;显示十位
mov b,#10
mov a,r0
div ab
push b ;保存个位数据
lcall xianshi ;第一个管显示数据
lcall close
mov a,r5
rr a ;亮第二个管
mov dptr, #OUTBIT
movx @dptr, a
pop b
mov a,b
lcall xianshi
mov r5,#00000010b ;亮第三个管
lcall close
mov dptr, #OUTBIT
mov a, r5
movx @dptr, a
mov b,#10
mov a,r1
div ab
push b
lcall xianshi
lcall close
mov a,r5
rr a
mov dptr, #OUTBIT
movx @dptr, a
pop b
mov a,b
lcall xianshi
ret
tuxiang: ;显示16点阵图像
mov bitmask, #0
mov bitmask+1,#0 ;清屏
mov a,#00h ;列驱动低有效
mov dptr,#RowLow
movx @dptr,a
mov dptr,#RowHigh
movx @dptr,a
mov a,#0ffh ;行驱动高有效
mov dptr,#ColLow
movx @dptr,a
mov dptr,#ColHigh
movx @dptr,a
mov bitmask, #01 ;选择显示行
mov 2CH, #16 ;每行16列
mov 2bh,2fh
mov a,2BH ;字模的起始地址
mov b,#32
mul ab
mov dptr,#Font
add a,dpl
mov base, a
mov a,b
addc a,dph
mov base+1,a
nextrow:
mov a,#00h ;先关闭显示
mov dptr,#RowLow
movx @dptr,a
mov dptr,#RowHigh
movx @dptr,a
mov dpl, base ;取出该行字模
mov dph, base+1
clr a
movc a, @a+dptr
mov 2DH,a
inc dptr
clr a
movc a,@a+dptr
mov 2EH,a
inc dptr
mov base , dpl ;指向下行字模
mov base+1, dph
mov dptr,#ColLow ;输出字模数据
mov a,2DH
cpl a
movx @dptr,a
mov dptr,#ColHigh
mov a,2EH
cpl a
movx @dptr,a
mov a,bitmask ;点亮该行
mov dptr,#RowLow
movx @dptr,a
mov a,bitmask+1
mov dptr,#RowHigh
movx @dptr,a
clr c
mov a,bitmask
rlc a
mov bitmask,a
mov a,bitmask+1
rlc a
mov bitmask+1,a ;指向下一行
djnz 2CH, nextrow
ret
;字模 每个16x16点阵汉字为: 8位x2x16 = 256位, 32字节
Font:
db 00H,01H,80H,03H,40H,05H,00H,01H
db 00H,01H,00H,01H,00H,01H,00H,01H
db 00H,01H,00H,01H,00H,01H,00H,01H
db 00H,01H,40H,05H,80H,02H,00H,01H
DB 00H,00H,00H,00H,00H,00H,00H,00H,
db 00H,00H,00H,00H,04H,20H,02H,40H,
db 0FFH,0FFH,02H,40H,04H,20H,00H,00H,
db 00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,0F8H,3FH,
db 18H,30H,28H,28H,48H,24H,88H,22H,
db 08H,21H,88H,22H,48H,24H,28H,28H,
db 18H,30H,0F8H,3FH,00H,00H,00H,00H,
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -