📄 led.asm
字号:
;B ------移动时内存单元的数据要移的次数
;20H------作模式选择用
;30H-6FH--显示内容存储单元64个单元
;2BH------扫描还剩几行寄存
;2CH------应该选通那一行寄存
;2DH------寻址偏址
;2EH------每次移入内存单元的数据要左移的次数临时值
;2FH------左移速度
;29H,2AH-----延时同步修正寄存器
;*************************************************************
;***************引脚定义,根据使用不同的管脚而改动*************
;*************************************************************
;A,B,C,D分别用P2。0至P2。3线
SER EQU P3.0 ;内容发送
SRCLK EQU P3.1 ;串行CP端
RCLK EQU P1.7 ;输出CP端
EN EQU P1.6 ;EN为138使能端.高电平关闭显示;低电平显示
;*************************************************************
;*********************中断入口程序****************************
ORG 0000H
LJMP MAIN
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 0100H
;***************主程序****************************************
MAIN: SETB EN ;关显示端口
MOV 20H,#01H ;设开始为模式1
STRAT: MOV SP,#70H ;堆栈首址
MOV R0,#30H ;初使化寄存显示单元
MOV R1,#64 ;30H~6FH单元清零
MOV A,#00H
ST: MOV @R0,A
INC R0
DJNZ R1,ST
;********************显示内容*********************************
LOOP: MOV DPTR,#TAB ;赋查表初址
LOOP1: MOV R1,#4 ;送幕数(即字数除以4,每幕4个字)
LOOP2: JB 00H,L00 ;4个字一齐显示
JB 01H,L10 ;下移
JB 02H,L20 ;上移
LOOP3: MOV A,DPL
CLR C
ADD A,#128 ;查表地址改为下一段,即增加128(四个字为128)
MOV DPL,A ;如每次显示字数不同要作相应改动
MOV A,DPH
ADDC A,#0
MOV DPH,A
DJNZ R1,LOOP2 ;一种模式下显示完了没有?如未继续显示
MOV A,20H ;一种模式下如显示完就改变显示模式
RL A
MOV 20H,A
JB ACC.3,MAIN ;如所有模式全部显示完了没有?如还未完就继
;续显示下一种模式
LJMP STRAT ;如显示完所有模式,就重新开始循环显示内容
RET
;***********************************************************************
;************************以下为显示模式的子程序*************************
;***********************************************************************
L00: LCALL PLAY
LJMP LOOP3
;***********************************************************************
;****************************以下为下移程序*****************************
;***********************************************************************
L10: MOV 28H,#16
L11: MOV 2FH,#60
L12: MOV A,#17
CLR C
SUBB A,28H
MOV 26H,A
MOV B,A
MOV 2BH,28H
MOV 27H,#15
L13: MOV A,27H
RL A
MOV 2DH,A
LCALL MSTR
LCALL SEND
LCALL XH
DEC 27H
INC 2BH
DJNZ 26H,L13
LCALL ZYXZ
DJNZ 2FH,L12
DJNZ 28H,L11
LCALL PLAY ;运行PLAY一次后,内容左移显示八次,寻址偏址不变
LJMP LOOP3
;**************************************************************************
;****************************以下为上移程序********************************
;**************************************************************************
L20: MOV 28H,#16
L21: MOV 2FH,#40
L22: MOV A,#17
CLR C
SUBB A,28H
MOV 26H,A
MOV B,A
MOV 2BH,A
MOV 27H,#0
L23: MOV A,27H
RL A
MOV 2DH,A
LCALL MSTR
LCALL SEND
LCALL XH
INC 27H
DEC 2BH
DJNZ 26H,L23
LCALL ZYXZ
DJNZ 2FH,L22
DJNZ 28H,L21
LCALL PLAY ;运行PLAY一次后,内容左移显示八次,寻址偏址不变
LJMP LOOP3
;*****************************************************************************
;*************************整屏四个字一齐显示的程序****************************
PLAY: MOV 2DH,#0
NLINE: MOV 2FH,#150 ;左移速度
GG: LCALL LINE16 ;扫描显示1帧
DJNZ 2FH,GG
RET
;*********扫描显示1帧行子程序*******************
LINE16: MOV 2BH,#16 ;扫描的行数,共16行,经行程序处理后显示应显示的行
FF: LCALL LINE1 ;扫描显示1行子程序
DJNZ 2BH,FF ;扫描下一行
MOV A,2DH
SUBB A,#32 ;扫描完16行后要重头开始,在MSTR子程序中,减32
MOV 2DH,A
RET
;*********扫描显示一行子程序********************
LINE1: LCALL MSTR ;将显示内容移入内存单元21H~28H ,跳出后29H加2
LCALL SEND ;发送串行口子程序
LCALL XH ;选通行子程序
RET
;****************************************************************************
;****************************************************************************
;*************************显示内容移入内存单元子程序*************************
MSTR: MOV R0,#30H
MOV R4,#5 ;每幕显示的字数加1;如每幕显示字数不同要作相应改动
MOV A, 2DH
BB: MOVC A, @A+DPTR
MOV @R0,A
INC R0
MOV A,2DH
INC A
MOVC A,@A+DPTR
MOV @R0,A
MOV A,2DH
ADD A,#32 ;加32,移到下一个字节的对应位置
MOV 2DH,A
INC R0
DJNZ R4,BB
MOV A,2DH
SUBB A,#158 ;每次显示4个字,减158;如每次显示字数不同要作相应改动
MOV 2DH,A
RET
;*****************************发送数据到串口子程序*********************************
SEND: MOV R0,#30H
MOV R5,#8 ;一行有8个字节;如每次显示字数不同要作相应改动
LQ: CLR C ;清C方便每个字节的移动
MOV R2,#8 ;每个字节有8位
MOV A,@R0 ;将显存的字节的单元移入A
CPL A
LCALL DD1 ;调用显示一个字节的子程序
INC R0 ;指向下一个显存的单元
DJNZ R5,LQ ;8个字节全部移入了没有,未继续
RET
DD1: CLR SRCLK ;清串行CP端
RLC A ;将每个字节移位
MOV SER,C ;将移入C的位移入信号端
SETB SRCLK ;触发串行CP端
DJNZ R2,DD1 ;每个字节位移8次够了没有?
RET
;*******选通行子程序**********************************************
XH: CLR RCLK ;将输出CP变为低电平为上升沿作准备
SETB EN ;将使能端变为高电平为下降沿作准备
MOV 2CH,2BH ;2BH存运行剩几行数值
MOV A,#16 ;共16行
CLR C
SUBB A,2CH ;16行减去剩余行数得现在应该扫描行
MOV P2,A ;送P2口
SETB RCLK ;输出CP为上升沿,显示一个
CLR EN ;138可显示
RET
;********************移动查模式时速度同步修正子程序*******************
ZYXZ: MOV 29H,B
MOV A,#17
SUBB A,29H
MOV 2AH,A
AA: LCALL DL22US
DJNZ 2AH ,AA
RET
;***************************800US延时子程序***********************
DL800US: MOV R6,#9 ;1DH
DL1: MOV R5,#17 ;18H
DL2: DJNZ R5,DL2
DJNZ R6,DL1
RET
;******22US延时子程序*****************
DL22US: MOV R6,#100
DL3: DJNZ R6,DL3
NOP
RET
;*********************************************************************************
;***********************************字码表****************************************
;*********************************************************************************
TAB:
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
;*******************************以上字码用作黑屏**********************************
;*********************************************************************************
;***********以横向8个连续点构成一个字节,最左边的点为字节的最高位,即BIT7,**********
;***********最右边的点为BIT0.16×16汉字按每行2字节,共16行取字模,每个汉字***********
;***********共32字节.点阵四个角取字顺序为左上角→右上角→左下角→右下角。*********
;*********************************************************************************
;祝 CD7A3
DB 020H,000H,011H,0F8H,011H,008H,0FDH,008H,005H,008H,009H,008H,011H,008H,039H,0F8H
DB 054H,090H,094H,090H,010H,090H,010H,090H,011H,012H,011H,012H,012H,012H,014H,00EH
;大 CB4F3
DB 001H,000H,001H,000H,001H,000H,001H,000H,001H,000H,0FFH,0FEH,001H,000H,002H,080H
DB 002H,080H,002H,040H,004H,040H,004H,020H,008H,010H,010H,018H,020H,00EH,040H,004H
;家 CBCD2
DB 002H,000H,001H,000H,03FH,0FEH,040H,004H,05FH,0E8H,001H,000H,002H,000H,00FH,020H
DB 072H,0B0H,004H,0C0H,019H,0C0H,066H,0B0H,018H,08EH,060H,084H,005H,000H,002H,000H
;: CA3BA
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,030H,000H,030H,000H,000H,000H,030H,000H,030H,000H,000H,000H,000H,000H
;身 CC9ED
DB 000H,000H,000H,000H,000H,000H,000H,000H,001H,000H,00FH,0F0H,00CH,0F0H,00BH,012H
DB 00CH,0FCH,01FH,0D8H,010H,0F0H,007H,090H,07DH,010H,000H,0F0H,000H,000H,000H,000H
;体 CCCE5
DB 000H,000H,000H,000H,000H,000H,000H,000H,004H,0C0H,0F8H,0C0H,073H,0F8H,010H,0E0H
DB 011H,0F0H,013H,0DCH,01CH,0CEH,013H,0F6H,010H,0C0H,010H,040H,000H,000H,000H,000H
;健 CBDA1
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,060H,018H,0F8H,0F7H,0FCH,052H,0F8H
DB 011H,0F8H,01FH,0F8H,013H,0A0H,03CH,0F0H,030H,03FH,000H,00EH,000H,000H,000H,000H
;康 CBFB5
DB 000H,000H,000H,000H,000H,000H,000H,000H,001H,080H,01FH,0F8H,017H,0F0H,010H,090H
DB 01FH,0F8H,017H,0F0H,032H,0D0H,06FH,0B8H,048H,08EH,001H,080H,000H,000H,000H,000H
;一 CD2BB
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,004H,07FH,0FEH
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
;切 CC7D0
DB 010H,000H,010H,000H,013H,0FCH,010H,044H,010H,044H,01EH,044H,0F0H,044H,010H,044H
DB 010H,044H,012H,084H,014H,084H,019H,004H,011H,004H,002H,014H,004H,008H,000H,000H
;顺 CCBB3
DB 000H,000H,045H,0FEH,054H,020H,054H,040H,055H,0FCH,055H,004H,055H,004H,055H,024H
DB 055H,024H,055H,024H,055H,024H,054H,020H,044H,050H,084H,08CH,005H,004H,000H,000H
;利 CC0FB
DB 000H,002H,003H,082H,03CH,002H,004H,022H,004H,022H,07FH,0A2H,00CH,022H,00CH,022H
DB 016H,022H,015H,022H,025H,0A2H,045H,022H,084H,002H,004H,012H,004H,00AH,004H,004H
;*********************************以下字码表用作黑屏******************************
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -