RAiO RA8816 144x65 圖形/文字 LCD 驅動控制器 應 用 手 冊 Version 0.9 September 1, 2005 RAiO Technology Inc. ©Copyright RAiO Technology Inc. 2005 RAiO TECHNOLOGY INC. 1/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 RA8816 中文文字/圖形 LCD 控制器應用手冊改版說明 版 本 0.9 日 期 September 2, 2005 RAiO TECHNOLOGY INC. 說 明 Preliminary Version 2/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 章 節 內 容 頁 數 1. 簡介.......................................................................................................................................5 2. 系統重置 ...............................................................................................................................6 3. 系統時脈 ...............................................................................................................................7 4. MPU 界面..............................................................................................................................8 5. LCD驅動電壓設定...............................................................................................................12 6. 5x4 鍵盤掃描 ......................................................................................................................13 6-1 寫入鍵盤掃描控制暫存器.............................................................................................................................13 6-2 讀取鍵盤掃描資料暫存器.............................................................................................................................14 6-3 鍵盤掃描硬體電路........................................................................................................................................15 6-4 程式範例 ......................................................................................................................................................15 7. 雙向IO埠控制 ......................................................................................................................19 8. 基本顯示功能設定 ...............................................................................................................20 8-1 文字模式-字型正常顯示 ...............................................................................................................................20 8-2 文字模式-粗體顯示 ......................................................................................................................................21 8-3 文字模式-字型反白顯示 ...............................................................................................................................22 9. 文字模式捲動 ......................................................................................................................24 9-1 捲動方向 ......................................................................................................................................................24 9-2 捲動範圍設定...............................................................................................................................................24 9-3 捲動速度設定...............................................................................................................................................25 9-4 程式範例 ......................................................................................................................................................26 10. 文字模式移動 ....................................................................................................................34 10-1 移動方向 ....................................................................................................................................................34 10-2 移動範圍設定.............................................................................................................................................34 10-3 移動速度設定.............................................................................................................................................35 10-4 程式範例 ....................................................................................................................................................36 11. 繪圖模式捲動 ....................................................................................................................44 11-1 捲動方向 ....................................................................................................................................................44 11-2 捲動範圍設定.............................................................................................................................................44 11-3 捲動速度設定.............................................................................................................................................45 RAiO TECHNOLOGY INC. 3/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 11-4 程式範例 ....................................................................................................................................................46 12. 繪圖模式移動 ....................................................................................................................54 12-1 移動方向 ....................................................................................................................................................54 12-2 移動範圍設定 ............................................................................................................................................54 12-3 移動速度設定.............................................................................................................................................55 12-4 程式範例 ....................................................................................................................................................56 13. EL(冷光)驅動信號 .............................................................................................................66 14. 使用者造字功能.................................................................................................................68 附錄A. 顯示記憶體掃描映射圖 ...............................................................................................70 附錄B. 副程式範例 .................................................................................................................71 附錄C. 簡單程式範例..............................................................................................................77 附錄D. 字型與字碼表(BIG-5)..................................................................................................78 附錄E. 字型使用說明 ..............................................................................................................85 RAiO TECHNOLOGY INC. 4/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 1. 簡介 本應用手冊主要是針對 RA8816 特有的功能做一說明,大部分基本功能的設定請參考 RA8816 規格書。以 下幾個章節分別以範例程式教導使用者如何去設定特定功能的相關暫存器,其中包括文字捲動與移動功能的 設定方式與繪圖模式捲動及移動的設定方式。另外,RA8816 也提供與微處理機之間多種連接的介面,包括 並列與串列模式的選擇等等。 RAiO TECHNOLOGY INC. 5/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 2. 系統重置 當系統電源開啟之後,微控制器(MPU)需要對 RA8816 作重置的動作,亦就是控制 RA8816 的重置輸入腳 ( RST )為低電位至少 5 毫秒,再控制( RST )為高電位至少 350 毫秒,之後,才可對 RA8816 開始繼續作其 他的設定。圖 2-1 為 RA8816 重置(Reset)的時序圖。 RST 微控制器 RA8816 MPU >= 350ms >= 5ms 圖 2-1 : RA8816 重置時序 以下為 圖 2-1 範例程式: void LCD_Reset(void) //重置副程式 { //LCD_RST = 1; //delay(100); LCD_RST = 0; //控制/RST 為低電位 delay(5ms); //延遲 5 毫秒 LCD_RST = 1; //控制/RST 為高電位 delay(350ms); //延遲 350 毫秒 } RAiO TECHNOLOGY INC. 6/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 3. 系統時脈 RA8816 系統頻率的產生主要可分為: 1. 透過內部 RC 振盪電路產生系統頻率 2. 外部直接輸入系統頻率 其硬體初始設定方式如圖 3-1: RA8816 VDD Clock 震盪電路 RA8816 EXT_CLK 10K CLK_SEL CLK_SEL 10K 外部產生系統頻率 RC(內部產生震盪) 圖 3-1 : RA8816 系統頻率的設定 RAiO TECHNOLOGY INC. 7/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 4. MPU 界面 RA8816 提供八種與 MPU 溝通的介面包括: 1. 8080 MPU (8 位元與 4 位元資料傳輸寬度)並列連接界面,如圖 4-1。 2. 6800 MPU (8 位元與 4 位元資料傳輸寬度)並列連接界面,如圖 4-2。 3. IIC、三線式及四線式(Type A 與 Type B)的串列連接界面,如圖 4-3。 8080 MPU RA8816 6800 MPU RA8816 VDD [A15:A0] Decoder IORQ VDD CS [ A15:A0] Decoder IORQ CS P/S A0 D/C WR WR RD P/S BIT4 C86 DB[3:0] (DB[7:0]) D3-D0(D7-D0) A0 RS EN EN R/W R/W RESET RST RD RST RESET 圖 4-1 : 8080 MPU 8/4 位元硬體設定方式 RA8816 DB[3:0] (DB[7:0]) D3-D0(D7-D0) C86 圖 4-2 : 6800 MPU 8/4 位元硬體設定方式 RA8816 RA8816 RA8816 D0(SCK) D0(SCK) D0(SCK) D0(SCK) D1(SDA) D1(SDA) D1(SDA) D1(SDO) D2(RS) IICA[5:0] P/S D3(CS) D[7:6](SMOD) C86 SMOD = 00 (IIC式) D3(CS) P/S BIT4 BIT4 D[7:6](SMOD) BIT4 D2(SDI) P/S D3(CS) BIT4 D[7:6](SMOD) C86 C86 SMOD = 10 (四線式Type A) SMOD = 01 (三線式) P/S BIT4 D[7:6](SMOD) C86 SMOD = 11 (四線式Type B) 圖 4-3 : 串列界面硬體設定方式 對於並列界面,現在的使用者對 6800 MPU 較不熟悉,且一般使用者比較熟悉 8051 系列的 MPU,也常用 8051 做為系統開發,因此建議直接使用 8080 的 MPU 介面,避免因不熟悉 6800 界面而產生使用上的困擾。 此外在 IIC 串列模式下, WR 、 RD 與 DB[5..2]組成的 IICA[5..0]作為 IIC Bus 的元件地址選擇信號,只要設 定與系統上的其他 IIC 元件不發生衝突即可,雖然 IIC 可以指定 128 個元件,但是 RA8816 只提供 64 個地 址選擇(IICA[5..0]) ,同時 RA8816 將 IICA[6]由內部固定為 0,因此元件地址選擇只能由 00~3Fh,如圖 4-4。 RAiO TECHNOLOGY INC. 8/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 而使用 4 線式(B-Type)的 MPU 介面在 SCK 上要加一 Pull-Hi 電阻。 MPU RA8816 SMOD1(DB7) VDD SMOD0(DB6) IICA5(WR) P/S IICA4(RD) IICA3(DB5) IICA2(DB4) IICA1(DB3) IICA0(DB2) IO0 SCK(DB0) IO1 SDA(DB1) 圖 4-4:IIC 的 MPU 介面圖 以下圖 4-5 到 4-8 為各種界面的時序圖: tAH8 tCYC6 D/C, CS EN tAWB tAW6 tCYC WR, RD tAH6 RS, R/W, CS ` tCC tEW tDS8 tDS6 tDH8 DB[7:0] Write tDH6 DB[7:0] Write tACC8 tACC6 tOH8 DB[7:0] Read tOH6 DB[7:0] Read 圖 4-5 : 8080 MPU 時序圖 RAiO TECHNOLOGY INC. 圖 4-6 : 6800 MPU 時序圖 9/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 CS SDA RW RS(0) R7 R6 R5 R4 R3 R2 R1 R0 DM7 MD6 MD5 MD4 MD3 MD2 MD1 MD0 D7 D6 D5 D4 D3 D2 D1 D0 SCK A. 暫存器讀寫時序 CS SDA RW RS(1) SCK B. 顯示記憶體讀寫時序 圖 4-7 : 三線式串列界面時序圖 Address[7-1] 1 --- Start Condition 7 Slave Address RW Ack RS=0 R6R5……R0 Ack D7D6…..D0 Ack D7D6…..D0 NA 8 9 1 2 --- 8 9 1 --- 8 9 1 --- 8 9 Register Number ‘0’(write) First Register DATA Stop Condition Second Register DATA 圖 4-8:IIC 串列介面對暫存器寫的時序圖 Address[7-1] 1 Start Condition --- 7 Slave Address RW Ack RS=0 R6R5……R0 Ack 8 9 1 2 --- 8 9 ‘0’(write) Register Number Stop Start Address[7:1] 1 Repeat Start Or Stop +Start --- 7 Slave Address RW Ack D7D6…..D0 Ack D7D6…..D0 NA 8 9 1 --- 8 9 1 --- 8 9 ‘1’(Read) Register Data Repeat Register Data Stop Condition 圖 4-9:IIC 串列介面對暫存器讀的時序圖 RAiO TECHNOLOGY INC. 10/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 CS RS SDA xx.. 0 RW R7 R6 R5 R4 R3 R2 R1 R0 D7 MD6 MD5 MD4 MD3 MD2 MD1 MD0 D6 D5 D4 D3 D2 D1 D0 SCK A. 暫存器讀寫時序 CS RS SDA xx.. 1 RW RS(1) DM7 SCK B. 顯示記憶體讀寫時序 圖 4-10 : 四線式 Type A 串列界面時序圖 CS SDO RW RS(0) R7 R6 R5 R4 R3 R2 R1 R0 SDI WD7 WD6 WD5 WD4 WD3 WD2 WD1 WD0 RD6 RD5 RD4 RD3 RD2 RD1 RD0 SCK A. 暫存器讀寫時序 CS SDO SDI RW RS(1) WD7 WD6 WD5 WD4 WD3 WD2 WD1 WD0 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 SCK B. 顯示記憶體讀寫時序 圖 4-11 : 四線式 Type B 串列界面時序圖 RAiO TECHNOLOGY INC. 11/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 5. LCD 驅動電壓設定 RA8816 的 LCD 驅動電壓可由 IC 內部電路直接產生,或是經由外部電路供給,詳細驅動原理請參考規格書 6-4 節的 LCD 驅動器與電壓供應電路。根據以下的設定方式即可將內部的升壓電路啟動與輸出,但實際顯示 效果需針對各種使用者的 LCD 做最後的調整。 以下為程式範例: (a)使用內部升壓電路方式: LCD_CmdWrite(0x11,0xF0); // Bit7: 使用內部升壓電路 // Bit6: 使用內部產生的參考電壓給內部電壓調整器 // Bit5: 使用內部電壓調整器電路產生”VREG” // Bit4: 使用內部分壓電路產生 LCD Bias 電壓(V0~V4) LCD_CmdWrite(0x12,0x17); // Bit[7:6]內部升壓電路硬體震盪時脈選擇 // Bit[5:3]電壓調整器輸出倍數調整 // Bit[2:0]輸出驅動電流的大小調整 LCD_CmdWrite(0x10,0x5C); // Bit[7:5]設定 1/5Bias // Bit[4:0]LCD 顯示對比的調整 RAiO TECHNOLOGY INC. 12/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 6. 5x4 鍵盤掃描 RA8816 內建 5x4 鍵盤掃描功能,使用者只要透過暫存器設定即可很容易的讀取按鍵數值。以下說明鍵盤掃 描實際應用時程式的撰寫方式。 6-1 寫入鍵盤掃描控制暫存器 暫存器設定: DB7 DB6 DB5 KSB KDB1 KDB0 REG[07h] Bit DB4 DB3 KSTB_ K_AUT SEL O Description DB2 IRE DB1 DB0 KF1/KS KF0/KS TB1 TB0 Default Access 0h W 0h W 0h W 0h W 0h W 0h W 鍵盤掃瞄功能開關: 7 0:關閉 1:開啟 設定消除按鍵彈跳時間: 6-5 4 0 0 :8 0 1 :16 1 0 :32 1 1 :64 0:設定鍵盤掃描時間 1:設定非自動掃描時,可選擇固定的掃描列 3 0:鍵盤掃描非自動模式設定 1:鍵盤掃描自動模式設定 按鍵硬體中斷設定 2 0:當有按鍵時,不產生硬體中斷 1:當有按鍵時,會產生硬體中斷(INT) 當 Bit3 鍵盤掃描設定為非自動模式,且 Bit4=”1”時 1-0 0 0 :掃描 KST 第一列 0 1 :掃描 KST 第二列 RAiO TECHNOLOGY INC. 13/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 1 0 :掃描 KST 第三列 1 1 :掃描 KST 第四列 當 Bit3 鍵盤掃描設定為自動模式,或是 Bit4=”0”時,可改變掃描頻率 0 0 :256 us 0 1 :512 us 1 0 :1.024 ms 1 1 :2.048 ms 6-2 讀取鍵盤掃描資料暫存器 暫存器設定: REG[07h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 SIRQ KSTB1 KSTB0 KSD4 KSD3 KSD2 KSD1 KSD0 Default Access Bit Description 0h 鍵盤掃瞄中斷旗標 7 R 0:無按鍵發生 1:有按鍵發生 (設定 REG[0Fh]-Bit1=0,可清除此中斷旗標為 0) 讀取目前設定掃描的列數 6-5 0 0 :掃描 KST 第一列 0 1 :掃描 KST 第二列 1 0 :掃描 KST 第三列 1 1 :掃描 KST 第四列 0h R 0h R 讀取目前掃描的行數 4-0 1 1 1 1 0 :KIN 第一行有按鍵輸入 1 1 1 0 1 :KIN 第二行有按鍵輸入 1 1 0 1 1 :KIN 第三行有按鍵輸入 1 0 1 1 1 :KIN 第四行有按鍵輸入 0 1 1 1 1 :KIN 第五行有按鍵輸入 RAiO TECHNOLOGY INC. 14/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 6-3 鍵盤掃描硬體電路 RA8816 KST0 KST1 KST2 KST3 KIN 0 KIN 1 KIN 2 KIN 3 6F 4F 2F 0F 77 57 37 17 7B 5B 3B 1B 7D 5D 3D 1D 7E 5E 3E 1E KIN 4 圖 6-1: 鍵盤掃描(5x4)硬體電路 6-4 程式範例 (a)鍵盤掃瞄(非自動模式) LCD_Initial (); LCD_Clear(); // 清除所有顯示 LCD_CmdWrite (0x03,0x03); // 設定繪圖顯示模式 LCD_CmdWrite (0x04,0x74); // 關閉游標 LCD_CmdWrite (0x01,0x02); // 開啟 LCD 顯示 GotoXY (0,0); // 設定游標位址 PrintStr ("Key Scan:手動",1); // LCD 顯示字串 LCD_CmdWrite(0x07,0x80); // 啟動鍵盤為非自動模式掃描 LCD_CmdWrite(0x0F,0x00); // 清除所有中斷旗標 while(1) { while((LCD_CmdRead_SPI3(0x07) & 0x80) == 0x80) // 判斷是否有任何按鍵輸入 { GotoXY_SPI3(5,16); PutHEX(Check_Key_Number(0)); // 顯示 KOUT0 第一列掃描 KIN0~KIN4 的數值 PutHEX(Check_Key_Number(1)); // 顯示 KOUT1 第二列掃描 KIN0~KIN4 的數值 PutHEX(Check_Key_Number(2)); // 顯示 KOUT2 第三列掃描 KIN0~KIN4 的數值 RAiO TECHNOLOGY INC. 15/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 PutHEX(Check_Key_Number(3)); // 顯示 KOUT3 第四列掃描 KIN0~KIN4 的數值 } } unsigned Check_Key_Number(unsigned char row) { unsigned char next_status[4],KSTB[4] = {0,0,0,0}; // 定義使用者暫存資料的變數 static char prev_ststus[4]= {0,0,0,0}; // LCD_CmdWrite(0x07,0x90); // 設定掃描第一列 next_status[0] = LCD_CmdRead(0x07) & 0x7f; LCD_CmdWrite(0x07,0x91); // 讀取 KIN0~KIN4 的按鍵數值 // 設定掃描第二列 next_status[1] = LCD_CmdRead(0x07) & 0x7f; LCD_CmdWrite(0x07,0x92); // 讀取 KIN0~KIN4 的按鍵數值 // 設定掃描第三列 next_status[2] = LCD_CmdRead(0x07) & 0x7f; LCD_CmdWrite(0x07,0x93); // 讀取 KIN0~KIN4 的按鍵數值 // 設定掃描第四列 next_status[3] = LCD_CmdRead(0x07) & 0x7f; if(next_status[0] != 0x1F ) // 讀取 KIN0~KIN4 的按鍵數值 // 判斷按鍵之後是否已經放開 prev_ststus[0] = next_status[0]; // 若是放開按鍵,讀取第一列掃描數值 Else KSTB[0] = prev_ststus[0]; // 若是未放開按鍵,將第一列掃描數值設定為 0 if(next_status[1] != 0x3F ) // 判斷按鍵之後是否已經放開 prev_ststus[1] = next_status[1]; // 若是放開按鍵,讀取第二列掃描數值 Else KSTB[1] = prev_ststus[1]; // 若是未放開按鍵,將第二列掃描數值設定為 0 if(next_status[2] != 0x5F ) // 判斷按鍵之後是否已經放開 prev_ststus[2] = next_status[2]; // 若是放開按鍵,讀取第三列掃描數值 Else KSTB[2] = prev_ststus[2]; RAiO TECHNOLOGY INC. // 若是未放開按鍵,將第三列掃描數值設定為 0 16/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 if(next_status[3] != 0x7F ) // 判斷按鍵之後是否已經放開 prev_ststus[3] = next_status[3]; // 若是放開按鍵,讀取第四列掃描數值 Else KSTB[3] = prev_ststus[3]; // 若是未放開按鍵,將第四列掃描數值設定為 0 LCD_CmdWrite(0x0F,LCD_CmdRead(0x0F) & // 清除鍵盤掃瞄中斷旗標 0xFD); return KSTB[row]; // 回傳按鍵數值 } (b)鍵盤掃瞄(自動模式) LCD_Initial (); LCD_Clear(); // 清除所有顯示 LCD_CmdWrite (0x03,0x03); // 設定繪圖顯示模式 LCD_CmdWrite (0x04,0x74); // 關閉游標 LCD_CmdWrite (0x01,0x02); // 開啟 LCD 顯示 GotoXY (0,0); // 設定游標位址 PrintStr("Key Scan:自動",1); // LCD 顯示字串 LCD_CmdWrite (0x07,0x88); // 啟動鍵盤為非自動模式掃描 LCD_CmdWrite (0x0F,0x00); // 清除所有中斷旗標 while(1) { while((LCD_CmdRead_SPI3(0x07) & 0x80) == 0x80) // 判斷是否有任何按鍵輸入 { key_number = Check_Key_Number(); // 若有按鍵輸入,讀取掃描數值 GotoXY(0,16); // 設定游標位址 PutHEX(key_number); // 顯示按鍵數值 } } unsigned Check_Key_Number(void) { RAiO TECHNOLOGY INC. 17/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 unsigned char next_status,key_number = 0xff; // 設定使用者變數 static char prev_ststus = 0xff; next_status = LCD_CmdRead(0x07) & 0x7f; // 讀取鍵盤掃瞄數值 if(next_status != 0x42) // 判對按鍵是否放開 prev_ststus = next_status; // 若是未放開,繼續掃描 else key_number = prev_ststus; // 若已經放開按鍵,將回傳真正按鍵的數值 LCD_CmdWrite(0x0F,0x00); // 清除鍵盤掃瞄中斷旗標 return key_number; } RAiO TECHNOLOGY INC. 18/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 7. 雙向 IO 埠控制 RA8816 提供八個可雙向控制的輸出入 I/O 埠,使用者可任意的改變每一個 I/O 埠為輸入或輸出,而當設定 為輸出埠時,I/O 也可直接驅動 LED,連接方式如圖 7-1,暫存器設定方式如下: 暫存器設定:(I/O 埠方向設定) REG[14h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 OE7 OE6 OE5 OE4 OE3 OE2 OE1 OE0 暫存器設定:(I/O 埠資料讀寫暫存器) REG[15h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 IOD7 IOD6 IOD5 IOD4 IOD3 IOD2 IOD1 IOD0 範例程式: LCD_CmdWrite(0x14,0xFF); // 設定 8 個 I/O 埠為輸出模式 LCD_CmdWrite(0x15,0x55); // 設定 8 個 I/O 輸出為”01010101” I/O=Output Mode LED R VDD 1K 圖 7-1 : I/O 驅動 LED 範例 RAiO TECHNOLOGY INC. 19/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 8. 基本顯示功能設定 RA8816 中文顯示除了一般正常字型顯示之外,也可將字型設定為粗體顯示或是將字型作反白的顯示。 8-1 文字模式-字型正常顯示 可由暫存器 REG-[03h]之 BIT[1:0]設定,此時 RA8816 會將被寫入的資料解碼為全型字型的顯示。 REG[03h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 BMOD1 BMOD0 BIEN ASCS BOLD INV MD1 MD0 Bit Description Default Access 顯示模式選擇 1-0 0 0 :繪圖模式 0 1 :小 ASCII 模式 1 0 :大 ASCII 模式 1 1 :全形模式(16x16 文字) 0h R/W 圖 8-1 : 文字模式-的正常顯示 範例程式: LCD_Clear_LCD // 清除所有顯示 LCD_CmdWrite(0x01,0x02); // 開啟 LCD 顯示 LCD_CmdWrite(0x03,0x03); // 文字模式 GotoXY(0,0); // 設定游標位址 // PrintStr("中文字型正常顯示",1); // 顯示中文字串 RAiO TECHNOLOGY INC. 20/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_DataWrite(0xA4); // 中 LCD_DataWrite(0xA4); LCD_DataWrite(0xA4); // 文 LCD_DataWrite(0xE5); LCD_DataWrite(0xA6); // 字 LCD_DataWrite(0x72); LCD_DataWrite(0xAB); // 型 LCD_DataWrite(0xAC); LCD_DataWrite(0xA5); // 正 LCD_DataWrite(0xBF); LCD_DataWrite(0xB1); // 常 LCD_DataWrite(0x60); LCD_DataWrite(0xC5); // 顯 LCD_DataWrite(0xE3); LCD_DataWrite(0xA5); // 示 LCD_DataWrite(0xDC); GotoXY(0,16); // 設定游標位址 PrintStr("全形文字模式設定",1); // 顯示中文字串 While(1); 8-2 文字模式-粗體顯示 可由暫存器 REG-[03h]之 BIT[3]設定,將原來正常的全型字轉變為粗體字型再寫入顯示記憶體。 RAiO TECHNOLOGY INC. 21/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 圖 8-2 : 文字模式-的粗體顯示 範例程式: . LCD_CmdWrite(0x03,0x03); // 設定一般字型模式 GotoXY(0,0); // 設定游標位址 PrintStr("中文",1); // 顯示”中文”字串 LCD_CmdWrite(0x03,0x0B); // 設定粗體字型模式 PrintStr("字型粗體",1); // 顯示”字型粗體”字串 LCD_CmdWrite(0x03,0x03); PrintStr("顯示",1); // 設定一般字型模式 PrintStr("全形文字模式設定",1); // 顯示”全形文字模式設定”字串 While(1); : : : 8-3 文字模式-字型反白顯示 可由暫存器 REG-[03h]之 BIT[2] 設定,將原來正常的全型字轉變為反向字型再寫入顯示記憶體。 RAiO TECHNOLOGY INC. 22/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 圖 8-3 : 文字模式-的字型反白顯示 範例程式: . LCD_CmdWrite(0x03,0x03); // 設定一般字型模式 GotoXY(0,0); // 設定游標位址 PrintStr("中文",1); // 顯示”中文”字串 LCD_CmdWrite(0x03,0x07); // 設定字型反白模式 PrintStr("字型反白",1); // 顯示”字型反白”字串 LCD_CmdWrite(0x03,0x03); PrintStr("顯示",1); // 設定一般字型模式 PrintStr("全形文字模式設定",1); // 顯示”全形文字模式設定”字串 While(1); : : : RAiO TECHNOLOGY INC. 23/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 9. 文字模式捲動 RA8816 提供 LCD 顯示畫面可經由暫存器的設定指定一區塊,使硬體自動做螢幕畫面捲動的效果,其中暫存 器的功能設定主要包刮捲動畫面的方向與速度,及每次捲動畫面的像數與捲動的範圍,以下針對實際應用時 程式撰寫方式作一說明。 9-1 捲動方向 可由暫存器 REG-[0Eh]之 BIT[3:2] 設定,選擇四種不同的捲動方式。 暫存器設定: REG[0Eh] DB7 DB6 DB5 SCR_IM SCR_IM AUTO_ D1 D0 SCR Bit DB4 SBUF DB3 DB2 DB1 DB0 SCR_M SCR_M SCR_IN SCR_E D1 D0 TEN N Description Default Access 0h R/W 設定移動方向: 3-2 0 0 :由左至右捲動(水平捲動) 0 1 :由右至左捲動(水平捲動) 1 0 :由下至上捲動(垂直捲動) 1 1 :由上至下捲動(垂直捲動) 9-2 捲動範圍設定 設定 REG-[08h]’REG-[09h]’REG-[0Ah]’REG-[0Bh]四個暫存器,可指定一區塊作為捲動的範圍。 文字模式捲動區塊設定 ( REG[08],REG[09] ) ( REG[0A],REG[0B] ) 文字由上往下捲動 瑞佑科技旋轉測試 圖 9-1 : 設定捲動範圍 RAiO TECHNOLOGY INC. 24/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 (a)暫存器設定:捲動區塊水平起始位址(X1) REG[08h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- -- SSX4 SSX3 SSX2 SSX1 SSX0 (b)暫存器設定:捲動區塊垂直起始位址(Y1) REG[09h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- SSY5 SSY4 SSY3 SSY2 SSY1 SSY0 (c)暫存器設定:捲動區塊水平結束位址(X2) REG[0Ah] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- -- SRX4 SRX3 SRX2 SRX1 SRX0 (d)暫存器設定:捲動區塊垂直結束位址(Y2) REG[0Bh] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- SRY5 SSY4 SSY3 SSY2 SSY1 SSY0 9-3 捲動速度設定 (a)REG-[0Dh]之 Bit[7:4] 設定自動捲動的速度。 (b)REG-[0Dh]之 Bit[3:0] 設定每次位移的點數(每次捲動像素 1~16) 。 暫存器設定: REG[0Dh] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 SPD3 SDP2 SPD1 SPD0 STP3 STP2 STP1 STP0 Bit Description Default Access 0h R/W 0h R/W 設定自動捲動的速度: 0 0 0 0 :最快(8 個 Frame) . 7-4 . . 1 1 1 1 :最慢(128 個 Frame) 設定每次位移的像素: 3-0 0 0 0 0 :最小 1 個位移的像素 . . RAiO TECHNOLOGY INC. 25/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 . 1 1 1 1 :最大 16 個位移的像素 9-4 程式範例 (a)由上往下捲動(垂直捲動) 程式說明 1.設定垂直捲動區塊 : REG[08],REG[0A],REG[09],REG[0B] 2.捲動速度設定: REG[0D]:Bit[7:4]~Bit[3:0] 3.設定螢幕為文字捲動模式 : REG[03]:0x43 4.選擇由上往下捲動 與 中斷點數 SCR_I REG[0E]:0xAB 判斷REG[0F]之 Bit3 是否中斷 .If(SCR_I ==1) N Y N 判斷捲動 行數 是否已完成 REG[09]~REG[0B] If(REG[0C] == 0x00) Y 暫停捲動 延遲1秒 繼續捲動 圖 9-2 : 垂直捲動(由上往下) 以下為 圖 9-2 範例程式: LCD_Clear_LCD // 清除所有顯示 LCD_CmdWrite(0x0C,0x00); // 清除捲動向量暫存器 LCD_CmdWrite(0x0E,0x00); // 清除捲動功能暫存器 LCD_CmdWrite(0x01,0x02); // LCD 顯示開啟 LCD_CmdWrite(0x04,0x74); // 關閉游標顯示 RAiO TECHNOLOGY INC. 26/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_CmdWrite(0x03,0x03); // 正常文字顯示模式 GotoXY(0,0); // 設定游標位址 PrintStr_SPI3("文字由上往下捲動瑞佑科技旋轉測試",1); // 顯示中文字串 // 設定捲動區塊 LCD_CmdWrite(0x08,2); // 設定捲動範圍水平起始位址 LCD_CmdWrite(0x09,16); // 設定捲動範圍垂直起始位址 LCD_CmdWrite(0x0A,10); // 設定捲動範圍水平結束位址 LCD_CmdWrite(0x0B,31); // 設定捲動範圍垂直結束位址 LCD_CmdWrite(0x03,0x43); // 設定文字捲動功能模式 LCD_CmdWrite(0x0D,0x30); // 捲動速度設定 LCD_CmdWrite(0x0E,0xAB); // 由上往下捲動時,每位移 8 點,SCR_I // 產生中斷 While(1) { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 偵測 SCR_I 是否為”1”(中斷) { if(LCD_CmdRead_SPI3(0x0C) == 0x00) // 判斷是否已經捲動 16 點完成 { LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) & 0xFE); // 暫停捲動 delay(1000); // 延遲 1 秒 LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) | 0x01); // 繼續捲動 } } } RAiO TECHNOLOGY INC. 27/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 (b)由下往上捲動(垂直捲動): 程式說明 1.設定垂直捲動區塊 : REG[08],REG[0A],REG[09],REG[0B] 2.捲動速度設定: REG[0D]:Bit[7:4]~Bit[3:0] 3.設定螢幕為文字捲動模式 : REG[03]:0x43 4.選擇由上往下捲動 與 中斷點數 SCR_I REG[0E]:0xAF 判斷REG[0F]之 Bit3 是否中斷 .If(SCR_I ==1) N Y N 判斷捲動 行數 是否已完成 REG[09]~REG[0B] If(REG[0C] == 0x00) Y 暫停捲動 延遲1秒 繼續捲動 圖 9-3 : 垂直捲動(由下往上) 以下為 圖 9-3 範例程式: LCD_Clear_LCD // 清除所有顯示 LCD_CmdWrite(0x0C,0x00); // 清除捲動向量暫存器 LCD_CmdWrite(0x0E,0x00); // 清除捲動功能暫存器 LCD_CmdWrite(0x01,0x02); // LCD 顯示開啟 LCD_CmdWrite(0x04,0x74); // 關閉游標顯示 LCD_CmdWrite(0x03,0x03); // 正常文字顯示模式 GotoXY(0,0); // 設定游標位址 PrintStr_SPI3("文字由下往下捲動瑞佑科技旋轉測試",1); // 顯示中文字串 // 設定捲動區塊 RAiO TECHNOLOGY INC. 28/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_CmdWrite(0x08,2); // 設定捲動範圍水平起始位址 LCD_CmdWrite(0x09,16); // 設定捲動範圍垂直起始位址 LCD_CmdWrite(0x0A,10); // 設定捲動範圍水平結束位址 LCD_CmdWrite(0x0B,31); // 設定捲動範圍垂直結束位址 LCD_CmdWrite(0x03,0x43); // 設定文字捲動功能模式 LCD_CmdWrite(0x0D,0x30); // 捲動速度設定 LCD_CmdWrite(0x0E,0xAF); // 由下往上捲動時,每位移 8 點,SCR_I 產 // 生中斷 While(1) { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 偵測 SCR_I 是否為”1”(中斷) { if(LCD_CmdRead_SPI3(0x0C) == 0x00) // 判斷是否已經捲動 16 點完成 { LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) & 0xFE); // 暫停捲動 delay(1000); // 延遲 1 秒 LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) | 0x01); // 繼續捲動 } } } RAiO TECHNOLOGY INC. 29/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 (c)由左往右捲動(水平捲動): 程式說明 1.設定垂直捲動區塊 : REG[08],REG[0A],REG[09],REG[0B] 2.捲動速度設定: REG[0D]:Bit[7:4]~Bit[3:0] 3.設定螢幕為文字捲動模式 : REG[03]:0x43 4.選擇由上往下捲動 與 中斷點數 SCR_I REG[0E]:0xA3 判斷REG[0F]之 Bit3 是否中斷 .If(SCR_I ==1) N Y N 判斷捲動 行數 是否已完成 REG[09]~REG[0B] If(REG[0C] == 0x00) Y 暫停捲動 延遲1秒 繼續捲動 圖 9-4 : 水平捲動(由左往右) 以下為 圖 9-4 範例程式: LCD_Clear_LCD // 清除所有顯示 LCD_CmdWrite(0x0C,0x00); // 清除捲動向量暫存器 LCD_CmdWrite(0x0E,0x00); // 清除捲動功能暫存器 LCD_CmdWrite(0x01,0x02); // LCD 顯示開啟 LCD_CmdWrite(0x04,0x74); // 關閉游標顯示 LCD_CmdWrite(0x03,0x03); // 正常文字顯示模式 GotoXY(0,0); // 設定游標位址 PrintStr_SPI3("文字由左往右捲動瑞佑科技旋轉測試",1); // 顯示中文字串 // 設定捲動區塊 LCD_CmdWrite(0x08,2); RAiO TECHNOLOGY INC. // 設定捲動範圍水平起始位址 30/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_CmdWrite(0x09,16); // 設定捲動範圍垂直起始位址 LCD_CmdWrite(0x0A,10); // 設定捲動範圍水平結束位址 LCD_CmdWrite(0x0B,31); // 設定捲動範圍垂直結束位址 LCD_CmdWrite(0x03,0x43); // 設定文字捲動功能模式 LCD_CmdWrite(0x0D,0x30); // 捲動速度設定 LCD_CmdWrite(0x0E,0xA3); // 由左往右捲動時,每位移 8 點,SCR_I 產 // 生中斷 While(1) { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 偵測 SCR_I 是否為”1”(中斷) { if(LCD_CmdRead_SPI3(0x0C) == 0x00) // 判斷是否已經捲動 16 點完成 { LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) & 0xFE); // 暫停捲動 delay(1000); // 延遲 1 秒 LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) | 0x01); // 繼續捲動 } } } RAiO TECHNOLOGY INC. 31/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 (d)由右往左捲動(水平捲動): 程式說明 1.設定垂直捲動區塊 : REG[08],REG[0A],REG[09],REG[0B] 2.捲動速度設定: REG[0D]:Bit[7:4]~Bit[3:0] 3.設定螢幕為文字捲動模式 : REG[03]:0x43 4.選擇由上往下捲動 與 中斷點數 SCR_I REG[0E]:0xA7 判斷REG[0F]之 Bit3 是否中斷 .If(SCR_I ==1) N Y N 判斷捲動 行數 是否已完成 REG[09]~REG[0B] If(REG[0C] == 0x00) Y 暫停捲動 延遲1秒 繼續捲動 圖 9-5 : 水平捲動(由右往左) 以下為 圖 9-5 範例程式: LCD_Clear_LCD // 清除所有顯示 LCD_CmdWrite(0x0C,0x00); // 清除捲動向量暫存器 LCD_CmdWrite(0x0E,0x00); // 清除捲動功能暫存器 LCD_CmdWrite(0x01,0x02); // LCD 顯示開啟 LCD_CmdWrite(0x04,0x74); // 關閉游標顯示 LCD_CmdWrite(0x03,0x03); // 正常文字顯示模式 GotoXY(0,0); // 設定游標位址 PrintStr_SPI3("文字由右往左捲動瑞佑科技旋轉測試",1); // 顯示中文字串 // 設定捲動區塊 LCD_CmdWrite(0x08,2); RAiO TECHNOLOGY INC. // 設定捲動範圍水平起始位址 32/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_CmdWrite(0x09,16); // 設定捲動範圍垂直起始位址 LCD_CmdWrite(0x0A,10); // 設定捲動範圍水平結束位址 LCD_CmdWrite(0x0B,31); // 設定捲動範圍垂直結束位址 LCD_CmdWrite(0x03,0x43); // 設定文字捲動功能模式 LCD_CmdWrite(0x0D,0x30); // 捲動速度設定 LCD_CmdWrite(0x0E,0xA7); // 由右往左捲動時,每位移 8 點,SCR_I 產生中 // 斷 While(1) { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 偵測 SCR_I 是否為”1”(中斷) { if(LCD_CmdRead_SPI3(0x0C) == 0x00) // 判斷是否已經捲動 16 點完成 { LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) & 0xFE); // 暫停捲動 delay(1000); // 延遲 1 秒 LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) | 0x01); // 繼續捲動 } } } RAiO TECHNOLOGY INC. 33/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 10. 文字模式移動 RA8816 提供 LCD 顯示畫面可經由暫存器的設定指定一區塊,使硬體自動做螢幕畫面移動的效果,其中暫存 器的功能設定主要包刮移動畫面的方向與速度,及每次移動畫面的像數與移動的範圍,以下針對實際應用時 程式撰寫方式作一說明。 10-1 移動方向 可由暫存器 REG-[0Eh]之 BIT[3:2]設定,選擇四種不同的捲動方式 暫存器設定: REG[0Eh] DB7 DB6 DB5 SCR_IM SCR_IM AUTO_ D1 D0 SCR Bit DB4 SBUF DB3 DB2 DB1 DB0 SCR_M SCR_M SCR_IN SCR_E D1 D0 TEN N Description Default Access 0h R/W 設定移動方向: 3-2 0 0 :由左至右移動(水平移動) 0 1 :由右至左移動(水平移動) 1 0 :由下至上移動(垂直移動) 1 1 :由上至下移動(垂直移動) 10-2 移動範圍設定 設定 REG-[08h]、REG-[09h]、REG-[0Ah]、REG-[0Bh]四個暫存器,可指定一區塊作為移動的範圍。 文字模式移動區塊設定 ( REG[08],REG[09] ) ( REG[0A],REG[0B] ) 由上至下移動測試 瑞佑科技中文控制 圖 10-1 : 設定移動範圍 RAiO TECHNOLOGY INC. 34/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 (a)暫存器設定:移動區塊水平起始位址(X1) REG[08h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- -- SSX4 SSX3 SSX2 SSX1 SSX0 (b)暫存器設定:移動區塊垂直起始位址(Y1) REG[09h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- SSY5 SSY4 SSY3 SSY2 SSY1 SSY0 (c)暫存器設定:移動區塊水平結束位址(X2) REG[0Ah] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- -- SRX4 SRX3 SRX2 SRX1 SRX0 (d)暫存器設定:移動區塊垂直結束位址(Y2) REG[0Bh] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- SRY5 SSY4 SSY3 SSY2 SSY1 SSY0 10-3 移動速度設定 (a)REG-[0Dh]之 Bit[7:4]設定自動移動的速度。 (b)REG-[0Dh]之 Bit[3:0]設定每次位移的點數(每次移動像素 1~16) 。 暫存器設定: REG[0Dh] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 SPD3 SDP2 SPD1 SPD0 STP3 STP2 STP1 STP0 Bit 7-4 Description 設定自動移動的速度: 0 0 0 0 :最快(8 個 Frame) . Default Access 0h R/W 0h R/W . . 1 1 1 1 :最慢(128 個 Frame) 設定每次位移的像素: 3-0 0 0 0 0 :最小 1 個位移的像素 . . RAiO TECHNOLOGY INC. 35/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 . 1 1 1 1 :最大 16 個位移的像素 10-4 程式範例 (a)由上至下移動(垂直移動): 程式說明 1.設定水平移動區塊: REG[08],REG[09],REG[0A],REG[0B] 2.移動速度設定: REG[0D]:Bit[7:4]~Bit[3:0] 3.選擇由上往下移動與移動中斷點數 : REG[0E]:0xFB 4.設定螢幕為文字移動模式 : REG[03]:0xC3 判斷REG[0F]之 Bit3 是否中斷 .If(SCR_I ==1) N Y 連續寫入下一列預顯示的資料 1.(寫入位元組數 = REG[09]~REG[0B]) 2.每位元寫入資料 = 0x00 圖 10-2 : 垂直移動(上至下移動) 以下為 圖 10-2 範例程式: LCD_Clear_LCD // 清除所有顯示 LCD_CmdWrite(0x0C,0x00); // 清除移動向量暫存器 LCD_CmdWrite(0x0E,0x00); // 清除移動功能暫存器 LCD_CmdWrite(0x03,0x03); // 文字模式 GotoXY(0,0); // 設定游標位址 RAiO TECHNOLOGY INC. 36/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 PrintStr("由上至下移動測試瑞佑科技中文控制",1); // 顯示中文字串 // 設定移動區塊 LCD_CmdWrite(0x08,0x02); // 設定移動範圍水平起始位址 LCD_CmdWrite(0x09,0x10); // 設定移動範圍垂直起始位址 LCD_CmdWrite(0x0A,0x0B); // 設定移動範圍水平結束位址 LCD_CmdWrite(0x0B,0x1F); // 設定移動範圍垂直結束位址 LCD_CmdWrite(0x0D,0x50); // 捲動速度設定 LCD_CmdWrite(0x0E,0xFB); // 啟動由上而下移動功能,每移動 16 行點數 // 時就發出 SCR_I 中斷 LCD_CmdWrite(0x03,0xC3); // 設定文字移動功能模式 While(1) { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 偵測 SCR_I 是否為”1”(中斷) { for(i=0 ;i<12 ;i++) LCD_DataWrite(0x20); // 連續寫入空白字元 LCD_CmdWrite(0x0F,LCD_CmdRead(0x0F) & // 清除 SCR_I 中斷位元為”0” 0xFB); } } RAiO TECHNOLOGY INC. 37/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 (b)由下至上移動(垂直移動): 程式說明 1.設定水平移動區塊: REG[08],REG[09],REG[0A],REG[0B] 2.移動速度設定: REG[0D]:Bit[7:4]~Bit[3:0] 3.選擇由下往上移動與移動中斷點數 : REG[0E]:0xFF 4.設定螢幕為文字移動模式 : REG[03]:0xC3 判斷REG[0F]之 Bit3 是否中斷 .If(SCR_I ==1) N Y 連續寫入下一列預顯示的資料 1.(寫入位元組數 = REG[09]~REG[0B]) 2.每位元寫入資料 = 0x00 圖 10-3 : 垂直移動(由下至上) 以下為 圖 10-3 範例程式: LCD_Clear_LCD // 清除所有顯示 LCD_CmdWrite(0x0C,0x00); // 清除移動向量暫存器 LCD_CmdWrite(0x0E,0x00); // 清除移動功能暫存器 LCD_CmdWrite(0x03,0x03); // 文字模式 GotoXY(0,0); // 設定游標位址 PrintStr("由下至上移動測試瑞佑科技中文控制",1); // 顯示字串 // 設定移動區塊 LCD_CmdWrite(0x08,0x02); // 設定移動範圍水平起始位址 LCD_CmdWrite(0x09,0x10); // 設定移動範圍垂直起始位址 LCD_CmdWrite(0x0a,0x0b); // 設定移動範圍水平結束位址 RAiO TECHNOLOGY INC. 38/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_CmdWrite(0x0b,0x1f); // 設定移動範圍垂直結束位址 LCD_CmdWrite(0x0d,0x70); // 捲動速度設定 LCD_CmdWrite(0x03,0xc3); // 設定文字移動功能模式 LCD_CmdWrite(0x0E,0xff); // 啟動由下而上移動功能,每移動 16 行點數 // 時就發出 SCR_I 中斷 While(1) { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) { for(i=0 ;i<12 ;i++) // 檢查移動中斷 LCD_DataWrite(0x20); // 若是,則連續寫入一列空白字元… LCD_CmdWrite(0x0F,LCD_CmdRead(0x0F) & // 清除 SCR_I 中斷位元為”0” 0xFB); } } RAiO TECHNOLOGY INC. 39/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 (c)由左往右移動(水平移動): 程式說明 1.設定水平移動區塊 : REG [08],REG[0A],REG[09], REG[0B] 2.移動速度設定 : REG [0D]:Bit[7:4]~Bit[3:0] 3.設定螢幕為移動模式 : REG [03]:0x83 4.選擇由上往下移動與移動中斷點數 : REG [0E]:0xB3 判斷REG[0F]之 Bit3 是否中斷 .If(SCR _I ==1) N Y 連續寫入下一預顯示字的資料 寫入資料 = 0x00 圖 10-4 : 水平移動(由左往右) 以下為 圖 10-4 範例程式: LCD_CmdWrite(0x0C,0x00); // 清除移動向量暫存器 LCD_CmdWrite(0x0E,0x00); // 清除移動功能暫存器 LCD_CmdWrite(0x03,0x03); // 文字模式 LCD_Clear_LCD // 清除所有顯示 GotoXY(0,0); // 設定游標位址 PrintStr("由左往右移動測試瑞佑科技中文控制",1); // 顯示字串 // 設定移動區塊 LCD_CmdWrite(0x08,0x02); // 設定移動範圍水平起始位址 LCD_CmdWrite(0x09,0x10); // 設定移動範圍垂直起始位址 RAiO TECHNOLOGY INC. 40/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_CmdWrite(0x0a,0x0b); // 設定移動範圍水平結束位址 LCD_CmdWrite(0x0b,0x1f); // 設定移動範圍垂直結束位址 LCD_CmdWrite(0x0D,0x30); // 捲動速度設定 LCD_CmdWrite(0x03,0x83); // 設定文字移動功能模式 LCD_CmdWrite(0x0E,0xB3); // 啟動由左至右移動功能,每移動 8 點像數時 // 就發出一次 SCR_I 中斷 while(1) { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 偵測 SCR_I 是否為”1”(中斷) { LCD_DataWrite(0x20); // 若是中斷產生,就寫入空白字元 LCD_CmdWrite(0x0F,LCD_CmdRead(0x0F) // 清除 SCR_I 中斷位元為”0” & 0xFB); } } RAiO TECHNOLOGY INC. 41/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 (d)由右往左移動(水平移動): 程式說明 1.設定水平移動區塊 : REG [08],REG[0A],REG[09], REG[0B] 2.移動速度設定 : REG [0D]:Bit[7:4]~Bit[3:0] 3.設定螢幕為移動模式 : REG [03]:0x83 4.選擇由上往下移動與移動中斷像數 : REG [0E]:0xB7 判斷REG[0F]之 Bit3 是否中斷 .If(SCR _I ==1) N Y 連續寫入下一預顯示字的資料 寫入資料 = 0x00 圖 10-5 : 水平移動(由右往左) 以下為 圖 10-5 範例程式: LCD_CmdWrite(0x0E,0x00); // 清除移動向量暫存器 LCD_CmdWrite(0x0C,0x00); // 清除移動功能暫存器 LCD_CmdWrite(0x03,0x00); // 文字模式 LCD_Clear_LCD // 清除所有顯示 GotoXY(0,0) // 設定游標位址 PrintStr ("由右往左移動測試瑞佑科技中文控制",1); // 顯示字串 // 設定移動區塊 LCD_CmdWrite (0x08,0x02); // 設定移動範圍水平起始位址 LCD_CmdWrite (0x09,0x10); // 設定移動範圍垂直起始位址 RAiO TECHNOLOGY INC. 42/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_CmdWrite (0x0a,0x0b); // 設定移動範圍水平結束位址 LCD_CmdWrite (0x0b,0x1f); // 設定移動範圍垂直結束位址 LCD_CmdWrite(0x0D,0x30); // 捲動速度設定 LCD_CmdWrite(0x03,0x83); // 設定文字移動功能模式 LCD_CmdWrite(0x0E,0xb7); // 啟動由右至左移動功能,每移動 8 點數時 // 就發出 SCR_I 中斷 while(1) { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 偵測 SCR_I 是否為”1”(中斷) { LCD_DataWrite(0x20); // 若是中斷產生,就寫入空白字元 LCD_CmdWrite(0x0F,LCD_CmdRead(0x0F) // 清除 SCR_I 中斷位元為”0” & 0xFB); } } RA8816 提供 LCD 顯示畫面可經由暫存器的設定指定一區塊,使硬體自動做螢幕畫面捲動的效果,其中暫存 器的功能設定主要包刮捲動畫面的方向與速度,及每次捲動畫面的像數與捲動的範圍,以下針對實際應用時 程式撰寫方式作一說明。 RAiO TECHNOLOGY INC. 43/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 11. 繪圖模式捲動 11-1 捲動方向 RA8816 可由暫存器 REG-[0Eh]之 BIT[3:2] 設定,選擇四種不同的捲動方式。 暫存器設定: REG[0Eh] DB7 DB6 DB5 SCR_IM SCR_IM AUTO_ D1 D0 SCR Bit DB4 SBUF DB3 DB2 DB1 DB0 SCR_M SCR_M SCR_IN SCR_E D1 D0 TEN N Description Default Access 0h R/W 設定移動方向: 3-2 0 0 :由左至右捲動(水平捲動) 0 1 :由右至左捲動(水平捲動) 1 0 :由下至上捲動(垂直捲動) 1 1 :由上至下捲動(垂直捲動) 11-2 捲動範圍設定 設定 REG-[08h]、REG-[09h]、REG-[0Ah]、REG-[0Bh]四個暫存器,可指定一區塊作為捲動的範圍。 ( REG[08],REG[09] ) ( REG[0A],REG[0B] ) RAi O 2004 繪圖模式旋轉測試 圖 11-1 : 捲動範圍設定 (a)暫存器設定:捲動區塊水平起始位址(X1) REG[08h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- -- SSX4 SSX3 SSX2 SSX1 SSX0 DB4 DB3 DB2 DB1 DB0 (b)暫存器設定:捲動區塊垂直起始位址(Y1) REG[09h] RAiO TECHNOLOGY INC. DB7 DB6 DB5 44/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 -- -- SSY5 SSY4 SSY3 SSY2 SSY1 SSY0 (c)暫存器設定:捲動區塊水平結束位址(X2) REG[0Ah] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- -- SRX4 SRX3 SRX2 SRX1 SRX0 (d)暫存器設定:捲動區塊垂直結束位址(Y2) REG[0Bh] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- SRY5 SSY4 SSY3 SSY2 SSY1 SSY0 11-3 捲動速度設定 (a)REG-[0Dh]之 Bit[7:4] 設定自動捲動的速度。 (b)REG-[0Dh]之 Bit[3:0] 設定每次位移的點數(每次捲動像素 1~16) 。 暫存器設定: REG[0Dh] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 SPD3 SDP2 SPD1 SPD0 STP3 STP2 STP1 STP0 Bit Description Default Access 0h R/W 0h R/W 設定自動捲動的速度: 0 0 0 0 :最快(8 個 Frame) . 7-4 . . 1 1 1 1 :最慢(128 個 Frame) 設定每次位移的像素: 0 0 0 0 :最小 1 個位移的像素 . 3-0 . . 1 RAiO TECHNOLOGY INC. 1 1 1 :最大 16 個位移的像素 45/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 11-4 程式範例 (a)由上往下捲動(垂直捲動) 程式說明 1.設定垂直捲動區塊 : REG[08],REG[0A],REG[09],REG[0B] 2.捲動速度設定: REG[0D]:Bit[7:4]~Bit[3:0] 3.設定螢幕為文字捲動模式 : REG[03]:0x40 4.選擇由上往下捲動 與 中斷點數 SCR_I REG[0E]:0xAB 判斷REG[0F]之 Bit3 是否中斷 .If(SCR_I ==1) N Y N 判斷捲動 行數 是否已完成 REG[09]~REG[0B] If(REG[0C] == 0x00) Y 暫停捲動 延遲1秒 繼續捲動 圖 11-2 : 垂直捲動(由上往下) 以下為 圖 11-2 範例程式: LCD_Clear_LCD // 清除所有顯示 LCD_CmdWrite (0x03,0x00); // 設定繪圖顯示模式 LCD_CmdWrite (0x04,0x74); // 關閉游標 LCD_CmdWrite (0x01,0x02); // 開啟 LCD 顯示 GotoXY (0,0); // 設定游標位址 for(length=0; length< 256 ; length++) LCD_DataWrite (~(DataString2[length])); RAiO TECHNOLOGY INC. // 寫入 RAiO 2004 圖形(128 * 16) 46/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_CmdWrite (0x03,0x03); // 設定文字顯示模式 GotoXY (0,16); // 設定游標位址 PrintStr ("繪圖由上往下捲動",1); // 寫入中文字串 LCD_CmdWrite(0x08,0x00); // 設定捲動範圍水平起始位址 LCD_CmdWrite(0x09,0x00); // 設定捲動範圍垂直起始位址 LCD_CmdWrite(0x0A,0x0f); // 設定捲動範圍水平結束位址 LCD_CmdWrite(0x0B,0x0f); // 設定捲動範圍垂直結束位址 LCD_CmdWrite(0x0D,0x30); // 捲動速度設定 LCD_CmdWrite(0x03,0x40); // 設定繪圖捲動功能模式 LCD_CmdWrite(0x0E,0xAB); // 由上往下捲動時,每位移 8 點,SCR_I 產生 // 中斷 While(1) { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 偵測 SCR_I 是否為”1”(中斷) { if(LCD_CmdRead_SPI3(0x0C) == 0x00) // 判斷是否已經捲動 16 點完成 { LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) & 0xFE); // 暫停捲動 delay(1000); // 延遲 1 秒 LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) | 0x01); // 繼續捲動 } } } RAiO TECHNOLOGY INC. 47/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 (b)由下往上捲動(垂直捲動): 程式說明 1.設定垂直捲動區塊 : REG [08],REG[0A ],REG[09], REG[0B] 2.移動速度設定 : REG [0D]:Bit[7:4]~ Bit[3:0] 3.設定螢幕為繪圖捲動模式 : REG [03]:0x40 4.選擇由下往上捲動 與 中斷點數 SCR _I REG [0E]: 0xA F 判斷 REG[0F]之 Bit3 是否中斷 .If(SCR _I ==1) N Y N 判斷捲動 行數 是否已完成 REG [09]~REG[0B] If(REG[0C] == 0x00) Y 暫停捲動 延遲1秒 繼續捲動 圖 11-3 : 垂直捲動(由下往上) 以下為 圖 11-3 範例程式: LCD_Clear_LCD // 清除所有顯示 LCD_CmdWrite (0x03,0x00); // 設定繪圖顯示模式 LCD_CmdWrite (0x04,0x74); // 關閉游標 LCD_CmdWrite (0x01,0x02); // 開啟 LCD 顯示 GotoXY (0,0); // 設定游標位址 for(length=0; length< 256 ; length++) LCD_DataWrite (~(DataString2[length])); // 寫入 RAiO 2004 圖形(128 * 16) LCD_CmdWrite (0x03,0x03); // 設定文字顯示模式 GotoXY (0,16); // 設定游標位址 RAiO TECHNOLOGY INC. 48/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 PrintStr ("繪圖由下往上捲動",1); // 寫入中文字串 LCD_CmdWrite(0x08,0x00); // 設定捲動範圍水平起始位址 LCD_CmdWrite(0x09,0x00); // 設定捲動範圍垂直起始位址 LCD_CmdWrite(0x0A,0x0f); // 設定捲動範圍水平結束位址 LCD_CmdWrite(0x0B,0x0f); // 設定捲動範圍垂直結束位址 LCD_CmdWrite(0x0D,0x30); // 捲動速度設定 LCD_CmdWrite(0x03,0x40); // 設定繪圖捲動功能模式 LCD_CmdWrite(0x0E,0xAF); // 由下往上捲動時,每位移 8 點,SCR_I 產生 // 中斷 While(1) { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 偵測 SCR_I 是否為”1”(中斷) { if(LCD_CmdRead_SPI3(0x0C) == 0x00) // 判斷是否已經捲動 16 點完成 { LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) & 0xFE); // 暫停捲動 delay(1000); // 延遲 1 秒 LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) | 0x01); // 繼續捲動 } } } RAiO TECHNOLOGY INC. 49/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 (c)由左往右捲動(水平捲動): 程式說明 1.設定垂直捲動區塊 : REG [08],REG[0A],REG[09],REG[0B] 2.移動速度設定 : REG [0D]:Bit[7:4]~Bit[3:0] 3.設定螢幕為繪圖捲動模式 : REG [03]:0x40 4.選擇由下往上捲動 與 中斷點數 SCR_I REG [0E]:0xA3 判斷REG[0F]之 Bit3 是否中斷 .If(SCR_I ==1) N Y N 判斷捲動 行數 是否已完成 REG[08]~REG[0A] If(REG[0C] == 0x00) Y 暫停捲動 延遲1秒 繼續捲動 圖 11-4 : 水平捲動(由左往右) 以下為 圖 11-4 範例程式: LCD_Clear_LCD // 清除所有顯示 LCD_CmdWrite (0x03,0x00); // 設定繪圖顯示模式 LCD_CmdWrite (0x04,0x74); // 關閉游標 LCD_CmdWrite (0x01,0x02); // 開啟 LCD 顯示 GotoXY (0,0); // 設定游標位址 for(length=0; length< 256 ; length++) LCD_DataWrite (~(DataString2[length])); // 寫入 RAiO 2004 圖形(128 * 16) LCD_CmdWrite (0x03,0x03); // 設定文字顯示模式 GotoXY (0,16); // 設定游標位址 RAiO TECHNOLOGY INC. 50/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 PrintStr ("繪圖由左往右捲動",1); // 寫入中文字串 LCD_CmdWrite(0x08,0x00); // 設定捲動範圍水平起始位址 LCD_CmdWrite(0x09,0x00); // 設定捲動範圍垂直起始位址 LCD_CmdWrite(0x0A,0x0f); // 設定捲動範圍水平結束位址 LCD_CmdWrite(0x0B,0x0f); // 設定捲動範圍垂直結束位址 LCD_CmdWrite(0x0D,0x30); // 捲動速度設定 LCD_CmdWrite(0x03,0x40); // 設定繪圖捲動功能模式 LCD_CmdWrite(0x0E,0xA3); // 由左往右捲動時,每位移 8 點,SCR_I 產生 // 中斷 While(1) { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 偵測 SCR_I 是否為”1”(中斷) { if(LCD_CmdRead_SPI3(0x0C) == 0x00) // 判斷是否已經捲動 16 點完成 { LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) & 0xFE); // 暫停捲動 delay(1000); // 延遲 1 秒 LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) | 0x01); // 繼續捲動 } } } RAiO TECHNOLOGY INC. 51/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 (d)由右往左捲動(水平捲動): 程式說明 1.設定垂直捲動區塊 : REG[08],REG[0A],REG[09],REG[0B] 2.移動速度設定: REG[0D]:Bit[7:4]~Bit[3:0] 3.設定螢幕為繪圖捲動模式 : REG[03]:0x40 4.選擇由下往上捲動 與 中斷點數 SCR_I REG[0E]:0xA7 判斷REG[0F]之 Bit3 是否中斷 .If(SCR_I ==1) N Y N 判斷捲動 行數 是否已完成 REG[08]~REG[0A] If(REG[0C] == 0x00) Y 暫停捲動 延遲1秒 繼續捲動 圖 11-5 : 水平捲動(由右往左) 以下為 圖 11-5 範例程式: LCD_Clear_LCD // 清除所有顯示 LCD_CmdWrite (0x03,0x00); // 設定繪圖顯示模式 LCD_CmdWrite (0x04,0x74); // 關閉游標 LCD_CmdWrite (0x01,0x02); // 開啟 LCD 顯示 GotoXY (0,0); // 設定游標位址 for(length=0; length< 256 ; length++) LCD_DataWrite (~(DataString2[length])); // 寫入 RAiO 2004 圖形(128 * 16) LCD_CmdWrite (0x03,0x03); // 設定文字顯示模式 GotoXY (0,16); // 設定游標位址 RAiO TECHNOLOGY INC. 52/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 PrintStr ("繪圖由右往左捲動",1); // 寫入中文字串 LCD_CmdWrite(0x08,0x00); // 設定捲動範圍水平起始位址 LCD_CmdWrite(0x09,0x00); // 設定捲動範圍垂直起始位址 LCD_CmdWrite(0x0A,0x0f); // 設定捲動範圍水平結束位址 LCD_CmdWrite(0x0B,0x0f); // 設定捲動範圍垂直結束位址 LCD_CmdWrite(0x0D,0x30); // 捲動速度設定 LCD_CmdWrite(0x03,0x40); // 設定繪圖捲動功能模式 LCD_CmdWrite(0x0E,0xA7); // 由右往左捲動時,每位移 8 點,SCR_I 產生 // 中斷 While(1) { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 偵測 SCR_I 是否為”1”(中斷) { if(LCD_CmdRead_SPI3(0x0C) == 0x00) // 判斷是否已經捲動 16 點完成 { LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) & 0xFE); // 暫停捲動 delay(1000); // 延遲 1 秒 LCD_CmdWrite_SPI3(0x0E,LCD_CmdRead_SPI3(0x0E) | 0x01); // 繼續捲動 } } } RAiO TECHNOLOGY INC. 53/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 12. 繪圖模式移動 RA8816 提供 LCD 顯示畫面可經由暫存器的設定指定一區塊,使硬體自動做螢幕畫面移動的效果,其中暫存 器的功能設定主要包刮移動畫面的方向與速度,及每次移動畫面的像數與移動的範圍,以下針對實際應用時 程式撰寫方式作一說明。 12-1 移動方向 可由暫存器 REG-[0Eh]之 BIT[3:2] 設定,選擇四種不同的捲動方式。 暫存器設定: REG[0Eh] DB7 DB6 DB5 SCR_IM SCR_IM AUTO_ D1 D0 SCR Bit DB4 SBUF DB3 DB2 DB1 DB0 SCR_M SCR_M SCR_IN SCR_E D1 D0 TEN N Description Default Access 0h R/W 設定移動方向: 3-2 0 0 :由左至右移動(水平移動) 0 1 :由右至左移動(水平移動) 1 0 :由下至上移動(垂直移動) 1 1 :由上至下移動(垂直移動) 12-2 移動範圍設定 設定 REG-[08h]、REG-[09h]、REG-[0Ah]、REG-[0Bh]四個暫存器,可指定一區塊作為移動的範圍。 (REG[08],REG[09]) (REG[0A],REG[0B]) RAiO 2004 繪圖移動區塊設定 圖 12-1 : 設定移動範圍 RAiO TECHNOLOGY INC. 54/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 (a)暫存器設定:移動區塊水平起始位址(X1) REG[08h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- -- SSX4 SSX3 SSX2 SSX1 SSX0 (b)暫存器設定:移動區塊垂直起始位址(Y1) REG[09h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- SSY5 SSY4 SSY3 SSY2 SSY1 SSY0 (c)暫存器設定:移動區塊水平結束位址(X2) REG[0Ah] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- -- SRX4 SRX3 SRX2 SRX1 SRX0 (d)暫存器設定:移動區塊垂直結束位址(Y2) REG[0Bh] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- SRY5 SSY4 SSY3 SSY2 SSY1 SSY0 12-3 移動速度設定 (a)REG-[0Dh]之 Bit[7:4]設定自動移動的速度。 (b)REG-[0Dh]之 Bit[3:0]設定每次位移的點數(每次移動像素 1~16) 。 暫存器設定: REG[0Dh] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 SPD3 SDP2 SPD1 SPD0 STP3 STP2 STP1 STP0 Default Access 0h R/W 0h R/W Bit 7-4 Description 設定自動移動的速度: 0 0 0 0 :最快(8 個 Frame) . . . 1 1 1 1 :最慢(128 個 Frame) 設定每次位移的像素: 3-0 0 0 0 0 :最小 1 個位移的像素 . . RAiO TECHNOLOGY INC. 55/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 . 1 1 1 1 :最大 16 個位移的像素 12-4 程式範例 (a)由上至下移動(垂直移動): 程式說明 1.設定水平移動區塊 : REG [08],REG[09],REG[0A], REG[0B] 2.移動速度設定 : REG [0D]:Bit[7:4]~ Bit[3:0] 3.設定螢幕為移動模式 : REG [03]:0x80 4.選擇由上往下移動與移動中斷點數 : REG [0E]: 0x3B 判斷 REG[0F]之 Bit3 是否中斷 .If(SCR _I = =1) N Y 判斷移動 行數 是否已完成 REG[09]~REG[0B] N 連續寫入下一行預顯示的資料 (寫入位元組數 = REG[08]~REG[0A]) Y 連續寫入下一行預顯示的資料 1.(寫入位元組數 = REG[08]~REG[0A]) 2.每位元寫入資料 = 0x00 圖 12-2 : 垂直移動(由上至下) 以下為 圖 12-2 範例程式: LCD_Clear_LCD // 清除所有顯示 LCD_CmdWrite (0x03,0x43); // 中文模式 GotoXY_SPI3(0,16); // 設定游標位址 PrintStr_SPI3("繪圖由上往下移動試",1 // 顯示中文字串 RAiO TECHNOLOGY INC. 56/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_CmdWrite(0x0E,0x00); // 取消所有捲動與移動功能 LCD_CmdWrite(0x03,0x40); // 繪圖模式 LCD_CmdWrite(0x08,0x00); // 設定移動範圍水平起始位址 LCD_CmdWrite(0x09,0x00); // 設定移動範圍垂直起始位址 LCD_CmdWrite(0x0A,0x0F); // 設定移動範圍水平結束位址 LCD_CmdWrite(0x0B,0x0F); // 設定移動範圍垂直結束位址 LCD_CmdWrite(0x0D,0x30); // 捲動速度設定 LCD_CmdWrite(0x03,0x80); // 移動功能設定 LCD_CmdWrite(0x0E,0x3B); // 啟動由上而下捲動功能,每捲動 1 行點數時 // 就發出 SCR_I 中斷 Shift_Count2 = 240; Shift_Count = 0; While(1) { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 偵測 SCR_I 是否為”1”(中斷) { if(Shift_Count++ < 15) // 判斷是否已經移動 15 行(15 點-LCD COM ) { for(i=0 ; i<16 ; i++) // 每中斷一次就連續寫入 16Byte 的圖檔資料 { LCD_DataWrite(~(DataString2[Shift_Count2])); Shift_Count2++; } if((Shift_Count2 -= 32) == 0) Shift_Count2 = 240; } Else { for(i=0 ; i<16 ; i++) // 當已經寫入並移動至 16 次之後,接著再發生其他的 // 中斷時就將 16byte 的資料全部寫入”0x00”如此可達 // 到移動的效果 LCD_DataWrite(0x00); RAiO TECHNOLOGY INC. 57/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 } LCD_CmdWrite(0x0F,LCD_CmdRead(0x0F) & 0xFB); // 清除 SCR_I 中斷旗標為”0” (b)由下至上移動(垂直移動): 程式說明 1.設定垂直移動區塊 : REG [08],REG[0A],REG[09],REG[0B] 2.移動速度設定 : REG [0D]:Bit[7:4]~Bit[3:0] 3.設定螢幕為移動模式 : REG [03]:0x80 4.選擇由上往下移動與移動中斷點數 : REG [0E]:0x3F 判斷REG[0F]之 Bit3 是否中斷 .If(SCR_I ==1) N Y 判斷移動 行數 是否已完成 REG[09]~REG[0B] N 連續寫入下一行預顯示的資料 (寫入位元組數 = REG[08]~REG[0A]) Y 連續寫入下一行預顯示的資料 (寫入位元組數 = REG[08]~REG[0A]) 每位元寫入資料 = 0x00 圖 12-3 : 垂直移動(由下至上) 以下為 圖 12-3 範例程式: LCD_CmdWrite(0x0E,0x00); // 清除移動暫存器 LCD_CmdWrite(0x03,0x03); // 設定正常文字顯示模式 LCD_Clear(); // 清除所有顯示 GotoXY (0,16); // 設定游標位址 PrintStr("繪圖由下往上移動",1); // 寫入中文字串 RAiO TECHNOLOGY INC. 58/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_CmdWrite(0x08,0x00); // 設定移動範圍水平起始位址 LCD_CmdWrite(0x09,0x00); // 設定移動範圍垂直起始位址 LCD_CmdWrite(0x0A,0x0F); // 設定移動範圍水平結束位址 LCD_CmdWrite(0x0B,0x0F); // 設定移動範圍垂直結束位址 LCD_CmdWrite(0x0d,0x60); // 設定移動速度 LCD_CmdWrite(0x03,0x80); // 設定繪圖移動模式 LCD_CmdWrite(0x0E,0x3F); // 開啟由下往上移動功能,並且每移動一行就產生中 斷 SCR_I Shift_Count2 = 0; // 清除使用者判斷旗標 Shift_Count = 0; // 清除使用者判斷旗標 while(1) // { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 判斷中斷 SCR_I { if(Shift_Count++ < 16) // 判斷是否已經移動 16 行(16 點-LCD COM ) { for(i=0 ; i<16 ; i++) // 每中斷一次就連續寫入 16Byte 的圖檔資料 LCD_DataWrite(~(DataString2[Shift_Count2++])); } else { for(i=0 ; i<16 ; i++) // 當已經寫入並移動至 16 次之後,接著再發生其他 // 的中斷時就將 16byte 的資料全部寫入”0x00”如此 // 可達到移動的效果 LCD_DataWrite(0x00); } //---------------------------------------------------------------------------------------------------------------------------// //--- 重複執行繪圖移動的功能 ------------------------------------------------------------------------------------// if(Shift_Count2 >= 512) Shift_Count2 = 0; if(Shift_Count > 64) { RAiO TECHNOLOGY INC. 59/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 Shift_Count2 = 0; Shift_Count = 0; } LCD_CmdWrite(0x0F,LCD_CmdRead(0x0F) & 0xFB); // 清除 SCR_I 中斷旗標為”0” } } (c)由左往右移動(水平移動): 程式說明 1.設定水平移動區塊 : REG [08],REG[0A],REG[09],REG[0B] 2.移動速度設定 : REG [0D]:Bit[7:4]~Bit[3:0] 3.設定螢幕為移動模式 : REG [03]:0x80 4.選擇由上往下移動與移動中斷點數 : REG [0E]:0xF3 判斷REG[0F]之 Bit3 是否中斷 .If(SCR_I ==1) N Y 判斷移動 列數 是否已完成 REG[08]~REG[0A] N 連續寫入下一列預顯示的資料 (寫入位元組數 = REG[09]~REG[0B]) Y 連續寫入下一列預顯示的資料 (寫入位元組數 = REG[09]~REG[0B]) 每位元寫入資料 = 0x00 圖 12-4 : 水平移動(由左往右) RAiO TECHNOLOGY INC. 60/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 以下為 圖 12-4 範例程式: LCD_CmdWrite(0x0E,0x00); // 清除移動暫存器 LCD_CmdWrite(0x03,0x03); // 設定正常文字顯示模式 LCD_Clear(); // 清除所有顯示 GotoXY (0,16); // 設定游標位址 PrintStr ("繪圖由左往右移動",1); // 寫入中文字串 LCD_CmdWrite(0x08,0x00); // 設定移動範圍水平起始位址 LCD_CmdWrite(0x09,0x00); // 設定移動範圍垂直起始位址 LCD_CmdWrite(0x0A,0x0F); // 設定移動範圍水平結束位址 LCD_CmdWrite(0x0B,0x0F); // 設定移動範圍垂直結束位址 LCD_CmdWrite(0x0d,0x20); // 設定移動速度 LCD_CmdWrite(0x03,0x80); // 設定繪圖移動模式 LCD_CmdWrite(0x0E,0xF3); // 開啟由左往右移動功能,並且每移動一列就產生中斷 SCR_I Shift_Count2 = 14; // 清除使用者判斷旗標 Shift_Count = 0; // 清除使用者判斷旗標 R1 = 0; // 清除使用者判斷旗標 while(1) // { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 判斷中斷 SCR_I { if(Shift_Count++ < 16) // 判斷是否已經移動 16 行(16 點-LCD COM ) { for(i=0 ; i<16 ; i++) // 每中斷一次就連續寫入 32Byte 的圖檔資料 { for(j=0 ; j<2 ;j++) LCD_DataWrite(~(DataString2[Shift_Count2+j+(i*16)])); } Shift_Count2-=2; RAiO TECHNOLOGY INC. 61/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 Shift_Count+=2; } else { for(i=0 ; i<32 ; i++) // 當已經寫入並移動至 16 次之後,接著再發生其他的中 // 斷時就將 32byte 的資料全部寫入”0x00”如此可達到移 // 動的效果 LCD_DataWrite(0x00); } //---------------------------------------------------------------------------------------------------------------------------// //--- 重複執行繪圖移動的功能 ------------------------------------------------------------------------------------// if(R1++ > 16) { Shift_Count = 0; // 清除使用者判斷旗標 Shift_Count2 = 14; // 清除使用者判斷旗標 R1 = 0; // 清除使用者判斷旗標 } LCD_CmdWrite(0x0F,LCD_CmdRead(0x0F) & 0xFB); // 清除 SCR_I 中斷旗標為”0” } } RAiO TECHNOLOGY INC. 62/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 (d)由右往左移動(水平移動): 程式說明 1.設定水平移動區塊: REG[08],REG[0A],REG[09],REG[0B] 2.移動速度設定: REG[0D]:Bit[7:4]~Bit[3:0] 3.設定螢幕為移動模式: REG[03]:0x80 4.選擇由上往下移動與移動中斷點數 : REG[0E]:0xF7 判斷REG[0F]之 Bit3 是否中斷 .If(SCR_I ==1) N Y 判斷移動 列數 是否已完成 REG[08]~REG[0A] N 連續寫入下一列預顯示的資料 (寫入位元組數 = REG[09]~REG[0B]) Y 連續寫入下一列預顯示的資料 (寫入位元組數 = REG[09]~REG[0B]) 每位元寫入資料 = 0x00 圖 12-5 : 水平移動(由右往左) 以下為 圖 12-5 範例程式: LCD_CmdWrite(0x0E,0x00); // 清除移動暫存器 LCD_CmdWrite(0x03,0x03); // 設定正常文字顯示模式 LCD_Clear(); // 清除所有顯示 GotoXY (0,16); // 設定游標位址 PrintStr ("繪圖由左往右移動",1); // 寫入中文字串 LCD_CmdWrite(0x08,0x00); // 設定移動範圍水平起始位址 LCD_CmdWrite(0x09,0x00); // 設定移動範圍垂直起始位址 LCD_CmdWrite(0x0A,0x0F); // 設定移動範圍水平結束位址 RAiO TECHNOLOGY INC. 63/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_CmdWrite(0x0B,0x0F); // 設定移動範圍垂直結束位址 LCD_CmdWrite(0x0d,0x20); // 設定移動速度 LCD_CmdWrite(0x03,0x80); // 設定繪圖移動模式 LCD_CmdWrite(0x0E,0xF7); // 開啟由右往左移動功能,並且每移動一列就產生 中斷 SCR_I Shift_Count = 0; // 清除使用者判斷旗標 R1 = 0; // 清除使用者判斷旗標 while(1) // { while((LCD_CmdRead(0x0f) & 0x04) == 0x04) // 判斷中斷 SCR_I { if(Shift_Count++ < 16) // 判斷是否已經移動 16 行(16 點-LCD COM ) { for(i=0 ; i<16 ; i++) // 每中斷一次就連續寫入 32Byte 的圖檔資料 { for(j=0 ; j<2 ;j++) LCD_DataWrite(~(DataString2[Shift_Count+j+(i*16)])); } Shift_Count+=2; } else { for(i=0 ; i<32 ; i++) // 當已經寫入並移動至 16 次之後,接著再發生其 // 他的中斷時就將 32byte 的資料全部寫入”0x00” // 如此可達到移動的效果 LCD_DataWrite(0x00); } //---------------------------------------------------------------------------------------------------------------------------// //--- 重複執行繪圖移動的功能 ------------------------------------------------------------------------------------// if(R1++ > 16) { RAiO TECHNOLOGY INC. 64/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 Shift_Count = 0; // 清除使用者判斷旗標 R1 = 0; // 清除使用者判斷旗標 } LCD_CmdWrite(0x0F,LCD_CmdRead(0x0F) & 0xFB); // 清除 SCR_I 中斷旗標為”0” } } RAiO TECHNOLOGY INC. 65/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 13. EL(冷光)驅動信號 RA8816 提供使用者冷光驅動信號(EL_DCHG 與 EL_CHRG),只要加入簡易的外部電路,即可產生(EL)所需 要的交流高壓訊號,而直接驅動冷光板。圖 13-1 為簡單的驅動電路及充放電所需的輸出波形,另外也可透過 暫存器去設定每次產生冷光控制信號的輸出時間。 EL_CHRG 20 us EL_DCHG 20us 2.4us 2.4us 700us EL 充放電波形 L1=3MH 3V EL_CHRG D1 1N4148 充電 R1 = 2K EL Q1 2SC1623 R3 = 2K 放電 EL_DCHG Q2 2SC1623 R2 = 2K EL 應用電路 圖 13-1 : 冷光驅動信號與電路 暫存器設定: REG[16h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 EL_EN -- -- -- ELT3 ELT2 ELT1 ELT0 RAiO TECHNOLOGY INC. 66/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 Bit Description Default Access 0h W 8 個 16x16 全型字記憶體的位址分配 2-0 0 0 0 0 : 1 秒 0 0 0 1 : 2 秒 0 0 1 0 : 4 秒 0 0 1 1 : 6 秒 0 1 0 0 : 8 秒 0 1 0 1 : 10 秒 0 1 1 0 : 12 秒 0 1 1 1 : 14 秒 1 0 0 0 : 16 秒 1 0 0 1 : 18 秒 1 0 1 0 : 20 秒 1 0 1 1 : 22 秒 1 1 0 0 : 24 秒 1 1 0 1 : 26 秒 1 1 1 0 : 28 秒 1 1 1 1 : 30 秒 上表的輸出時間是以 RC 振盪(系統頻率)為 45KHz 時為標準,RC 振盪頻率愈高則輸出時間愈短。 範例程式: LCD_CmdWrite(0x16,0x85); RAiO TECHNOLOGY INC. // 打開冷光驅動訊號輸出,約 10 秒之後自動關閉。 67/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 14. 使用者造字功能 RA8816 內建繁體或簡體中文字型碼,以及常用的 ASCII 字型,除此之外,另外也提供存放 8 個 16x16 的全 型字的記憶體,可讓使用者將自行描繪的全型字或圖案存入這些位址,如此可提高使用者每次讀取這些字型 或圖案顯示時的效率。使用方式如下說明: 暫存器設定:(造字暫存器) REG[17h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -- -- -- -- -- UMI2 UMI1 UMI0 Default Access 0h R Bit Description 8 個 16x16 全型字記憶體的位址分配 2-0 0 0 0 : FFF0h 0 0 1 : FFF1h 0 1 0 : FFF2h 0 1 1 : FFF3h 1 0 0 : FFF4h 1 0 1 : FFF5h 1 1 0 : FFF6h 1 1 1 : FFF7h 暫存器設定:(造字資料暫存器) REG[17h] DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 CGMD7 CGMD6 CGMD5 CGMD4 CGMD3 CGMD2 CGMD1 CGMD0 範例說明: RAiO TECHNOLOGY INC. 68/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 0 00000001 10000000 16 00000001 00000001 00000001 00000111 00111101 00110001 00111001 00111111 00000001 00000001 00000001 00000001 00000001 00000001 15 00000000 11000000 11000000 11111100 11011100 11011100 11111000 11110000 11000000 11000000 11000000 11000000 10000000 10000000 10000000 00000000 31 圖 14-1 (BMP = FFF2h) 以下為 圖 14-1 範例程式: //**************************************************************************************// //*** 造字範例 : 寫入記憶體位址 = FFF2h **********************************************// //*************************************************************************************// LCD_CmdWrite(0x03,0x03); // 設定正常文字顯示模式 LCD_CmdWrite_SPI3(0x17,0x02); // 設定造字存放位址為 FFF2h length = 0; for(i=0 ;I < 32 ; i++) LCD_CmdWrite_SPI3(0x18,BMP[length]++) // 連續寫入 32 位元組的造字資料 ; . // (寫入順序如圖 14-1 所示) . //**************************************************************************************// //*** 造字範例 : 讀取記憶體位址 = FFF2h *******************************************// //*************************************************************************************// LCD_DataWrite_SPI3(0xff); // LCD 顯示(圖 14-1)記憶體位址 FFF2h 的造字字型 LCD_DataWrite_SPI3(0xf2); . . RAiO TECHNOLOGY INC. 69/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 附錄 A. 顯示記憶體掃描映射圖 SEG0 SEG1 SEG127 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 COM0 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 COM1 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 COM2 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 COM3 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 COM4 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 COM30 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 COM31 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 COM32 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 RAiO TECHNOLOGY INC. 70/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 附錄 B. 副程式範例 //=========================================================================== //====== COMMAND.h ********* RA8816 共用副程式 ******=========================// //====== MPU Interface : 8080 mode / 8bit Databus //=========================================================================== extern void LCD_Reset(void); extern void LCD_CmdWrite(unsigned char,unsigned char); extern unsigned char LCD_CmdRead(unsigned char); extern void LCD_DataWrite(unsigned char); extern unsigned char LCD_DataRead(); extern void LCD_ChkBusy(void); extern void LCD_Initial(void); extern void LCD_Clear(void); extern void PrintStr(char *ptr,int delay_time); extern void putHEX(unsigned int var); extern void LCD_ChkBusy(void); extern void GotoXY(unsigned char x1,unsigned char y1); //**************************************************************************************// // *** 重置副程式 ********************************************************************// //**************************************************************************************// void LCD_Reset(void) { LCD_RST = 1; LCD_WR = 1; LCD_RST = 0; delay(100); LCD_RST = 1; delay(100); // MPU 控制 RA8816 為低準位 // 低準位延遲至少 5 毫秒 // MPU 控制 RA8816 為高準位 // 延遲至少 350 毫秒 } //**************************************************************************************// // *** 暫存器寫入資料副程式 *************************************************************// //**************************************************************************************// void LCD_CmdWrite(unsigned char cmdReg,unsigned char cmdData) { LCD_cmdReg = cmdReg; // 暫存器位址 LCD_CS =0; // 致能讀寫 RA8816 LCD_RD = 1; LCD_RS = 0; // 設定為讀寫暫存器模式 LCD_WR = 0; LCD_WR = 1; RAiO TECHNOLOGY INC. // 開始寫入暫存器位址 71/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_RS = 1; LCD_CS =1; LCD_cmdReg = cmdData; LCD_CS =0; LCD_RD = 1; LCD_RS = 0; LCD_WR = 0; LCD_WR = 1; LCD_RS = 1; LCD_CS =1; // 禁能讀寫 RA8816 // 暫存器資料 // 致能讀寫 RA8816 // 設定為讀寫暫存器模式 // 開始寫入暫存器資料 // 禁能讀寫 RA8816 } //**************************************************************************************// // *** 顯示記憶體寫入資料副程式 *********************************************************// //**************************************************************************************// void LCD_DataWrite(unsigned char WrData) { LCD_ChkBusy(); LCD_DATA = WrData; // 準備顯示記憶體資料 LCD_CS =0; // 致能讀寫 RA8816 LCD_RD = 1; LCD_RS = 1; // 設定為讀寫顯示記憶體模式 LCD_WR = 0; LCD_WR = 1; // 開始寫入顯示記憶體的資料 LCD_CS =1; // 禁能讀寫 RA8816 } //**************************************************************************************// // *** 讀取暫存器資料副程式 *************************************************************// //**************************************************************************************// unsigned char LCD_CmdRead(unsigned char cmdReg) { unsigned char REG_Read; LCD_cmdReg = cmdReg; LCD_CS =0; // 致能讀寫 RA8816 LCD_RD = 1; LCD_RS = 0; // 設定為讀寫暫存器模式 LCD_WR = 0; RAiO TECHNOLOGY INC. // 開始寫入暫存器位址 72/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 LCD_WR = 1; LCD_RS = 1; LCD_CS =1; LCD_DATA = 0xff; LCD_CS =0; LCD_WR = 1; LCD_RS = 0; LCD_RD = 0; REG_Read = LCD_DATA; LCD_RD = 1; LCD_RS = 1; LCD_CS =1; return REG_Read; // 禁能讀寫 RA8816 // 致能讀寫 RA8816 // 開始讀取暫存器資料 // 禁能讀寫 RA8816 // 回傳讀取暫存器內部的資料 } //**************************************************************************************// // *** 讀取顯示記憶體資料副程式 **********************************************************// //**************************************************************************************// unsigned char LCD_DataRead() { unsigned char REG_Read; LCD_ChkBusy(); LCD_DATA = 0xff; LCD_WR = 1; LCD_RS = 1; // 設定為讀寫顯示記憶體模式 LCD_CS =0; // 致能讀寫 RA8816 LCD_RD = 0; REG_Read = LCD_DATA; LCD_RD = 1; LCD_CS =1; return REG_Read; // 禁能讀寫 RA8816 } //**************************************************************************************// // *** 清除顯示記憶體資料副程式 *********************************************************// //**************************************************************************************// void LCD_Clear(void) { unsigned char READ_REG; READ_REG = LCD_CmdRead(0x01); RAiO TECHNOLOGY INC. 73/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 READ_REG &= 0xBf; READ_REG |= 0x42; LCD_CmdWrite(0x01,READ_REG); LCD_ChkBusy(); delay(10000); // 設定 Bit6 為”1”,硬體自動將顯示記憶體寫入”0” // 延遲 10 毫秒 } //**************************************************************************************// // *** 初始 RA8816 所有暫存器副程式 ******************************************************// //**************************************************************************************// void LCD_Initial(void) { LCD_CmdWrite(0x00,0x00); // 驅動波形設定暫存器 LCD_CmdWrite(0x01,0x00); // 電源控制暫存器 LCD_CmdWrite(0x02,0x79); // 系統設定暫存器 LCD_CmdWrite(0x03,0x00); // 記憶體輸入模式暫存器 LCD_CmdWrite(0x04,0x75); LCD_CmdWrite(0x05,0x00); LCD_CmdWrite(0x06,0x00); LCD_CmdWrite(0x07,0x00); // // // // LCD_CmdWrite(0x08,0x00); LCD_CmdWrite(0x09,0x00); // X 軸捲動起始點暫存器 // Y 軸捲動起始點暫存器 LCD_CmdWrite(0x0A,0x00); LCD_CmdWrite(0x0B,0x00); // X 軸捲動範圍暫存器 // Y 軸捲動範圍暫存器 LCD_CmdWrite(0x0C,0x00); LCD_CmdWrite(0x0D,0x00); LCD_CmdWrite(0x0E,0x00); LCD_CmdWrite(0x0F,0x00); // // // // LCD_CmdWrite(0x10,0x00); // 對比調整暫存器 LCD_CmdWrite(0x11,0x00); LCD_CmdWrite(0x12,0x00); // 驅動控制暫存器 A // 驅動控制暫存器 B LCD_CmdWrite(0x13,0x08); LCD_CmdWrite(0x14,0x00); LCD_CmdWrite(0x15,0x00); LCD_CmdWrite(0x16,0x00); LCD_CmdWrite(0x17,0x00); LCD_CmdWrite(0x18,0x00); // 閃爍設定暫存器 // IO 埠方向設定暫存器 // IO 埠資料暫存器 // 冷光控制暫存器 // 造字選擇暫存器 // 造字資料暫存器 RAiO TECHNOLOGY INC. 游標控制暫存器 游標 X 位置暫存器 游標 Y 位置暫存器 鍵盤掃描控制暫存器 捲動位移量暫存器 自動捲動控制暫存器 捲動控制暫存器 中斷狀態暫存器 74/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 } //**************************************************************************************// / / * * * LCD 顯示字串副程式 ** * *** * ** * ** * ** *** * ** * ** * ** *** * ** * ** * ** *** * ** * ** ** * *** * ** * ** * / / //**************************************************************************************// void PrintStr(char *ptr,int delay_time) // delay_time : 每個字顯示的間隔 { while(*ptr != '\0') // 判斷是否為字串的最後(空字串) { LCD_DataWrite(*ptr); // 例如: PrintStr(“ABC12345”,1) ++ptr; // 則 LCD 顯示 ABC12345 } } //**************************************************************************************// / / * * * 設 定 游 標 位 置 副程 式 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // //**************************************************************************************// extern void GotoXY(unsigned char x1,unsigned char y1) { LCD_CmdWrite(0x05,x1); // 設定 X 座標值 LCD_CmdWrite(0x06,y1); // 設定 Y 座標值 } //**************************************************************************************// // *** 讀取 RA8816 忙碌旗標副程式 *******************************************************// //**************************************************************************************// void LCD_ChkBusy(void) { do { }while((LCD_CmdRead(0x0F) & 0x80) == //判斷忙碌旗標是否為”1”,若是,表示忙碌中。 } //**************************************************************************************// // *** LCD 顯示兩位數 16 進制副程式 ******************************************************// //**************************************************************************************// void PutHEX(unsigned int var) { unsigned char div_val,base; base = 16; div_val = 0x10; do { LCD_DataWrite(ASCIITable[var / div_val]); // 例如:0x35,則 LCD 顯示 35 var %= div_val; RAiO TECHNOLOGY INC. 75/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 div_val /= base; }while (div_val); } RAiO TECHNOLOGY INC. 76/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 附錄 C. 簡單程式範例 void main (void) { LCD_Reset(); LCD_Clear(); LCD_CmdWrite(0x02,0x71); // 設定系統顯示記憶體為 128x32 模式 // 中文版本為繁體字型(BIG5) LCD_CmdWrite(0x11,0xF0); // 開啟內部升壓電路 LCD_CmdWrite(0x12,0x17); // 調整電壓調整器的倍數 LCD_CmdWrite(0x10,0x57); // 設定 Bias 與顯示對比度 LCD_CmdWrite(0x01,0x02); // Bi2=”1”,開啟顯示幕 LCD_CmdWrite(0x03,0x02); // 設定顯示為 ASCII 模式 GotoXY(0,0); // 設定游標位置(0,0) PrintStr("ASCII mode:8x16",1); // 印出字串” ASCII mode:8x16” LCD_CmdWrite(0x03,0x03); // 設定顯示為全型文字模式 GotoXY(0,16); // 設定游標位置(0,16) PrintStr("中文模式控制",1); // 印出字串”中文模式控制” } RAiO TECHNOLOGY INC. 77/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 附錄 D. 字型與字碼表(BIG-5) A1 0 1 2 3 4 5 6 7 8 9 A B C D E F A4 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 ,、。.‧;:?!︰…‥﹐、﹒ 4 一乙丁七乃九了二人儿入八几刀刁力 5 · ﹔﹕﹖﹗|–︱—︳╴︴﹏()︵ 5 匕十卜又三下丈上丫丸凡久么也乞于 6 ︶{}︷︸[]︹︺【】︻︼《》︽ 6 亡兀刃勺千叉口土士夕大女子孑孓寸 7 ︾〈〉^﹀「」﹁﹂『』﹃﹄﹙﹚ 7 小尢尸山川工己已巳巾干廾弋弓才 A A ﹛﹜﹝﹞`'“"〝〞‵′#&* 丑丐不中丰丹之尹予云井互五亢仁 B ※ § 〃○●△▲◎☆★◇◆□■▽▼ B 什仃仆仇仍今介仄元允內六兮公冗凶 C ㊣℅ ¯  ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+ C 分切刈勻勾勿化匹午升卅卞厄友及反 D - × ÷ ± √<>=≦≧≠∞≒≣﹢﹣ D 壬天夫太夭孔少尤尺屯巴幻廿弔引心 E ﹤﹥﹦~∩∪⊥∠∟⊿㏒㏑∫∮∵∴ E 戈戶手扎支文斗斤方日曰月木欠止歹 F ♀♂♁☉↑↓←→↖↗↙↘∥∣/ F 毋比毛氏水火爪父爻片牙牛犬王丙 A2 0 1 2 3 4 5 6 7 8 9 A B C D E F A5 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 \∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕ 4 世丕且丘主乍乏乎以付仔仕他仗代令 5 ㎜㎝㎞㏎㎡㎎㎏㏄ ° 兙兛兞兝兡兣嗧 5 仙仞充兄冉冊冬凹出凸刊加功包匆北 6 瓩糎▁▂▃▄▅▆▇█▏▎▍▌▋▊ 6 匝仟半卉卡占卯卮去可古右召叮叩叨 7 ▉┼┴┬┤├▔─│▕┌┐└┘╭ 7 叼司叵叫另只史叱台句叭叻四囚外 A A ╮╰╯═╞╪╡◢◣◥◤╱╲╳ 0 央失奴奶孕它尼巨巧左市布平幼弁 B 1 2 3 4 5 6 7 8 9 ⅠⅡⅢⅣⅤⅥⅦ B 弘弗必戊打扔扒扑斥旦朮本未末札正 C ⅧⅨⅩ〡〢〣〤〥〦〧〨〩十卄卅A C 母民氐永汁汀氾犯玄玉瓜瓦甘生用甩 D BCDEFGHIJKLMNOPQ D 田由甲申疋白皮皿目矛矢石示禾穴立 E RSTUVWXYZabcdefg E 丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐 F hijklmnopqrstuv F 休伏仲件任仰仳份企伋光兇兆先全 A3 0 1 2 3 4 5 6 7 8 9 A B C D E F A6 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 wxyzΑΒΓΔΕΖΗΘΙΚΛΜ 4 共再冰列刑划刎刖劣匈匡匠印危吉吏 5 ΝΞΟΠΡΣΤΥΦΧΨΩαβγδ 5 同吊吐吁吋各向名合吃后吆吒因回囝 6 εζηθικλμνξοπρστυ 6 圳地在圭圬圯圩夙多夷夸妄奸妃好她 7 φχψωㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏ 7 如妁字存宇守宅安寺尖屹州帆并年 A A ㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞ 式弛忙忖戎戌戍成扣扛托收早旨旬 B 0 1 2 3 4 5 6 7 8 9 ㄩ․ˉˊˇˋ B 旭曲曳有朽朴朱朵次此死氖汝汗汙江 C C 池汐汕污汛汍汎灰牟牝百竹米糸缶羊 ABCDEF D E D 羽老考而耒耳聿肉肋肌臣自至臼舌舛 ABCDEF E 舟艮色艾虫血行衣西阡串亨位住佇佗 F F 佞伴佛何估佐佑伽伺伸佃佔似但佣 例如: “中” 的 BIG-5 碼為 A4、A4,“世” 的 BIG-5 碼為 A5、A0。 RAiO TECHNOLOGY INC. 78/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 A7 0 1 2 3 4 5 6 7 8 9 A B C D E F AA 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 作你伯低伶余佝佈佚兌克免兵冶冷別 4 昇服朋杭枋枕東果杳杷枇枝林杯杰板 5 判利刪刨劫助努劬匣即卵吝吭吞吾否 5 枉松析杵枚枓杼杪杲欣武歧歿氓氛泣 6 呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶 6 注泳沱泌泥河沽沾沼波沫法泓沸泄油 7 吠吼呀吱含吟听囪困囤囫坊坑址坍 7 況沮泗泅泱沿治泡泛泊沬泯泜泖泠 A A 均坎圾坐坏圻壯夾妝妒妨妞妣妙妖 炕炎炒炊炙爬爭爸版牧物狀狎狙狗 B 妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿 B 狐玩玨玟玫玥甽疝疙疚的盂盲直知矽 C 尾岐岑岔岌巫希序庇床廷弄弟彤形彷 C 社祀祁秉秈空穹竺糾罔羌羋者肺肥肢 D 役忘忌志忍忱快忸忪戒我抄抗抖技扶 D 肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟 E 抉扭把扼找批扳抒扯折扮投抓抑抆改 E 芹花芬芥芯芸芣芰芾芷虎虱初表軋迎 F 攻攸旱更束李杏材村杜杖杞杉杆杠 F 返近邵邸邱邶采金長門阜陀阿阻附 A8 0 1 2 3 4 5 6 7 8 9 A B C D E F AB 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 杓杗步每求汞沙沁沈沉沅沛汪決沐汰 4 陂隹雨青非亟亭亮信侵侯便俠俑俏保 5 沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶 5 促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒 6 灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣 6 冑冠剎剃削前剌剋則勇勉勃勁匍南卻 7 私秀禿究系罕肖肓肝肘肛肚育良芒 7 厚叛咬哀咨哎哉咸咦咳哇哂咽咪品 A A 芋芍見角言谷豆豕貝赤走足身車辛 哄哈咯咫咱咻咩咧咿囿垂型垠垣垢 B 辰迂迆迅迄巡邑邢邪邦那酉釆里防阮 B 城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪 C 阱阪阬並乖乳事些亞享京佯依侍佳使 C 姚姦威姻孩宣宦室客宥封屎屏屍屋峙 D 佬供例來侃佰併侈佩佻侖佾侏侑佺兔 D 峒巷帝帥帟幽庠度建弈弭彥很待徊律 E 兒兕兩具其典冽函刻券刷刺到刮制剁 E 徇後徉怒思怠急怎怨恍恰恨恢恆恃恬 F 劾劻卒協卓卑卦卷卸卹取叔受味呵 F 恫恪恤扁拜挖按拼拭持拮拽指拱拷 A9 0 1 2 3 4 5 6 7 8 9 A B C D E F AC 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢 4 拯括拾拴挑挂政故斫施既春昭映昧是 5 周咋命咎固垃坷坪坩坡坦坤坼夜奉奇 5 星昨昱昤曷柿染柱柔某柬架枯柵柩柯 6 奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯 6 柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃 7 妳姒姅孟孤季宗定官宜宙宛尚屈居 7 殆段毒毗氟泉洋洲洪流津洌洱洞洗 A A 屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸 活洽派洶洛泵洹洧洸洩洮洵洎洫炫 B 庚店府底庖延弦弧弩往征彿彼忝忠忽 B 為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷 C 念忿怏怔怯怵怖怪怕怡性怩怫怛或戕 C 珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢 D 房戾所承拉拌拄抿拂抹拒招披拓拔拋 D 疣癸皆皇皈盈盆盃盅省盹相眉看盾盼 E 拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬 E 眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿 F 拎放斧於旺昔易昌昆昂明昀昏昕昊 F 突竿竽籽紂紅紀紉紇約紆缸美羿耄 RAiO TECHNOLOGY INC. 79/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 AD 0 1 2 3 4 5 6 7 8 9 A B C D E F B0 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝 4 虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記 5 致舢苧范茅苣苛苦茄若茂茉苒苗英茁 5 訐討訌訕訊託訓訖訏訑豈豺豹財貢起 6 苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔 6 躬軒軔軏辱送逆迷退迺迴逃追逅迸邕 7 計訂訃貞負赴赳趴軍軌述迦迢迪迥 7 郡郝郢酒配酌釘針釗釜釙閃院陣陡 A A 迭迫迤迨郊郎郁郃酋酊重閂限陋陌 陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺 B 降面革韋韭音頁風飛食首香乘亳倌倍 B 偽停假偃偌做偉健偶偎偕偵側偷偏倏 C 倣俯倦倥俸倩倖倆值借倚倒們俺倀倔 C 偯偭兜冕凰剪副勒務勘動匐匏匙匿區 D 倨俱倡個候倘俳修倭倪俾倫倉兼冤冥 D 匾參曼商啪啦啄啞啡啃啊唱啖問啕唯 E 冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨 E 啤唸售啜唬啣唳啁啗圈國圉域堅堊堆 F 唐唁唷哼哥哲唆哺唔哩哭員唉哮哪 F 埠埤基堂堵執培夠奢娶婁婉婦婪婀 AE 0 1 2 3 4 5 6 7 8 9 A B C D E F B1 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚 4 娼婢婚婆婊孰寇寅寄寂宿密尉專將屠 5 娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰 5 屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢 6 害家宴宮宵容宸射屑展屐峭峽峻峪峨 6 常帶帳帷康庸庶庵庾張強彗彬彩彫得 7 峰島崁峴差席師庫庭座弱徒徑徐恙 7 徙從徘御徠徜恿患悉悠您惋悴惦悽 A A 恣恥恐恕恭恩息悄悟悚悍悔悌悅悖 情悻悵惜悼惘惕惆惟悸惚惇戚戛扈 B 扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪 B 掠控捲掖探接捷捧掘措捱掩掉掃掛捫 C 挫挨捍捌效敉料旁旅時晉晏晃晒晌晅 C 推掄授掙採掬排掏掀捻捩捨捺敝敖救 D 晁書朔朕朗校核案框桓根桂桔栩梳栗 D 教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚 E 桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷 E 晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧 F 氣氧氨氦氤泰浪涕消涇浦浸海浙涓 F 梗械梃棄梭梆梅梔條梨梟梡梂欲殺 AF 0 1 2 3 4 5 6 7 8 9 A B C D E F B2 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙 4 毫毬氫涎涼淳淙液淡淌淤添淺清淇淋 5 烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞 5 涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪 6 畔畝畜畚留疾病症疲疳疽疼疹痂疸皋 6 深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽 7 皰益盍盎眩真眠眨矩砰砧砸砝破砷 7 犁猜猛猖猓猙率琅琊球理現琍瓠瓶 A A 砥砭砠砟砲祕祐祠祟祖神祝祗祚秤 瓷甜產略畦畢異疏痔痕疵痊痍皎盔 B 秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊 B 盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒 C 素索純紐紕級紜納紙紛缺罟羔翅翁耆 C 窕笠笨笛第符笙笞笮粒粗粕絆絃統紮 D 耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈 D 紹紼絀細紳組累終紲紱缽羞羚翌翎習 E 能脊胼胯臭臬舀舐航舫舨般芻茫荒荔 E 耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎 F 荊茸荐草茵茴荏茲茹茶茗荀茱茨荃 F 莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼 RAiO TECHNOLOGY INC. 80/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 B3 0 1 2 3 4 5 6 7 8 9 A B C D E F B6 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞 4 詔詛詐詆訴診訶詖象貂貯貼貳貽賁費 5 袈被袒袖袍袋覓規訪訝訣訥許設訟訛 5 賀貴買貶貿貸越超趁跎距跋跚跑跌跛 6 訢豉豚販責貫貨貪貧赧赦趾趺軛軟這 6 跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣 7 逍通逗連速逝逐逕逞造透逢逖逛途 7 酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑 A A 部郭都酗野釵釦釣釧釭釩閉陪陵陳 間閒閎隊階隋陽隅隆隍陲隄雁雅雄 B 陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵 B 集雇雯雲韌項順須飧飪飯飩飲飭馮馭 C 鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴 C 黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿 D 創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜 D 剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑 E 喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉 E 嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚 F 喫喙圍堯堪場堤堰報堡堝堠壹壺奠 F 塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼 B4 0 1 2 3 4 5 6 7 8 9 A B C D E F B7 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌 4 媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈 5 嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復 5 感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷 6 循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱 6 戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗 7 愎惶愉愀愒戟扉掣掌描揀揩揉揆揍 7 搆敬斟新暗暉暇暈暖暄暘暍會榔業 A A 插揣提握揖揭揮捶援揪換摒揚揹敞 楚楷楠楔極椰概楊楨楫楞楓楹榆楝 B 敦敢散斑斐斯普晰晴晶景暑智晾晷曾 B 楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇 C 替期朝棺棕棠棘棗椅棟棵森棧棹棒棲 C 滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙 D 棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼 D 煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷 E 毯氮氯氬港游湔渡渲湧湊渠渥渣減湛 E 獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀 F 湘渤湖湮渭渦湯渴湍渺測湃渝渾滋 F 痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督 B5 0 1 2 3 4 5 6 7 8 9 A B C D E F B8 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜 4 睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑 5 牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯 5 碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷 6 琛琦琨甥甦畫番痢痛痣痙痘痞痠登發 6 節筠筮筧粱粳粵經絹綑綁綏絛置罩罪 7 皖皓皴盜睏短硝硬硯稍稈程稅稀窘 7 署義羨群聖聘肆肄腱腰腸腥腮腳腫 A A 窗窖童竣等策筆筐筒答筍筋筏筑粟 腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛 B 粥絞結絨絕紫絮絲絡給絢絰絳善翔翕 B 萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾 C 耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜 C 蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒 D 菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌 D 覜解詫該詳試詩詰誇詼詣誠話誅詭詢 E 菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛 E 詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂 F 蛤蛐蛞街裁裂袱覃視註詠評詞証詁 F 賅跡跟跨路跳跺跪跤跦躲較載軾輊 RAiO TECHNOLOGY INC. 81/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 B9 0 1 2 3 4 5 6 7 8 9 A B C D E F BC 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 辟農運遊道遂達逼違遐遇遏過遍遑逾 4 劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎 5 遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤 5 噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻 6 鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊 6 嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢 7 雷電雹零靖靴靶預頑頓頊頒頌飼飴 7 廚廟廝廣廠彈影德徵慶慧慮慝慕憂 A A 飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖 慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩 B 僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀 B 摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚 C 嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖 C 撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞 D 塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦 D 標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿 E 嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對 E 潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘 F 屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇 F 滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃 BA 0 1 2 3 4 5 6 7 8 9 A B C D E F BD 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟 4 瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌 5 摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕 5 瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻 6 槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣 6 窯窮箭箱範箴篆篇篁箠篌糊締練緯緻 7 歉歌氳漳演滾漓滴漩漾漠漬漏漂漢 7 緘緬緝編緣線緞緩綞緙緲緹罵罷羯 A A 滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲 翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓 B 滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪 B 蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙 C 瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁 C 蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕 D 碟碧碳碩碣禎福禍種稱窪窩竭端管箕 D 請諸課諉諂調誰論諍誶誹諛豌豎豬賠 E 箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽 E 賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝 F 綾綠緊綴網綱綺綢綿綵綸維緒緇綬 F 踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞 BB 0 1 2 3 4 5 6 7 8 9 A B C D E F BE 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺 4 輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻 5 與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓 5 銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震 6 蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂 6 霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟 7 裴裹裸製裨褚裯誦誌語誣認誡誓誤 7 駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉 A A 說誥誨誘誑誚誧豪貍貌賓賑賒赫趙 鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑 B 趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛 B 劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶 C 鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨 C 壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍 D 鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅 D 憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿 E 韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴 E 擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘 F 鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜 F 樹橄橢橡橋橇樵機橈歙歷氅濂澱澡 RAiO TECHNOLOGY INC. 82/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 BF 0 1 2 3 4 5 6 7 8 9 A B C D E F C2 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈 4 駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢 5 燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍 5 嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷 6 瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎 6 曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾 7 穆穌穋窺篙簑築篤篛篡篩篦糕糖縊 7 瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘 A A 縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳 癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪 B 膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞 B 簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶 C 螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫 C 臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠 D 諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓 D 覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀 E 賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選 E 轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰 F 遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚 F 鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦 C0 0 1 2 3 4 5 6 7 8 9 A B C D E F C3 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓 4 鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃 5 霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛 5 鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳 6 餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒 6 嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥 7 鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇 7 櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸 A A 嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸 獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿 B 幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦 B 簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩 C 擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾 C 藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁 D 檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀 D 譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺 E 濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵 E 蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖 F 牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬 F 鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類 C1 0 1 2 3 4 5 6 7 8 9 A B C D E F C4 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷 4 願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪 5 簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫 5 鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶 6 總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰 6 巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢 7 聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪 7 癥礦礪礬礫竇競籌籃籍糯糰辮繽繼 A A 薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒 纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕 B 蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講 B 襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴 C 謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋 C 釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍 D 蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞 D 鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼 E 醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊 E 懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓 F 闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁 F 籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴 RAiO TECHNOLOGY INC. 83/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 C5 0 1 2 3 4 5 6 7 8 9 A B C D E F C8 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫 4 5 闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭 5 6 鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉 6 7 孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬 7 A A 禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡 B 酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱 B C 鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐 C D 瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣 D E 鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟 E F 黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒 F C6 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺 5 鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰 6 顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅 7 鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲 A B C D ヽヾゝゞ〃□ E □□□ー ぁあぃいぅうぇえぉ F おかがきぎくぐけげこごさざしじ C7 0 1 2 3 4 5 6 7 8 9 A B C D E F 4 すずせぜそぞただちぢっつづてでと 5 どなにぬねのはばぱひびぴふぶぷへ 6 べぺほぼぽまみむめもゃやゅゆょよ 7 らりるれろゎわゐゑをんァアィイ A ゥウェエォオカガキギクグケゲコ B ゴサザシジスズセゼソゾタダチヂッ C ツヅテデトドナニヌネノハバパヒビ D ピフブプヘベペホボポマミムメモャ E ヤュユョヨラリルレロヮワヰヱヲン F ヴヵヶ RAiO TECHNOLOGY INC. 84/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 附錄 E. 字型使用說明 RA8816 內建 256KByte 的字型 ROM,儲存著中文字型、數字符號、英、日、歐、拉丁文等字型,因為中文 字型的不同,RA8816 提供兩種型號: 1. RA8816G-T : 代表內建的中文字型為繁體字 2. RA8816G-S : 代表內建的中文字型為簡體字 因此在開發及採購時必須先確定使用的 RA8816 型號。而 RA8816 內建的字型大小共有三種: 1. 中文字型: 所佔的顯示區域大小為 16x16,實際字體大小為 15x15,如圖 E-1 的(1),所支援的字收 錄在 RA8816 應用手冊 “附錄 D. 字型與字碼表” ,其實由字碼表中可以看出所包含的字不只中文, 還有包括一些符號、數字等,而這些字型在 RA8816G-T 與 RA8816G-S 是不一樣的,RA8816G-T 字型的對映碼是 BIG5 碼,RA8816G-S 字型的對映碼是 BG 碼,如使用 RA8816G-T,當 MCU 在設 定好坐標位置後送出 Data “B7h”及”E7h”,就會顯示” 瑞”的繁體中文字型,使用 RA8816G-S,當 MCU 在設定好坐標位置後送出 Data “C6h” 及 ”CCh”,就會顯示” 铺” 的簡體中文字型。 (1)16x16 Pixel (2) 8x16 Pixel (3)8x8 Pixel 圖 E-1 : 一般顯示字型 2. 大 ASCII 字型: 所佔的顯示區域大小為 8x16,實際字體大小區域一般顯示字型為 6x13,如圖 E-1 的(2),粗體字顯示字型為 7x13,如圖 E-2 的(2)。大 ASCII 字型共有 1024 個字(請參考 Table-1 與 Table-2),其中包括一些符號、數字、英、日、歐文及拉丁文,大 ASCII 字型在 RA8816G-T 與 RA8816G-S 也是一樣的。只要 RA8816 設定成大 ASCII 字型模式(REG[03h]的 MD[1:0]=10),由 MCU 送出 Table-1 或 Table-2 的字型碼就會顯示出所對映的 8x16 字型,如 MCU 在設定好坐標位置 後送出 Data “41h”,就會顯示”A” 的大 ASCII 字型。選擇大 ASCII 表由暫存器[03h]MWMR 的 Bi4 ASCS 決定,ASCS 為 0 選擇 ASCII 表 1(Table1),為 1 選擇 ASCII 表 2(Table2) 。 RAiO TECHNOLOGY INC. 85/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 3. 小 ASCII 字型: 所佔的顯示區域大小為 8x8,實際字體大小區域一般顯示字型為 5x7,如圖 E-1 的 (3),粗體字顯示字型為 6x7,如圖 E-2 的 (3)。小 ASCII 字型共有 512 個字(請參考 Table-0),其中 包括一些符號、數字、英、日、歐文等,小 ASCII 字型在 RA8816G-T 與 RA8816G-S 是一樣的。 只要 RA8816 設定成小 ASCII 字型模式(REG[03h]的 MD[1:0]=01),由 MCU 送出 Table-0 的字型碼 就會顯示出所對映的 8x8 字型,如 MCU 在設定好坐標位置後送出 Data “50h”,就會顯示 ”P” 的小 ASCII 字型。 (1)16x16 Pixel (2) 8x16 Pixel (3)8x8 Pixel 圖 E-1 : 粗體字顯示字型 值得注意的是 Table E-1~3 這些字型所對映的碼是由本公司自行規劃的,雖然包括一些符號、數字、英、日、 歐文及拉丁文,但所對映的字型碼與英、日、歐文及拉丁文等作業系統所定義的標準碼無關,因此 RA8816 不論透過 MCU 送出的是哪一種文字碼或是哪一國的標準碼,在大、小 ASCII 模式下,LCD 將只顯示出由 RA8816 接收且對映到 Table E-1~3 的字型。而如果不同的作業系統應用上您想顯示的字是在 Table E-1~3 內, 但是作業系統產生的字型碼與 Table E-1~3 上的不同,那麼就必須在程式上自行建立一轉碼表,例如您想顯示 大 ASCII 字型 ”Ũ”,在作業系統中產生的字型碼卻是”A5h”,那麼在程式上的轉碼表就是要由”A5h” 對映 到 ”C8h”,唯有由 MCU 送出 ”68” 才可以讓 RA8816 顯示出 ”Ũ”,又如您想顯示大 ASCII 字型 ”£”,在作業 系統中產生的字型碼卻是 ”9Ch”,那麼在程式上的轉碼表就是要由 ”98h” 對映到”9Ch”,因為唯有由 MCU 送 出 ”9C” 才可以讓 RA8816 顯示出 ” £”。 RAiO TECHNOLOGY INC. 86/87 www.raio.com.tw RA8816 繪圖 /文字 LCD 控制驅動器應用手冊 Preliminary Version 0.9 0 1 2 3 4 5 6 7 8 9 A B CD E F 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F Table E-1: 小 ASCII 表 RAiO TECHNOLOGY INC. 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 A A B B C C D D E E F F Table E-2: 大 ASCII 表 87/87 Table E-3: 大 ASCII 表 www.raio.com.tw