一、实验目的:
1.了解LED点阵的基本结构。
2.学习LED点阵扫描显示程序的设计方法。
二、实验内容与要求:
编写程序,控制点阵向上卷动显示“原来如此是这样呀”。
三、实验环境:
PC机一台,TD-PITE实验装置一套。
四、实验步骤:
1.连接电路图。
2.编写实验程序,检查无误后,编译、链接并装入系统。
3.运行实验程序,观察点阵的显示,验证程序功能。
4.固化实验程序,然后脱机运行。
5.自己可以设计实验,使点阵显示不同的符号
6.字符提取方法:将HZDotReader文件拷贝到硬盘上运行程序,设置“取模字体”,设置“取模方式”,选择“输出设置”设置输出格式,点击“字”按钮输入“原来如此是这样呀”得到输入字符的点阵编码以及对应的汉字显示对点阵进行编辑,保存点阵文件为dot格式,使用word软件打开保存文件将字符复制到自己的程序中。
五、电路连接
六、代码设计
1.关于字数
BG0: MOV AX, 112
MOV SI, OFFSET HZDOTht
总共有8个字,每个字需要有32个字节用来显示,由于最后一个字显示后就回重新显示,所以AX的值为32*(4-1)/2=112。
2.关于程序设计思想
首先,通过伪指令操作定义端口,其中CS1、CS2分别定义为0~7、8~15行控制端口,CS3、CS4分别定义为0~7、8~15列控制端口,再定义一个256位的字型存储空间。然后再利用包含伪指令INCLUDE来指明包含的显示符号的编码,共由176行、16列组成,这个数字矩阵可根据不同的数字而改变,这也是程序编写的关键。对各端口进行初始化,及各行各列进行初始化,最初使行为“0”,列为“1”,满足灯亮的初始条件。
其次,进入程序主体,开始进行编程。计开始外循环次数为112,利用源变址指针寄存器开始进如循环。通过调用子程序进行内部循环,把点阵显示单元分成四个模块。第一部分内循环是执行前两个模块的数字矩阵操作,从0行到7行的全部列的编写。需要考虑灯亮的条件,即行为0,列为1,就给行赋0值,使行满足条件,因此紧接着需要列的条件,如果某列能够满足条件,则此交点的灯亮。否则,灯不亮。完成一个模块的一行后,开始让指针执行加一操作,从而进入下一个模块的行操作。同理,依次执行循环操作,完成前两个模块的任务。调用子程序进行延时操作,使汉字显示的时间合理。接着进行内部外循环操作,再次进行上述语句命令完成字体在前两个模块的显示情况。然后就是执行后两个模块的语句操作。原理同前两个模块的操作命令。
我们也可以人为的控制汉字移动速度和持续时间,即改变外循环次数值,值越小移动越快。
七、实验现象
依次输入“原来如此是这样呀”之后循环
附录 代码
============================================================
; 文件名称: LED16.ASM
; 功能描述:
; 行: CS1(600H), CS2(640H) 列: CS3(680H), CS4(6C0H)
;============================================================
ROW1 EQU 0600H ;端口定义IOY0
ROW2 EQU 0640H ;端口定义IOY1
COL1 EQU 0680H ;端口定义IOY2
COL2 EQU 06C0H ;端口定义IOY3
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
;定义为数据段
INCLUDE HZDOTht.ASM ;数据字段为汉字点阵库, 在HZDOTht.ASM文件中
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV DX, ROW1
MOV AL, 00H
OUT DX, AL
MOV DX, ROW2
OUT DX, AL
MOV AL, 0ffH
MOV DX, COL1
OUT DX, AL
MOV DX, COL2
OUT DX, AL
BG0: MOV AX, 112
MOV SI, OFFSET HZDOTht
BG1: CALL DISP
ADD SI, 2
DEC AX
JZ BG0
JMP BG1
;======显示汉字子程序======
;入口参数: SI = 存放汉字起始地址
DISP: MOV CX, 000FH
PUSH AX
ML0: PUSH CX
MOV BL, 01H
MOV CX, 0008H
ML1: MOV DX, ROW1 ;控制0--7行
MOV AL, 00H
OUT DX, AL
MOV AL, [SI]
NOT AL
MOV DX, COL1 ;0--7列
OUT DX, AL
INC SI
MOV AL, [SI]
NOT AL
MOV DX, COL2 ;8--15列
OUT DX, AL
INC SI
MOV DX, ROW1 ;控制0--7行
MOV AL, BL
OUT DX, AL
ROL BL, 1
CALL DELAY
LOOP ML1
MOV DX, ROW1
MOV AL, 00H
OUT DX, AL
MOV CX, 0008H
ML2: MOV DX, ROW2 ;控制8--15行
MOV AL, 00H
OUT DX, AL
MOV AL, [SI]
NOT AL
MOV DX, COL1 ;0--7列
OUT DX, AL
INC SI
MOV AL, [SI]
NOT AL
MOV DX, COL2 ;8--15列
OUT DX, AL
INC SI
MOV DX, ROW2 ;控制8--15行
MOV AL, BL
OUT DX, AL
ROL BL, 1
CALL DELAY
LOOP ML2
MOV DX, ROW2
MOV AL, 00H
OUT DX, AL
SUB SI, 32
POP CX
LOOP ML0
POP AX
RET
DELAY: PUSH CX ;延时子程序
MOV CX, 0100H
DL1: PUSH AX
POP AX
LOOP DL1
POP CX
RET
CODE ENDS
END START
;本文件为16×16点阵中文字库文件,字的横向8点构成一字节,
;左边点在字节的低位,字符点阵四角按左上角→右上角→左下
;角→右下角取字
CD4AD EQU 00000H;原
CC0B4 EQU CD4AD+1;来
CC8E7 EQU CC0B4+1;如
CB4CB EQU CC8E7+1;此
CCAC7 EQU CB4CB+1;是
CD5E2 EQU CCAC7+1;这
CD1F9 EQU CD5E2+1;样
CD1BD EQU CD1F9+1;呀
DATA SEGMENT
;原 CD4AD
DB 000H,000H,03FH,0FEH,020H,080H,021H,000H
DB 027H,0F0H,024H,010H,024H,010H,027H,0F0H
DB 024H,010H,024H,010H,027H,0F0H,020H,080H
DB 024H,090H,048H,088H,052H,084H,081H,000H
;来 CC0B4
DB 001H,000H,001H,000H,001H,000H,07FH,0FCH
DB 001H,000H,011H,010H,009H,010H,009H,020H
DB 0FFH,0FEH,003H,080H,005H,040H,009H,020H
DB 031H,018H,0C1H,006H,001H,000H,001H,000H
;如 CC8E7
DB 010H,000H,010H,000H,010H,000H,010H,07CH
DB 0FEH,044H,022H,044H,022H,044H,022H,044H
DB 042H,044H,024H,044H,014H,044H,008H,044H
DB 014H,044H,022H,07CH,042H,044H,080H,000H
;此 CB4CB
DB 004H,040H,004H,040H,004H,040H,024H,044H
DB 024H,048H,027H,050H,024H,060H,024H,040H
DB 024H,040H,024H,040H,024H,040H,024H,042H
DB 02FH,042H,0F0H,042H,040H,03EH,000H,000H
;是 CCAC7
DB 01FH,0F0H,010H,010H,010H,010H,01FH,0F0H
DB 010H,010H,010H,010H,01FH,0F0H,000H,000H
DB 0FFH,0FEH,001H,000H,011H,000H,011H,0F8H
DB 011H,000H,029H,000H,045H,000H,083H,0FEH
;这 CD5E2
DB 000H,080H,020H,040H,010H,040H,017H,0FCH
DB 000H,010H,002H,010H,0F1H,020H,010H,0A0H
DB 010H,040H,010H,0A0H,011H,010H,012H,008H
DB 014H,008H,028H,000H,047H,0FEH,000H,000H
;样 CD1F9
DB 011H,004H,010H,084H,010H,088H,010H,000H
DB 0FBH,0FEH,010H,020H,030H,020H,039H,0FCH
DB 054H,020H,050H,020H,093H,0FEH,010H,020H
DB 010H,020H,010H,020H,010H,020H,010H,020H
;呀 CD1BD
DB 000H,000H,003H,0FCH,078H,010H,049H,010H
DB 049H,010H,049H,010H,04AH,010H,04BH,0FEH
DB 048H,030H,048H,050H,078H,090H,049H,010H
DB 002H,010H,004H,010H,000H,050H,000H,020H
DATA ENDS