自學單片機第二十七篇:矩陣按鍵的硬體測試

2020-12-09 小亮談電氣

我們繼續來說矩陣按鍵的問題,這次是用在實際電路中的。在仿真中我們沒有發現問題,但是文章最後我提出了,這個電路在實際應用中一定是存在問題的,那麼問題在哪裡呢?

這是我們分析的電路。

前幾篇我們也對硬體進行了測試,我們可以發現,仿真沒有問題,但是凡是按鍵開關,在實際應用中,都會出現按鍵按下響應不穩定的情況,我們稱之為抖動,在實際應用中,抖動的問題,是一定存在的,無論電路優化的多麼完美,那麼我們在現在這個階段,如何處理呢,依然是採用軟體延時消抖大法。

對這個方法不是很熟悉的,可以翻閱前期文章,我們此處不再詳細展開。就直接使用了。抖動的發生,是我們檢測到按鍵的變化開始的,也就是檢測到按鍵發生改變,接著就要消抖了。

P1=0xef; //第四行1110 1111

if(P1!=0xef){keyJS();}

這是我們按鍵檢測的代碼,第一行代碼我們對行進行了置零,然後檢測是那一列發生了改變。當我們檢測到按鍵被按下時,就進入了判斷語句,也就是這個時候,需要進行按鍵的消抖了。為了方便理解,我先把消抖寫在外邊。

原本我們判斷後就會直接進行按鍵的計算輸出,但是這樣就會造成一次按下,卻輸出了三次以上的結果,在有些場合是不行的,會觸發誤動作,所以我們就需要消抖操作。我們這裡採用的是延時消抖的方法,在掃描時,先讓行置零,然後判斷置零後是否有按鍵按下,如果有按鍵按下,那麼此時P1的埠值就會與設定的存在不同,通過判斷不同,來進入判斷語句,為了防止抖動影響,我們先讓按鍵的鍵值保存起來,然後等待一段時間,接著判斷當前的P1值與之前保存的是否一致,如果一致,就認為按鍵按下了,並且已經穩定,然後就可以執行按鍵處理程序了,處理完,為了防止按鍵的連續重複操作,我們需要對按鍵的抬起進行監控,當檢測到按鍵已經抬起,此時緩存值會與P1不同,就會跳出循環,就不會出現長按按鍵,反覆檢測開關,導致連續動作。

好的理論有了,我們進行下仿真。先進行軟體仿真,出現錯誤方便修改。

軟體仿真打開後,導入程序,然後打開運行,首先出現的界面是所有埠都是高電位,P1的低四位在不斷的掃描。接著我們按下任意一個按鍵,按三次看下結果。

可以看到,上方的二極體顯示的是0000 0011,轉譯成十進位就是3.我們為了驗證測試下多次多個按鍵按下,就選擇中間八個按鍵依次按下。

此時顯示的是000 1011,翻譯成十進位就是8+2+1=11,我們操作了11次,顯示11,說明仿真沒有問題,至少證明程序可以實現功能,接下來我們使用電路板測試下。

在程序中運行完美的程序,到了我的電路板上就失控了。

完全沒有反應好不,什麼情況?難道要翻車?我一個好好的教程要變成一個維修課程了。這是我遇到的第一個故障,目前不清楚是硬體還是軟體故障,程序是兩天前寫的,外出兩天回來,第一次下載就這樣,我相信我的硬體應該不會有問題,因為矩陣按鍵很簡單,就是按鍵兩端連上線,然後連接到單片機上就可以了,而LED小燈就更簡單了。那麼消除故障的過程就這麼猝不及防的開始吧,因為後期製作過程中必然會遇到更多的問題。趁著小孩睡覺了,我來看看故障究竟出在哪裡。

我們比較方便的就是去判斷軟體的問題,因為程序出現問題的概率遠遠大於硬體。首先我先寫個測試的文件。新建一個工程吧。

語句就儘可能簡單,主要測試延時和按鍵響應問題。來判斷是否是硬體出了毛病。我會挨個判斷四個按鍵。

