《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 設(shè)計(jì)應(yīng)用 > 單片機(jī)實(shí)現(xiàn)數(shù)字化B超鍵盤設(shè)計(jì)
單片機(jī)實(shí)現(xiàn)數(shù)字化B超鍵盤設(shè)計(jì)
無(wú)錫海鷹電子
項(xiàng)四平
摘要: 對(duì)基于W78E052D單片機(jī)設(shè)計(jì)的PS2鍵盤方案、硬件和軟件設(shè)計(jì)做了詳細(xì)闡述,命令查詢、TGC和狀態(tài)同步處理對(duì)自行設(shè)計(jì)非標(biāo)PS2鍵盤有借鑒意義,在整個(gè)設(shè)計(jì)過(guò)程中,通過(guò)不斷改進(jìn)硬件和調(diào)試軟件,得到了預(yù)期的效果。相對(duì)于采用多片MCU分別處理幾個(gè)模塊最終通過(guò)USB集線器同PC主機(jī)通訊的方案,接口更簡(jiǎn)單,成本更低,而且不需要專門開(kāi)發(fā)鍵盤驅(qū)動(dòng)程序。在需要3個(gè)以上編碼器的應(yīng)用中,編碼器處理方案有待于進(jìn)一步改進(jìn)。
Abstract:
Key words :

摘要:針對(duì)目前使用的RS232接口數(shù)字化B超鍵盤存在PC主機(jī)啟動(dòng)時(shí)不能設(shè)置BIOS,提出一種PS2鍵盤的設(shè)計(jì)方法。基于W78E052D單片機(jī),采用8通道串行A/D轉(zhuǎn)換器設(shè)計(jì)了8個(gè)TGC電位器信息采集電路,電位器位置信息以鍵盤掃描碼序列形式發(fā)送,正交編碼器信號(hào)通過(guò)XC9536XL轉(zhuǎn)換為單片機(jī)可接收的中斷信號(hào),軟件接收到中斷信息后等效處理成按鍵。結(jié)果表明,在滿足開(kāi)機(jī)可設(shè)置BIOS同時(shí),又可實(shí)現(xiàn)超聲特有功能,不需要專門設(shè)計(jì)驅(qū)動(dòng)程序,接口簡(jiǎn)單,成本低。
關(guān)鍵詞:RS232;單片機(jī);PS2;鍵盤

    早期B超產(chǎn)品設(shè)計(jì)大多采用單片機(jī)和可編程器件(CPLD)來(lái)控制整個(gè)系統(tǒng),鍵盤直接由主控單片機(jī)掃描處理,或?qū)iT用單片機(jī)處理鍵掃并經(jīng)RS232接口與主控單片機(jī)通訊。隨著B超數(shù)字化技術(shù)的誕生,需要大量控制數(shù)據(jù)存儲(chǔ)并可下傳給超聲模塊,主控單片機(jī)逐漸被計(jì)算機(jī)取代。在B超數(shù)字化過(guò)程中,RS232接口的鍵盤存在需要設(shè)計(jì)驅(qū)動(dòng)程序,且存在PC啟動(dòng)時(shí)無(wú)法進(jìn)入BIOS設(shè)置的問(wèn)題,而且串口有逐漸被取消的趨勢(shì)。如果直接采用PS2或USB標(biāo)準(zhǔn)鍵盤,則需要另行設(shè)計(jì)超聲特有的功能模塊、該模塊與主機(jī)的接口及其驅(qū)動(dòng)程序,而且PC鍵盤的外觀會(huì)影響B(tài)超整體造型設(shè)計(jì)。
    本文提出了一種用單片微機(jī)實(shí)現(xiàn)PS2超聲鍵盤的設(shè)計(jì)方法,鍵盤包括字母數(shù)字按鍵和超聲功能模塊,設(shè)計(jì)兼顧BIOS設(shè)置,直接可使用操作系統(tǒng)(Windows)提供的驅(qū)動(dòng)程序。

