西电网信院微机原理实验(八)

实验八 点阵LED显示设计实验

实验要求:
编写程序,控制点阵向上(或左右)游动显示“西安电子科技大学欢迎您!-姓名”。实验系统中的16×16 LED点阵由四块8×8 LED点阵组成,如图所示,8×8点阵内部结构图如下。

实验目的:

  1. 了解LED点阵的基本结构。
  2. 学习LED点阵扫描显示程序的设计方法。

8*8LED点阵实验:
  为了完成实验要求,先实现8 * 8 LED点阵实验,要求在8 * 8 的LED上循环显示1,2,3这三个数字。

  Y7代表从左往右的第一列,以此类推,Y0代表从左往右的最后一列。
  对于数字1,从第一行到第八行,对应的需要点亮的LED灯Y7-Y0状态为(假设高电平有效):00001000,00011000,00101000,00001000,00001000,00001000,00001000,00111110。
  对于数字2,从第一行到第八行,对应的需要点亮的LED灯Y7-Y0状态为(假设高电平有效):00111000,01000100,00000100,00000100,00001000,00010000,00100000,01111110。
  对于数字3,从第一行到第八行,对应的需要点亮的LED灯Y7-Y0状态为(假设高电平有效):00011000,00100100,00000100,00011000,00011000,00000100,00100100,00011000。
  如下图所示,当X0-X7为高电平时,代表该行选通,当Y0-Y7为低电平时,代表列选通,为了方便,在Y输出时加入非门,这样CPU输出的高电平代表选中对应的列。假设X0-X7的输出端口地址为00H,Y0-Y7的输出端口为02H。

  设置一个计算行数的变量,存放于BX寄存器中,BX=0时屏幕见a图,BX=1时见b图,BX=2时见c图,以此类推。当BX=24时,代表1、2、3已经显示结束,BX清零,重新开始显示,这样就做到了循环显示的目的。设置行从X0到X7依次选通,每一次选通后输出对应行需要点亮的LED。当X0-X7均选通一遍之后,将BX加一,重复上述过程。

  注:在每次输出具体数据之前,要先选中X端口,输出全0实现清屏,否则会导致输出错误。利用CX的循环次数控制移动的速度。

汇编代码:

DATA SEGMENT  
    NUMS:
    DB 08H,18H,28H,08H,08H,08H,08H,3EH ;数字1
    DB 38H,44H,04H,04H,08H,10H,20H,7EH ;数字2    
    DB 18H,24H,04H,18H,18H,04H,24H,18H ;数字3
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
    MOV AH,01H
    MOV BX,00H 
RUN:
    MOV DX,OFFSET NUMS
    MOV SI,DX
    ADD SI,BX
    MOV CX,08H
WAITE:
    MOV AL,0H
    OUT 00H,AL
    MOV AL,[SI]
    OUT 02H,AL
    MOV AL,AH
    OUT 00H,AL
    ROL AH,1
    PUSH CX
    MOV CX,700H
    LOOP $
    POP CX    
    INC SI
    LOOP WAITE   
    INC BX
    CMP BX,24
    JA RESET
CONTINUE:    
    JMP RUN
RESET:
    MOV BX,00H
    JMP CONTINUE
CODE ENDS
END START

实验截图:

16*16LED点阵实验:
  同8*8的LED点阵实验,如下图所示,对于X0-X15,对应的Y7-Y0分别是(假设高电平有效):80H, 88H, 88H, 0F8H, 88H, 84H, 80H, 0FFH, 0C0H, 0A0H, 90H, 88H, 84H, 83H, 80H, 80H;对应的Y15-Y8分别是00H, 00H, 00H, 1FH, 00H, 00H, 00H, 7FH, 00H, 01H, 02H, 04H, 08H, 30H, 00H, 00H。其他字同理。

  设置计算行数的变量,存放在寄存器BX中,当BX=14*16=224时,代表文字已经显示结束,需要将BX清零,从“西”开始重新显示。当依次选通X0-X15时,点亮对应行的LED,当X0-X15均选通一遍之后,将BX加一,并重复上述操作。假设X0-X7的端口地址为00H,X8-X15的端口地址为02H,Y0-Y7的端口地址为04H,Y8-Y15的端口地址为06H。

汇编代码:

