彭勝敏
摘 要:文章以19264點(diǎn)陣液晶顯示屏為例,介紹了PIC單片機(jī)與19264點(diǎn)陣顯示屏的硬件接口電路,并給出了使用C30編寫的底層驅(qū)動(dòng)接口程序和部分應(yīng)用層代碼,所給出的接口設(shè)計(jì)方法對(duì)相關(guān)點(diǎn)陣屏的使用有一定的借鑒意義。
關(guān)鍵詞:19264;單片機(jī);接口技術(shù)
前言
單片機(jī)應(yīng)用系統(tǒng)中,顯示模塊有數(shù)碼管、1602、12864、19264點(diǎn)陣屏,這些都是最常見s的、可用于電子開發(fā)的顯示屏。其中19264點(diǎn)陣顯示屏功耗低,體積小、顯示信息量大,除了能顯示字母和數(shù)字外,還能顯示圖片,被廣泛的應(yīng)用于工控領(lǐng)域。文章以19264點(diǎn)陣屏為例,介紹其與PIC單片機(jī)的接口技術(shù)。對(duì)于不帶字庫(kù)的液晶顯示屏應(yīng)用有一定的借鑒作用。
1 硬件接口設(shè)計(jì)
19264液晶顯示屏生產(chǎn)廠家比較多,但是根據(jù)通訊方法有SPI,II2C、并行口這幾種方式,我們選取并行口YXD-19264顯示模塊為例,介紹硬件接口電路設(shè)計(jì)。YXD-19264顯示模塊是一種圖形點(diǎn)陣液晶顯示模塊,它主要由行驅(qū)動(dòng)器、列驅(qū)動(dòng)器及192×64全點(diǎn)陣液晶顯示器組成。可完成線、圓、BMP圖片等圖形顯示,也可以顯示12×4個(gè)(16×16點(diǎn)陣)漢字,工作溫度為-10℃~+55℃,存儲(chǔ)溫度存儲(chǔ)溫度為-20℃~+66℃,工作電流約1.3mA(無(wú)背光4,無(wú)負(fù)壓)4m(無(wú)背光,帶負(fù)壓)底背光電流小于200mA(5.6Ω限流電阻)。
YXD-19264模塊接口電路簡(jiǎn)單,對(duì)外只有20個(gè)管腳。管腳定義如表1所示。
單片機(jī)選用PIC通用系列16 位MCUPIC24FJ256GB110,它有16位數(shù)據(jù)寬度,24位指令寬度,片內(nèi)閃存256KB,有多達(dá)85個(gè)可編程數(shù)字I/O,工作40MIPS,工作電壓+3.6V-+5V,外圍資源非常豐富,非常適用于工控領(lǐng)域。
按照YXD-19264的管腳定義和PIC24FJ256GB110芯片資源,設(shè)計(jì)的硬件連接如下:
(1)LCD的DB0-DB78位并行數(shù)據(jù)口接RB0-RB7;(2)LCD的R/W接RB8;(3)LCD的D/I接RB9;(4)LCD的/RST接RB10;(5)LCD的E接RB11;(6)LCD的CS1,CS2分別接RB12,RB13。
2 底層驅(qū)動(dòng)程序接口設(shè)計(jì)
我們采用MPLAB C30 C編譯器,此編譯器支持標(biāo)準(zhǔn)C語(yǔ)言編寫程序的格式。編寫好的程序可讀性好,便于移植,易于維護(hù),可靠性高。以下所有程序都是在此平臺(tái)下編寫。
寫數(shù)據(jù)和寫命令:YXD19264點(diǎn)陣屏模塊內(nèi)部有一個(gè)驅(qū)動(dòng)芯片,為了這個(gè)顯示屏按照我們的要求正常工作,就必須按照其數(shù)據(jù)手冊(cè)要求發(fā)送命令和數(shù)據(jù)。命令可以控制顯示屏開關(guān),設(shè)置起始行,設(shè)置頁(yè)地址、設(shè)置Y地址,讀取狀態(tài),發(fā)送顯示數(shù)據(jù)等內(nèi)容。命令和數(shù)據(jù)操作時(shí)必須按照時(shí)序圖嚴(yán)格操作。
寫操作時(shí)序(圖1):
圖1
void Write_LCD(BYTE screen, BYTE C_0R_D, BYTE load){
LCD_Check_Busy(screen);if (C_0R_D == CMD)SET_LCD_CMD;elseSET_LCD_DATA;
SET_LCD_WRITE;SET_LCD_E;LCD_DATA_TRIS = OUTPUT_DATA;Nop();
LCD_DATA_O = load;DelayUs(4);CLEAR_LCD_E;};
讀取操作時(shí)序(圖2):
圖2
void BYTE Read_LCD(BYTE screen){
BYTE data=0;LCD_Check_Busy(screen);SET_LCD_DATA;LCD_DATA_TRIS=1;Nop();
SET_LCD_READ;SET_LCD_E;Nop();Nop();Nop();Nop();data = LCD_DATA_I;
CLEAR_LCD_E;SET_LCD_WRITE;LCD_Check_Busy(screen);SET_LCD_DATA;
LCD_DATA_TRIS= INPUT_DATA;Nop();SET_LCD_READ;SET_LCD_E;Nop();Nop();Nop();
data=LCD_DATA_I;CLEAR_LCD_E;SET_LCD_WRITE;return data;};
3 應(yīng)用程序程序設(shè)計(jì)
3.1 初始化程序
顯示模塊在使用前都必須按照說明書嚴(yán)格初始化,初始化液晶顯示屏有重要的兩個(gè)步驟:第一步就是復(fù)位,復(fù)位時(shí)間一定要按照數(shù)據(jù)手冊(cè)的時(shí)間完成,如果復(fù)位不完全,可能造成顯示有亂碼或者不顯示的現(xiàn)象。第二步就是按照數(shù)據(jù)手冊(cè)以寫命令的方式,按步驟把控制命令發(fā)送給液晶顯示屏。完成以上兩個(gè)步驟液晶顯示屏就初始化完成,可以正常工作。其示例代碼如下:
void LCD_Init(void){
LCD_RST = 0;DelayUs(200);LCD_RST = 1;DelayUs(200);Write_LCD(LEFT, CMD, DISPLAY_OFF); //關(guān)顯示
Write_LCD(MIDDLE, CMD, DISPLAY_OFF);Write_LCD(RIGHT, CMD, DISPLAY_OFF);ClearScreen();
Set_Start_Line_L(0); Set_Start_Line_M(0); Set_Start_Line_R(0); Write_LCD(LEFT, CMD, DISPLAY_ON);
Write_LCD(MIDDLE, CMD, DISPLAY_ON); Write_LCD(RIGHT, CMD, DISPLAY_ON); }
3.2 清屏
在界面換頁(yè)時(shí),我們一般都需要清楚屏幕上的內(nèi)容,19264分左、中、右三個(gè)屏組成,這三個(gè)屏幕的操作我們抽象成一個(gè)函數(shù)完成。其示例代碼如下:
void ClearScreen(void){
BYTE pages = 0;BYTE i = 0;for (pages=0; pages<8; pages++){Set_Page_L(pages);Set_Page_M(pages);
Set_Page_R(pages);for (i=0; i<64; i++){Set_Col_Addr_L(i);Set_Col_Addr_M(i);Set_Col_Addr_R(i);
Write_LCD(LEFT, DATA, 0x0);Write_LCD(MIDDLE, DATA, 0x0);Write_LCD(RIGHT, DATA, 0x0);}}}
3.3 字庫(kù)的取模
由于我們的屏沒有帶字庫(kù),我們?cè)诰帉懗绦驎r(shí),編譯器只能得到了漢字的內(nèi)碼,還僅是一組數(shù)字,那又如何在屏幕上去顯示呢?這就涉及到文字的字模,字模雖然也是一組數(shù)字,但它的意義卻與數(shù)字的意義有了根本的變化,它是用數(shù)字的各位信息來(lái)記載英文或漢字的形狀,如英文的'A'在字模的記載方式如圖3所示:
字母、數(shù)字、漢字的字模我們通過專業(yè)的取模軟件獲得,取模軟件比較多,但是在使用時(shí),必須都必須注意設(shè)置字體大小、取模方式(是橫向取模、還是縱向取模),生成數(shù)據(jù)格式設(shè)定(是匯編格式,還是C格式),如果所要用的字母、漢字比較多,我們可以采用批量導(dǎo)入。
4 結(jié)束語(yǔ)
點(diǎn)陣液晶顯示屏在工控領(lǐng)域有廣泛的應(yīng)用,文章以YXD19264點(diǎn)陣屏為例,給出了與PIC單片機(jī)的接口電路和底層驅(qū)動(dòng)程序,并且在此基礎(chǔ)之上編寫了初始化程序、清屏程序、以及應(yīng)用程序中簡(jiǎn)單取模方法,所有程序都采用C語(yǔ)言編寫,對(duì)各類點(diǎn)陣顯示屏的使用有一定的借鑒意義。
參考文獻(xiàn)
[1]江世明.12864液晶顯示模塊與51單片機(jī)接口技術(shù)[J].電子世界,2005.
[2]段翠萍,庫(kù)少平,李捷.12864液晶顯示程序設(shè)計(jì)[J].電氣與電子工程,2006.
[3]辛阿阿,厲善亨.基于12864液晶模塊的動(dòng)態(tài)波形顯示實(shí)現(xiàn)方法[J].儀器儀表用戶,2010.