編譯後下載到單片機中。呦呵,沒有反應!難道是我太急躁,代碼有問題?我把代碼修改的簡單些。

嗯,這次基本就可以判斷是代碼的問題了,按下按鍵,LED就熄滅了。接下來是四個按鍵測試下。

這是四個按鍵,我先下載看下效果。

哎呦,不錯哦,說明按鍵是沒有毛病的。那就看之前的代碼了,檢查代碼也是個技術活。我們的測試文件中沒有體現出按鍵輸出的處理函數,這次就添加上按鍵處理函數。函數從代碼上沒有看出有什麼問題,通過循環判斷出符合哪一個,然後執行P0加一,然後返回,看似問題不在這裡。

好吧,程序下載好之後,確實沒有反應了。

if(key0==0)

{delay(3);if(key0==0)

{keyJS();while(key0==0);}}

這是判斷的代碼,我把key4置0了,然後再把key0置零,這時P1》01110111》0x77.

按照道理上說,此時應該可以執行才對,為什麼?

我們再把代碼寫的簡單些,看是不是我們程序的流程存在瑕疵。

再次編譯後下載到單片機中測試。我的老天,還是不行,問題不應該在代碼,這個代碼是不會有問題的,我要回過頭查下硬體了,先測試下當我按下P1.0時是否有0電位輸入。

這是按鍵沒有按下時的電壓。我用的是18650電池,電壓是3.9V正常的。

按下P1.0就變成了0V,這說明問題不在此處。

哎呦,電壓也沒有問題呢,什麼情況?我檢查下電路,首先是電源電路,對所有電源進行重現排查,然後重新插緊。再次測試下,然後好了。

這個問題出在哪裡呢?且待我細細分析一番,以免後期同樣故障無法排除。

。。。。。。。

嗯,知道問題在哪裡了,主要是麵包板的問題,因為我們這裡近段時間在下雨,估計南方的同志們也是如此,希望雨水趕快消停。由於天氣潮溼,我得麵包板的負極接線頭有些鏽蝕了,就造成了接觸電阻增加,平時點亮單個小燈還好,但是如果電流增加,例如我們做16個按鍵的掃描,然後8個LED的點亮,就會耗費大量的電流,此時電流的增加,就會造成接觸電阻分壓增加,繼而就會造成單片機電源電壓低於3.3V,處於假死狀態,然後所有埠就會復位,效果跟按下復位鍵一樣,就是硬體死機了。將插針處理好後,就可以了。此時我們之前的程序重新下載到單片機中,再次檢測一下。

指示燈000 1100

指示燈1000 1100

指示燈0100 1100

到這裡基本就可以看出來,代碼運行正常了。通過這次實際運行測試,我們可以看出,實際的操作可以讓我們學習到仿真無法帶來的知識。通過檢修,我們可以明白,往往硬體故障都是有原因的,這些原因都隱藏在電流、電壓這些數據之中。儘管使用PCB製作的板子會穩定很多,但是同樣你對電路的了解也就會少很多,最多知道這是幹什麼的,回頭就會忘記電路怎麼連了。而我們學習單片機的,只寫代碼是徒有靈魂,就像你知道火箭可以飛到月球,可是不會造,豈不是空談?總之好的軟體工程師,必然不會是硬體小白。

馬上放假了,可以多動手練習練習。

