51單片機(jī)系統(tǒng)與標(biāo)準(zhǔn)PC鍵盤的接口模塊設(shè)計(jì)
概述
在單片機(jī)系統(tǒng)中,當(dāng)輸入按鍵較多時(shí),在硬件設(shè)計(jì)和軟件編程之間總存在著矛盾。對(duì)于不同的單片機(jī)系統(tǒng)需要進(jìn)行專用的鍵盤硬件設(shè)計(jì)和編程調(diào)試,通用性差,使項(xiàng)目開發(fā)復(fù)雜化。標(biāo)準(zhǔn)PC鍵盤在工藝與技術(shù)上都已相當(dāng)成熟,而且工作穩(wěn)定,價(jià)格低廉。本設(shè)計(jì)實(shí)現(xiàn)了一個(gè)接口模塊,它將標(biāo)準(zhǔn)PC鍵盤發(fā)出的位置掃描碼,變換為標(biāo)準(zhǔn)的ASCII碼和OEM掃描碼或Windows虛擬鍵代碼,再以并行或串行方式傳送給上位單片機(jī)。
接口模塊的特點(diǎn)
該模塊在PC鍵盤與上位單片機(jī)之間起轉(zhuǎn)換作用,它屏蔽了與PC鍵盤進(jìn)行數(shù)據(jù)和命令交互的復(fù)雜過程,大大簡化了上位單片機(jī)系統(tǒng)的輸入設(shè)計(jì);它實(shí)現(xiàn)了類似DOS操作系統(tǒng)中鍵盤中斷服務(wù)程序的功能,使設(shè)計(jì)人員只需關(guān)心接收按鍵的結(jié)果,并可使用標(biāo)準(zhǔn)的鍵盤編碼進(jìn)行編程;它要求上位單片機(jī)通過8位并行接口與其相接,對(duì)于不能提供并行接口的系統(tǒng),可使用SPI兼容的同步串行接口與其相接,特別是對(duì)于那些希望占用單片機(jī)的系統(tǒng)資源少而需要擴(kuò)展的鍵數(shù)較多、儀器整體需要美觀大方的應(yīng)用場(chǎng)合,其性能價(jià)格比更具優(yōu)勢(shì)。該模塊與單片機(jī)系統(tǒng)的連接關(guān)系如圖1所示,在圖中也給出與上位單片機(jī)相接的20腳接插件的信號(hào)定義。
計(jì)算機(jī)中標(biāo)準(zhǔn)PC機(jī)鍵盤的工作原理
圖1 該模塊與上位單片機(jī)系統(tǒng)的連接關(guān)系及信號(hào)定義
圖2 鍵盤接口時(shí)序(a) 鍵盤發(fā)送時(shí)序;(b) 鍵盤接收時(shí)序
圖3 單片機(jī)系統(tǒng)與標(biāo)準(zhǔn)PC鍵盤接口模塊原理框圖
鍵盤與主機(jī)通過鍵盤插頭相接,鍵盤插頭有5芯大插頭和6芯小插頭(PS/2接口)兩種。接口信號(hào)有:電源、地、鍵盤時(shí)鐘KB_CLK、鍵盤數(shù)據(jù)KB_DAT。正常工作時(shí),鍵盤電路不斷地掃描鍵盤矩陣。若有鍵按下,則以串行方式發(fā)送按鍵的位置掃描碼給主板鍵盤接口電路。按下鍵時(shí),發(fā)送接通掃描碼,松開鍵時(shí),發(fā)送該鍵的斷開掃描碼。斷開掃描碼一般是在接通掃描碼前加一個(gè)斷開標(biāo)志字節(jié)F0H。若某鍵一直按下,則以按鍵重復(fù)率連續(xù)發(fā)送該鍵的接通掃描碼。掃描碼與按鍵的位置有關(guān),與該鍵的ASCII碼并無對(duì)應(yīng)關(guān)系。表1第二列給出經(jīng)實(shí)際測(cè)試得到的若干按鍵的位置掃描碼。由表1可見,根據(jù)鍵的按下或釋放及所按鍵的不同,這個(gè)序列可以是1、2、3、4、6、或8字節(jié),可稱之為位置掃描碼序列。
標(biāo)準(zhǔn)鍵盤與主機(jī)的通信是雙向的,并采用11位的串行異步通信格式,這11位數(shù)據(jù)包括:起始位0、8位數(shù)據(jù)位(LSB在先)、奇校驗(yàn)位P、停止位1。圖2(a)給出了鍵盤發(fā)送時(shí)序。數(shù)據(jù)(KB_DAT)在時(shí)鐘(KB_CLK)的上升沿改變,下降沿時(shí)有效,可被主機(jī)讀取。圖2(b)給出鍵盤接收時(shí)序。主機(jī)發(fā)送前,先將KB_CLK拉低,以抑制鍵盤發(fā)送,再將KB_DAT拉低發(fā)送起始位,然后釋放KB_CLK線,鍵盤接管KB_CLK并產(chǎn)生時(shí)鐘信號(hào),主機(jī)在KB_CLK信號(hào)同步下發(fā)送其他位。
標(biāo)準(zhǔn)PC鍵盤接口模塊的工作原理
基本工作原理概述
該模塊的原理框圖如圖3所示。PC鍵盤與該模塊通過專用插座相連,數(shù)據(jù)KB_DAT接到AT89C2051的P3.0引腳,時(shí)鐘KB_CLK接到引腳。在PC鍵盤有鍵按下時(shí),KB_CLK信號(hào)會(huì)引起AT89C2051的連續(xù)中斷,通過定時(shí)器T0與外中斷的協(xié)同工作,可將PC鍵盤發(fā)出的位置掃描碼序列接收至緩沖區(qū)中。然后,在主程序中將位置掃描碼解碼、查表換算,再編碼成一字節(jié)的WINDOWS虛擬鍵代碼或兩字節(jié)的OEM掃描碼與ASCII碼,并存入系統(tǒng)中FIFO棧。在上位單片機(jī)可以接收新鍵值時(shí),將FIFO棧中編碼數(shù)據(jù)以并行或串行方式傳送給上位單片機(jī)。
為了能更清楚地指示系統(tǒng)當(dāng)前的工作狀態(tài),在硬件上加裝了電源、正在解碼、FIFO棧溢出、碼值準(zhǔn)備好等指示燈。
中斷解碼的工作原理
由于鍵盤的按鍵輸入是隨機(jī)的,為了能實(shí)時(shí)地響應(yīng),在程序中使用定時(shí)器T0中斷和中斷協(xié)同工作,將位置掃描碼序列恢復(fù)至鍵盤接收緩沖區(qū)中。中斷服務(wù)程序用來將碼值的一位移入緩沖區(qū)中,T0溢出的中斷服務(wù)程序主要用來判斷一次按鍵所發(fā)出的碼是否已全部接收。系統(tǒng)設(shè)置T0的定時(shí)間隔為5ms,并在系統(tǒng)啟動(dòng)后就開始定時(shí)。由于在正常接收每個(gè)按鍵的碼值序列過程中,鍵盤發(fā)送的每位數(shù)據(jù)間隔不會(huì)大于5ms,因此在每次中斷服務(wù)中,首先要判斷T0是否溢出過,若曾經(jīng)溢出,則認(rèn)為該次中斷是一次新碼值接收的開始,需將位計(jì)數(shù)器清零,否則只需移入一位數(shù)據(jù)即可,然后重新啟動(dòng)定時(shí)器,退出中斷服務(wù)程序。在新按鍵碼值序列接收完成后,設(shè)置blnDataValid標(biāo)志,以通知主程序。
主程序的工作原理
主程序主要有四個(gè)任務(wù):①將鍵盤接收緩沖區(qū)的位置掃描碼通過查表等算法換成統(tǒng)一編碼的一個(gè)字節(jié)Windows虛擬鍵代碼或兩個(gè)字節(jié)的OEM掃描碼與ASCII碼;②根據(jù)系統(tǒng)中CAPS LOCK鍵、NUM LOCK鍵及SCROLL LOCK鍵的狀態(tài)信息控制鍵盤上三個(gè)指示燈的亮滅;③系統(tǒng)中設(shè)立的FIFO棧的維護(hù);④與上位單片機(jī)碼值傳送的握手交互過程。主程序的流程圖如圖4所示。
評(píng)論