【点阵LED显示设计电路】—— 微机原理实验

一、实验要求

  1. 实现8×8 LED点阵实验,要求在8×8 的LED上循环显示1,2,3这三个数字。
  2. 实验系统中的16×16 LED点阵由四块8×8 LED点阵组成,控制点阵向上(或左右)游动显示“西安电子科技大学欢迎您!-姓名”。

二、实验目的

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

三、实验原理

  1. 8×8点阵内部结构图如下:(proteus里点阵工具:MATRIX-8×8)
    在这里插入图片描述
    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加1,重复上述过程。
    在这里插入图片描述
    注:在每次输出具体数据之前,要先选中X端口,输出全0实现清屏,否则会导致输出错误。利用CX的循环次数控制移动的速度。

  2. 同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。

四、实验代码及实验结果

实验1

(1)实验代码:

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

(2)实验结果:

在这里插入图片描述

实验2

(1)实验代码:

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 

(2)实验结果:

在这里插入图片描述
在这里插入图片描述

五、实验总结

通过本次实验,通过了解LED点阵的基本结构和LED点阵扫描显示程序的设计方法,我学会了如何在8 × 8的LED上循环显示数字,还有就是如何在16 × 16(4块8 × 8)的LED上显示想要显示的文字。

猜你喜欢

转载自blog.csdn.net/m0_51913750/article/details/130127616