基于FPGA的液晶顯示接口設計
引言
在小規(guī)模圖形液晶顯示模塊上使用液晶顯示驅(qū)動控制器組成液晶顯示驅(qū)動和控制系統(tǒng),是當今低成本,低功耗,高集成化設計的最好選擇,sed1520是當前最常用的一種液晶顯示驅(qū)動控制器,這類圖形液晶顯示模塊的規(guī)模為32行,本文用到的液晶模塊cm12232即是內(nèi)置sed1520的液晶顯示模塊,該模塊的驅(qū)動控制系統(tǒng)由兩片sed1520組成。
fpga即現(xiàn)場可編程門陣列器件,這是一種超大規(guī)模集成電路,具有在電路可重配置的能力(in circuit reconfigurable,icr)。設計者設計的邏輯可在編譯、適配后變成網(wǎng)絡表下載到fpga芯片上之后,fpga即可執(zhí)行設計的邏輯功能。因此,fpga在芯片控制、接口邏輯設計等各個方面的應用越來越廣泛。
系統(tǒng)硬件設計
本方案采用的fpga為alter公司的acex1k30芯片,它可提供系統(tǒng)的時鐘及讀寫控制,acex系列的fpga由邏輯陣列塊lab(logic
array block)、嵌入式陣列塊eab(embedded array block)、快速互聯(lián)以及io單元構(gòu)成,每個邏輯陣列塊包含8個邏輯單元le(logic
element)和一個局部互聯(lián)[1]。每個邏輯單元則由一個4輸入查找表(lut)、一個可編程觸發(fā)器、快速進位鏈、級連鏈組成,多個lab和多個eab則可通過快速通道互相連接。eab是acex系列器件在結(jié)構(gòu)設計上的一個重要部件,他是輸入端口和輸出端口都帶有觸發(fā)器的一種靈活的ram塊,其主要功能是實現(xiàn)一些規(guī)模不太大的fifo、rom、ram和雙端口ram等。在本液晶顯示接口電路中,eab主要用宏功能模塊實現(xiàn)片上rom。它通過調(diào)用fpga上的eab資源來實現(xiàn)漢字的顯示和字符的存儲,并根據(jù)控制信號產(chǎn)生的地址值從rom中讀取字符值,然后送lcd顯示器進行顯示。
由于所用的圖形點陣液晶塊內(nèi)置有sed1520控制器,所以,其電路特性實際上就是sed1520的電路特性。sed1520的主要特性如下[2]:
具有液晶顯示行驅(qū)動器,具有16路行驅(qū)動輸出,并可級聯(lián)實現(xiàn)32行驅(qū)動。
具有液晶顯示列驅(qū)動器,共有61路列驅(qū)動輸出。
內(nèi)置時序發(fā)生器,其占空比可設置為1/16和1/32兩種。
內(nèi)藏顯示存儲器,顯示存儲器內(nèi)的數(shù)據(jù)可直接顯示,"1"為顯示,"0"為不顯示。
接口總線時序可適配8080系列或m6800系列,并可直接與計算機接口。
操作簡單,有13條控制指令。
采用cmos工藝,可在電壓低至2.4-7.0v時正常工作,功耗僅30μw。
本設計所用的字符液晶模塊cm12232由兩塊sed1520級連驅(qū)動,其中一個工作在主工作方式下,另一個工作在從方式下,主工作方式sed1520負責上半屏16行的驅(qū)動和左半屏的61列驅(qū)動,從工作方式的sed1520則負責下半屏16行的驅(qū)動和右半屏的61列驅(qū)動,使能信號e1、e2用來區(qū)分具體控制的是那一片sed1520,其系統(tǒng)的硬件連接圖如圖1所示。
由圖1可見,該系統(tǒng)的硬件部分連接十分簡單,其中fpga部分沒畫出,而液晶與fpga的接口則可直接以網(wǎng)表的形式給出,將它們直接與fpga的普通i/o引腳相連即可。
系統(tǒng)的軟件接口實現(xiàn)
具體實現(xiàn)的重點是如何從存放有字符的rom塊中讀出數(shù)據(jù),并按照液晶的時序正確的寫入,在介紹具體實現(xiàn)方法前,首先要熟悉sed1520的指令。
sed1520的控制指令表
sed1520的幾種主要的控制指令格式如下:
(1)復位格式(reset)
該指令用于實現(xiàn)sed1520的軟件復位。該指令執(zhí)行時,顯示起始行寄存器清零,接著列地址指針清零,之后頁地址寄存器置為"3"。
(2)休閑狀態(tài)設置(statis drive on/off)
該指令是休閑狀態(tài)的軟件開關,當s=1時,sed1520進入休閑狀態(tài);當s=0時,sed1520將中止或退出休閑狀態(tài)。
(3)占空比設置(slect duty)
該指令用于設置sed1520的占空比,du=0時為1/16占空比,du為1時為1/32占空比。
(4)adc選擇指令(selet adc)
該指令用于設置顯示存儲器中單元的地址所對應的顯示驅(qū)動輸出的順序。a=0時,順時針顯示;a=1時,逆時針顯示。
(5)顯示起始行設置(display start line)
該指令可用于設置顯示屏上第一行(行驅(qū)動輸出como所對應的顯示行)所對應的顯示存儲器的行號,由此行順序下延可得到對應顯示屏上的顯示效果,l=0-31(1fh),對應表示顯示存儲器的第1-32行。
(6)顯示開/關設置(display on/off)
該指令控制著顯示驅(qū)動器的輸出。當di=0時,顯示關,當di=1時,顯示開。
(7)頁面顯示存儲的設置
sed1520將顯示存儲器分為4個頁面(0-3頁)。每個頁面都有80個字節(jié)。頁面管理可由2位頁地址寄存器控制,該指令就是設置頁地址寄存器的內(nèi)容,以選擇相應的顯示寄存器的頁面。p=0-3,對應代表0-3頁。
(8)列地址設置(set column(segment)address)
sed1520的顯示存儲器的每個頁面上都有80個字節(jié),每個字節(jié)中的8位數(shù)據(jù)對應著顯示屏上同一列的8點行,列地址指針就是管理這80個字節(jié)單元的,列地址指針是一個7位加一計數(shù)器,由它和頁地址寄存器組合,可唯一指定顯示存儲器的某一個單元,列地址指針在計算機對顯示存儲器的每次操后都將自動加一。該指令就是設置列地址指針內(nèi)容的。當cy=0-4fh,分別對應于1-80單元的地址。
頂層設計大批量
本設計具體實現(xiàn)的頂層設計原理圖如圖2所示。
圖2中l(wèi)pm_rom模塊是利用fpga的宏功能模塊產(chǎn)生的片上rom塊[3],用以存放要顯示的字符數(shù)據(jù)。ctrl模塊則為控制從rom中取出數(shù)據(jù)后液晶上顯示的核心控制模塊,其功能包括控制數(shù)據(jù)的讀寫時序、液晶屏的分屏顯示控制、分頁顯示控制等。
控制模塊程序代碼
ctrl模塊的程序核心代碼如下:
architecture behavioral of ctrl is
signal divcnt:std_logic_vector(11 downto 0);--系數(shù)計數(shù)
signal data:std_logic_vecdor(9 downto 0);--地址輸出
signal clk1,clk2,a01,cs11,cs21,flag,csflag:std_logic;
data<=divcnt(11 downto 2);--最高10位為地址
process3(clk2)
begin
if clk2'event and clk2=`1'then case conv_integer (data)is
when 0|2|4|6|8|10|12|13|138|139|264|265|390|391=>a01<=`0';cs11<=`0';cs21<=`1';
when 1|3|5|7|9|11|75|76|201|202|327|328|453|454=>a01<=`0';cs11<=`1';cs21<=`0';
when 14 to 74=>a01<=`1';cs11<=`0';cs21<=`1';
when 140 to 200=>a01<=`1';cs11<=`0';cs21<=1';
when 266 to 326=>a01<=`1';cs11<=`0';cs21<=`1';
when 392 to 452=>a01<=`1';cs11<=`0';cs21<=`1';
when 77 to 137=>a01<=`1';cs11<=`1';cs21<=`0';
when 203 to 263=>a01<=`1';cs11>=`1';cs21<=`0';
when 329 to 389=>a01<=`1';cs11<=`1';cs21<=`0';
when 455 to 515=>a01<=`1';cs11<=`1';cs21<=`0';
when others=>a01<=`0';cs11<=`1';cs21<=`1';
end case;
end if;
end process3;
a0<=a01;
cs1<=cs11 or csflag;
cs2<=cs21 or csflag;
ad<=data;
end behavioral;
其中的關鍵程序為process3;在該過程中,a01負責該數(shù)據(jù)寫到液晶數(shù)據(jù)線上顯示還是寫到液晶的控制寄存器進行控制,a01為0時為寫命令,a01為1時為寫數(shù)據(jù)。
程序中,rom地址的前13個單元均為寫命令,根據(jù)sed1520的控制命令字,rom表中的0、2、4、6、8、10單元依次是e2、a4、a9、a0、c0、af,主要用于實現(xiàn)對csi主工作的sed1520復位、退出休閑狀態(tài)、設置占空比為1/32、順時針顯示數(shù)據(jù)ram中的內(nèi)容、顯示起始對應顯示存儲器的0行、顯示開這一系列的初始化工作;而1,3,5,7,9,11單元則寫入到cs2(即從工作的sed1520)實現(xiàn)其初始化[4]。第13單元放的是b8(即頁地址設置為0),從14-74單元,a01=1為寫數(shù)據(jù),此時片選cs1有效,rom表中連續(xù)放入"武漢理工"4個漢字的上半部分字模(本方案共顯示16個漢字"武漢理工大學自動化學院重點實驗室"分兩行,每行8個字顯示);之后,75、76單元為寫命令,rom中的數(shù)據(jù)為b8,00表示設置顯示頁為0頁,該頁的列地址從0開始[5]。從77-137單元地址向cs2(即從動工作方式的sed1520)寫數(shù)據(jù)即"大學自動"的前半部分字模,接下來的138、139單元為寫命令,rom中的數(shù)據(jù)為b9,00即表示頁地址設置為1列,地址為0,140-200單元放入"武漢理工"的下半部分字模,201、202單元為寫命令,rom中的數(shù)據(jù)為b9、00表示頁地址設置為1列,地址為0,203-263中為"大學自動"的下半部分字模,之后,8個字的寫入過程與前8個字的寫入過程相同,寫命令單元用于控制要寫的頁。
結(jié)束語
本方案以fpga為控制核心實現(xiàn)了對字符點陣液晶的控制,該方案硬件電路簡單,軟件程序簡潔,對液晶的控制簡單而且穩(wěn)定,且可靈活改動,若要改變液晶顯示的漢字,只需改變rom表中的字模即可,實踐證明,該設計是對液晶應用的一種行之有效的方法。
評論