DATA SEGMENT
    LEFT:;左侧1*2块屏幕,从低位到高位,每个字节是半行
	DB 0H, 0FFH,  20H, 20H, 20H, 0FCH,24H, 24H, 24H, 24H, 14H, 0CH, 04H, 4H,0FCH, 4H    ;西
	DB 40H, 80H, 0FCH, 04H, 42H, 40H, 40H,0FFH, 20H, 10H, 18H, 60H, 80H,40H, 30H,0EH    ;安
	DB 80H, 80H,  80H,0FCH, 84H, 84H, 84H,0FCH, 84H, 84H, 84H,0FCH, 84H,80H, 80H,00H    ;电
	DB 00H,0FEH,  00H, 00H, 00H, 80H, 80H,0FFH, 80H, 80H, 80H, 80H, 80H,80H,0A0H,40H    ;子
	DB 10H,0B8H,  0FH, 08H, 08H,0BFH,  8H,01CH, 2CH, 0AH,0CAH,  9H,  8H, 8H,  8H, 8H   ;科
	DB 8H,  8H,   8H,0C8H, 3FH,  8H,  8H,0A8H, 18H, 0CH, 0BH, 08H, 08H, 08H, 08H,064H   ;技
	DB 80H, 80H, 80H, 80H, 80H,0FFH, 80H, 80H, 40H, 40H, 20H, 20H, 10H,  8H,  4H,  3H   ;大
	DB 44H, 88H, 88H,  0H,0FEH,  2H,  1H,0F8H,  0H, 80H,0FFH, 80H, 80H, 80H,0A0H, 40H   ;学
	DB 0H,   0H, 3FH, 20H,0A0H, 92H, 54H, 28H,  8H, 14H, 24H,0A2H, 81H, 40H, 20H, 10H  ;欢
	DB 0H,   4H,0C8H, 48H, 40H, 40H, 4FH, 48H, 48H, 48H,0C8H, 48H,  8H, 14H,0E2H,  0H   ;迎
	DB 90H, 90H, 88H, 4CH, 2AH, 99H, 88H, 48H, 28H, 88H,  8H, 40H, 8AH, 8AH,  9H,0F0H   ;您	
	DB 80H, 88H, 88H, 0F8H, 88H, 84H, 80H, 0FFH, 0C0H, 0A0H, 90H, 88H, 84H, 83H, 80H, 80H
	DB 40H, 40H, 0FCH, 40H, 40H, 0FFH, 40H, 20H, 0FCH, 8H, 84H, 0FAH, 81H, 8H, 0AH, 40H
	DB 0H, 7EH, 40H, 40H, 44H, 48H, 48H, 40H, 0A0H, 48H, 46H, 44H, 40H, 40H, 28H, 10H
    DB 00H, 00H, 00H, 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H   
    RIGHT:;右侧1*2块屏幕 
    DB 00H, 07FH,02H,02H,02H,1FH,12H,12H,12H,12H,1CH,10H,10H,10H,1FH,10H
	DB 00H, 00H,3FH,20H,10H,00H,00H,7FH,04H,04H,02H,02H,01H,06H,08H,10H
	DB 00H, 00H,00H,01FH,10H,10H,10H,01FH,10H,10H,10H,01FH,50H,40H,40H,7FH
	DB 00H, 01FH,08H,04H,02H,01H,00H,07FH,00H,00H,00H,00H,00H,00H,00H,00H
	DB 08H, 08H,09H,09H,08H,008H,9H,09H,08H,78H,0FH, 08H,08H,08H,08H,08H
	DB 04H, 04H,4H,07FH,04H,04H,04H,3FH,21H,11H,12H,0AH,4H,0AH,11H,60H
	DB 00H, 00H,00H,00H,00H,07FH,00H,00H,01H,01H,02H,02H, 4H,8H,10H,60H
	DB 10H, 10H,08H,4H,07FH,40H,20H,7H,2H,01H,07FH,00H,00H,00H,00H, 0H
	DB 01H, 01H, 1H,3FH, 20H,10H,02H, 2H,2H, 5H, 5H, 08H, 8H,10H,20H,40H
	DB 00H, 01H, 3CH,24H,24H,24H,24H,24H,24H,2DH,14H, 04H,4H, 4H,07FH,0H
	DB 00H, 00H,3FH,20H,12H,0AH,12H,22H,22H,2H, 1H, 0H,20H,48H,48H,0FH	
	DB 00H, 00H, 00H, 1FH, 00H, 00H, 00H, 7FH, 00H, 01H, 02H, 04H, 08H, 30H, 00H, 00H  
	DB 00H, 10H, 7H, 2H, 21H, 7FH, 0H, 0H, 7H, 1H, 10H, 3FH, 0H, 0H, 0H, 0H    
	DB 20H, 7FH, 20H, 20H, 22H, 24H, 24H, 20H, 28H, 24H, 23H, 22H, 20H, 20H, 14H, 8H 
    DB 00H, 00H, 00H, 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START: 
    MOV AX,DATA
    MOV DS,AX
    MOV AH,01H	
    MOV BX,00H ;滚动行数(移向下一字节代表从下一行开始打印)   
RUN:
    MOV DX,OFFSET LEFT
    MOV SI,DX
    ADD SI,BX   ;计算当前行数(本轮从该行开始打印)
    MOV DX,OFFSET RIGHT
    MOV DI,DX
    ADD DI,BX   ;计算当前行数(本轮从该行开始打印)
    MOV CX,08H;共8行
WRITE1:   ;在上面两块屏幕上输出
    MOV AL,0H
    OUT 0H,AL;清屏操作
    MOV AL,[SI];左边内容
    OUT 4H,AL
    MOV AL,[DI];右边内容
    OUT 6H,AL
    MOV AL,AH   ;设置目标行
    OUT 0H,AL
    ROL AH,1;目标行下移
    INC SI;指向下一行
    INC DI    
    PUSH CX
    MOV CX,0500H ;延迟
    LOOP $     
    POP CX 
    LOOP WRITE1
    
    MOV AL,0H
    OUT 0H,AL
    MOV CX,08H 
WRITE2:;在下面两块屏幕上输出
    MOV AL,0H
    OUT 2H,AL ;清屏操作
    MOV AL,[SI] ;左边内容
    OUT 4H,AL
    MOV AL,[DI] ;右边内容
    OUT 6H,AL
    MOV AL,AH   ;设置目标行
    OUT 2H,AL
    ROL AH,1  ;目标行下移
    INC SI
    INC DI
    PUSH CX
    MOV CX,0500H
    LOOP $     
    POP CX
    LOOP WRITE2 
    
    INC BX
    CMP BX,224 ;14个字,向上滚14*16行
    JA RESET             
CONTINUE:
    JMP RUN
RESET: ;滚动值清零
    MOV BX,0
    JMP CONTINUE 
CODE ENDS
END START 

电路连接图:

实验过程截图:

参考文献

消除proteus仿真时的红蓝色点

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值