51微控制器鍵盤為什麼會出現干擾?如何解決這個問題呢?求大俠指導,程式設計格式習慣有問題順便指出,謝謝

時間 2021-09-10 12:08:56

1樓:匿名使用者

寫程式之前一定要先從系統的級別構建一下程式的結構。

你的程式中,有數碼管掃瞄顯示、按鍵掃瞄兩部分。

在構建程式結構的時候,考慮到幾個部分的特點,一般情況如下:

1、為了保證顯示不閃,應在20ms內完成一次顯示重新整理,假設你用了10個數碼管數字。

2、按鍵是隨機的,需要檢測,一般按鍵按下的時間不小於50ms,可以考慮在10ms檢測一次按鍵。

程式可以定義乙個1ms的定時器,設定幾個變數對定時器進行計數。

每個1ms定時到時,自加對定時器的計數,並更新數碼管顯示,10ms更新完10個數碼管。

每到10ms檢測一次按鍵,記錄狀態,與上次狀態進行比較,如果連續兩次或三次檢測到按鍵按下,設定按鍵動作的標記,並確定如何更改顯示,改變視訊記憶體。

如果數碼管需要調整亮度,可以將1ms定時器改為100us,分給每個數碼管的1ms內,改變其點亮的時間,就可以調出十種亮度。

用這種架構做這個程式,處理器負擔很輕,對所有的外設的響應一樣迅速。你會感到51微控制器還是能幹很多活的。比如你的程式增加乙個rtc模組,可以每100ms重新整理一下rtc時間到視訊記憶體,就可以實現顯示時間。

2樓:

不知道你的按鍵是怎麼接的,但是51微控制器上的按鍵,一般都是檢測低電平,極少有檢測高電平的。你這個應該是按鍵的電平檢測反了,所以當其中乙個按鍵沒有按下,那就一直是

while(s1 == 1);或者while(s2 == 1);死迴圈,所以會出錯

3樓:

1、將delay()的定義,放到main()的前面去,不要在main內宣告函式。

2、51微控制器的輸入輸出一般定義為低電平有效。

3、p0口做io用,必須接上拉電阻。

至於你的程式執行的問題,應該就是按鍵應該低電平有效才對,也就是說,將s1s2的按下判定條件

改為==0,試試。

4樓:匿名使用者

改為下面這樣, 你再試試

if(!s1) //按下s1鍵}if(!s2) //按下s2鍵}

51微控制器程式設計問題?

5樓:匿名使用者

你這微控制器程式跟誰學的這麼寫,三個程式中都有while(1),這是無限迴圈結構,只允許主程式中用,而被呼叫的子程式不能再用了。你現在程式肯定是只執行 zuo(); 這乙個,因為,有while(1),就無限迴圈在這個程式中了,跳不出來,就不會執行另兩個程式的。把三個程式中的while(1)都刪掉。

51微控制器SBUF什麼意思,51微控制器中SBUF中讀出的資料型別

define 巨集定義 unsigned乙個資料型別 還有就是signed 乙個是有符號 乙個是無符號 int資料型別 sbuf是串列埠接送或者傳送資料暫存器 define 是定義乙個常量 unsigned char 定義乙個字元型變數,unsigned int 定義乙個整數型變數購買sea wol...

51微控制器,在按下鍵盤,然後鬆開之後,為什麼電平會恢復

首先宣告本人不是高手,其次p2是不可以位操作的,即使你在p2.4接入乙個按鍵,當你按下按鍵時,p2.4被強制拉成低電平,當你鬆開時當然自動復位,不過想讓他保持,你可以在中斷中加上一條語句如 p2 0xf7 這樣可以保持在中斷時你的p2.4是低電平,其他的具體情況具體對待 請先搞清楚微控制器io口的結...

51微控制器串列埠通訊出現問題,5V微控制器與3 3V微控制器串列埠通訊問題

做而論道 void main 如果是ascii碼,加上引號即可 if sbuf 0 p0 smg 0 通過數碼管顯示接收到的資訊 if sbuf 1 p0 smg 2 通過數碼管顯示接收到的資訊 if sbuf 2 p0 smg 12 通過數碼管顯示接收到的資訊 if sbuf 3 p0 smg 1...