一、实验要求
- 实现8×8 LED点阵实验,要求在8×8 的LED上循环显示1,2,3这三个数字。
- 实验系统中的16×16 LED点阵由四块8×8 LED点阵组成,控制点阵向上(或左右)游动显示“西安电子科技大学欢迎您!-姓名”。
二、实验目的
- 了解LED点阵的基本结构。
- 学习LED点阵扫描显示程序的设计方法。
三、实验原理
-
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的循环次数控制移动的速度。 -
同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上显示想要显示的文字。