《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)和FPGA 的人機(jī)交互系統(tǒng)的設(shè)計(jì)
基于單片機(jī)和FPGA 的人機(jī)交互系統(tǒng)的設(shè)計(jì)
維庫
摘要: 在儀器儀表電路中,人機(jī)交互界面是必不可少的環(huán)節(jié)。為了解決單純采用單片機(jī)制作的系統(tǒng)功耗高、速度慢、電路結(jié)構(gòu)繁瑣的問題,同時(shí)為了發(fā)揮出單片機(jī)的靈活性和FPGA 的高速性,系統(tǒng)采用C8051F020 單片機(jī)和CycloneⅡFPGA 作為系統(tǒng)核心, 設(shè)計(jì)實(shí)現(xiàn)了鍵盤、LCD 等人機(jī)交互功能, 同時(shí)預(yù)留了部分I/O 接口作為擴(kuò)展接口使用。采用FPGA 掃描鍵盤可以極大程度地節(jié)省單片機(jī)的資源,利用單片機(jī)和FPGA 共同控制LCD 可以更好地體現(xiàn)出人機(jī)交互的特色。
關(guān)鍵詞: FPGA 單片機(jī) 人機(jī)交互
Abstract:
Key words :

  摘要: 在儀器儀表電路中,人機(jī)交互界面是必不可少的環(huán)節(jié)。為了解決單純采用單片機(jī)制作的系統(tǒng)功耗高、速度慢、電路結(jié)構(gòu)繁瑣的問題,同時(shí)為了發(fā)揮出單片機(jī)的靈活性和FPGA 的高速性,系統(tǒng)采用C8051F020 單片機(jī)和CycloneⅡFPGA 作為系統(tǒng)核心, 設(shè)計(jì)實(shí)現(xiàn)了鍵盤、LCD 等人機(jī)交互功能, 同時(shí)預(yù)留了部分I/O 接口作為擴(kuò)展接口使用。采用FPGA 掃描鍵盤可以極大程度地節(jié)省單片機(jī)的資源,利用單片機(jī)和FPGA 共同控制LCD 可以更好地體現(xiàn)出人機(jī)交互的特色。

  在現(xiàn)代各類儀器的開發(fā)中,人機(jī)交互功能正起著無可替代的作用。人機(jī)交互界面友好的儀器將更容易操作和使用,從而提高工作效率。液晶顯示器(LCD)具有功耗低、價(jià)格低、壽命長、接口控制方便等特點(diǎn),在科研與設(shè)計(jì)領(lǐng)域正發(fā)揮著越來越大的作用。FPGA 作為單片機(jī)外設(shè)的接口芯片,可以大大簡化接口電路,通過對FPGA 進(jìn)行編程,可以實(shí)現(xiàn)常用的譯碼、地址選通等功能。

  本文以C8051F020 單片機(jī)與FPGA 互連系統(tǒng)為控制核心,以液晶顯示控制器T6963C 為例,結(jié)合行掃描鍵盤,簡述了一種人機(jī)交互功能的設(shè)計(jì)。

  1 系統(tǒng)設(shè)計(jì)方案:

  FPGA 可在很大程度上擴(kuò)展單片機(jī)的資源,然而人機(jī)交互功能仍應(yīng)盡量減少對單片機(jī)及FPGA 的資源消耗, 以便將更多的片內(nèi)資源用于其他功能的擴(kuò)展。采用FPGA 掃描鍵盤可以節(jié)省單片機(jī)的資源, 同時(shí)也能靈活地實(shí)現(xiàn)鍵盤的擴(kuò)展。而考慮到液晶控制較復(fù)雜, 依然采用單片機(jī)控制LCD,使LCD 的各種功能得到最大程度的利用,其系統(tǒng)框圖如圖1 所示。


  2 硬件電路及FPGA 接口設(shè)計(jì):

  2.1 總線接口設(shè)計(jì):

  這里采用單片機(jī)C8051F020 與CycloneⅡ FPGA 互連的系統(tǒng)。C8051F020 器件是完全集成的混合信號系統(tǒng)級MCU芯片,具有64 個(gè)數(shù)字I/O 引腳,與8051 完全兼容,而且速度得到了極大提高,70%的指令執(zhí)行時(shí)間為1 或2 個(gè)系統(tǒng)時(shí)鐘周期,只有4 條指令的執(zhí)行時(shí)間大于4 個(gè)系統(tǒng)時(shí)鐘周期。此外,C8051F020 系列MCU 對CIP-51 內(nèi)核和外設(shè)有幾項(xiàng)關(guān)鍵性的改進(jìn),提高了整體性能,更易于在最終應(yīng)用中使用。如提供22 個(gè)中斷源、7 個(gè)復(fù)位源、可編程交叉開關(guān)、8 位A/D 轉(zhuǎn)換器、12 位D/A 轉(zhuǎn)換器等。

  CycloneⅡ系列FPGA 將低功耗FPGA 的密度規(guī)模擴(kuò)展至68 416 個(gè)邏輯單元,并提供高達(dá)622 個(gè)可用的I/O 接口以及高達(dá)1.1 Mb 的片內(nèi)存儲(chǔ)單元[3]。CycloneⅡ系列成功實(shí)現(xiàn)了高效與低功耗的結(jié)合,可用于自動(dòng)化、通信、視頻播放等領(lǐng)域。為兼顧成本問題, 本系統(tǒng)采用性價(jià)比較高的EP2C8 型FPGA 作為接口器件。

  為使單片機(jī)的資源可以得到最大的開發(fā),將單片機(jī)的高端口,即P4~P7 接入FPGA,并通過FPGA 對外部設(shè)備進(jìn)行訪問。在FPGA 中通過Verilog HDL 語言編程實(shí)現(xiàn)了3-8 譯碼器,從而實(shí)現(xiàn)了對單片機(jī)地址總線的擴(kuò)展。該3-8 譯碼器對LCD 以及鍵盤的鍵值讀取提供使能信號,如圖2 所示。


  2.2 T6963C 及其接口設(shè)計(jì):

  T6963C 液晶顯示控制器多用于小規(guī)模的液晶顯示器件,常被裝配在圖形液晶顯示模塊上,以內(nèi)藏控制器型圖形液晶顯示模塊的形式出現(xiàn)。

  單片機(jī)對T6963C 有2 種訪問方式: 直接訪問與間接訪問。直接訪問利用三總線以I/O 設(shè)備訪問形式進(jìn)行控制;間接訪問則由單片機(jī)提供并行接口,以程序控制時(shí)序的方式進(jìn)行控制。為簡化程序,這里采用直接訪問方式。

  該LCM 的FS1 引腳用于控制顯示字符的字體。FS1 為高時(shí),LCD 顯示6×8 字符;FS1 為低時(shí),LCD 顯示8×8 字符。經(jīng)實(shí)踐,在顯示英文與數(shù)字時(shí),6×8 字符更為美觀;在顯示中文字符時(shí),8×8 字符更為方便。一般系統(tǒng)采用將FS1 接地或接高的方式來固定字體,而本系統(tǒng)采用P2.1 對FS 進(jìn)行控制,通過改變地址實(shí)現(xiàn)改變字體的功能,使得界面的顯示更靈活。

  2.3 鍵盤電路設(shè)計(jì):

  鍵盤是常用的單片機(jī)輸入設(shè)備,分為編碼鍵盤和非編碼鍵盤。鍵盤上閉合鍵的識別由專用硬件譯碼器實(shí)現(xiàn),并產(chǎn)生鍵編號或鍵值的稱為編碼鍵盤;靠軟件識別的稱為非編碼鍵盤。在單片機(jī)組成的測控系統(tǒng)及智能化儀器中使用最多的是非編碼鍵盤,本系統(tǒng)設(shè)計(jì)在FPGA 中編程實(shí)現(xiàn)3×6 鍵盤的行掃描。

  由于按鍵的機(jī)械特性,在閉合和斷開的瞬間會(huì)伴隨著一連串的抖動(dòng),鍵抖動(dòng)會(huì)引起一次按鍵被誤讀多次,所以必須進(jìn)行去抖處理,常用的方法為延時(shí)去抖動(dòng)。FPGA 產(chǎn)生鍵值之后向單片機(jī)發(fā)送中斷,并等待單片機(jī)讀取鍵值。由于人腦反應(yīng)時(shí)間相對較長, 鍵盤中斷可以處于相對較低的優(yōu)先級,因此本文將鍵盤中斷接于外部中斷7。

  3 軟件設(shè)計(jì):

  軟件設(shè)計(jì)遵循結(jié)構(gòu)化和層次化的設(shè)計(jì)原則。底層函數(shù)直接與硬件溝通,而上層函數(shù)直接通過調(diào)用底層函數(shù)來實(shí)現(xiàn)相應(yīng)功能,從而使上層函數(shù)與硬件環(huán)境徹底分開。當(dāng)硬件環(huán)境發(fā)生變化時(shí),僅修改底層函數(shù)便能實(shí)現(xiàn)程序的移植。

  3.1 液晶驅(qū)動(dòng)模塊的編程設(shè)計(jì):

  本模塊的底層函數(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ū)動(dòng)模塊的初始化:

  T6963C 的最大特點(diǎn)是具有獨(dú)特的硬件初始值設(shè)置功能,顯示驅(qū)動(dòng)所需的參數(shù)如占空比系數(shù)。驅(qū)動(dòng)傳輸?shù)淖止?jié)數(shù)/行及字符的字體選擇等均由引腳電平設(shè)置, 這樣T6963C 的初始化在上電時(shí)就已經(jīng)基本設(shè)置完成,軟件操作的重心就可以全部用于顯示畫面的設(shè)計(jì)上。因此,初始化時(shí)僅需根據(jù)實(shí)際情況設(shè)置文本區(qū)域和圖形區(qū)域的首地址和寬度, 以及CGRAM 偏置地址、合成方式、光標(biāo)形狀等即可正常使用。

  液晶驅(qū)動(dòng)模塊的初始化函數(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 偏置地址,顯示存儲(chǔ)器的首地址為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)行英文的顯示時(shí),只需指定顯示的地址,再輸入該字符對應(yīng)的標(biāo)號即可。漢字的顯示與英文的顯示類似。然而出于其復(fù)雜性,一個(gè)漢字需要使用4 組點(diǎn)陣才能完整顯示。在初始化后將漢字的4 部分字模順序輸入CGRAM 中, 在使用時(shí)僅需計(jì)算好每一部分的顯示地址即可對漢字進(jìn)行完美顯示。

  對于一串英文字符的輸入, 可以利用字符串的特性進(jìn)行操作。通過檢測‘?’字符來判斷英文字符串的結(jié)尾,從而避免了在調(diào)用此顯示函數(shù)時(shí)人工計(jì)算句子長度的工作。英文字符的ASCII碼值與其在CGROM 中對應(yīng)的標(biāo)號恰相差0x20,因此僅需簡單的減法即可實(shí)現(xiàn)標(biāo)號的轉(zhuǎn)換。此外,在進(jìn)行英文的連續(xù)顯示時(shí),使用了T6963C 的數(shù)據(jù)自動(dòng)寫指令,從而提高了顯示效率。

  對于一串中文的顯示,則僅需通過循環(huán)調(diào)用單個(gè)中文的顯示程序進(jìn)行實(shí)現(xiàn)。注意由于C51 語言中字符串無法支持中文,因此必須人工計(jì)算中文字串的長度并將其作為函數(shù)傳遞給此顯示函數(shù)。

  字符發(fā)生器CGRAM 中總共可存儲(chǔ)32 個(gè)漢字,對于需顯示較多漢字的應(yīng)用, 可從需顯示的漢字中選出16 個(gè)最常用的漢字,固定存放于CGRAM 中,其余漢字僅在需要使用時(shí)動(dòng)態(tài)寫入CGRAM。這樣, 既提高了顯示效率, 又解決了CGRAM 過小的問題。


  3.1.3 圖形顯示:

  除使用文本顯示漢字外,還可采用圖形顯示的方式。具體方式是將字模以數(shù)組的方式保存于單片機(jī)的代碼段,在需要顯示時(shí)將數(shù)據(jù)送入圖形區(qū)即可。此外,利用圖形顯示,還可以編寫描點(diǎn)程序顯示相應(yīng)波形或者編寫繪圖程序繪制簡易表格,使系統(tǒng)顯示結(jié)果更加直觀,便于分析。

  3.1.4 文本特效:

  T6963C 可以設(shè)置文本屬性區(qū),并對文本實(shí)現(xiàn)反白、正向閃爍、反向閃爍等特效。使用時(shí)僅需將圖形顯示設(shè)置為文本屬性區(qū)即可。此時(shí)圖形區(qū)的內(nèi)容將無法顯示,若圖形區(qū)與文本屬性區(qū)劃分在CGRAM 的不同區(qū)域,則圖形區(qū)的內(nèi)容可以得到保存。利用文本特效,可通過反白或閃爍等效果指示可選選項(xiàng)以及當(dāng)前選項(xiàng),從而使界面更易于操作。

  3.2 人機(jī)交互界面設(shè)計(jì):

  除基本的10 個(gè)數(shù)字鍵以外,還設(shè)定了上、下、左、右、確定、取消等按鍵。此外,按鍵位置的設(shè)計(jì),更符合人們的按鍵習(xí)慣。在界面中采用分級的菜單, 在一級菜單中選定功能之后將進(jìn)入下一級菜單對功能進(jìn)行更詳細(xì)的設(shè)定。在人機(jī)交互界面中可以使用方向鍵進(jìn)行功能的選擇,數(shù)字鍵僅用于數(shù)據(jù)的輸入。

  界面充分利用了文本特效,對選項(xiàng)采用反向顯示表示該選項(xiàng)已選定;對選項(xiàng)采用反向閃爍表示用戶可通過方向鍵改變選項(xiàng)。在需要進(jìn)行數(shù)字輸入的界面中打開光標(biāo),即可向用戶標(biāo)示數(shù)字輸入的地方。此外,必要的警告和出錯(cuò)界面的設(shè)計(jì)將為用戶提供更多信息,使人機(jī)交互界面更為友好。

  4 結(jié)束語:

  本系統(tǒng)采用鍵盤+LCD 的輸入輸出設(shè)備, 并且可以通過FPGA 實(shí)現(xiàn)各種其他外設(shè)的接口電路的設(shè)計(jì), 減少了對單片機(jī)資源的占用,使得設(shè)計(jì)靈活、方便。同時(shí)FPGA 還可以為單片機(jī)提供存儲(chǔ)器和I/O 口等資源。本文設(shè)計(jì)的電路可擴(kuò)展性強(qiáng), 在此基礎(chǔ)上可將其擴(kuò)展成各種擁有友好界面的系統(tǒng),如可控增益放大器、音頻信號分析儀、集成運(yùn)放分析儀等。經(jīng)實(shí)踐,該系統(tǒng)穩(wěn)定易用,實(shí)用性強(qiáng)。


 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。