基于單片機(jī)和FPGA 的人機(jī)交互系統(tǒng)的設(shè)計
2.2 T6963C 及其接口設(shè)計:
T6963C 液晶顯示控制器多用于小規(guī)模的液晶顯示器件,常被裝配在圖形液晶顯示模塊上,以內(nèi)藏控制器型圖形液晶顯示模塊的形式出現(xiàn)。
單片機(jī)對T6963C 有2 種訪問方式: 直接訪問與間接訪問。直接訪問利用三總線以I/O 設(shè)備訪問形式進(jìn)行控制;間接訪問則由單片機(jī)提供并行接口,以程序控制時序的方式進(jìn)行控制。為簡化程序,這里采用直接訪問方式。
該LCM 的FS1 引腳用于控制顯示字符的字體。FS1 為高時,LCD 顯示6×8 字符;FS1 為低時,LCD 顯示8×8 字符。經(jīng)實踐,在顯示英文與數(shù)字時,6×8 字符更為美觀;在顯示中文字符時,8×8 字符更為方便。一般系統(tǒng)采用將FS1 接地或接高的方式來固定字體,而本系統(tǒng)采用P2.1 對FS 進(jìn)行控制,通過改變地址實現(xiàn)改變字體的功能,使得界面的顯示更靈活。
2.3 鍵盤電路設(shè)計:
鍵盤是常用的單片機(jī)輸入設(shè)備,分為編碼鍵盤和非編碼鍵盤。鍵盤上閉合鍵的識別由專用硬件譯碼器實現(xiàn),并產(chǎn)生鍵編號或鍵值的稱為編碼鍵盤;靠軟件識別的稱為非編碼鍵盤。在單片機(jī)組成的測控系統(tǒng)及智能化儀器中使用最多的是非編碼鍵盤,本系統(tǒng)設(shè)計在FPGA 中編程實現(xiàn)3×6 鍵盤的行掃描。
由于按鍵的機(jī)械特性,在閉合和斷開的瞬間會伴隨著一連串的抖動,鍵抖動會引起一次按鍵被誤讀多次,所以必須進(jìn)行去抖處理,常用的方法為延時去抖動。FPGA 產(chǎn)生鍵值之后向單片機(jī)發(fā)送中斷,并等待單片機(jī)讀取鍵值。由于人腦反應(yīng)時間相對較長, 鍵盤中斷可以處于相對較低的優(yōu)先級,因此本文將鍵盤中斷接于外部中斷7。
3 軟件設(shè)計:
軟件設(shè)計遵循結(jié)構(gòu)化和層次化的設(shè)計原則。底層函數(shù)直接與硬件溝通,而上層函數(shù)直接通過調(diào)用底層函數(shù)來實現(xiàn)相應(yīng)功能,從而使上層函數(shù)與硬件環(huán)境徹底分開。當(dāng)硬件環(huán)境發(fā)生變化時,僅修改底層函數(shù)便能實現(xiàn)程序的移植。
3.1 液晶驅(qū)動模塊的編程設(shè)計:
本模塊的底層函數(shù)需要實現(xiàn)寫控制字、寫參數(shù)、查忙等功能。由于采用直接訪問,寫控制字與寫參數(shù)的函數(shù)只需向控制口或數(shù)據(jù)口的地址送數(shù)即可。由于LCD 是慢速器件,因此在每次寫控制字及寫參數(shù)之前都需要進(jìn)行查忙。T6963C的狀態(tài)字共有7 位有效的狀態(tài)位,如表1 所示。其中STA1~STA3 最為常用,一般情況下可以不需要對STA5~STA7 進(jìn)行查忙的程序。
3.1.1 液晶驅(qū)動模塊的初始化:
T6963C 的最大特點(diǎn)是具有獨(dú)特的硬件初始值設(shè)置功能,顯示驅(qū)動所需的參數(shù)如占空比系數(shù)。驅(qū)動傳輸?shù)淖止?jié)數(shù)/行及字符的字體選擇等均由引腳電平設(shè)置, 這樣T6963C 的初始化在上電時就已經(jīng)基本設(shè)置完成,軟件操作的重心就可以全部用于顯示畫面的設(shè)計上。因此,初始化時僅需根據(jù)實際情況設(shè)置文本區(qū)域和圖形區(qū)域的首地址和寬度, 以及CGRAM 偏置地址、合成方式、光標(biāo)形狀等即可正常使用。
液晶驅(qū)動模塊的初始化函數(shù)如下:
void LcdInitial(void)
{
LcdWriteDataD(0x00,0x00,0x40); //設(shè)置文本區(qū)域首地址為0000H
LcdWriteDataD(0x20,0x00,0x41); //設(shè)置文本區(qū)域?qū)挾葹?0H 字節(jié)
LcdWriteDataD(0x00,0x04,0x42); //設(shè)置圖形區(qū)域首地址為0400H
LcdWriteDataD(0x20,0x00,0x43); //設(shè)置圖形區(qū)域?qū)挾葹?0H 字節(jié)
LcdWriteDataD(0x03,0x00,0x22); //設(shè)置CGRAM 偏置地址,顯示存儲器的首地址為1800H
LcdWriteDataN(0xa7); //光標(biāo)形狀設(shè)置為8×7
LcdWriteDataN (0x80); //啟用內(nèi)部字符發(fā)生器,邏輯“或”合成
LcdWriteDataN(0x9c); //開文本和圖形顯示,禁用光標(biāo)
LcdClear(3); //清屏
}
3.1.2 英文及漢字的文本顯示:
由于英文及數(shù)字等常用字符的字模已經(jīng)固化在CGROM中,因此進(jìn)行英文的顯示時,只需指定顯示的地址,再輸入該字符對應(yīng)的標(biāo)號即可。漢字的顯示與英文的顯示類似。然而出于其復(fù)雜性,一個漢字需要使用4 組點(diǎn)陣才能完整顯示。在初始化后將漢字的4 部分字模順序輸入CGRAM 中, 在使用時僅需計算好每一部分的顯示地址即可對漢字進(jìn)行完美顯示。
對于一串英文字符的輸入, 可以利用字符串的特性進(jìn)行操作。通過檢測‘