www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 智能硬件 > 智能硬件
[導(dǎo)讀]本文介紹了一種單片機(jī)系統(tǒng)與標(biāo)準(zhǔn)PC鍵盤接口模塊,并詳細(xì)介紹了該模塊的工作原理與軟件編程思想。

摘 要: 本文介紹了一種單片機(jī)系統(tǒng)與標(biāo)準(zhǔn)PC鍵盤接口模塊,并詳細(xì)介紹了該模塊的工作原理與軟件編程思想。
關(guān)鍵詞: 單片機(jī)系統(tǒng);PC鍵盤;接口模塊;輸入;FIFO

概述
    在單片機(jī)系統(tǒng)中,當(dāng)輸入按鍵較多時(shí),在硬件設(shè)計(jì)和軟件編程之間總存在著矛盾。對(duì)于不同的單片機(jī)系統(tǒng)需要進(jìn)行專用的鍵盤硬件設(shè)計(jì)和編程調(diào)試,通用性差,使項(xiàng)目開(kāi)發(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ù)雜過(guò)程,大大簡(jiǎn)化了上位單片機(jī)系統(tǒng)的輸入設(shè)計(jì);它實(shí)現(xiàn)了類似DOS操作系統(tǒng)中鍵盤中斷服務(wù)程序的功能,使設(shè)計(jì)人員只需關(guān)心接收按鍵的結(jié)果,并可使用標(biāo)準(zhǔn)的鍵盤編碼進(jìn)行編程;它要求上位單片機(jī)通過(guò)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ī)通過(guò)鍵盤插頭相接,鍵盤插頭有5芯大插頭和6芯小插頭(PS/2接口)兩種。接口信號(hào)有:電源、地、鍵盤時(shí)鐘KB_CLK、鍵盤數(shù)據(jù)KB_DAT。正常工作時(shí),鍵盤電路不斷地掃描鍵盤矩陣。若有鍵按下,則以串行方式發(fā)送按鍵的位置掃描碼給主板鍵盤接口電路。按下鍵時(shí),發(fā)送接通掃描碼,松開(kāi)鍵時(shí),發(fā)送該鍵的斷開(kāi)掃描碼。斷開(kāi)掃描碼一般是在接通掃描碼前加一個(gè)斷開(kāi)標(biāo)志字節(jié)F0H。若某鍵一直按下,則以按鍵重復(fù)率連續(xù)發(fā)送該鍵的接通掃描碼。掃描碼與按鍵的位置有關(guān),與該鍵的ASCII碼并無(wú)對(duì)應(yīng)關(guān)系。表1第二列給出經(jīng)實(shí)際測(cè)試得到的若干按鍵的位置掃描碼。由表1可見(jiàn),根據(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鍵盤與該模塊通過(guò)專用插座相連,數(shù)據(jù)KB_DAT接到AT89C2051的P3.0引腳,時(shí)鐘KB_CLK接到引腳。在PC鍵盤有鍵按下時(shí),KB_CLK信號(hào)會(huì)引起AT89C2051的連續(xù)中斷,通過(guò)定時(shí)器T0與外中斷的協(xié)同工作,可將PC鍵盤發(fā)出的位置掃描碼序列接收至緩沖區(qū)中。然后,在主程序中將位置掃描碼解碼、查表?yè)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ù)程序用來(lái)將碼值的一位移入緩沖區(qū)中,T0溢出的中斷服務(wù)程序主要用來(lái)判斷一次按鍵所發(fā)出的碼是否已全部接收。系統(tǒng)設(shè)置T0的定時(shí)間隔為5ms,并在系統(tǒng)啟動(dòng)后就開(kāi)始定時(shí)。由于在正常接收每個(gè)按鍵的碼值序列過(guò)程中,鍵盤發(fā)送的每位數(shù)據(jù)間隔不會(huì)大于5ms,因此在每次中斷服務(wù)中,首先要判斷T0是否溢出過(guò),若曾經(jīng)溢出,則認(rèn)為該次中斷是一次新碼值接收的開(kāi)始,需將位計(jì)數(shù)器清零,否則只需移入一位數(shù)據(jù)即可,然后重新啟動(dòng)定時(shí)器,退出中斷服務(wù)程序。在新按鍵碼值序列接收完成后,設(shè)置blnDataValid標(biāo)志,以通知主程序。

