?? lcd滾動(dòng)顯示.txt
字號(hào):
LCD1602 滾動(dòng)顯示(匯編語(yǔ)言編寫(xiě))
;*******************************************************************
;*
;*ME300B單片機(jī)開(kāi)發(fā)系統(tǒng)演示程序 - LCD1602 滾動(dòng)顯示
;*
;* 顯示內(nèi)容:WLCOME TO WWW.WILLAR.COM
;*
;* 顯示方式:
;* 1、從左到右逐字顯示,閃動(dòng)二次,清屏。
;* 2、再?gòu)挠业阶笾鹱诛@示,閃動(dòng)二次,清屏。
;* 3、周期性地重復(fù)上述顯示方式。
;*
;* 郵箱: gguoqing@willar.com
;* 網(wǎng)站: http://www.willar.com ;
;* 作者: gguoqing
;* 創(chuàng)作時(shí)間:2004/12/20
;* 修改時(shí)間:2006/01/20
;*
;*【版權(quán)】Copyright(C)偉納電子 www.willar.com All Rights Reserved
;*【聲明】此程序僅用于學(xué)習(xí)與參考,引用請(qǐng)注明版權(quán)和作者信息!
;*
;*******************************************************************
LCD_RS EQU P2.0
LCD_RW EQU P2.1
LCD_EN EQU P2.2
;*******************************************************************
ORG 0000H
AJMP MAIN
ORG 0030H
;*******************************************************************
MAIN:
MOV SP,#60H
MOV R4,#02H ;設(shè)置閃爍次數(shù)
CALL LCD_INIT
MAIN1:
ACALL LCDSET1
MOV DPTR,#CHAR1
ACALL WRITE1 ;顯示“WELCOME TO”
MOV A,#0C0H ;顯示第二行左邊第一位位置
ACALL LCD_CMD
MOV DPTR,#CHAR2 ;顯示“WWW.WILLAR.COM”
ACALL WRITE1
ACALL DELAY4 ;延時(shí)
ACALL DELAY4
ACALL SHAN ;閃爍兩次
ACALL LCDSET2
MOV DPTR,#CHAR3 ;顯示“WELCOME TO”
ACALL WRITE1
MOV A,#0CFH ;顯示第二行右邊第一位位置
ACALL LCD_CMD
MOV DPTR,#CHAR4 ;顯示“WWW.WILLAR.COM”
ACALL WRITE1
ACALL DELAY4 ;延時(shí)
ACALL DELAY4
ACALL SHAN ;閃爍兩次
LCALL MAIN1
;***************************************************************
;LCD初始化設(shè)定子程序
;***************************************************************
LCD_INIT:
ACALL DELAY5MS ;延時(shí)15MS
ACALL DELAY5MS ;等待LCD電源穩(wěn)定
ACALL DELAY5MS
MOV A,#38H ;16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
ACALL LCD_CMD_NC ;不進(jìn)行LCD忙檢測(cè)
ACALL DELAY5MS
MOV A,#38H ;16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
ACALL LCD_CMD_NC ;不進(jìn)行LCD忙檢測(cè)
ACALL DELAY5MS
MOV A,#38H ;16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
ACALL LCD_CMD_NC ;不進(jìn)行LCD忙檢測(cè)
ACALL DELAY5MS
MOV A,#08H ;顯示關(guān)
ACALL LCD_CMD ;進(jìn)行LCD忙檢測(cè)
MOV A,#01H ;清除屏幕
ACALL LCD_CMD ;進(jìn)行LCD忙檢測(cè)
MOV A,#06H ;移動(dòng)光標(biāo)
ACALL LCD_CMD ;進(jìn)行LCD忙檢測(cè)
MOV A,#0CH ;顯示開(kāi),關(guān)光標(biāo)
ACALL LCD_CMD ;進(jìn)行LCD忙檢測(cè)
RET
;***************************************************************
;顯示位置與移動(dòng)光標(biāo)設(shè)定
;***************************************************************
LCDSET1:
MOV A,#01H ;清除屏幕
CALL LCD_CMD
CALL DELAY5MS
MOV A,#06H ;移動(dòng)光標(biāo)(光標(biāo)加1)
CALL LCD_CMD
CALL DELAY5MS
MOV A,#80H ;顯示第一行左邊第一位位置
CALL LCD_CMD
CALL DELAY5MS
RET
LCDSET2:
MOV A,#01H ;清除屏幕
CALL LCD_CMD
CALL DELAY5MS
MOV A,#04H ;移動(dòng)光標(biāo)(光標(biāo)減1)
CALL LCD_CMD
CALL DELAY5MS
MOV A,#8FH ;顯示第一行右邊第一位位置
CALL LCD_CMD
CALL DELAY5MS
RET
;***************************************************************
;寫(xiě)指令數(shù)據(jù)到LCD
;RS=L,RW=L,D0-D7=指令碼,E=高脈沖
;***************************************************************
LCD_CMD:
CALL CHECKBUSY
LCD_CMD_NC:
CLR LCD_RS
CLR LCD_RW
MOV P0,A
SETB LCD_EN
NOP
NOP
NOP
NOP
CLR LCD_EN
RET
;***************************************************************
; 發(fā)送字符串子程序
;***************************************************************
WRITE1:
MOV R0,#16
WRITE0:
CLR A
MOVC A,@A+DPTR
INC DPTR
ACALL LCD_WDATA
CALL DELAY ;加延時(shí)形成滾動(dòng)效果
DJNZ R0,WRITE0
RET
;***************************************************************
;寫(xiě)顯示數(shù)據(jù)到LCD
;RS=H,RW=L,D0-D7=數(shù)據(jù),E=高脈沖
;***************************************************************
LCD_WDATA:
ACALL CHECKBUSY
SETB LCD_RS
CLR LCD_RW
MOV P0,A
SETB LCD_EN
NOP
NOP
NOP
NOP
CLR LCD_EN
RET
;***************************************************************
;檢測(cè)LCD控制器忙狀態(tài)
;讀數(shù)據(jù)
;RS=L,RW=H,E=H,輸出:D0-D7=數(shù)據(jù)
;***************************************************************
CHECKBUSY:
PUSH ACC
MOV P0,#0FFH
CLR LCD_RS
SETB LCD_RW
SETB LCD_EN
BUSYLOOP:
NOP
JB P0.7,BUSYLOOP
CLR LCD_EN
POP ACC
RET
;***************************************************************
;閃爍子程序
;***************************************************************
SHAN:
MOV A,#08H ;關(guān)閉顯示
ACALL LCD_CMD
ACALL DELAY4
MOV A,#0CH ;開(kāi)顯示,關(guān)閉光標(biāo)
ACALL LCD_CMD
ACALL DELAY4
DJNZ R4,SHAN
MOV R4,#02H ;設(shè)置閃爍次數(shù)
RET
;***************************************************************
;延時(shí)120MS子程序
;發(fā)送字符串時(shí)使用
;***************************************************************
DELAY:
MOV R7,#240
DL1: MOV R6,#250
DL2: DJNZ R6,DL2
DJNZ R7,DL1
RET
;***************************************************************
;延時(shí)800MS子程序
;閃爍時(shí)使用
;***************************************************************
DELAY4:
MOV R0,#40
DL3: MOV R1,#100
DL4: MOV R2,#100
DL5: DJNZ R2,DL5
DJNZ R1,DL4
DJNZ R0,DL3
RET
;***************************************************************
;延時(shí)5MS子程序
;LCD初始化使用
;***************************************************************
DELAY5MS:
MOV R1,#10
DL6: MOV R2,#249
DL7: DJNZ R2,DL7
DJNZ R1,DL6
RET
;***************************************************************
;延時(shí)1MS子程序
;***************************************************************
DELAY1MS:
MOV R6,#14H ;20
DL8: MOV R7,#19H ;25
DL9: DJNZ R7,DL9
DJNZ R6,DL8
RET
;***************************************************************
CHAR1:
DB " WELCOME TO "
CHAR2:
DB " WWW.WILLAR.COM "
CHAR3:
DB " OT EMOCLEW "
CHAR4:
DB " MOC.RALLIW.WWW "
;***************************************************************
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -