?? led.asm
字號:
;B ------移動時內(nèi)存單元的數(shù)據(jù)要移的次數(shù)
;20H------作模式選擇用
;30H-6FH--顯示內(nèi)容存儲單元64個單元
;2BH------掃描還剩幾行寄存
;2CH------應(yīng)該選通那一行寄存
;2DH------尋址偏址
;2EH------每次移入內(nèi)存單元的數(shù)據(jù)要左移的次數(shù)臨時值
;2FH------左移速度
;29H,2AH-----延時同步修正寄存器
;*************************************************************
;***************引腳定義,根據(jù)使用不同的管腳而改動*************
;*************************************************************
;A,B,C,D分別用P2。0至P2。3線
SER EQU P3.0 ;內(nèi)容發(fā)送
SRCLK EQU P3.1 ;串行CP端
RCLK EQU P1.7 ;輸出CP端
EN EQU P1.6 ;EN為138使能端.高電平關(guān)閉顯示;低電平顯示
;*************************************************************
;*********************中斷入口程序****************************
ORG 0000H
LJMP MAIN
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 0100H
;***************主程序****************************************
MAIN: SETB EN ;關(guān)顯示端口
MOV 20H,#01H ;設(shè)開始為模式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
;********************顯示內(nèi)容*********************************
LOOP: MOV DPTR,#TAB ;賦查表初址
LOOP1: MOV R1,#4 ;送幕數(shù)(即字?jǐn)?shù)除以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 ;如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動
MOV A,DPH
ADDC A,#0
MOV DPH,A
DJNZ R1,LOOP2 ;一種模式下顯示完了沒有?如未繼續(xù)顯示
MOV A,20H ;一種模式下如顯示完就改變顯示模式
RL A
MOV 20H,A
JB ACC.3,MAIN ;如所有模式全部顯示完了沒有?如還未完就繼
;續(xù)顯示下一種模式
LJMP STRAT ;如顯示完所有模式,就重新開始循環(huán)顯示內(nèi)容
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一次后,內(nèi)容左移顯示八次,尋址偏址不變
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一次后,內(nèi)容左移顯示八次,尋址偏址不變
LJMP LOOP3
;*****************************************************************************
;*************************整屏四個字一齊顯示的程序****************************
PLAY: MOV 2DH,#0
NLINE: MOV 2FH,#150 ;左移速度
GG: LCALL LINE16 ;掃描顯示1幀
DJNZ 2FH,GG
RET
;*********掃描顯示1幀行子程序*******************
LINE16: MOV 2BH,#16 ;掃描的行數(shù),共16行,經(jīng)行程序處理后顯示應(yīng)顯示的行
FF: LCALL LINE1 ;掃描顯示1行子程序
DJNZ 2BH,FF ;掃描下一行
MOV A,2DH
SUBB A,#32 ;掃描完16行后要重頭開始,在MSTR子程序中,減32
MOV 2DH,A
RET
;*********掃描顯示一行子程序********************
LINE1: LCALL MSTR ;將顯示內(nèi)容移入內(nèi)存單元21H~28H ,跳出后29H加2
LCALL SEND ;發(fā)送串行口子程序
LCALL XH ;選通行子程序
RET
;****************************************************************************
;****************************************************************************
;*************************顯示內(nèi)容移入內(nèi)存單元子程序*************************
MSTR: MOV R0,#30H
MOV R4,#5 ;每幕顯示的字?jǐn)?shù)加1;如每幕顯示字?jǐn)?shù)不同要作相應(yīng)改動
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,移到下一個字節(jié)的對應(yīng)位置
MOV 2DH,A
INC R0
DJNZ R4,BB
MOV A,2DH
SUBB A,#158 ;每次顯示4個字,減158;如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動
MOV 2DH,A
RET
;*****************************發(fā)送數(shù)據(jù)到串口子程序*********************************
SEND: MOV R0,#30H
MOV R5,#8 ;一行有8個字節(jié);如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動
LQ: CLR C ;清C方便每個字節(jié)的移動
MOV R2,#8 ;每個字節(jié)有8位
MOV A,@R0 ;將顯存的字節(jié)的單元移入A
CPL A
LCALL DD1 ;調(diào)用顯示一個字節(jié)的子程序
INC R0 ;指向下一個顯存的單元
DJNZ R5,LQ ;8個字節(jié)全部移入了沒有,未繼續(xù)
RET
DD1: CLR SRCLK ;清串行CP端
RLC A ;將每個字節(jié)移位
MOV SER,C ;將移入C的位移入信號端
SETB SRCLK ;觸發(fā)串行CP端
DJNZ R2,DD1 ;每個字節(jié)位移8次夠了沒有?
RET
;*******選通行子程序**********************************************
XH: CLR RCLK ;將輸出CP變?yōu)榈碗娖綖樯仙刈鳒?zhǔn)備
SETB EN ;將使能端變?yōu)楦唠娖綖橄陆笛刈鳒?zhǔn)備
MOV 2CH,2BH ;2BH存運行剩幾行數(shù)值
MOV A,#16 ;共16行
CLR C
SUBB A,2CH ;16行減去剩余行數(shù)得現(xiàn)在應(yīng)該掃描行
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個連續(xù)點構(gòu)成一個字節(jié),最左邊的點為字節(jié)的最高位,即BIT7,**********
;***********最右邊的點為BIT0.16×16漢字按每行2字節(jié),共16行取字模,每個漢字***********
;***********共32字節(jié).點陣四個角取字順序為左上角→右上角→左下角→右下角。*********
;*********************************************************************************
;祝 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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -