?? 1602lcdtestprocedure.asm
字號(hào):
/*
2008年12月20日
1602LCD 測(cè)試程序
參考:偉納電子 1602LCD 技術(shù)文檔
接口說(shuō)明:
8051與1602接口可以采用總線模式。
MCU 讀/寫信號(hào)通過(guò)與非門接 1602的使能信號(hào)端E; RS接P1.3;RW接P1.4。
MCU P0接1602數(shù)據(jù)口,同時(shí)接上拉電阻。
// 1602讀操作邏輯:WR=1,E=1;寫操作邏輯:WR=0,E為高脈沖(~下降沿~)
子程序說(shuō)明:
BF 檢測(cè)忙標(biāo)志BF
WI 寫IR。入口參數(shù):R1
WD 寫DR。入口參數(shù):R2
DELAY 延時(shí)65ms
INI 指令初始化模塊
WDD 寫顯示字符的字符碼到DDRAM
START 顯示主程序
*/
//-------------------------------------------------------------------------------
//-----------------------------------------------------------
//0 顯示主程序
//-----------------------------------------------------------
RS EQU P1.3
RW EQU P1.4
ORG 0000H
/*
測(cè)試主程序1:顯示一個(gè)字符'A'
測(cè)試對(duì)象:INI BF WI WD
START:
LCALL INI
LCALL BF
MOV R1, #80H // 第一行首字字母
LCALL WI
LCALL BF
MOV R2,#41H // 字符'A'
LCALL WD
SJMP $
*/
// 測(cè)試主程序2:顯示兩行字符
// 測(cè)試對(duì)象:WDD
START:
LCALL INI
LCALL WDD
SJMP $
//-----------------------------------------------------------
//1 忙檢測(cè)子程序
//-----------------------------------------------------------
/*
為什么這個(gè)BF不行,它會(huì)使程序掛起~!
BF:
CLR A
MOVX A, @R0
JB ACC.7, BF
RET
*/
// SB,又懷疑是不是軟件問(wèn)題~! 打住!先看看1602使用說(shuō)明...
// 1602讀操作邏輯:RS=0,RW=1,E高電平
BF:
clr rs
setb rw // 如果寫成 CLR RW,也會(huì)掛起哦~
CLR A
MOVX A, @R0
JB ACC.7, BF
RET
//不測(cè)試BusyFlag,這個(gè)程序?qū)嶋H上是個(gè)延時(shí)程序。
//BF:
//lcall delay // 如果把這句注釋起來(lái),即BF直接返回,只能顯示一行字符~~~
//RET
//-----------------------------------------------------------
//2 寫數(shù)據(jù)到指令寄存器IR
//入口參數(shù):R1 暫存指令碼
//-----------------------------------------------------------
WI:
CLR RS
CLR RW
MOV A, R1
MOVX @R0, A
RET
//-----------------------------------------------------------
//3 寫數(shù)據(jù)到數(shù)據(jù)寄存器DR
//入口參數(shù):R2 暫存字符碼或字符字模數(shù)據(jù)
//-----------------------------------------------------------
WD:
SETB RS
CLR RW
MOV A, R2
MOVX @R0, A
RET
//-----------------------------------------------------------
//4 延時(shí)65ms
//-----------------------------------------------------------
DELAY:
MOV R7, #0FH
LOOP0:MOV R6, #0FFH
DJNZ R6, $
DJNZ R7, LOOP0
RET
//-----------------------------------------------------------
//5 指令初始化模塊
// 初始化對(duì)象和內(nèi)容:
// ______________RS_RW_D7_D6_D5_D4_D3_D2_D1_D0_________________
// |清屏 |0 0 0 0 0 0 0 0 0 1
// |功能設(shè)置 |0 0 0 0 0 0 1 DL N F
// |顯示開關(guān)控制 |0 0 0 0 1 D C B * *
// |輸入方式 |0 0 0 0 0 0 0 1 I/D S
// |_____________|____________________________
// 我只知道初始化有以上4部分,內(nèi)容可根據(jù)需要設(shè)定。
//-----------------------------------------------------------
INI:
MOV R3, #03h // 不知道為什么要3次
MOV R1, #38H // FUNCTION SET
LCALL WI
MOV R1, #01H // DISPLAY CLEAR
LCALL BF
LCALL WI
MOV R1, #06H // INPUT MODE SET
LCALL BF
LCALL WI
MOV R1, #0CH // DISPLAY ON/OFF SET
LCALL BF
LCALL WI
/* 上面的過(guò)程只進(jìn)行一次也可以~
MOV R1, #38H // FUNCTION SET
LCALL BF
LCALL WI
MOV R1, #01H // DISPLAY CLEAR
LCALL BF
LCALL WI
MOV R1, #06H // INPUT MODE SET
LCALL BF
LCALL WI
MOV R1, #0CH // DISPLAY ON/OFF SET
LCALL BF
LCALL WI
*/
RET
//-----------------------------------------------------------
//6 寫顯示字符的字符碼到DDRAM
// 偉納電子 1602LCD 技術(shù)文檔里的那個(gè)程序~不明白什么意思,我自己寫了個(gè)WDD
//-----------------------------------------------------------
WDD:
MOV DPTR, #0300h
MOV R4, #16
MOV R1, #80H // 第一行
LCALL BF
LCALL WI
LOOP1:CLR A
MOVC A, @A+DPTR
INC DPTR
MOV R2, A
LCALL BF
LCALL WD
DJNZ R4, LOOP1
MOV R4, #16
MOV R1, #0C0H // 第二行
LCALL BF
LCALL WI
LOOP2:CLR A
MOVC A, @A+DPTR
INC DPTR
MOV R2, A
LCALL BF
LCALL WD
DJNZ R4, LOOP2
RET
//-----------------------------------------------------------
//9 顯示字符的字符碼表
//-----------------------------------------------------------
ORG 0300H
DB "0123456789ABCDEF"
DB " PZ:HELLO,1602! "
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -