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

📄 last.asm

📁 这是单片机的期末上机实验
💻 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 + -