1 接口協(xié)議
    PS2接口協(xié)議是現(xiàn)在大多數(shù)鍵盤、鼠標(biāo)與PC機(jī)通訊的標(biāo)準(zhǔn)協(xié)議。鍵盤與鼠標(biāo)在傳輸協(xié)議上,只是傳輸數(shù)據(jù)內(nèi)容不一樣。
    充分理解該接口協(xié)議,可以幫助設(shè)計(jì)者自主開(kāi)發(fā)專用的多功能鍵盤。
    PS2接口協(xié)議是一種雙向同步串行協(xié)議,換句話說(shuō),PS2設(shè)備可以發(fā)送數(shù)據(jù)到主機(jī),而主機(jī)也可以發(fā)送數(shù)據(jù)到設(shè)備,但主機(jī)總是在總線上有優(yōu)先權(quán),它可以在任何時(shí)候抑制來(lái)自于設(shè)備的通訊——即把時(shí)鐘拉低。
    從設(shè)備發(fā)送到主機(jī)的數(shù)據(jù)在時(shí)鐘信號(hào)的下降沿被讀取,從主機(jī)發(fā)送到設(shè)備的數(shù)據(jù)在上升沿被讀取。不管通訊的方向怎樣,設(shè)備總是產(chǎn)生時(shí)鐘信號(hào),如果主機(jī)要發(fā)送數(shù)據(jù)它必須首先告訴設(shè)備開(kāi)始產(chǎn)生時(shí)鐘信號(hào)。最大時(shí)鐘頻率是33 kHz,而且大多數(shù)設(shè)備工作在10~20 kHz。
    PS2連接器、發(fā)送或接收數(shù)據(jù)的細(xì)節(jié)、命令集在《PS/2技術(shù)參考》一文中有詳細(xì)描述。

2 掃描碼
    鍵盤處理器獲得有鍵按下、釋放或按住的信息,信息最終以掃描碼的形式發(fā)給計(jì)算機(jī)。
    標(biāo)準(zhǔn)計(jì)算機(jī)上的每個(gè)按鍵都有唯一的通碼和斷碼,所有這些通斷碼組成了掃描碼集。掃描碼集一共有3套,分別對(duì)應(yīng)3種鍵盤,現(xiàn)代鍵盤默認(rèn)的是第二套掃描碼集。
    1)掃描碼分通碼和斷碼。根據(jù)掃描碼的不同,可將按鍵分為3種;
    2)通碼為1字節(jié),斷碼為0xF0+通碼形式;
    3)通碼為2字節(jié),0xE0+0xXX形式,斷碼為0xE0+0xF0+0xXX形式;
    特殊按鍵,有兩個(gè),Pause和Print screen。
    掃描碼個(gè)數(shù)是固定的,無(wú)法隨意增加,自行設(shè)計(jì)PS2鍵盤就是要靈活運(yùn)用第二套掃描碼集。B超鍵盤用到了數(shù)字字符鍵,這一部分跟計(jì)算機(jī)鍵盤基本相同。除數(shù)字字符鍵外的標(biāo)準(zhǔn)鍵盤按鍵和預(yù)留按鍵的掃描碼就當(dāng)作功能操作調(diào)節(jié)時(shí)的信息代碼。

3 鍵盤方案及硬件設(shè)計(jì)
3.1 鍵盤方案設(shè)計(jì)
    數(shù)字化B超鍵盤由字母數(shù)字(Alphanumeric)鍵、功能鍵、功能調(diào)節(jié)編碼器、總增益調(diào)節(jié)編碼器、八段TGC(時(shí)間增益補(bǔ)償,Time Gain Compensation)調(diào)節(jié)電位器等幾部分組成,如圖1所示。

a.JPG


    按鍵總數(shù)為88個(gè),且需今后擴(kuò)充,故采用行列結(jié)構(gòu),字母數(shù)字鍵的掃描碼參照標(biāo)準(zhǔn)鍵盤設(shè)計(jì),功能鍵則直接使用字母數(shù)字鍵除外的掃描碼,這樣B超鍵盤相當(dāng)于在標(biāo)準(zhǔn)鍵盤的基礎(chǔ)上增加編碼器處理和TGC電位器數(shù)據(jù)采集兩個(gè)模塊。
    編碼器輸出具有A相、B相的方波正交信號(hào),而且二者相序取決于編碼器的正反轉(zhuǎn)方向,文獻(xiàn)中對(duì)原理及處理方法有詳細(xì)描述。不同的是,只用鑒相器,兩個(gè)編碼器正轉(zhuǎn)時(shí)產(chǎn)生的脈沖信號(hào)分別輸出至b.JPG,反轉(zhuǎn)時(shí)分別輸出至c.JPG。
    8個(gè)TGC電位器以前采用8通道并行ADC或單通道ADC+8選1模擬開(kāi)關(guān)完成模擬量到數(shù)字量的轉(zhuǎn)換,占用單片機(jī)I/O口較多,電路接口復(fù)雜,現(xiàn)采用串行8通道ADC,控制簡(jiǎn)單,跟MAX111相比不需要轉(zhuǎn)換時(shí)間,而且集成度更高。
3.2 硬件設(shè)計(jì)
    鍵盤硬件電路由單片機(jī)W78E052D、串行AD轉(zhuǎn)換器TLC0838、可編程器件XC9536XL和兩片3-8譯碼器74HC138等組成,如圖2所示。

d.JPG


     W78E052D是臺(tái)灣新唐科技(Nuvoton)推出的一款寬電壓(2.4-5.5 V)低功耗CMOS8位單片機(jī),指令系統(tǒng)與8052完全兼容。PLCC44封裝的W78E052D片內(nèi)含8KB的可編程的Flash只讀程序存儲(chǔ)器,256字節(jié)RAM,4個(gè)8位雙向、可位尋址的I/O口,一個(gè)附加的4位I/O口P4,3個(gè)16位定時(shí)/計(jì)數(shù)器,一個(gè)硬件看門狗定時(shí)器及一個(gè)串行口。比傳統(tǒng)8051增加了兩個(gè)外中斷e.JPG,可滿足接入4個(gè)外中斷信號(hào)的需求。
    TLC0838是TI公司生產(chǎn)的8位逐次逼近模數(shù)轉(zhuǎn)換器。具有輸入可配置的多通道多路器和串形輸入輸出方式。由于TLC0838采用的是串行輸入結(jié)構(gòu),因此封裝體積小,可節(jié)省51系列單片機(jī)I/O資源,價(jià)格也較適中。因8個(gè)通道全部使用,故其多路器由軟件配置為單端輸入。
    編碼器輸出正交的信號(hào)經(jīng)CPLD(XC9636XL)作倍頻鑒相轉(zhuǎn)換成單片機(jī)能接收的脈沖信號(hào),單片機(jī)的處理工作得以簡(jiǎn)化。兩個(gè)編碼器共輸出4路信號(hào),以此作為單片機(jī)的外部中斷源。在CPLD中還擴(kuò)展了6個(gè)輸出口用于指示Depth、Zoom、Focus、LP、A-Pwr調(diào)節(jié)功能是否可用及圖像是否處于凍結(jié)狀態(tài)。
    鍵盤按鍵以行列形式排成16x8矩陣,輸出列線16根,輸入檢測(cè)行線8根,最多支持128鍵,每個(gè)行列線交叉處設(shè)置一個(gè)按鍵。為了減少I/O的占用,采用兩片3-8譯碼器(74HC138)實(shí)現(xiàn)4-16譯碼,給A11-A8依次輸出0000、0001、0010、0011、0100、1000、1001、1010、1011、1100、1101、1110、1111,即可依次拉低列線S00-S015,同時(shí)讀取行線P1口,行線為低代表當(dāng)前拉低的列線與該行線交叉處的按鍵被按下。比采用接口芯片,成本更低。

4 軟件設(shè)計(jì)
4.1 主程序設(shè)計(jì)
    軟件設(shè)計(jì)部分的主程序流程如圖3所示。

f.JPG


    主程序完成初始化后,進(jìn)人命令查詢處理,不斷查詢有沒(méi)有來(lái)自計(jì)算機(jī)的命令,有則應(yīng)答并處理,接著檢查鍵掃標(biāo)志,有鍵掃標(biāo)志(即=1)則進(jìn)行鍵盤處理,否則繼續(xù)查詢命令。
    鍵盤處理流程如下:在實(shí)時(shí)狀態(tài),對(duì)TGC電位器進(jìn)行AD采樣,并與上一次結(jié)果比較,有變化則發(fā)送給計(jì)算機(jī),凍結(jié)狀態(tài)跳過(guò)TGC處理;接著判斷掃描編碼器旋轉(zhuǎn)標(biāo)志位,有則以鍵碼形式發(fā)送給主機(jī);然后掃描鍵盤陣列,有鍵按下或釋放,則以查表方式取得掃描碼,并發(fā)給計(jì)算機(jī)。
    鍵盤掃描采用定時(shí)器0中斷方式,晶體頻率為24 MHz按方式1工作,最大定時(shí)時(shí)間為32.768ms,定時(shí)器中實(shí)現(xiàn)計(jì)數(shù)3次,可定時(shí)98.3ms,以此作鍵盤處理周期,定時(shí)間到則將鍵盤掃描標(biāo)志置為1。
4.2 外中斷程序設(shè)計(jì)
    新增的2個(gè)中斷,其中斷信號(hào)由P4口輸入,中斷功能/狀態(tài)通過(guò)XICON寄存器控制,P4和XICON不是標(biāo)準(zhǔn)80C52的寄存器,需預(yù)先定義——在源文件頭上加入以下兩行:
    P4      EQU 0D8H
    XICON   EQU 0C0H
    中斷服務(wù)程序只完成置編碼器旋轉(zhuǎn)標(biāo)志位的處理,主程序中根據(jù)標(biāo)志位以按鍵鍵碼的形式發(fā)送信息。中斷服務(wù)程序源代碼如下:
    h.JPG


4.3 初始化及命令查詢處理
    初始化過(guò)程是設(shè)計(jì)過(guò)程中需要注意的。計(jì)算機(jī)啟動(dòng)過(guò)程跟主板有關(guān),因?yàn)橹鳈C(jī)在總線上有優(yōu)先權(quán),通信過(guò)程發(fā)生異常,將禁用設(shè)備,而且目前找不到介紹計(jì)算機(jī)啟動(dòng)過(guò)程中對(duì)鍵盤操作細(xì)節(jié)的描述,所以本部分的設(shè)計(jì)是難點(diǎn)。
    經(jīng)過(guò)試驗(yàn)發(fā)現(xiàn),上電后,鍵盤完成白檢即發(fā)送代碼0AAH給計(jì)算機(jī),計(jì)算機(jī)在啟動(dòng)過(guò)程中可以進(jìn)行復(fù)位、讀ID、停止鍵掃、使能鍵掃、控制LED狀態(tài)等操作,而且有時(shí)計(jì)算機(jī)會(huì)拉低時(shí)鐘信號(hào)——抑制通訊,在整個(gè)過(guò)程中,只要主機(jī)認(rèn)為設(shè)備異常,將抑制通訊導(dǎo)致鍵盤無(wú)法使用而且不能進(jìn)入操作系統(tǒng)。
    每個(gè)由計(jì)算機(jī)發(fā)送到鍵盤的數(shù)據(jù)都能從鍵盤獲得一個(gè)0FAH應(yīng)答的回應(yīng),唯一例外的是鍵盤對(duì)Resend和Echo命令的回應(yīng)。在發(fā)送下一個(gè)字節(jié)給鍵盤之前,主機(jī)要等待應(yīng)答。鍵盤作為從設(shè)備,無(wú)法預(yù)先知道什么時(shí)候主機(jī)會(huì)發(fā)送控制命令,一旦主機(jī)發(fā)送命令給設(shè)備,設(shè)備沒(méi)有回應(yīng),主機(jī)即將該設(shè)備掛起,除非重新開(kāi)機(jī)。
    針對(duì)命令集,設(shè)計(jì)了專門的應(yīng)答子程序,根據(jù)設(shè)備收到的命令,作出相應(yīng)的回答和處理。
    經(jīng)邏輯分析儀測(cè)試、分析和反復(fù)驗(yàn)證,發(fā)現(xiàn)在主程序中插入命令查詢處理程序,既能滿足初始化的要求,還可以保證鍵盤及時(shí)接收和處理來(lái)自主機(jī)的信息,維持鍵盤設(shè)備正常工作,命令查詢處理程序流程如圖4所示。這部分概括起來(lái)就是空出360μs的等待時(shí)間(15μsx20),作查詢,如果在這段時(shí)間內(nèi),數(shù)據(jù)線和時(shí)鐘線同時(shí)變?yōu)榈碗娖剑硎炬I盤有命令需發(fā)送,設(shè)備產(chǎn)生時(shí)鐘以接收命令,并根據(jù)收到的命令做相應(yīng)的處理。

i.JPG