主程序的工作原理
    主程序主要有四個(gè)任務(wù):①將鍵盤接收緩沖區(qū)的位置掃描碼通過(guò)查表等算法換成統(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ī)碼值傳送的握手交互過(guò)程。主程序的流程圖如圖4所示。

    在主程序中檢測(cè)到blnDataValid標(biāo)志后,即說(shuō)明在鍵盤接收緩沖區(qū)中已接收到一個(gè)新的位置掃描碼序列,程序根據(jù)這個(gè)序列的不同特點(diǎn)做不同的處理,最后再根據(jù)硬件跳線的設(shè)置得到相應(yīng)按鍵的Windows虛擬鍵代碼或ASCII碼與OEM掃描碼,圖4中的跳線接至“W”位時(shí),編碼為Windows虛擬鍵代碼。虛擬鍵代碼是Windows系統(tǒng)中引入的一組按鍵編碼常量,每一個(gè)按鍵都有惟一的碼值與之對(duì)應(yīng)。ASCII碼與OEM掃描碼則是在DOS系統(tǒng)定義的,但在Windows系統(tǒng)中沿用的按鍵碼值定義,每一個(gè)按鍵都有兩個(gè)碼值與之對(duì)應(yīng),對(duì)于功能鍵,例如F1、HOME、UP等,只存在OEM掃描碼,其ASCII碼為0,參見(jiàn)表1。

    FIFO棧是程序中設(shè)置的發(fā)送緩沖區(qū),它是按“先進(jìn)先出”原則建立的32字節(jié)循環(huán)隊(duì)列,有一個(gè)隊(duì)列頭指針和一個(gè)隊(duì)列尾指針。進(jìn)隊(duì)列時(shí),編碼數(shù)據(jù)進(jìn)入由隊(duì)列尾指針?biāo)竼卧?,同時(shí)隊(duì)列尾指針增量,指向下一個(gè)單元,當(dāng)數(shù)據(jù)不斷進(jìn)入隊(duì)列,使尾指針指向隊(duì)列末端時(shí),尾指針循環(huán)重新繞回隊(duì)列始端;出隊(duì)列時(shí),編碼數(shù)據(jù)從隊(duì)列頭指針?biāo)傅膯卧〕觯瑫r(shí)隊(duì)列頭指針增量,指向下一個(gè)單元,在頭指針指向隊(duì)列末端時(shí),也要重新繞回隊(duì)列始端,但頭指針始終不能“超過(guò)”尾指針。如果按鍵速度快于上位單片機(jī)接收碼值的速度,有可能尾指針繞回后與頭指針再次相等,這時(shí)表明隊(duì)列已滿,不能再存入數(shù)據(jù),如果此時(shí)再有鍵按下,那么棧溢出指示燈將點(diǎn)亮。

    在系統(tǒng)中設(shè)立了三個(gè)標(biāo)志分別對(duì)應(yīng)于CAPS LOCK鍵、NUM LOCK鍵及SCROLL LOCK鍵的狀態(tài),每次有這三個(gè)鍵按下時(shí),程序都要翻轉(zhuǎn)相應(yīng)標(biāo)志,然后向鍵盤發(fā)送EDH命令,命令鍵盤對(duì)其上的三個(gè)LED指示燈做相應(yīng)激勵(lì)。
在向上位單片機(jī)發(fā)送FIFO棧首的碼值之前要先檢測(cè)ACK信號(hào)狀態(tài)以確定上位單片機(jī)是否已取走上次碼值。若ACK信號(hào)有效,則將碼值鎖存在P1口上,然后由P3.7產(chǎn)生模擬的時(shí)鐘脈沖信號(hào),一方面將8位并行碼值置入串-并轉(zhuǎn)換芯片(74LS165)中,另一方面將觸發(fā)器(74LS74)置為1,使端變?yōu)?,為上位單片機(jī)提供碼值準(zhǔn)備好(PS_READY#)的狀態(tài)信號(hào),并點(diǎn)亮指示燈。在上位單片機(jī)中,可查詢此狀態(tài)信號(hào)也可利用此狀態(tài)信號(hào)申請(qǐng)中斷。上位單片機(jī)若采用并行接口方法,則發(fā)出讀緩沖器信號(hào)(P_RD#)和片選信號(hào)(P_CS#),便可通過(guò)三態(tài)緩沖器(74LS244)取得鍵值;若采用串行接口方法,則需發(fā)出串行時(shí)鐘(S_CLK),從74LS165的串行數(shù)據(jù)端(S_DAT)讀回8位碼值。在上位單片機(jī)讀取完當(dāng)前的鍵值后,ACK信號(hào)將由握手邏輯自動(dòng)置為有效,系統(tǒng)可通過(guò)檢測(cè)ACK信號(hào)的狀態(tài)以發(fā)送下一個(gè)碼值。

圖4 主程序流程圖

結(jié)語(yǔ)
     實(shí)踐證明應(yīng)用該模塊不但可大大地簡(jiǎn)化鍵盤輸入電路及程序設(shè)計(jì),而且在使用高級(jí)語(yǔ)言書(shū)寫程序時(shí)更加方便。該模塊可識(shí)別標(biāo)準(zhǔn)PC鍵盤上的所有按鍵,并能自動(dòng)考慮SHIFT、NUMLOCK及CAPLOCK鍵對(duì)編碼的影響。對(duì)于DOS系統(tǒng)中CRTL+按鍵、ALT+按鍵等組合鍵,該模塊并未考慮,但相對(duì)上位的單片機(jī)系統(tǒng)而言,目前所提供的按鍵數(shù)量已足夠用了。

參考文獻(xiàn)
1 榮振,梁華,王春生.單片機(jī)擴(kuò)展標(biāo)準(zhǔn)微機(jī)鍵盤的技術(shù).微型機(jī)與應(yīng)用,2000(7)
2 于印泉,佴曉東,王兆娟.單片機(jī)與PC鍵盤接口.內(nèi)燃機(jī)車,2000(5)

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