240 likes | 627 Vues
繪圖型顯示器功能簡介 (128*64). 大綱. 繪圖型與文字型顯示器之比較 繪圖型顯示器 - LM6063 簡介 內部結構 腳位說明 記憶體配置 指令暫存器設定 編碼方式 128*64 繪圖型 LCD ¼ 圖形解析 範例:山 - 文字圖形編碼 繪圖型顯示器 - 發展流程 程式解析. 繪圖型與文字型顯示器之比較. 繪圖型與文字型顯示器兩者功能相似,兩者的差異性為:
E N D
大綱 • 繪圖型與文字型顯示器之比較 • 繪圖型顯示器-LM6063簡介 • 內部結構 • 腳位說明 • 記憶體配置 • 指令暫存器設定 • 編碼方式 • 128*64繪圖型LCD ¼圖形解析 • 範例:山-文字圖形編碼 • 繪圖型顯示器-發展流程 • 程式解析
繪圖型與文字型顯示器之比較 • 繪圖型與文字型顯示器兩者功能相似,兩者的差異性為: • 文字型LCD是將固定的字型碼(5×7的點陣字),透過字元碼一次寫入顯示螢幕。相對地,繪圖型LCG可以直接控制每一個點陣的顯示訊息,因此有更大的設計彈性,顯示一些更複雜的圖形與中文字型。 • 以LM6063為例,顯示器為橫向128點,縱向64點的點矩陣字幕,即128×64繪圖型LCD。
繪圖型顯示器-LM6063簡介 • LM6063為ㄧ繪圖型顯示器,橫向128點、縱向64點的點矩陣字幕,透過腳位A0選擇資料暫存器或命令暫存器、腳位RD用來讀取暫存器、腳位WR用來寫入暫存器、腳位CS1用來選擇致能顯示幕,D0~D7則為資料輸入Port口。
內部結構 繪圖型的內部結構除了與文字型LCD功能相似的指令暫存器(IR)、資料暫存器(DR)外,額外還有下列幾項暫存器: • 顯示資料記憶體(DD RAM): LCG儲存圖點資料的記憶體,DD RAM的一個位元(bit),對應顯示器面板(display panel)上的一個亮度,位元1為亮點,位元0為暗點。將圖形編碼資料填入此記憶體,即可在LCG顯示圖形資料。 • 顯示器起始列暫存器(Display Start Line Register):指定DD RAM某一列資料,對應到LCG面板上的第一列,藉此可達到螢幕捲動的功能。 • 位址計數器 (Address Counter):利用一10個位元的暫存器,指到DD RAM的位址。前3個位元指向縱向的0~7的Page計數,後7個位元指向0~127的行數計數。Page的計數,必須藉由指令設定。行數的計數在讀寫顯示資料時,會自動遞增1,指向下一列。從0到127迴圈計數,計數到127時,在遞增會回到0。
記憶體配置 64 bit 128 bit
指令暫存器設定-2 A0=0 選擇命令暫存器、A0=1 選擇資料暫存器 RD=0 選擇讀取、 RD=1 選擇不讀取 WR=0 選擇寫入、 WR=1 選擇不寫入
編碼方式 配合Sunpls DM字型轉碼器可將圖形文字轉為數位編碼,其編碼方式可分為Up to down,Left to Right(由上至下,由左至右)以及Down to up,Left to Right (由下至上,由左至右)兩種編碼方式,在以下的範例中將介紹Upto Down ,Left to Right以及Downto Up ,Left to Right的編碼方式。
LSB1 LSB0 HSB1 HSB0 1 3 5 7 up to down right to left 編碼方式 up to down right to left 編碼方式: 由上至下由左至右,因此第1個byte先被編碼出來,接下來為2、3、4…接著編碼,若把16*16點矩陣由中間切開我們便能發現上排圖形由字碼1、3、5、7…所構成,下排則由2、4、6、8…所構成。 1byte 2 4 6 1byte
LSB0 LSB1 HSB0 HSB1 down to up right to left 編碼方式 down to up right to left 編碼方式: 由下至上由左至右,因此第1個byte先被編碼出來,接下來為2、3、4…接著編碼,若把16*16點矩陣由中間切開我們便能發現上排圖形由字碼2、4、6、8…所構成,下排則由1、3、5、7…所構成。 1byte 2 4 6 1byte 1 3 5 7
編碼差異 Up to down,Left to Right(由上至下,由左至右)以及Down to up,Left to Right (由下至上,由左至右)兩種編碼方式的差異在於起始編碼位置不同,由此可知Up to down,Left to Right的編碼方式其位置1、3、5、7…可構成上半截圖型,2、4、6、8…則構成下半截圖形;Down to up,Left to Right則反之其位置2、4、6、8…可構成上半截圖型,1、3、5、7…則構成下半截圖形。 PS:我們所使用編碼方式為Up to down,Left to Right。
64 bit 1byte 1byte 1 5 2 6 3 7 8 4 16 bit 16 bit page0 Y軸 一16*16文字圖形所佔面積 page1 page2 page3 128*64繪圖型LCD ¼圖形解析 X軸由第0bit 由上圖得知我們若欲寫入一16*16文字則起始位置由Y軸page0開始,X軸由第0bit開始,寫完1若欲寫2則X軸由第16bit接續寫入。
LSB0 LSB1 HSB0 HSB1 山-文字圖形編碼 0x00,0x00 文字圖形編碼格式介紹 後 right to left 先 down to up 綠色為 0 白色為 1 以第二行0x7f為例 0111 1111 0x7f,0xf0 編碼方式以down to up right to left所編出的字碼為: 0x00,0x00,0x7f,0xf0,0x40,0x00,0x40,0x00, 0x40,0x00,0x40,0x00,0x40,0x00,0x7f,0xfe, 0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00, 0x40,0x00,0x7f,0xf0,0x00,0x00,0x00,0x00
LSB1 LSB0 HSB1 HSB0 山-文字圖形編碼 0x00,0x00 文字圖形編碼格式介紹 後 right to left 先 down to up 綠色為 0 白色為 1 以第二行0x7f為例 0111 1111 0x0f,0xfe 編碼方式以down to up right to left所編出的字碼為: 0x00,0x00,0x0f,0xfe,0x00,0x02,0x00,0x02, 0x00,0x02,0x00,0x02,0x00,0x02,0x7f,0xfe, 0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02, 0x00,0x02,0x0f,0xfe,0x00,0x00,0x00,0x00
main 發展過程 GLCD_Putch initial clear_LCD show_pattern WRITE_DATA WRITE_COMMAND 發展流程-程式金字塔 發展繪圖型LCD必須先由底層的WRITE_DATA、WRITE_COMMAND副程式作為成功的出發點,再一點一滴的往上成長,到達最後再根據動作變化而設計出不同的演算流程。
void WRITE_DATA(unsigned char Data) DATA_BUS = Data; //send command to BUS AO=1; //select command RD=1; //close read WR=0; //open write CS1 = 0; //enable cs1 delay_25us(2); CS1 = 1; //disable cs1 delay_25us(1); WR=1; //close write RD=0; //open read 程式說明_寫入資料副程式: 選擇寫入資料暫存器,寫入參數為Data A0設定為1選擇資料暫存器,RD設定為1為不讀取,WR設為0則表示寫入
void WRITE_COMMAND(unsigned char cmd) • DATA_BUS = cmd; //send command to BUS • AO=0; //select command • RD=1; //close read • WR=0; //open write • CS1 = 0; //enable cs1 • delay_25us(2); • CS1 = 1; //disable cs1 • delay_25us(1); • WR=1; //close write • RD=0; //open read 程式說明_寫入指令(命令)副程式: 選擇寫入指令暫存器,寫入參數為cmd A0設定為0選擇指令暫存器,RD設定為1為不讀取,WR設為0則表示寫入
void initial() WRITE_COMMAND(0xa1); //ADC = 1; WRITE_COMMAND(0xc0); //SHL = 0; WRITE_COMMAND(0xa2); //LCD Bias 1/9 WRITE_COMMAND(0x40); //LINE = 0; WRITE_COMMAND(0xa4); //ENTIRE DISPALY OFF; WRITE_COMMAND(0xa6); //REVERSE DISPALY OFF; WRITE_COMMAND(0x2f); //POWER CONTROL WRITE_COMMAND(0xaf); //DISPALY ON; 程式說明_初始化副程式: 根據資料手冊上初始化動作設定做一相對應設定,如上述程式。
void show_pattern(unsigned char page,unsigned char H,unsigned char L, unsigned char *pattern) WRITE_COMMAND(0xb0+page); WRITE_COMMAND(0x10+H); WRITE_COMMAND(0x00+L); WRITE_DATA(*pattern); 程式說明_顯示一點(1bit)副程式: 設定某一頁某ㄧ行的位置上(單位/點(bit))亮或不亮 輸入參數:page、H、L page代表頁, H代表X軸的高四位元,L代表X軸的低四位元,patterm代表資料來源
void GLCD_Putch(unsigned char *p) int i; CS1 = 0; //enable cs1 for( i = 0 ; i < 16 ; i++ ){ show_pattern(page, col_H, col_L, p+(2*i+1)); show_pattern(page+1,col_H, col_L, p+(2*i)); col_L=col_L+1; //add column address if( i == 15 )col_H=col_H+1; } col_L=0; 程式說明_顯示一16*16之圖型文字副程式: 輸出一16*16的圖型文字,其編碼方式為up to down ,right to left 固(2*i+1)為 上半截圖型(1、3、5、7) ,(2*i)為下半截圖型 (2、4、6、8) , 輸入參數: p p代表資料陣列來源