?? 126x64液晶多功能顯示.asm
字號:
;*********************************************
;Controller:ST7920
;MCU:AT89C51 ,晶體頻率:12MHz
;LCM:128*64
;LCM型號:帶中文字庫的128X64-0402
;LCM 接口:1:GND 2:VCC 3:V0 4.RS 5:RW 6:E 7--14:DB0-DB7 15:PSB 16:NC 17:RST 18:Vout
;**********************************************
;占用單元30H,31H,32H,33H,A,DPTR,R2,R4,R6,R7
;功能:顯示 浙江工業職業技術
; 學院電子協會歡迎
; 您
;
RS EQU P2.4 ;RS=“H”,表示DB7——DB0為顯示數據
;RS=“L”,表示DB7——DB0為顯示指令數據
RW EQU P2.5 ;R/W=“H”,E=“H”,數據被讀到DB7——DB0
;R/W=“L”,E=“H→L”, DB7——DB0的數據被寫到IR或DR
E EQU P2.6 ;使能信號
PSB EQU P2.7 ;H:8位或4位并口方式,L:串口方式(見注釋1)
RST EQU P2.0 ;復位端,低電平有效
;模塊內部接有上電復位電路,因此在不需要經常復位的場合可將該端懸空
COM EQU 30H ;DD RAM 地址存放單元
DAT EQU 31H ;漢字代碼數據存放單元
DAT1 EQU 32H ;漢字碼址表低位存放單元
DAT2 EQU 33H ;漢字碼址表高位存放單元
;******************************以上是接口定義
ORG 0000H
AJMP START
ORG 0030H
START: MOV SP,#60H
LJMP DISP
;*********************************
DISP: CLR PSB
LCALL DELAY
SETB PSB ;將PSB置1,通信方式為8位數據并口
LCALL DELAY
MOV COM,#30H ;功能設置---8BIT控制界面,基本指令集
ACALL WRI ;調用寫指令子程序
LCALL DELAY ;延遲39uS
MOV COM,#0CH ;顯示打開,光標關,反白顯示關
ACALL WRI ;調用寫指令子程序
LCALL DELAY ;延遲39uS
MOV COM,#01H ;清除屏幕顯示,將DDRAM的地址計數器歸零
ACALL WRI ;調用寫指令子程序
LCALL DELAY ;延遲39uS
MOV COM,#06H ;DDRAM的地址計數器(AC)加1
ACALL WRI ;調用寫指令子程序
LCALL DELAY ;延遲39uS
;****************************************************
;右移顯示,時間間隔為1秒
DISPX: MOV R0,#00H ;顯示文字偏移量
MOV R1,#00H ;附加顯示文字偏移量
MOV R2,#1 ;顯示文字個數
MOV R3,#1 ;附加顯示文字個數
MOV R4,#25 ;總的顯示次數
DISP1: MOV COM,#80H ;顯示首地址
ACALL WRI ;調用寫指令子程序
ACALL DISP11 ;調用右移顯示子程序
INC R3 ;取下一次顯示文字個數
MOV A,R3
CJNE A,#9,DISP12 ;判斷文字個數是否超過8
MOV A,#8 ;超過8個就定死顯示個數
MOV R3,A ;把新的顯示個數進行保存
DISP12: MOV R2,A
MOV A,R1 ;把原先的文字偏移量加2得到新的首位文字偏移量
ADD A,#2
MOV R0,A ;保存新的文字偏移量
MOV R1,A
ACALL DELAY1 ;延時下1秒再進行下一次顯示
MOV COM,#01H ;清除屏幕顯示,將DDRAM的地址計數器歸零
ACALL WRI ;調用寫指令子程序
ACALL DELAY ;延時
ACALL DELAY
ACALL DELAY
DJNZ R4,DISP1 ;判斷移位顯示是否完畢
MOV R0,#00H ;顯示文字偏移量
MOV R1,#00H ;附加顯示文字偏移量
MOV R2,#1 ;顯示文字個數
MOV R3,#1 ;附加顯示文字個數
MOV R4,#25 ;總的顯示次數
MOV B,#97H ;顯示首地址
DISP2: MOV COM,B ;送首位顯示地址
ACALL WRI ;調用寫指令子程序
ACALL DISP21 ;調用左移顯示子程序
MOV R0,#00H ;重新放首位顯示偏移量
INC R3 ;取下一次顯示位數,并進行判斷
MOV A,R3
CJNE A,#9,DISP22
MOV A,#8
MOV R3,A ;保存顯示位數
DISP22: MOV R2,A
DEC B ;取下一次顯示首地址,并進行判斷
MOV A,B
CJNE A,#8FH,DISP23
MOV B,#90H ;首地址小于90H時就定死在90H
INC R1 ;這時的首位文字偏移量也要相應改變
INC R1
MOV A,R1
MOV R0,A
DISP23: ACALL DELAY1
MOV COM,#01H ;清除屏幕顯示,將DDRAM的地址計數器歸零
ACALL WRI ;調用寫指令子程序
ACALL DELAY
ACALL DELAY
ACALL DELAY
DJNZ R4,DISP2
;右移顯示,時間間隔為1秒
MOV R0,#00H
MOV R1,#00H
MOV R2,#1
MOV R3,#1
MOV R4,#25
DISP3: MOV COM,#88H
ACALL WRI
ACALL DISP11
INC R3
MOV A,R3
CJNE A,#9,DISP32
MOV A,#8
MOV R3,A
DISP32: MOV R2,A
MOV A,R1
ADD A,#2
MOV R0,A
MOV R1,A
ACALL DELAY1
MOV COM,#01H ;清除屏幕顯示,將DDRAM的地址計數器歸零
ACALL WRI ;調用寫指令子程序
ACALL DELAY
ACALL DELAY
ACALL DELAY
DJNZ R4,DISP3
MOV R0,#00H
MOV R1,#00H
MOV R2,#1
MOV R3,#1
MOV R4,#25
MOV B,#9FH
DISP4: MOV COM,B
ACALL WRI
ACALL DISP21
MOV R0,#00H
INC R3
MOV A,R3
CJNE A,#9,DISP42
MOV A,#8
MOV R3,A
DISP42: MOV R2,A
DEC B
MOV A,B
CJNE A,#97H,DISP43
MOV B,#98H
INC R1
INC R1
MOV A,R1
MOV R0,A
DISP43: ACALL DELAY1
MOV COM,#01H ;清除屏幕顯示,將DDRAM的地址計數器歸零
ACALL WRI ;調用寫指令子程序
ACALL DELAY
ACALL DELAY
ACALL DELAY
DJNZ R4,DISP4
;逐個顯示從“浙”開始到“您”;時間間隔為1秒
DISP5: MOV R0,#00H
MOV R2,#8
MOV COM,#80H
ACALL WRI
ACALL DISP31
MOV R0,#10H
MOV R2,#8
MOV COM,#90H
ACALL WRI
ACALL DISP31
MOV R0,#20H
MOV R2,#1
MOV COM,#88H
ACALL WRI
ACALL DISP31
ACALL DELAY1
;====================================
;清除屏幕顯示,延時1秒
MOV COM,#01H ;清除屏幕顯示,將DDRAM的地址計數器歸零
ACALL WRI ;調用寫指令子程序
ACALL DELAY1
;====================================
AJMP DISPX
;==============================
;字符顯示子程序
DISP11: MOV A,R0 ;送偏高位偏移量
MOV DPTR,#TAB ;置表頭地址
MOVC A,@A+DPTR ;查表得到字符代碼
MOV DAT,A ;送漢字碼址表高位
ACALL WRD ;寫入第一字節數據
INC R0
MOV A,R0
MOVC A,@A+DPTR ;查表得到字符代碼
MOV DAT,A ;送漢字碼址表低位
ACALL WRD ;寫入第二字節數據
MOV A,R0 ;文字偏移量減三得到下一個要顯示文字的偏移量
CLR C
SUBB A,#3
MOV R0,A
DJNZ R2,DISP11 ;判斷是否顯示滿
RET
;=============================
;字符顯示子程序
DISP21: MOV A,R0 ;送偏高位偏移量
MOV DPTR,#TAB ;置表頭地址
MOVC A,@A+DPTR ;查表得到字符代碼
MOV DAT,A ;送漢字碼址表高位
ACALL WRD ;寫入第一字節數據
INC R0
MOV A,R0
MOVC A,@A+DPTR ;查表得到字符代碼
MOV DAT,A ;送漢字碼址表低位
ACALL WRD ;寫入第二字節數據
INC R0 ;取下一個字符地址
ACALL DELAY
DJNZ R2,DISP21 ;判斷是否顯示滿
RET
;==========================
;字符顯示子程序
DISP31: MOV A,R0 ;送偏高位偏移量
MOV DPTR,#TAB ;置表頭地址
MOVC A,@A+DPTR ;查表得到字符代碼
MOV DAT,A ;送漢字碼址表高位
ACALL WRD ;寫入第一字節數據
INC R0
MOV A,R0
MOVC A,@A+DPTR ;查表得到字符代碼
MOV DAT,A ;送漢字碼址表低位
ACALL WRD ;寫入第二字節數據
INC R0 ;取下一個字符地址
ACALL DELAY1
DJNZ R2,DISP31 ;判斷是否顯示滿
RET
;**************************
WRI: PUSH ACC
CLR RS
SETB RW
WRI1: MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,WRI1
CLR RW
MOV P0,COM
SETB E
CLR E
POP ACC
RET
;********************以上是寫指令子程序
WRD: PUSH ACC
CLR RS
SETB RW
WRD1: MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,WRD1
SETB RS
CLR RW
MOV P0,DAT
SETB E
CLR E
POP ACC
RET
;********************以上是寫數據子程序
DELAY: MOV R7,#0FFH
DELAY4: MOV R6,#00FH
LOOP2: DJNZ R6,LOOP2
DJNZ R7,DELAY4
RET
DELAY1: MOV R5,#08H
DELAY11:MOV R7,#0FFH
DELAY41:MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,DELAY41
DJNZ R5,DELAY11
RET
;************************以上是延時子程序
TAB: DB 0D5H,0E3H, 0BDH,0ADH, 0B9H,0A4H, 0D2H,0B5H ;第一行前四個字(浙江工業)
DB 0D6H,0B0H, 0D2H,0B5H, 0BCH,0BCH, 0CAH,0F5H ;第一行后四個字(職業技術)
DB 0D1H,0A7H, 0D4H,0BAH, 0B5H,0E7H, 0D7H,0D3H ;第二行前四個字(學院電子)
DB 0D0H,0ADH, 0BBH,0E1H, 0BBH,0B6H, 0D3H,0ADH ;第二行后四個字(協會歡迎)
DB 0C4H,0FAH, 0A3H,0A0H, 0A3H,0A0H, 0A3H,0A0H ;第三行前四個字(您 )
DB 0A3H,0A0H, 0A3H,0A0H, 0A3H,0A0H, 0A3H,0A0H ;第三行后四個字( )
DB 0A3H,0A0H, 0A3H,0A0H, 0A3H,0A0H, 0A3H,0A0H
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -