基于單片機的VRAM型彩色液晶顯示模塊設計(二)
4 軟件系統(tǒng)設計及實現(xiàn)
本文引用地址:http://butianyuan.cn/article/201809/388235.htm4. 1 操作YD2502 的程序設計
YD2502 的指令碼格式如下:
其中: CA1 ,CA0 組合功能為內部寄存器通道的選擇,功能如下:
DISP :顯示控制位。
當DISP 設置為“1”時,液晶顯示模塊為開顯示狀態(tài)。
當DISP 設置為“0”時,液晶顯示模塊為關顯示狀態(tài)。
X:表示未用位,可設為“0”。
ATmega128 訪問外部存儲器的軟件設計步驟是:先用extern 聲明一個外部變量,再用map2ping_init 函數(外部存儲地址分配函數) 分配給此變量一個外部存儲地址(因A Tmega128 內部有4 kB 的SRAM 所以外部存儲地址范圍為1000H~0FFFFH) ,那么對該變量的操作就實現(xiàn)了CPU 對相應地址的外部存儲空間的訪問。
根據此步驟,對YD2502 寫指令和寫數據的具體函數如下:
extern unsigned char LCD_DA TA ;
void mapping_init (void) {
asm(“。 area memory (abs) n”
“。 org 0x4000n ” / / 分配給LCD_DA TA 的地址為4000H
“ _LCD_DA TA : : . blkb 1 n”/ / 存儲空間為1
“。 text/ n”) ;}
寫指令函數如下:
void LCD_writeinstr (unsigned char data) {
PORTD = 0xFC ; / / 置/ CS 為低電平,并且置RS 為低電平,處于寫指令狀態(tài)
LCD_DA TA = data ; / / 送數據
PORTD | = 0x03 ;} / / 置/ CS 和RS為高電平
寫數據函數如下:
void LCD_writedata (unsigned char data) {
PORTD = 0xFE ; / / 置/ CS 為低,并且置RS 為高電平,處于寫數據狀態(tài)
LCD_DA TA = data ; / / 送數據
PORTD | = 0x01 ;} / / 置/ CS 為高電平除了上面兩個基本的函數外,對YD2502 最基本的操作是往VRAM 里寫數據,根據上面給出的指令碼,具體函數如下:
# define HREG 0x09 / / 顯示地址高8 位寄存器指令
# define L REG 0x08 / / 顯示地址低8 位寄存器指令
# define DA TARW 0x0A / / 顯示數據讀寫通道指令
void LCD_filldata ( unsigned int address ,
unsigned char data) {
unsigned char addrh ,addrl ;
addrh = (char) (address > > 8) ; / / 取內存地址的高8 位數據
addrl = (char) (address 0xFF) ; / / 取內存地址的低8 位數據
LCD_writeinst r ( HREG) ; / / 送顯示地址高8 位寄存器指令
LCD_writedata (addrh) ; / / 送內存地址的高8 位數據
LCD_writeinst r (L REG) ; / / 送顯示地址低8 位寄存器指令
LCD_writedata (addrl) ; / / 送內存地址的低8 位數據
LCD_writeinst r (DA TARW) ; / / 送顯示數據讀寫通道指令
LCD_writedata (data) ;} / / 送數據
4. 2 畫點函數的實現(xiàn)
要在液晶上實現(xiàn)顯示字符和畫圖等功能,在屏幕上顯示一個點是實現(xiàn)這些功能的基礎。畫點函數實現(xiàn)的步驟是:首先確定該點對應的VRAM中的內存位置,找到該點具體對應的數據位,填充顯示顏色的數據,該點就按對應的顏色顯示出來了。
4. 2. 1 顯示內存與屏幕點陣的對應關系
YD2502 屏幕點陣為320 ×240 ,每一個點對應3 個像素(RGB) ,屏幕上8 個點對應內存3 個字節(jié),一行對應320/ 8 ×3 = 120 個字節(jié),其對應關系如下:
其中R ,G,B 表示紅、綠、藍三原色,D7~D0 表示對應的數據位。
對于屏幕上坐標為( X , Y) 的點,其對應內存地址的計算方法為:
當Y = 0 時 SRAM = 0EFH ×100H +[ IN T( X/ 8) ] ×3
當Y > 0 時 SRAM = ( Y - 1) ×100H +[ IN T( X/ 8) ] ×3
通過( X/ 8) 的余數得出具體的內存位置:
當余數為0 則 RAM = SRAM [ 1110 ,0000 ]
當余數為1 則 RAM = SRAM [ 0001 ,1100 ]
當余數為2 則 RAM1 = SRAM [ 0000 ,0011 ]
RAM2 = SRAM + 1[1000 ,0000 ]
當余數為3 則 RAM = SRAM + 1[0111 ,0000 ]
當余數為4 則 RAM = SRAM + 1[0000 ,1110 ]
當余數為5 則 RAM1 = SRAM + 1[0000 ,0001 ]
RAM2 = SRAM + 2[1100 ,0000 ]
當余數為6 則 RAM = SRAM + 2[0011 ,1000 ]
當余數為7 則 RAM = SRAM + 2[0000 ,0111 ]
其中[ ]內為“1”的位表示應該填充顏色的位置, SRAM 表示該點對應的基礎地址, RAM、RAM1 和RAM2 表示該點對應的實際內存地址。
當數據位為“1”時,對應色點為亮;為“0”時,對應色點為暗。通過RGB 三原色組合而得到的8 種顏色代碼如下:
例1 :若X 、Y 坐標為(7 ,0)
SRAM = 0EFH ×100H + 0 = 0EF00H
余數為7 ,則 RAM = 0EF00H + 2 = 0EF02H
若此點為紅色,則送入0EF02H 內存單元里的數據為[ 0EF02H] 11111000B + 00000100B
例2 :若X 、Y 坐標為(15 ,5)
SRAM = (5 - 1) ×100H + 1 ×3 = 403H
余數為5 ,則 RAM1 = 403H + 1 = 404H
RAM2 = 403H + 2 = 405H
若此點為白色,則送入這兩個單元的數據為
[ 404H] 11111110B + 00000001B
[ 405H] 00111111B + 11000000B
評論