標題: 這個單片機匯編程序如何改動顯示字符串? [打印本頁]
作者: BSq 時間: 2020-4-8 08:28
標題: 這個單片機匯編程序如何改動顯示字符串?
; 初始化顯示
; 詳見指令集
CLR P1.3 ; 清零寄存器選擇RS(1為數據,0為命令/狀態)—表示指令正在發送到模塊
; 功能設置
CLR P1.7 ; |
CLR P1.6 ; |
SETB P1.5 ; |
CLR P1.4 ; | 高半字節P1.4-P1.7(DL=1,8位數據接口;DL=0,4位數據
SETB P1.2 ; |
CLR P1.2 ; | 使能信號E的下降沿
CALL delay ; 等待忙標志BF清零
; 首次發送的函數集-告訴模塊進入4位模式
; 為什么函數集為高半字節發送兩次?見HD44780的4位操作
SETB P1.2 ; |
CLR P1.2 ; | 使能信號E的下降沿
; 第二次發送相同的函數集高半字節P1.4-P1.7
SETB P1.7 ; 低半字節(N=1,2行顯示;N=0,1行顯示)
SETB P1.2 ; |
CLR P1.2 ; | 使能信號E的下降沿
; 發送低半字節函數集
CALL delay ; 等待忙標志BF清零
; 設置輸入方式(光標和顯示模式)
; 設置為不移動的地址指針加1
CLR P1.7 ; |
CLR P1.6 ; |
CLR P1.5 ; |
CLR P1.4 ; | 高半字節
SETB P1.2 ; |
CLR P1.2 ; | 使能信號E的下降沿
SETB P1.6 ; |
SETB P1.5 ; | 低半字節
SETB P1.2 ; |
CLR P1.2 ; | 使能信號E的下降沿
CALL delay ; 等待忙標志BF清零
; 設置顯示開/關及光標閃爍
; 顯示器打開,光標打開,閃爍關閉
CLR P1.7 ; |
CLR P1.6 ; |
CLR P1.5 ; |
CLR P1.4 ; | 高半字節
SETB P1.2 ; |
CLR P1.2 ; | 使能信號E的下降沿
SETB P1.7 ; |
SETB P1.6 ; |
SETB P1.5 ; | 低半字節
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 ; | 數據結束(在本例中,0可用于指示數據結束,因為沒有行本身包含0)
; 設置CG RAM地址
; 設置為字符4,行0(地址100000 B=20H)
CLR P1.7 ; |
SETB P1.6 ; |
SETB P1.5 ; |
CLR P1.4 ; | 高半字節
SETB P1.2 ; |
CLR P1.2 ; | 使能信號E的下降沿
CLR P1.6 ; |
CLR P1.5 ; | 低半字節
SETB P1.2 ; |
CLR P1.2 ; | 使能信號E的下降沿
CALL delay ; 等待忙標志BF清零
; 將歐元符號發送到CGRAM
SETB P1.3 ; 置位寄存器選擇RS-表示數據正在發送到模塊
MOV R1, #30H ; 指向第一行,在8051 RAM位置30H
loop:
MOV A, @R1 ; 將R1指向單元中的數據傳送至A
JZ endEuroEntry ; 如果A為0,則已到達數據結尾-跳出循環
CALL sendCharacter ; 將當前行發送到LCD模塊
INC R1 ; 指向下一行
JMP loop ; 跳回loop
endEuroEntry:
; 設置DDRAM地址
; 設置為0
CLR P1.3 ; 清零寄存器選擇RS—表示指令正在發送到模塊
SETB P1.7 ; |
CLR P1.6 ; |
CLR P1.5 ; |
CLR P1.4 ; | 高半字節
SETB P1.2 ; |
CLR P1.2 ; | 使能信號E的下降沿
CLR P1.7 ; | 低半字節
SETB P1.2 ; |
CLR P1.2 ; | 使能信號E的下降沿
CALL delay ; 等待忙標志BF清零
; 顯示歐元符號(通過發送4到DDRAM)
SETB P1.3 ; 置位寄存器選擇RS-表示數據正在發送到模塊
MOV A, #01010111B
CALL sendCharacter
JMP $ ; 程序結束-不執行任何操作
; 發送字符子程序
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 ; | 高半字節
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 ; | 低半字節
SETB P1.2 ; |
CLR P1.2 ; | 使能信號E的下降沿
CALL delay ; 等待忙標志BF清零
delay:
MOV R0, #50
DJNZ R0, $
RET
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |