摘要:針對目前使用的RS232接口數(shù)字化B超鍵盤存在PC主機啟動時不能設(shè)置BIOS,,提出一種PS2鍵盤的設(shè)計方法?;?a class="innerlink" href="http://forexkbc.com/tags/W78E052D" title="W78E052D" target="_blank">W78E052D單片機,,采用8通道串行A/D轉(zhuǎn)換器設(shè)計了8個TGC電位器信息采集電路,電位器位置信息以鍵盤掃描碼序列形式發(fā)送,,正交編碼器信號通過XC9536XL轉(zhuǎn)換為單片機可接收的中斷信號,,軟件接收到中斷信息后等效處理成按鍵。結(jié)果表明,,在滿足開機可設(shè)置BIOS同時,,又可實現(xiàn)超聲特有功能,不需要專門設(shè)計驅(qū)動程序,,接口簡單,,成本低。
關(guān)鍵詞:RS232,;單片機,;PS2;鍵盤
早期B超產(chǎn)品設(shè)計大多采用單片機和可編程器件(CPLD)來控制整個系統(tǒng),,鍵盤直接由主控單片機掃描處理,,或?qū)iT用單片機處理鍵掃并經(jīng)RS232接口與主控單片機通訊。隨著B超數(shù)字化技術(shù)的誕生,,需要大量控制數(shù)據(jù)存儲并可下傳給超聲模塊,,主控單片機逐漸被計算機取代。在B超數(shù)字化過程中,,RS232接口的鍵盤存在需要設(shè)計驅(qū)動程序,且存在PC啟動時無法進(jìn)入BIOS設(shè)置的問題,,而且串口有逐漸被取消的趨勢,。如果直接采用PS2或USB標(biāo)準(zhǔn)鍵盤,則需要另行設(shè)計超聲特有的功能模塊,、該模塊與主機的接口及其驅(qū)動程序,,而且PC鍵盤的外觀會影響B(tài)超整體造型設(shè)計。
本文提出了一種用單片微機實現(xiàn)PS2超聲鍵盤的設(shè)計方法,,鍵盤包括字母數(shù)字按鍵和超聲功能模塊,,設(shè)計兼顧BIOS設(shè)置,直接可使用操作系統(tǒng)(Windows)提供的驅(qū)動程序,。
1 接口協(xié)議
PS2接口協(xié)議是現(xiàn)在大多數(shù)鍵盤,、鼠標(biāo)與PC機通訊的標(biāo)準(zhǔn)協(xié)議,。鍵盤與鼠標(biāo)在傳輸協(xié)議上,只是傳輸數(shù)據(jù)內(nèi)容不一樣,。
充分理解該接口協(xié)議,,可以幫助設(shè)計者自主開發(fā)專用的多功能鍵盤。
PS2接口協(xié)議是一種雙向同步串行協(xié)議,,換句話說,,PS2設(shè)備可以發(fā)送數(shù)據(jù)到主機,而主機也可以發(fā)送數(shù)據(jù)到設(shè)備,,但主機總是在總線上有優(yōu)先權(quán),,它可以在任何時候抑制來自于設(shè)備的通訊——即把時鐘拉低。
從設(shè)備發(fā)送到主機的數(shù)據(jù)在時鐘信號的下降沿被讀取,,從主機發(fā)送到設(shè)備的數(shù)據(jù)在上升沿被讀取,。不管通訊的方向怎樣,設(shè)備總是產(chǎn)生時鐘信號,,如果主機要發(fā)送數(shù)據(jù)它必須首先告訴設(shè)備開始產(chǎn)生時鐘信號,。最大時鐘頻率是33 kHz,而且大多數(shù)設(shè)備工作在10~20 kHz,。
PS2連接器,、發(fā)送或接收數(shù)據(jù)的細(xì)節(jié)、命令集在《PS/2技術(shù)參考》一文中有詳細(xì)描述,。
2 掃描碼
鍵盤處理器獲得有鍵按下,、釋放或按住的信息,信息最終以掃描碼的形式發(fā)給計算機,。
標(biāo)準(zhǔn)計算機上的每個按鍵都有唯一的通碼和斷碼,,所有這些通斷碼組成了掃描碼集。掃描碼集一共有3套,,分別對應(yīng)3種鍵盤,,現(xiàn)代鍵盤默認(rèn)的是第二套掃描碼集。
1)掃描碼分通碼和斷碼,。根據(jù)掃描碼的不同,,可將按鍵分為3種;
2)通碼為1字節(jié),,斷碼為0xF0+通碼形式,;
3)通碼為2字節(jié),0xE0+0xXX形式,,斷碼為0xE0+0xF0+0xXX形式,;
特殊按鍵,有兩個,Pause和Print screen,。
掃描碼個數(shù)是固定的,,無法隨意增加,自行設(shè)計PS2鍵盤就是要靈活運用第二套掃描碼集,。B超鍵盤用到了數(shù)字字符鍵,,這一部分跟計算機鍵盤基本相同。除數(shù)字字符鍵外的標(biāo)準(zhǔn)鍵盤按鍵和預(yù)留按鍵的掃描碼就當(dāng)作功能操作調(diào)節(jié)時的信息代碼,。
3 鍵盤方案及硬件設(shè)計
3.1 鍵盤方案設(shè)計
數(shù)字化B超鍵盤由字母數(shù)字(Alphanumeric)鍵,、功能鍵、功能調(diào)節(jié)編碼器,、總增益調(diào)節(jié)編碼器,、八段TGC(時間增益補償,Time Gain Compensation)調(diào)節(jié)電位器等幾部分組成,,如圖1所示,。
按鍵總數(shù)為88個,且需今后擴充,,故采用行列結(jié)構(gòu),,字母數(shù)字鍵的掃描碼參照標(biāo)準(zhǔn)鍵盤設(shè)計,功能鍵則直接使用字母數(shù)字鍵除外的掃描碼,,這樣B超鍵盤相當(dāng)于在標(biāo)準(zhǔn)鍵盤的基礎(chǔ)上增加編碼器處理和TGC電位器數(shù)據(jù)采集兩個模塊,。
編碼器輸出具有A相、B相的方波正交信號,,而且二者相序取決于編碼器的正反轉(zhuǎn)方向,,文獻(xiàn)中對原理及處理方法有詳細(xì)描述。不同的是,,只用鑒相器,,兩個編碼器正轉(zhuǎn)時產(chǎn)生的脈沖信號分別輸出至,反轉(zhuǎn)時分別輸出至
,。
8個TGC電位器以前采用8通道并行ADC或單通道ADC+8選1模擬開關(guān)完成模擬量到數(shù)字量的轉(zhuǎn)換,,占用單片機I/O口較多,電路接口復(fù)雜,,現(xiàn)采用串行8通道ADC,,控制簡單,跟MAX111相比不需要轉(zhuǎn)換時間,,而且集成度更高。
3.2 硬件設(shè)計
鍵盤硬件電路由單片機W78E052D,、串行AD轉(zhuǎn)換器TLC0838,、可編程器件XC9536XL和兩片3-8譯碼器74HC138等組成,如圖2所示,。
W78E052D是臺灣新唐科技(Nuvoton)推出的一款寬電壓(2.4-5.5 V)低功耗CMOS8位單片機,,指令系統(tǒng)與8052完全兼容,。PLCC44封裝的W78E052D片內(nèi)含8KB的可編程的Flash只讀程序存儲器,256字節(jié)RAM,,4個8位雙向,、可位尋址的I/O口,一個附加的4位I/O口P4,,3個16位定時/計數(shù)器,,一個硬件看門狗定時器及一個串行口。比傳統(tǒng)8051增加了兩個外中斷,,可滿足接入4個外中斷信號的需求,。
TLC0838是TI公司生產(chǎn)的8位逐次逼近模數(shù)轉(zhuǎn)換器。具有輸入可配置的多通道多路器和串形輸入輸出方式,。由于TLC0838采用的是串行輸入結(jié)構(gòu),,因此封裝體積小,可節(jié)省51系列單片機I/O資源,,價格也較適中,。因8個通道全部使用,故其多路器由軟件配置為單端輸入,。
編碼器輸出正交的信號經(jīng)CPLD(XC9636XL)作倍頻鑒相轉(zhuǎn)換成單片機能接收的脈沖信號,,單片機的處理工作得以簡化。兩個編碼器共輸出4路信號,,以此作為單片機的外部中斷源,。在CPLD中還擴展了6個輸出口用于指示Depth、Zoom,、Focus,、LP、A-Pwr調(diào)節(jié)功能是否可用及圖像是否處于凍結(jié)狀態(tài),。
鍵盤按鍵以行列形式排成16x8矩陣,,輸出列線16根,輸入檢測行線8根,,最多支持128鍵,,每個行列線交叉處設(shè)置一個按鍵。為了減少I/O的占用,,采用兩片3-8譯碼器(74HC138)實現(xiàn)4-16譯碼,,給A11-A8依次輸出0000、0001,、0010,、0011、0100、1000,、1001,、1010、1011,、1100,、1101、1110,、1111,,即可依次拉低列線S00-S015,同時讀取行線P1口,,行線為低代表當(dāng)前拉低的列線與該行線交叉處的按鍵被按下,。比采用接口芯片,成本更低,。
4 軟件設(shè)計
4.1 主程序設(shè)計
軟件設(shè)計部分的主程序流程如圖3所示,。
主程序完成初始化后,進(jìn)人命令查詢處理,,不斷查詢有沒有來自計算機的命令,,有則應(yīng)答并處理,接著檢查鍵掃標(biāo)志,,有鍵掃標(biāo)志(即=1)則進(jìn)行鍵盤處理,,否則繼續(xù)查詢命令。
鍵盤處理流程如下:在實時狀態(tài),,對TGC電位器進(jìn)行AD采樣,,并與上一次結(jié)果比較,有變化則發(fā)送給計算機,,凍結(jié)狀態(tài)跳過TGC處理,;接著判斷掃描編碼器旋轉(zhuǎn)標(biāo)志位,有則以鍵碼形式發(fā)送給主機,;然后掃描鍵盤陣列,,有鍵按下或釋放,則以查表方式取得掃描碼,,并發(fā)給計算機,。
鍵盤掃描采用定時器0中斷方式,晶體頻率為24 MHz按方式1工作,,最大定時時間為32.768ms,,定時器中實現(xiàn)計數(shù)3次,可定時98.3ms,,以此作鍵盤處理周期,,定時間到則將鍵盤掃描標(biāo)志置為1,。
4.2 外中斷程序設(shè)計
新增的2個中斷,其中斷信號由P4口輸入,,中斷功能/狀態(tài)通過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ù)程序源代碼如下:
4.3 初始化及命令查詢處理
初始化過程是設(shè)計過程中需要注意的,。計算機啟動過程跟主板有關(guān),,因為主機在總線上有優(yōu)先權(quán),通信過程發(fā)生異常,,將禁用設(shè)備,,而且目前找不到介紹計算機啟動過程中對鍵盤操作細(xì)節(jié)的描述,所以本部分的設(shè)計是難點,。
經(jīng)過試驗發(fā)現(xiàn),,上電后,鍵盤完成白檢即發(fā)送代碼0AAH給計算機,,計算機在啟動過程中可以進(jìn)行復(fù)位,、讀ID、停止鍵掃,、使能鍵掃,、控制LED狀態(tài)等操作,而且有時計算機會拉低時鐘信號——抑制通訊,,在整個過程中,,只要主機認(rèn)為設(shè)備異常,將抑制通訊導(dǎo)致鍵盤無法使用而且不能進(jìn)入操作系統(tǒng),。
每個由計算機發(fā)送到鍵盤的數(shù)據(jù)都能從鍵盤獲得一個0FAH應(yīng)答的回應(yīng),,唯一例外的是鍵盤對Resend和Echo命令的回應(yīng)。在發(fā)送下一個字節(jié)給鍵盤之前,,主機要等待應(yīng)答,。鍵盤作為從設(shè)備,無法預(yù)先知道什么時候主機會發(fā)送控制命令,,一旦主機發(fā)送命令給設(shè)備,,設(shè)備沒有回應(yīng),主機即將該設(shè)備掛起,,除非重新開機,。
針對命令集,設(shè)計了專門的應(yīng)答子程序,,根據(jù)設(shè)備收到的命令,,作出相應(yīng)的回答和處理,。
經(jīng)邏輯分析儀測試、分析和反復(fù)驗證,,發(fā)現(xiàn)在主程序中插入命令查詢處理程序,,既能滿足初始化的要求,還可以保證鍵盤及時接收和處理來自主機的信息,,維持鍵盤設(shè)備正常工作,,命令查詢處理程序流程如圖4所示。這部分概括起來就是空出360μs的等待時間(15μsx20),,作查詢,,如果在這段時間內(nèi),數(shù)據(jù)線和時鐘線同時變?yōu)榈碗娖?,表示鍵盤有命令需發(fā)送,,設(shè)備產(chǎn)生時鐘以接收命令,并根據(jù)收到的命令做相應(yīng)的處理,。
4. 4 TGC數(shù)據(jù)處理
TGC數(shù)據(jù)發(fā)送實質(zhì)上是一個掃描碼的序列,,如第一個TGC增益數(shù)據(jù)為80,依次向計算機發(fā)送0x14 0x16 0x3E0x45 0xF0 0x14,,對應(yīng)鍵“L Ctrl”按下,、鍵“1”按下、鍵“8”按下,、鍵“0”按下,、鍵“L Ctrl”釋放的動作,超聲系統(tǒng)軟件實現(xiàn)解析,。實踐證明,,發(fā)送每個序列數(shù)據(jù)過程中兩個數(shù)據(jù)間至少應(yīng)延時1.06 ms。
上述組合不會引起計算機異常,,此前嘗試過其他組合,,在沒進(jìn)入超聲軟件時調(diào)節(jié)TGC易引起誤操作。
特別要注意的是:
1)開機時ADC采樣使能標(biāo)志清0,,禁止采集TGC,;
2)鍵盤上電完成初始化后開啟定時器1,聯(lián)合應(yīng)用定時器和計數(shù)器,,定時5 s,,時間到則ADC采樣使能標(biāo)志置1,可以采集TGC數(shù)據(jù),,TGC數(shù)據(jù)有變化則發(fā)送給計算機,;
3)設(shè)立轉(zhuǎn)換通道標(biāo)志碼,實時狀態(tài)每次鍵掃時根據(jù)標(biāo)志碼只進(jìn)行相對應(yīng)的一個電位器的模數(shù)轉(zhuǎn)換,,轉(zhuǎn)換后將轉(zhuǎn)換標(biāo)志碼指向下一通道,。
采用上述措施旨在解決因開機過程中鍵盤發(fā)送TGC數(shù)據(jù)和正常工作時TGC數(shù)據(jù)頻繁發(fā)送導(dǎo)致鍵盤死機問題,,頻繁發(fā)送數(shù)據(jù)以至主機認(rèn)為鍵盤異常而禁用鍵盤。
4.5 狀態(tài)同步處理
標(biāo)準(zhǔn)鍵盤上有Num Lock,,Caps Lock和Scroll Lock3個LED指示燈,,為了實現(xiàn)主機與鍵盤的狀態(tài)同步,采用了如下解決方案:鍵盤只發(fā)送Num Lock,、Caps Lock,、Scroll Lock按下或者釋放的代碼;根據(jù)按鍵情況,,主機發(fā)送專門用于指示鍵盤上Num Lock、Caps Lock和ScrollLo-ck3個LED狀態(tài)的指令,;鍵盤處理器收到指令后刷新指示燈,。
設(shè)計中凍結(jié)鍵使用Scroll Lock以保持狀態(tài)同步。
Depth,、Zoom,、Focus、I.P,、A-Pwr與功能調(diào)節(jié)編碼器組合使用,,5個按鍵中每次只有1個激活,激活時led指示燈亮,,按鍵狀態(tài)則由鍵盤MCU寄存和切換控制,,不同功能激活時調(diào)節(jié)編碼器產(chǎn)生不同的鍵碼,如:Depth激活時編碼器左旋產(chǎn)生“KP-”按下的代碼,,右旋則產(chǎn)生“KP +”按下代碼,;Zoom激活時編碼器左旋產(chǎn)生“Page Up”按下的代碼,右旋則產(chǎn)生“Page Down”按下代碼,。該方法成功解決了狀態(tài)同步問題,。
5 結(jié)論
對基于W78E052D單片機設(shè)計的PS2鍵盤方案、硬件和軟件設(shè)計做了詳細(xì)闡述,,命令查詢,、TGC和狀態(tài)同步處理對自行設(shè)計非標(biāo)PS2鍵盤有借鑒意義,在整個設(shè)計過程中,,通過不斷改進(jìn)硬件和調(diào)試軟件,,得到了預(yù)期的效果。相對于采用多片MCU分別處理幾個模塊最終通過USB集線器同PC主機通訊的方案,,接口更簡單,,成本更低,而且不需要專門開發(fā)鍵盤驅(qū)動程序,。在需要3個以上編碼器的應(yīng)用中,,編碼器處理方案有待于進(jìn)一步改進(jìn),。