`
Marshal_R
  • 浏览: 130474 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

汇编走马灯花样设计

阅读更多

汇编走马灯花样设计

一、实验器材

    TPC-USB实验机(芯片:8255、74LS273、ADC0809、数码管、8*8点阵)、TPC-USB软件

 

二、实验要求

    1、LED走马灯花样(点亮花样)实验:利用TPC-USB的K7-K0 8位开关,控制LED产生8种走马灯花样。

    2、在走马灯花样实验设计的基础上,增加在七段数码显示器上滚动显示自己的学号、8X8点阵上滚动显示自己的名字并控制滚动速度。

 

三、实验原理

    1、设置8255为工作方式0,A口输出C口输入,C口接八个手动开关,A口接8颗灯,通过读取输入数据控制8颗灯的花样显示。


 

    2、通过ADC0809模数转换器,电压旋钮调整电压大小控制转为16进制数据的大小,此数值作为循环控制的初值,以达到控制数码管、点阵滚动显示的效果。

 

    3、74LS273输出端Q1-Q7接数码管a-g,Q8接数码管S1,Q8取反接数码管S0,通过Q8的变化达到循环显示十位和个位的目的。

 

  4、每个时刻点阵中只有一列被显示(此实验中下图CS3的部分未用),不停高速轮转以达到显示整个8*8点阵的效果,通过循环次数控制点阵中字的滚动速度。


 

四、实验分析与设计

    1、程序流程图

 

    2、汇编代码

;************************
;*  走马灯花样设计实验  *
;************************
io0809a     equ 280h
io8255a     equ 288h
io8255c     equ 28ah
io8255d     equ 28bh
proth       equ 290h
prothr      equ 298h
ls273       equ 2a0h

data    segment
;彩灯样式
pattern1    db  01H,02H,04H,08H,10H,20H,40H,80H             ;彩灯从L0到L7依次点亮
pattern2    db  80H,40H,20H,10H,08H,04H,02H,01H             ;彩灯从L7到L0依次点亮
pattern3    db  18H,24H,42H,81H,81H,42H,24H,18H             ;彩灯先从中间到两端依次点亮再从两端到中间依次点亮
pattern4    db  81H,42H,24H,18H,18H,24H,42H,81H             ;彩灯先从两端到中间依次点亮再从中间到两端依次点亮
pattern5    db  0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH      ;彩灯从L0到L7依次熄灭
pattern6    db  7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH      ;彩灯从L7到L0依次熄灭
pattern7    db  0E7H,0DBH,0BDH,7EH,7EH,0BDH,0DBH,0E7H       ;彩灯先从中间到两端依次熄灭再从两端到中间依次熄灭
pattern8    db  7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EH       ;彩灯先从两端到中间依次熄灭再从中间到两端依次熄灭 
count       dw  ?

;学号(12330272)
led         db  86h,5bh,0dbh,4fh,0cfh,4fh,0cfh,3fh,0bfh,5bh,0dbh,07h,87h,5bh

;名字(RSH)
myname      db  00h,00h,00h,00h,00h,00h,00h,00h
            db  00h,00h,7fh,58h,54h,72h,01h,00h
            db  00h,00h,79h,49h,49h,4fh,00h,00h
            db  00h,00h,7fh,08h,08h,7fh,00h,00h
            db  00h,00h,00h,00h,00h,00h,00h,00h
data    ends

stseg   segment
            dw  256 dup(?)
stseg   ends

code    segment
    assume  cs:code, ds:data, ss:stseg
start:      mov dx,data
            mov ds,dx
            mov di,0
            mov bh,0
            mov byte ptr count,bh
            
            ;设置8255 A口输出C口输入,使全部灯熄灭
            mov dx,io8255d
            mov al,8bh
            out dx,al
            mov al,0
            mov dx,io8255a
            out dx,al
            
            ;选择为哪一轮灯样式
select:     mov dx,io8255c
            in al,dx
lamp1:      cmp al,01h              ;比较al是否为01h,不是则跳转到lamp2继续比较
            jnz lamp2
            lea si,pattern1         ;si指向pattern1
            jmp show  
lamp2:      cmp al,02h
            jnz lamp3
            lea si,pattern2
            jmp show
lamp3:      cmp al,04h
            jnz lamp4
            lea si,pattern3
            jmp show
lamp4:      cmp al,08h
            jnz lamp5
            lea si,pattern4
            jmp show
lamp5:      cmp al,10h
            jnz lamp6
            lea si,pattern5
            jmp show
lamp6:      cmp al,20h
            jnz lamp7
            lea si,pattern6
            jmp show
lamp7:      cmp al,40h
            jnz lamp8
            lea si,pattern7
            jmp show
lamp8:      cmp al,80h
            jnz default
            lea si,pattern8
            jmp show
default:    jmp select              ;若都不匹配(更改或关掉灯花样对应的开关),跳转回select重新进行选择判断
            
            ;展示一轮灯样式
show:       mov bl,8                ;每轮重复8次
next:       mov al,[si]
            mov dx,io8255a
            out dx,al               ;显示一个灯花样
            ;从A/D转换器读数控制滚动速度
            mov dx,io0809a          ;启动A/D转换器
            out dx,al
            in al,dx                ;从A/D转换器输入数据
            add al,1
            ;数码管显示学号
goon:       push si                 ;压栈保护数据
            call id                 ;数码管中显示学号
            pop si                  ;恢复
            ;点阵顺序显示8列一遍
            push di                 ;压栈保护数据
            call displayname               ;点阵显示名字
            pop di                  ;恢复
            dec al
            jnz goon                ;分时循环显示学号和名字
            ;一个灯花样之后的判断跳转
            add count,2             ;学号向左滚动
            cmp count,14            ;判断学号是否滚动显示到最后
            jnz skip1
            mov count,0             ;从头显示学号
skip1:      inc di                  ;名字向左滚动一列
            cmp di,32                  ;判断名字是否滚动显示到最后
            jnz skip2
            mov di,0                ;从头显示名字
skip2:      inc si                  ;下一个灯花样
            dec bl
            cmp bl,0                ;判断一轮灯花样是否结束
            jnz next                ;跳转到下一个灯花样
            jmp select              ;跳转到下一轮灯花样
            
;七段数码管显示学号子程序
id      proc
            push ax                 ;压栈
            push bx
            push cx
            push dx
            
            lea si,led              ;si指向学号首地址
            add si,count            ;si指向当前要显示的学号(十位)
            mov cx,2                ;十位、个位循环显示次数
            
            ;循环显示十位、个位
again:      mov al,[si]
            mov dx,ls273
            out dx,al               ;学号十位显示
            mov al,[si+1]
            mov dx,ls273
            out dx,al               ;学号个位显示
            loop again
            
            mov al,0
            out dx,al               ;灭灯
            
            pop dx                  ;恢复
            pop cx
            pop bx
            pop ax
            ret                     ;子程序结束返回
id      endp

;8*8点阵显示名字子程序
displayname    proc
            push ax                 ;压栈
            push bx
            push cx
            push dx
            
            mov ah,80h
            mov cx,8                ;循环次数
each:       mov al,myname[di]
            mov dx,proth
            out dx,al               ;输出行码
            mov al,ah
            mov dx,prothr
            out dx,al               ;输出列码
            mov al,0
            out dx,al               ;关闭点阵显示
            shr ah,1                ;右移显示下一列
            inc di                  ;指向下一个行码
            loop each
            
            pop dx                  ;恢复
            pop cx
            pop bx
            pop ax
            ret                     ;子程序结束返回
displayname    endp
code    ends
    end start

 

  • 大小: 8.8 KB
  • 大小: 14.9 KB
  • 大小: 23.9 KB
  • 大小: 53.2 KB
  • 大小: 114.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics