標(biāo)題: 單片機(jī)怎么讀HD44780里面的固有字符,匯編語言,軟件仿真 [打印本頁]
作者: BSq 時(shí)間: 2020-3-31 09:45
標(biāo)題: 單片機(jī)怎么讀HD44780里面的固有字符,匯編語言,軟件仿真
本帖最后由 BSq 于 2020-4-1 12:32 編輯
最近在學(xué)習(xí)LCD模塊,這個(gè)也是我用仿真軟件edsim51做的仿真,這個(gè)是顯示我寫在CGRAM的字符,如果顯示它的固有的符號(hào)(就是CGROM里面的字符怎么讀出來)比如顯示1,怎么改動(dòng)?
源程序
; 初始化顯示
; 詳見指令集
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 ; | 使能信號(hào)E的下降沿
CALL delay ; 等待忙標(biāo)志BF清零
; 首次發(fā)送的函數(shù)集-告訴模塊進(jìn)入4位模式
; 為什么函數(shù)集為高半字節(jié)發(fā)送兩次?見HD44780的4位操作
SETB P1.2 ; |
CLR P1.2 ; | 使能信號(hào)E的下降沿
; 第二次發(fā)送相同的函數(shù)集高半字節(jié)P1.4-P1.7
SETB P1.7 ; 低半字節(jié)(N=1,2行顯示;N=0,1行顯示)
SETB P1.2 ; |
CLR P1.2 ; | 使能信號(hào)E的下降沿
; 發(fā)送低半字節(jié)函數(shù)集
CALL delay ; 等待忙標(biāo)志BF清零
; 設(shè)置輸入方式(光標(biāo)和顯示模式)
; 設(shè)置為不移動(dòng)的地址指針加1
CLR P1.7 ; |
CLR P1.6 ; |
CLR P1.5 ; |
CLR P1.4 ; | 高半字節(jié)
SETB P1.2 ; |
CLR P1.2 ; | 使能信號(hào)E的下降沿
SETB P1.6 ; |
SETB P1.5 ; | 低半字節(jié)
SETB P1.2 ; |
CLR P1.2 ; | 使能信號(hào)E的下降沿
CALL delay ; 等待忙標(biāo)志BF清零
; 設(shè)置顯示開/關(guān)及光標(biāo)閃爍
; 顯示器打開,光標(biāo)打開,閃爍關(guān)閉
CLR P1.7 ; |
CLR P1.6 ; |
CLR P1.5 ; |
CLR P1.4 ; | 高半字節(jié)
SETB P1.2 ; |
CLR P1.2 ; | 使能信號(hào)E的下降沿
SETB P1.7 ; |
SETB P1.6 ; |
SETB P1.5 ; | 低半字節(jié)
SETB P1.2 ; |
CLR P1.2 ; | 使能信號(hào)E的下降沿
CALL delay ; 等待忙標(biāo)志BF清零
; 將歐元符號(hào)放入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é)束,因?yàn)闆]有行本身包含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 ; | 使能信號(hào)E的下降沿
CLR P1.6 ; |
CLR P1.5 ; | 低半字節(jié)
SETB P1.2 ; |
CLR P1.2 ; | 使能信號(hào)E的下降沿
CALL delay ; 等待忙標(biāo)志BF清零
; 將歐元符號(hào)發(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,則已到達(dá)數(shù)據(jù)結(jié)尾-跳出循環(huán)
CALL sendCharacter ; 將當(dāng)前行發(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 ; | 使能信號(hào)E的下降沿
CLR P1.7 ; | 低半字節(jié)
SETB P1.2 ; |
CLR P1.2 ; | 使能信號(hào)E的下降沿
CALL delay ; 等待忙標(biāo)志BF清零
; 顯示歐元符號(hào)(通過發(fā)送4到DDRAM)
SETB P1.3 ; 置位寄存器選擇RS-表示數(shù)據(jù)正在發(fā)送到模塊
MOV A, #4 ; | 現(xiàn)在A中是4,CGRAM中的數(shù)據(jù)
CALL sendCharacter ; | 將顯示位置4(即:歐元符號(hào))
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 ; | 使能信號(hào)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 ; | 使能信號(hào)E的下降沿
CALL delay ; 等待忙標(biāo)志BF清零
delay:
MOV R0, #50
DJNZ R0, $
RET
(小白一個(gè),大佬莫怪@-@,前幾次沒看到有獎(jiǎng)勵(lì),這次設(shè)置一下,謝謝各位了)
作者: man1234567 時(shí)間: 2020-3-31 16:41
非得匯編就只能問學(xué)校老師了,工作的一般都不用了,C的程序網(wǎng)上多些 
作者: BSq 時(shí)間: 2020-3-31 22:46
就是沒有老師呀

怎么辦呀
作者: www12www 時(shí)間: 2020-4-1 07:50
11 mov 30h,#110B,mov 36h,#110Bе110B1
作者: www12www 時(shí)間: 2020-4-1 22:49
修改“mov 30,#110B…mov 36h,#110B”,將#110B,…換成“1”對(duì)應(yīng)的段碼。
作者: BSq 時(shí)間: 2020-4-2 19:06
固有字符
作者: www12www 時(shí)間: 2020-4-4 15:32
仿照顯示歐元符號(hào)的方法,把顯示部分改成一個(gè)匯編語言的函數(shù),cgram與ddram的地址可以變化,想顯示1的位置改變cgram與ddram的相應(yīng)值,把1的顯示碼通過函數(shù)調(diào)用的方式(lcall 函數(shù)名)傳過去就可以了。
作者: qqwwer1 時(shí)間: 2020-4-12 20:58
怎么顯示字符串
作者: qqwwer1 時(shí)間: 2020-4-12 21:04
怎么顯示字符串
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |