MSP430與液晶顯示器的串行接口方案論文
MSP430與液晶顯示器的串行接口方案論文
串行接口簡(jiǎn)稱串口,也稱串行通信接口或串行通訊接口(通常指COM接口),是采用串行通信方式的擴(kuò)展接口。以下是學(xué)習(xí)啦小編今天為大家精心準(zhǔn)備的:MSP430與液晶顯示器的串行接口方案修改論文。內(nèi)容僅供參考,歡迎閱讀!
MSP430與液晶顯示器的串行接口方案全文如下:
摘要:針對(duì)利用微控制器(MCU)控制液晶顯示驅(qū)動(dòng)器(LCD)的應(yīng)用開發(fā)實(shí)例,提出一種采用串行方式來設(shè)計(jì)微控制器和液晶顯示驅(qū)動(dòng)器之間接口的方案。該方案是在現(xiàn)有點(diǎn)陣式液晶顯示屏上附加一個(gè)MCU,通過程序設(shè)計(jì)利用MCU的I/O端口去模擬I2C串行總線,從而實(shí)現(xiàn)利用MCU去控制LCD的目的;同時(shí)介紹一種在圖符液晶顯示系統(tǒng)中顯示動(dòng)態(tài)曲線的技術(shù)和實(shí)現(xiàn)方法。
關(guān)鍵詞:液晶顯示驅(qū)動(dòng)器 I2C串行總線 MSP430
1 概述
點(diǎn)陣式液晶與外部的硬件接口簡(jiǎn)單,能以點(diǎn)陣或圖形方式顯示出各種信息,因此在電子設(shè)計(jì)中得到廣泛應(yīng)用。但是,對(duì)它的接口設(shè)計(jì)必須遵循一定的硬件和時(shí)序規(guī)范,不同的液晶顯示驅(qū)動(dòng)器,可能需要采用不同的接口方式和控制指令才能夠?qū)崿F(xiàn)所需信息的顯示。某些液晶顯示驅(qū)動(dòng)器與外部的接口必須采用串行方式,而其串行接口往往不是標(biāo)準(zhǔn)的串行接口,這就為這類液晶顯示驅(qū)動(dòng)器的設(shè)計(jì)帶來了困難。
針對(duì)上述問題,本文提出一種利用微控制器(MCU)的I/O端口,通過軟件設(shè)計(jì)模擬與所使用的液晶顯示驅(qū)動(dòng)器規(guī)范相符的串行總線的設(shè)計(jì)思想,實(shí)現(xiàn)MCU對(duì)液晶顯示驅(qū)動(dòng)器的控制,從而建立起一套不但可以顯示各種字符,而且可以動(dòng)態(tài)顯示曲線的游人顯示系統(tǒng)。
2 系統(tǒng)設(shè)計(jì)
本文所建立的液晶顯示系統(tǒng),選用美國(guó)德州儀器(TI)公司的MSP430F149微控制器來控制液晶顯示驅(qū)動(dòng)器uPD16682A,從而實(shí)現(xiàn)各種信息的顯示。
2.1 MSP430F14X微控制器簡(jiǎn)介
TI公司的MSP430F14X微控制器與其它MSP430系列微控制器相同,均甚至一個(gè)真正的正交16位RISC CPU內(nèi)核:具有16個(gè)可單周期全尋址的16位寄存器,僅27條的精簡(jiǎn)指令集以及7種均采用雙重取數(shù)據(jù)技術(shù)(DDFT)的一致性尋址方式。DDFT技術(shù)利用每個(gè)時(shí)鐘脈沖對(duì)存儲(chǔ)器進(jìn)行兩次數(shù)據(jù)存取操作。從而不再需要復(fù)雜的時(shí)鐘乘法和指令流水線方案。
MSP430F14X系列MCU片內(nèi)不但包括60多KB的Flash、2KB的RAM、一個(gè)看門狗時(shí)鐘、12位16通道的A/D轉(zhuǎn)換器、定時(shí)器、高精度比較器、PWM以及高速的USART控制器等常用資源,還在某些型號(hào)中集成了LCD控制器。其I/O資源豐富,且每個(gè)輸入/輸出(I/O)引腳上都提供了矢量中斷功能,每個(gè)外圍器件都支持復(fù)雜的事件驅(qū)動(dòng)型操作。同其它微控制器相,帶片內(nèi)Flash的微控制器可將系統(tǒng)功耗降低5倍,并且減小了硬件線路板空間,與現(xiàn)代程序設(shè)計(jì)技術(shù)(如計(jì)算分支以及高級(jí)語(yǔ)言(如C語(yǔ)言)結(jié)合使用,使得MSP430的體系結(jié)構(gòu)更為高效。
MSP430F14X可采用一個(gè)集成的數(shù)字控制振蕩器(DCO)或外部高速晶振對(duì)系統(tǒng)進(jìn)行定時(shí),其工作電壓范圍為1.8~3.6V,并可根據(jù)需要提供高達(dá)8MIPS(每秒百萬條指令)的操作性能,對(duì)于對(duì)成本非常敏感的應(yīng)用,該系列器件能夠采用DCO來工作而無需外部晶振,快速的指令執(zhí)行周期配之以低于6ms的等機(jī)啟動(dòng)時(shí)間,使得系統(tǒng)總功耗比競(jìng)爭(zhēng)器件低了10倍,大大延長(zhǎng)了諸如公用設(shè)施計(jì)量、便攜式儀表測(cè)試和智能檢測(cè)等工程應(yīng)用系統(tǒng)中的電池使用壽命。
MSP430F14X系列微控制器允許用戶使用標(biāo)準(zhǔn)C語(yǔ)言進(jìn)行程序編程,并提供高效的C語(yǔ)言編譯環(huán)境;配之以支持對(duì)具有仿零點(diǎn)功能的快閃產(chǎn)品進(jìn)行豐取的快速實(shí)時(shí)仿真工具FET及優(yōu)良的調(diào)試環(huán)境,使MSP430F14X系列微控制器在工程設(shè)計(jì)中得到了廣泛應(yīng)用。
2.2 液晶顯示驅(qū)動(dòng)器uPD16682A簡(jiǎn)介
uPD16682是NEC公司2001年初推出的液晶顯示驅(qū)動(dòng)器,該產(chǎn)品內(nèi)置大容量顯示RAM內(nèi)存,并能夠提供132×65點(diǎn)陣的全點(diǎn)顯示,特別適合用于16×16或12×12點(diǎn)陣中、日文字符顯示。該產(chǎn)品采用+3V單電源供電,內(nèi)置升壓電路并具3倍壓和4倍壓兩種工作模式,支持8位串行或并行數(shù)據(jù)的輸入,內(nèi)置時(shí)鐘發(fā)生電路和程序可編程控制的偏壓電路。
(1)uPD16682A的顯示內(nèi)存
uPD16682A的顯示RAM內(nèi)存保存著被顯示內(nèi)容的點(diǎn)陣信息。顯示RAM的每一位對(duì)應(yīng)顯示屏上的一個(gè)點(diǎn),總共可以存儲(chǔ)132×65點(diǎn)的信息;通過選擇對(duì)應(yīng)的RAM頁(yè)地址和列地址,微控制器可以訪問其中的任何一個(gè)點(diǎn)。微控制器對(duì)uPD16682A的顯示RAM的讀寫操作通過uPD16682A的I/O緩沖器進(jìn)行(串行模式下uPD16682A不支持讀操作),并且該讀操作和液晶顯示屏驅(qū)動(dòng)信號(hào)的讀取操作是獨(dú)立的,因此,當(dāng)顯示內(nèi)存的數(shù)據(jù)同時(shí)被雙方訪問時(shí),不會(huì)出現(xiàn)顯示信息的抖動(dòng)等現(xiàn)象。從微控制器讀入的顯示數(shù)據(jù)按照D7~D0的數(shù)據(jù)位順序與液晶顯示屏的行順序一一對(duì)應(yīng),其顯示關(guān)系對(duì)應(yīng)圖如圖1所示。如果在系統(tǒng)中使用了多片uPD16682A,則在片間進(jìn)行顯示數(shù)據(jù)的轉(zhuǎn)移和顯示一整幅圖案時(shí)用戶就會(huì)有很大的自由度。
(2)uPD16682A與微控制器的接口
uPD16682A可以通過8位雙向數(shù)據(jù)總線(并行模式下)或者通過串行總線接收來自微控制器的數(shù)據(jù),這兩種模式可以通過將其P/S引腳置高或置低進(jìn)行選擇。當(dāng)工作于并行輸入模式下時(shí),uPD16682A的片選信號(hào)端、讀寫信號(hào)端以及控制信號(hào)端(A0)和數(shù)據(jù)線(D0~D7)都應(yīng)該同微控制器的對(duì)應(yīng)端口進(jìn)行連接。此時(shí)uPD16682A內(nèi)部顯示RAM的數(shù)據(jù)以刷新液晶顯示的內(nèi)容,也可以通過數(shù)據(jù)總線讀取顯示內(nèi)存的內(nèi)容。當(dāng)工作于串行模式下,uPD16682A僅使用數(shù)據(jù)線D6輸入串行數(shù)據(jù),即串行總線的數(shù)據(jù)輸入端(SI),數(shù)據(jù)線D7被用作時(shí)鐘輸入(SCL)端,并將片將信號(hào)和控制信號(hào)(A0)同微控制器總線進(jìn)行連接,置高或接地讀寫信號(hào)。此時(shí)uPD16682A內(nèi)部顯示RAM的數(shù)據(jù)訪問是單向的,即微控制器只可以向顯示RAM寫數(shù)據(jù)以刷新液晶顯示的內(nèi)容,但不可以讀取顯示RAM的內(nèi)容。
(3)uPD16682A的串行接口
uPD16682A的串行接口是TTL電平,不是標(biāo)準(zhǔn)的串行接口,對(duì)串行數(shù)據(jù)的接收沒有具體波特率、數(shù)據(jù)接口協(xié)議的要求,內(nèi)部包括1個(gè)8位的移位寄存器和1個(gè)3位的計(jì)數(shù)器。UPD16682A在每個(gè)串行時(shí)鐘的上升沿將串行數(shù)據(jù)捕獲到其內(nèi)部的移位寄存器,同時(shí)計(jì)數(shù)器自動(dòng)加1。當(dāng)串行數(shù)據(jù)按照D7~D0的順序被依次捕獲到后,在第8個(gè)時(shí)鐘周期的上升沿,已接收到內(nèi)部的8位串行數(shù)據(jù)被轉(zhuǎn)換成一個(gè)8位的并行數(shù)據(jù);同時(shí),uPD16682A讀取控制信號(hào)線A0上的電平,并且根據(jù)A0信號(hào)來判斷當(dāng)前被寫入的8位串行數(shù)據(jù)是一個(gè)顯示數(shù)據(jù)還是一個(gè)控制命令。對(duì)控制信號(hào)線A0的讀操作由uPD16682A的內(nèi)部定時(shí)器來控制,在每隔8個(gè)串行時(shí)鐘之后自動(dòng)操作一次。
(4)uPD16682A的控制指令
uPD16682A通過讀取其控制信號(hào)線A0的電平來判斷當(dāng)前從片外設(shè)備接收的數(shù)據(jù)是一個(gè)顯示數(shù)據(jù)還是控制命令。當(dāng)A0電平為高時(shí),認(rèn)為接收到的是一個(gè)顯示數(shù)據(jù);而當(dāng)A0電平為低時(shí),則認(rèn)為接收到的是一個(gè)顯示控制命令。利用uPD16682A的控制命令可以實(shí)現(xiàn)對(duì)uPD16682A大多數(shù)操作的控制。
2.3 uPD16682A與MSP430F149的硬件接口設(shè)計(jì)
圖2是系統(tǒng)uPD16682A與MSP430F149的硬件接口示意圖。圖中系統(tǒng)采用4MHz晶振,并由系統(tǒng)時(shí)鐘分頻得到其它內(nèi)外設(shè)所用的時(shí)鐘。MSP430F149和uPD16682A相連接的I/O口被定義為輸出,MSP430F149利用片內(nèi)12位A/D采集傳感器變換后的電壓信號(hào)。經(jīng)程序處理后,通過上述I/O口傳送到uPD16682A進(jìn)行信息顯示。由于驅(qū)動(dòng)液晶顯示的電壓需要十幾V,如果系統(tǒng)板采用+3V單供電,則液晶顯示驅(qū)動(dòng)器必須采用片內(nèi)升壓電路。圖中uPD16682A采用內(nèi)部4倍壓連接方式。
2.4 軟件設(shè)計(jì)
MSP420F149允許用戶標(biāo)準(zhǔn)C進(jìn)行編程,并提供高效的C編譯環(huán)境。如果對(duì)程序運(yùn)行時(shí)間的要求不是很荷刻,采用C語(yǔ)言進(jìn)行程序開發(fā)應(yīng)當(dāng)是編程人員的首先。以下主要介紹關(guān)于自定義串口總線的程序設(shè)計(jì),同時(shí)介紹一種在uPD16682A下的畫點(diǎn)和畫線函數(shù),提供在釁符顯示屏下顯示曲線的實(shí)現(xiàn)方法,從而為程序?qū)崿F(xiàn)動(dòng)態(tài)顯示波形提供了可能。
2.4.1 串行口控制程序
微控制器送往uPD16682A的數(shù)據(jù)有顯示數(shù)據(jù)或顯示命令兩種。兩者的區(qū)分由uPD16692A控制信號(hào)線A0的狀態(tài)來表征,因此將MSP430F149的Port2.2端口電平置高或置低就可控制uPD16682A的狀態(tài)。
按照uPD16682A串行接口聽原理,為了向其寫入一個(gè)8位或16位的數(shù)據(jù),首先必須通過程序設(shè)計(jì)向uPD16682A產(chǎn)生一個(gè)時(shí)鐘輸出。時(shí)鐘產(chǎn)生可以有兩種方式。一是利用微控制器定時(shí)器中斷,定時(shí)依次從I/O端口輸出高、低電平。二是利用指令產(chǎn)生和數(shù)據(jù)同步的時(shí)鐘脈沖,通過產(chǎn)生一個(gè)電平的跳變沿將位數(shù)據(jù)送到uPD16682A,然后通過逐次移位,就可以將一個(gè)8位數(shù)據(jù)寫進(jìn)uPD16682A內(nèi)部的數(shù)據(jù)鎖存器。在第8個(gè)時(shí)鐘脈沖的上升沿,鎖存器中數(shù)據(jù)炙一個(gè)8位的并行數(shù)據(jù),同時(shí)根據(jù)A0信號(hào)線睥電平來顯示圖符或執(zhí)行相應(yīng)的控制命令。雖然這里的串行數(shù)據(jù)的發(fā)送沒有具體波特率和數(shù)據(jù)接口協(xié)議的要求,但是在編寫程序時(shí),必須認(rèn)真考慮串行方式下各個(gè)信號(hào)的時(shí)序。以下是向uPD16682A寫入一個(gè)8位控制命令的程序:
void Set_Address(unsigned char column,unsigned char page){
unsigned char ColH,ColL;
//設(shè)頁(yè)地址
ColH=page|0xB0;
Write_Command(ColH);
//設(shè)列地址
ColH=(column&0xF0)>>4;
ColH|=0x10;
ColL=column&0x0F;
Write_Command(ColH);
Write_Command(ColL);
}
2.4.2 字符顯示屏上的曲線繪制程序
有了上述程序,就可以方便地在uPD16682A上指定位置顯示設(shè)定的圖案和字符了。如果用戶需要?jiǎng)討B(tài)地展示信號(hào)波形和曲線,還可設(shè)計(jì)出專用的畫點(diǎn)和畫線函數(shù),從而大大提高了字符液晶顯示屏的動(dòng)態(tài)圖形顯示能力。通常而言,液晶顯示屏上的一點(diǎn)對(duì)應(yīng)液晶顯示驅(qū)動(dòng)器顯示RAM中的一位。顯示RAM中的某位為1,則在液晶顯示屏上的相應(yīng)點(diǎn)即為點(diǎn)亮狀態(tài);而要想實(shí)現(xiàn)在液顯示屏上動(dòng)態(tài)的顯示點(diǎn)和曲線,必須用到顯示RAM中的數(shù)據(jù)。通常的做法是讀取指定點(diǎn)周圍的數(shù)據(jù),然后在這些點(diǎn)中的某個(gè)指定位置插入1位,從而將液晶顯示屏上的指定點(diǎn)點(diǎn)亮,這就是基本的畫點(diǎn)原理。但是,在串行方式下,uPD16682A不具備數(shù)據(jù)讀出能力。為此,我們仿照顯示RAM顯示的方式,在MSP430F149的數(shù)據(jù)區(qū)開辟了一塊和uPD16682A顯示RAM同樣大小的內(nèi)存塊,在向uPD16682A顯示RAM寫入顯示數(shù)據(jù)的同時(shí),也向該內(nèi)存塊的對(duì)應(yīng)位置寫入同樣的數(shù)據(jù),保證了該內(nèi)存塊的內(nèi)容和uPD16682A顯示RAM中的數(shù)據(jù)是同步刷新的。因此在畫點(diǎn)函數(shù)中,我們直接從該內(nèi)存塊中取出需要的顯示數(shù)據(jù)進(jìn)行處理,然后再通過自定義串行總線送往uPD16682A進(jìn)行顯示。用這種方式,我們實(shí)現(xiàn)了在液晶顯示屏的任意位置畫出一個(gè)點(diǎn),并且還可以利用這種方式編制自己的畫線函數(shù),這樣就使uPD16682A具備了動(dòng)態(tài)顯示波形的能力,也就擴(kuò)展了字符液晶顯示屏動(dòng)態(tài)曲線波形的顯示功能。以下是uPD16682A編寫的畫點(diǎn)函數(shù):
void DrawPointXY(unsigned char x,unsigned char y){
unsigned char page,dot,dat,CouL,CouH;
dot=0x01;
page=y/8; /*計(jì)算當(dāng)前點(diǎn)頁(yè)地址、列地址*/
r_page=page; /*點(diǎn)亮當(dāng)前點(diǎn)并保持周圍點(diǎn)信息不變*/
r_column=x;
page|=0xB0;
dat=y%8;
dot=dot<
CouH=(x&0xF0)>>4;
/*通過自定義串行總線向uPD16682A發(fā)送數(shù)據(jù)*/
CouH=CouH|0x10;
CouL=(x&0x0F);
Write_Command(page);
Write_Command(CouH);
Write_Command(CouL);
dat=DisplayRam[r_page][r_column];
dat|=dot;
Write_DisplayData(dat); /*向顯示RAM寫入數(shù)據(jù)*/ }
程序中的二維全局?jǐn)?shù)組DisplayRam[][]即為在MSP430F149中開辟的內(nèi)存塊,用于保存當(dāng)前uPD16682A顯示RAM中對(duì)應(yīng)位置的顯示數(shù)據(jù)。全局變量r_page和r_column分別保存8位顯示數(shù)據(jù)的頁(yè)地址和列地址。
如果想進(jìn)一步實(shí)現(xiàn)曲線的顯示,程序中則需要計(jì)算兩個(gè)點(diǎn)之間在X方向和Y方向上的偏差,并依據(jù)偏差大小來插入要顯示的點(diǎn)。本系統(tǒng)中,用這種設(shè)計(jì)方法獲得了平滑的曲線顯示效果。
3 應(yīng)用
經(jīng)實(shí)踐證明,本文所介紹的利用微控制器的I/O端口實(shí)現(xiàn)微控制器和液晶顯示驅(qū)動(dòng)器之間的自定義串行總線的設(shè)計(jì)方案,取得了很好的應(yīng)用效果。設(shè)計(jì)的液晶顯示系統(tǒng)工作穩(wěn)定可靠,開發(fā)的在字符型LCD下動(dòng)態(tài)顯示曲線波形的技術(shù),擴(kuò)展了字符型LCD動(dòng)態(tài)顯示曲線的功能,也為液晶顯示驅(qū)動(dòng)器的應(yīng)用開發(fā)提供了一種新的途徑。本文所提出的用軟件模擬串行總線的方法具有很強(qiáng)的通用性,為實(shí)現(xiàn)I2C串行接口提供了一種新方式。