<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話 > 調(diào)試初級(jí)階段之二--如何讓鍵盤、顯示正常

          調(diào)試初級(jí)階段之二--如何讓鍵盤、顯示正常

          —— 調(diào)試初級(jí)階段之二—如何讓鍵盤、顯示正常
          作者: 時(shí)間:2014-07-08 來(lái)源:網(wǎng)絡(luò) 收藏

            調(diào)試之一說(shuō)明如何讓系統(tǒng)成功運(yùn)行。分別列出了幾種不同的應(yīng)對(duì)之策。

          本文引用地址:http://www.ex-cimer.com/article/249400.htm

            調(diào)試之二說(shuō)明、等簡(jiǎn)單的外圍設(shè)備出現(xiàn)問(wèn)題時(shí)如何快速分析出故障點(diǎn),同時(shí)提出幾種應(yīng)對(duì)之策。

            調(diào)試:

            硬件部分總體來(lái)說(shuō)很簡(jiǎn)單,無(wú)非就是檢測(cè)跳變。高電平跳轉(zhuǎn)到低電平,低電平跳轉(zhuǎn)到高電平,或者是掃描式的跳變檢測(cè)。

            ▲:對(duì)于直接式的鍵盤解法,一般只要用萬(wàn)用表測(cè)量相應(yīng)的,看看是否按鍵前后是否有電平變化就可以判斷出硬件是否有問(wèn)題。為什么要檢測(cè)這一步呢?因?yàn)槲覀兊陌存I也還是可能存在質(zhì)量問(wèn)題,如果你拿到的按鍵是一個(gè)壞的按鍵,無(wú)論你怎么按都不會(huì)產(chǎn)生跳變,那么你的程序如果得到正確的結(jié)果?還有一點(diǎn)就是假定你的按鍵是好的,但是,你把線接錯(cuò)了,也會(huì)發(fā)生故障。目前我們使用的按鍵一般是四條腿的按鍵,其中分別兩條腿可以看作一個(gè)引腳,所以,有可能會(huì)存在接錯(cuò)的情況。

            △:焊接按鍵之前,先用萬(wàn)用表找到按鍵的兩個(gè)引腳,焊接之前就必須判斷按鍵前后鍵盤兩個(gè)引腳之間存在變化,具體就是用萬(wàn)用表的電阻檔或者二極管檔,如果按下,兩個(gè)引腳之間短路,不按時(shí),引腳之間開路,表明按鍵本身是好的。焊接以后,用萬(wàn)用表或者示波器檢測(cè)是否在按鍵前后存在電平的差異。

            ▲:行列式的鍵盤處理。由于程序工作時(shí)行列式的鍵盤引腳之間的信號(hào)是一個(gè)變化的。所以,行列式鍵盤的調(diào)試復(fù)雜一些,需要程序的配合處理。


          如圖式,上圖為4*4的行列式鍵盤,節(jié)點(diǎn)處為按鍵。右邊電阻為4.7K—10K均可,可以看出沒(méi)有任何按鍵按下時(shí),P5—P8應(yīng)當(dāng)為低電平。 正常程序掃描過(guò)程如下:

            ① 先P1,P2,P3,P4 全部送高電平

           ?、?然后檢測(cè)P5,P6,P7,P8的狀態(tài)

           ?、?如果有鍵按下,則P5,P6,P7,P8至少會(huì)有一個(gè)不再為0

           ?、?此時(shí)則開始P1,P2,P3,P4分別送高電平掃描處理……

            從硬件和軟件的處理可以看出,如果要判斷按鍵是否正常,則在①之后,②之前程序需要停下來(lái)。此時(shí) P1—P4 四個(gè)端口全部送出的是高電平,那么沒(méi)有鍵按下時(shí),P5—P7之間應(yīng)該是低電平,否則對(duì)應(yīng)列引腳有高電平。

            △:在判斷出按鍵好壞之后焊接到電路板。然后運(yùn)行程序到①之后,讓程序進(jìn)入死循環(huán),保留在當(dāng)前狀態(tài),然后分別測(cè)量每一個(gè)按鍵是否正常。這里拿P1和P5之間的按鍵說(shuō)明。P1和P5之間的按鍵未按下時(shí),P5上的電平是低電平,按下后,P5上的點(diǎn)評(píng)將變?yōu)楦唠娖?,如果沒(méi)有這種變化,則表明電路出錯(cuò)或者是按鍵損壞(可能在焊接過(guò)程中損壞)又或者是焊接問(wèn)題。

            調(diào)試:

            部分分為8段式發(fā)光數(shù)碼管和發(fā)光二極管兩種。兩種顯示裝置都是利用發(fā)光二極管的特性,所以,他們的硬件檢測(cè)理論上是一致的。

            △:通常在使用前,兩種發(fā)光管都應(yīng)當(dāng)經(jīng)過(guò)檢測(cè)是否好壞。具體使用萬(wàn)用表的二極管檔,表筆正極接二極管正極,表筆負(fù)極接二極管負(fù)極,此時(shí)可以看到二極管被點(diǎn)亮。 發(fā)光二極管驅(qū)動(dòng)分為驅(qū)動(dòng),VCC驅(qū)動(dòng)。值得注意的是,VCC驅(qū)動(dòng)的話,一定要加限流電阻,否則發(fā)光二極管必定會(huì)被燒毀。IO驅(qū)動(dòng)的話,要分開來(lái)看,如果是灌電流驅(qū)動(dòng),一定要加限流電阻,因?yàn)楣嚯娏魍ǔ?梢赃_(dá)到幾十毫安。如果是拉電流驅(qū)動(dòng)的話,就要根據(jù) IO 驅(qū)動(dòng)能力來(lái)判斷了。如果是拉電流小于5毫安的,不加限流電阻也可以驅(qū)動(dòng),如果大于10毫安,則一定需要加限流電阻,經(jīng)過(guò)實(shí)驗(yàn),10毫安以上的拉電流驅(qū)動(dòng)的話,時(shí)間長(zhǎng)了以后發(fā)光二極管會(huì)損壞。值得注意的是,如果用的是 IO 直接驅(qū)動(dòng)不加限流電阻,測(cè)量IO口電平的時(shí)候,如果是0.7V左右就表明已經(jīng)輸出了高電平,因?yàn)槎O管的鉗位作用電壓被鉗在0.7V了。添加限流電阻的話就不存在這種情況。

            ▲:使用 8 段數(shù)碼管的時(shí)候,發(fā)生了某一段從來(lái)不亮,又或者某一段從來(lái)不滅。

            △:此時(shí)有幾種可能性。從來(lái)不亮,是否存在虛焊,虛焊為開路的話,對(duì)應(yīng)段是不會(huì)亮的。從來(lái)不滅,是否存在短路。如果和VCC或者GND短路了,可能發(fā)生從來(lái)從來(lái)不亮和從來(lái)不滅,具體看你的驅(qū)動(dòng)方式。檢測(cè)時(shí),應(yīng)當(dāng)采用測(cè)量 IO 驅(qū)動(dòng)腳和數(shù)碼管引腳相結(jié)合的方式來(lái)判斷是否硬件問(wèn)題。舉例來(lái)說(shuō),74HC595輸出驅(qū)動(dòng)共陰極數(shù)碼管,有限流電阻,公共端接地。如果測(cè)量IO口上為高電平,而此時(shí)對(duì)應(yīng)的段不亮,則表明兩種情況,要么對(duì)應(yīng)段對(duì)地短路,要么對(duì)應(yīng)段連接線路中存在開路,開路要么是線斷了,比如過(guò)孔不通,要么是焊接虛焊開路,需要逐一排查。

            調(diào)制之三準(zhǔn)備說(shuō)說(shuō)串口如何調(diào)試。由于串口調(diào)試過(guò)于復(fù)雜,專門做一章講解。

          DIY機(jī)械鍵盤相關(guān)社區(qū):機(jī)械鍵盤DIY


          萬(wàn)用表相關(guān)文章:萬(wàn)用表怎么用




          關(guān)鍵詞: 鍵盤 IO 顯示

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();