相關焦點

  • 自學單片機第二十六篇:矩陣按鍵
    當然是有的,我們之前十六篇的文章說過,輸出時可以通過動態掃描的方式來擴展設備數目。既然輸出可以完成,那麼反推輸入也是可以完成的。前輩們已經為我們鋪就了康莊大道,我們順著走就可以了。不再贅述如何實現掃描了,我們直接就按鍵來說明問題吧。與LED的排布方式相同,我們操作輸入也是一樣,也採用矩陣的方式來進行。
  • 自學單片機第十二篇上:首次測試設備——軟體測試
    準備階段,我們儘量讓第一次測試完整,可操作。由於準備比較多,講得儘可能詳細,所以分為兩篇,上篇是軟體測試,下篇是硬體測試。所有材料:1,安裝軟體的電腦,至少安裝了keil和ISP,keil用於編輯程序,ISP用於把程序下載到單片機中。
  • 自學單片機第九篇:基礎知識--計算機基礎操作
    首先,來捋下電腦上都有什麼硬體,先說,這個不是教修電腦的文章,不過用的時間長了,小毛病還是可以解決的,遇到難以解決的問題,我的絕招是重裝系統,此法就像,養了個狗,眼看著收拾不住了,果斷換條新狗或者擼個貓什麼的。說硬體。
  • 自學單片機第十篇:基礎知識--萬用表的使用
    我們學習硬體的話,萬用表要測量電阻,電壓,電流,有時還會測量各種元件的好壞,線束的通斷,可謂是左膀右臂的角色,當問題發生,首先想到的就是請出萬用表一頓操作,不過萬用表是好使,但使用中,還是應注意一些問題和操作手法,不然機毀就不是說說而已。
  • 自學單片機第二十四篇:混合輸入的硬體測試
    前文我們通過仿真測試了程序的運行效果,符合我們的思路,但是仿真並不能代替現實情況下的狀況,之前我們有些測試也說明了這個問題,所以在條件允許的情況下,我們會儘量在實物上對程序進行相應的測試,有些只有仿真沒有測試,是因為文章未通過導致的,可以在電氣學苑內瀏覽。
  • 自學單片機第五十九篇:按鍵的短按和長按
    在使用中,會經常遇到一些環境,我們在硬體上沒有辦法去設置更多的按鍵,因為空間位置不是很夠,設置太多的按鍵,就會造成按鍵很小,操作難度變大。尤其是一些我們使用的傳感器上,一般會集成一些簡單的功能,而在切換中就只有兩個按鍵或三個按鍵,這樣既方便又可以實現更多的選擇。
  • 自學單片機第十二篇下:首次測試設備——硬體
    上一篇介紹了編程軟體的測試,然後輸出了一個.hex文件,這次我們需要使用。接下來就開始硬體的介紹。搞單片機,硬體也是一大方面,很重要而且很難啃的一塊骨頭,要有心理準備。首先準備好下載器,我使用的一個USB-TTL的,注意購買時要看清,我們下載用的是TTL電平。
  • 單片機矩陣按鍵的設計
    一、矩陣按鍵的原理矩陣鍵盤一般是4*4的按鍵組成,當然也有其他的按鍵組合,這裡我們分析4*4的按鍵,其他組合原理類似。4*4的按鍵採用的行列掃描方式,也就是先預設埠的狀態,然後掃描行的狀態,檢測到掃描行的狀態以後,再次檢測掃描列的狀態。
  • 自學單片機第二十二篇:按鍵消抖的重要性
    或者我們想讓設備停止,單擊停止,變成了連擊,誰也不清楚,這個連擊在程序中會解讀成什麼不可預知的動作,抖動就是硬體工程師的一個坑,看不好,就會摔一跤。那今天我們就來說下按鍵抖動的哪些事情。之前我們說過了按鍵分為自鎖和自復位兩種,自鎖按鍵在按下後會保持不動,內部的按鍵自鎖結構比較牢靠,接觸也相對緊密。我們常用的是小型的按壓型的自鎖開關。
  • 自學單片機第二十九篇:標準鍵盤的應用
    之前我們已經就矩陣按鍵做了簡單的介紹。也對按鍵的工作原理進行了分析和實踐。今天,我們就4*4矩陣按鍵做一個詳細的介紹,因為生產生活中,使用最多的就是這類按鍵,我們可以把4*4按鍵作為一個模塊,拿來就用,市場上也有很多現成的模塊,我們需要了解其基本構造就可以使用了,主要是區分行和列。後期學習中斷後,會更加方便。
  • 國產遊戲神器 極限矩陣iPlay掌機評測
    極限矩陣iPlay掌機評測:外觀篇外觀設計方面,極限矩陣iPlay掌機看上去就像是一個7英寸的平板電腦+遊戲手柄的套裝產品,若不是遊戲搖杆與屏幕一體式的設計,極限矩陣iPlay掌機很容易就會讓人誤認為是一臺平板電腦。
  • 自學單片機第二十二篇:延時消抖
    按鍵的延時消抖是初學單片機的必經之路,因為只要是機械開關所傳遞的信號,都會存在波動,有時這些波動是"致命"的,所以消除其影響就是一門手藝了。硬體消抖有其優點,同樣的也有不方便的地方,開發成本高,操作難度大,可移植性差。軟體消抖就相對較好些,新手即可操作,延時消抖,並非消抖的最終最優方法,但好在簡單易懂,我們先認識消抖的方法和目的。
  • 自學單片機第二十二篇:延時消抖
    按鍵的延時消抖是初學單片機的必經之路,因為只要是機械開關所傳遞的信號,都會存在波動,有時這些波動是「致命」的,所以消除其影響就是一門手藝了。硬體消抖有其優點,同樣的也有不方便的地方,開發成本高,操作難度大,可移植性差。軟體消抖就相對較好些,新手即可操作,延時消抖,並非消抖的最終最優方法,但好在簡單易懂,我們先認識消抖的方法和目的。
  • hdmi矩陣8進8出面板按鍵操作
    hdmi矩陣需求的多樣化,才會衍生更多的功能;hdmi矩陣8進8出隨著需求方式多樣化,控制方式也呈現多樣化,hdmi矩陣8進8出具有面板控制,紅外遙控控制,手機平板控制 232串口控制,區域網控制 中控控制等多樣化的控制方式。今天給大家介紹的是hdmi矩陣8進8出面板按鍵操作。
  • 【.NET 與樹莓派】矩陣按鍵
    歡迎收看火星衛視,本期節目咱們嚴重探討一下矩陣按鍵。
  • 自學單片機第二十三篇:混合輸入
    我們的處理方式是,先置1,然後把按鍵值送給新的變量,判斷此時按鍵是否按下,若按下,則埠的值就不會全為1,此時執行處理函數,判斷當前的鍵值符合什麼輸出,若符合某一條件,則將輸出送給變量m,然後跳出判斷,m把數值送給p1完成輸出,為了讓人眼可以看到,此時需要延時一段時間,我們延時了6ms,小於10ms,完全可以,然後會繼續從頭開始,往復循環判斷鍵值,如果此時全為
  • 自學單片機第十二篇番外:首次測試——軟體仿真
    對於沒有單片機和下載器的同學,看完前兩篇文章,或許會一時技癢,但無從下手,這裡,咱就說下,沒有硬體,如果調試。之前我共享過一個軟體,不知道現在還能用不,私信回復【仿真】應該還可以獲取連結地址。如果連結失效,私信我,我單獨發送。好了,接下來介紹仿真的首次使用。
  • 自學單片機第二十篇:多點輸入
    接下來簡單測試下功能,首先依次按下P1.0到P1.7,我們會發現,只有在按下P1.3時P3才會出現動作,點亮一個小燈,其他熄滅,當鬆開按鍵,小燈狀態不發生改變。接下來再測試一下兩個單獨的按鍵,分別按下按鍵,查看狀態。
  • 自學單片機第三十篇下:行吊遙控器-代碼編寫
    之前我們主要介紹了仿真電路的一些知識,對於硬體方面的知識,我們在進行單片機學習時還是要不斷跟著學習,當然,仿真電路中的元件,有時候會誤導我們,跟我們預期的不一致,不一定是我們的設計問題,也許是仿真的問題,所以如果對於簡單的可以練習的電路,建議還是要用實際電路來仿真一下,軟體仿真只是一個輔助。
  • 高清視頻HDMI矩陣按鍵操作說明
    深圳東健宇公司從開始生產音視頻信號處理設備到現在為止,有著近20年的時間,我們公司作為音視頻矩陣領域的領航者,產品的技術非常實用,並多功能,說明書也做得非常詳細。把眾多的功能 每項都說得非常詳細,說明書做得非常厚實,但是項目初次使用我們高清HDMI矩陣的客戶,很少有時間或者經歷仔細研究說明書,今天東健宇和大家學習高清視頻矩陣的按鍵操作,您準備好了嗎?