4. 4 TGC數(shù)據(jù)處理
    TGC數(shù)據(jù)發(fā)送實(shí)質(zhì)上是一個(gè)掃描碼的序列,如第一個(gè)TGC增益數(shù)據(jù)為80,依次向計(jì)算機(jī)發(fā)送0x14 0x16 0x3E0x45 0xF0 0x14,對(duì)應(yīng)鍵“L Ctrl”按下、鍵“1”按下、鍵“8”按下、鍵“0”按下、鍵“L Ctrl”釋放的動(dòng)作,超聲系統(tǒng)軟件實(shí)現(xiàn)解析。實(shí)踐證明,發(fā)送每個(gè)序列數(shù)據(jù)過(guò)程中兩個(gè)數(shù)據(jù)間至少應(yīng)延時(shí)1.06 ms。
    上述組合不會(huì)引起計(jì)算機(jī)異常,此前嘗試過(guò)其他組合,在沒(méi)進(jìn)入超聲軟件時(shí)調(diào)節(jié)TGC易引起誤操作。
    特別要注意的是:
    1)開(kāi)機(jī)時(shí)ADC采樣使能標(biāo)志清0,禁止采集TGC;
    2)鍵盤上電完成初始化后開(kāi)啟定時(shí)器1,聯(lián)合應(yīng)用定時(shí)器和計(jì)數(shù)器,定時(shí)5 s,時(shí)間到則ADC采樣使能標(biāo)志置1,可以采集TGC數(shù)據(jù),TGC數(shù)據(jù)有變化則發(fā)送給計(jì)算機(jī);
    3)設(shè)立轉(zhuǎn)換通道標(biāo)志碼,實(shí)時(shí)狀態(tài)每次鍵掃時(shí)根據(jù)標(biāo)志碼只進(jìn)行相對(duì)應(yīng)的一個(gè)電位器的模數(shù)轉(zhuǎn)換,轉(zhuǎn)換后將轉(zhuǎn)換標(biāo)志碼指向下一通道。
    采用上述措施旨在解決因開(kāi)機(jī)過(guò)程中鍵盤發(fā)送TGC數(shù)據(jù)和正常工作時(shí)TGC數(shù)據(jù)頻繁發(fā)送導(dǎo)致鍵盤死機(jī)問(wèn)題,頻繁發(fā)送數(shù)據(jù)以至主機(jī)認(rèn)為鍵盤異常而禁用鍵盤。
4.5 狀態(tài)同步處理
    標(biāo)準(zhǔn)鍵盤上有Num Lock,Caps Lock和Scroll Lock3個(gè)LED指示燈,為了實(shí)現(xiàn)主機(jī)與鍵盤的狀態(tài)同步,采用了如下解決方案:鍵盤只發(fā)送Num Lock、Caps Lock、Scroll Lock按下或者釋放的代碼;根據(jù)按鍵情況,主機(jī)發(fā)送專門用于指示鍵盤上Num Lock、Caps Lock和ScrollLo-ck3個(gè)LED狀態(tài)的指令;鍵盤處理器收到指令后刷新指示燈。
    設(shè)計(jì)中凍結(jié)鍵使用Scroll Lock以保持狀態(tài)同步。
    Depth、Zoom、Focus、I.P、A-Pwr與功能調(diào)節(jié)編碼器組合使用,5個(gè)按鍵中每次只有1個(gè)激活,激活時(shí)led指示燈亮,按鍵狀態(tài)則由鍵盤MCU寄存和切換控制,不同功能激活時(shí)調(diào)節(jié)編碼器產(chǎn)生不同的鍵碼,如:Depth激活時(shí)編碼器左旋產(chǎn)生“KP-”按下的代碼,右旋則產(chǎn)生“KP +”按下代碼;Zoom激活時(shí)編碼器左旋產(chǎn)生“Page Up”按下的代碼,右旋則產(chǎn)生“Page Down”按下代碼。該方法成功解決了狀態(tài)同步問(wèn)題。

5 結(jié)論
    對(duì)基于W78E052D單片機(jī)設(shè)計(jì)的PS2鍵盤方案、硬件和軟件設(shè)計(jì)做了詳細(xì)闡述,命令查詢、TGC和狀態(tài)同步處理對(duì)自行設(shè)計(jì)非標(biāo)PS2鍵盤有借鑒意義,在整個(gè)設(shè)計(jì)過(guò)程中,通過(guò)不斷改進(jìn)硬件和調(diào)試軟件,得到了預(yù)期的效果。相對(duì)于采用多片MCU分別處理幾個(gè)模塊最終通過(guò)USB集線器同PC主機(jī)通訊的方案,接口更簡(jiǎn)單,成本更低,而且不需要專門開(kāi)發(fā)鍵盤驅(qū)動(dòng)程序。在需要3個(gè)以上編碼器的應(yīng)用中,編碼器處理方案有待于進(jìn)一步改進(jìn)。

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