; 初始化顯示 ; 詳見指令集 CLR P1.3 ; 清零寄存器選擇RS(1為數(shù)據(jù),0為命令/狀態(tài))—表示指令正在發(fā)送到模塊
; 功能設(shè)置 CLR P1.7 ; | CLR P1.6 ; | SETB P1.5 ; | CLR P1.4 ; | 高半字節(jié)P1.4-P1.7(DL=1,8位數(shù)據(jù)接口;DL=0,4位數(shù)據(jù)
SETB P1.2 ; | CLR P1.2 ; | 使能信號E的下降沿
CALL delay ; 等待忙標志BF清零 ; 首次發(fā)送的函數(shù)集-告訴模塊進入4位模式 ; 為什么函數(shù)集為高半字節(jié)發(fā)送兩次?見HD44780的4位操作 SETB P1.2 ; | CLR P1.2 ; | 使能信號E的下降沿 ; 第二次發(fā)送相同的函數(shù)集高半字節(jié)P1.4-P1.7
SETB P1.7 ; 低半字節(jié)(N=1,2行顯示;N=0,1行顯示)
SETB P1.2 ; | CLR P1.2 ; | 使能信號E的下降沿 ; 發(fā)送低半字節(jié)函數(shù)集
CALL delay ; 等待忙標志BF清零
; 設(shè)置輸入方式(光標和顯示模式) ; 設(shè)置為不移動的地址指針加1 CLR P1.7 ; | CLR P1.6 ; | CLR P1.5 ; | CLR P1.4 ; | 高半字節(jié)
SETB P1.2 ; | CLR P1.2 ; | 使能信號E的下降沿
SETB P1.6 ; | SETB P1.5 ; | 低半字節(jié)
SETB P1.2 ; | CLR P1.2 ; | 使能信號E的下降沿
CALL delay ; 等待忙標志BF清零
; 設(shè)置顯示開/關(guān)及光標閃爍 ; 顯示器打開,光標打開,閃爍關(guān)閉 CLR P1.7 ; | CLR P1.6 ; | CLR P1.5 ; | CLR P1.4 ; | 高半字節(jié)
SETB P1.2 ; | CLR P1.2 ; | 使能信號E的下降沿
SETB P1.7 ; | SETB P1.6 ; | SETB P1.5 ; | 低半字節(jié)
SETB P1.2 ; | CLR P1.2 ; | 使能信號E的下降沿
CALL delay ; 等待忙標志BF清零
; 將歐元符號放入RAM中 MOV 30H, #110B ; ** MOV 31H, #1001B ; * * MOV 32H, #11110B ; **** MOV 33H, #1000B ; * MOV 34H, #11110B ; **** MOV 35H, #1001B ; * * MOV 36H, #110B ; ** MOV 37H, #0 ; | 數(shù)據(jù)結(jié)束(在本例中,0可用于指示數(shù)據(jù)結(jié)束,因為沒有行本身包含0)
; 設(shè)置CG RAM地址 ; 設(shè)置為字符4,行0(地址100000 B=20H) CLR P1.7 ; | SETB P1.6 ; | SETB P1.5 ; | CLR P1.4 ; | 高半字節(jié)
SETB P1.2 ; | CLR P1.2 ; | 使能信號E的下降沿
CLR P1.6 ; | CLR P1.5 ; | 低半字節(jié)
SETB P1.2 ; | CLR P1.2 ; | 使能信號E的下降沿
CALL delay ; 等待忙標志BF清零
; 將歐元符號發(fā)送到CGRAM SETB P1.3 ; 置位寄存器選擇RS-表示數(shù)據(jù)正在發(fā)送到模塊 MOV R1, #30H ; 指向第一行,在8051 RAM位置30H loop: MOV A, @R1 ; 將R1指向單元中的數(shù)據(jù)傳送至A JZ endEuroEntry ; 如果A為0,則已到達數(shù)據(jù)結(jié)尾-跳出循環(huán) CALL sendCharacter ; 將當前行發(fā)送到LCD模塊 INC R1 ; 指向下一行 JMP loop ; 跳回loop
endEuroEntry:
; 設(shè)置DDRAM地址 ; 設(shè)置為0 CLR P1.3 ; 清零寄存器選擇RS—表示指令正在發(fā)送到模塊
SETB P1.7 ; | CLR P1.6 ; | CLR P1.5 ; | CLR P1.4 ; | 高半字節(jié)
SETB P1.2 ; | CLR P1.2 ; | 使能信號E的下降沿
CLR P1.7 ; | 低半字節(jié)
SETB P1.2 ; | CLR P1.2 ; | 使能信號E的下降沿
CALL delay ; 等待忙標志BF清零
; 顯示歐元符號(通過發(fā)送4到DDRAM) SETB P1.3 ; 置位寄存器選擇RS-表示數(shù)據(jù)正在發(fā)送到模塊 MOV A, #01010111B CALL sendCharacter
JMP $ ; 程序結(jié)束-不執(zhí)行任何操作
; 發(fā)送字符子程序
sendCharacter: MOV C, ACC.7 ; | MOV P1.7, C ; | MOV C, ACC.6 ; | MOV P1.6, C ; | MOV C, ACC.5 ; | MOV P1.5, C ; | MOV C, ACC.4 ; | MOV P1.4, C ; | 高半字節(jié)
SETB P1.2 ; | CLR P1.2 ; | 使能信號E的下降沿
MOV C, ACC.3 ; | MOV P1.7, C ; | MOV C, ACC.2 ; | MOV P1.6, C ; | MOV C, ACC.1 ; | MOV P1.5, C ; | MOV C, ACC.0 ; | MOV P1.4, C ; | 低半字節(jié)
SETB P1.2 ; | CLR P1.2 ; | 使能信號E的下降沿
CALL delay ; 等待忙標志BF清零
delay: MOV R0, #50 DJNZ R0, $ RET |