採用外中斷進行的計數和清零控制

2021-10-22 19:32:44 字數 1587 閱讀 4467

使用微控制器p0、p2埠作為輸出口,外接乙個2位led數碼管,p3.2外接按鍵k1,p3.3外接按鍵k2。

編寫程式,按鍵k1作加一計數,按鍵k2作為「加1/暫停/清零」控制。

當按鍵k2沒有按下時。按鍵k1按下後led數碼管總顯示0;

第一次按下k2時,每次按下k1,led數碼管進行加1顯示;

第二次按下k2時,暫停加1計數,按鍵k1按下後led數碼管顯示暫停前的數值;

第三次按下k2時,led數碼管顯示位0;

第四次按下k2時,與第一次相同。

=;1、首先針對不同的功能對兩個按鍵編寫對應的中斷函式。

k1按鍵是用來計數的,所以在中斷函式如下。由我們用的兩位數碼管只能顯示0~99,所以每到100就清零。

void

int0_k1

() interrupt 0

k1_counter++

; k1_counter=k1_counter%

100;

//顯示範圍0~99}}

}

k2按鍵是用來選擇功能的,所以在中斷函式如下。有三個功能:清零/加一/暫停。所以k2_counter對3取餘,讓其只剩下0、1、2三種情況便於功能分配。

void

int1_k2

() interrupt 2

k2_counter++

; k2_counter=k2_counter%3;}}}

上述中斷中的防抖和回彈判斷很重要哦,有助於保證中斷次數與按鍵按下的次數一致。

2、k2為功能選擇鍵。那麼我們就用k2_counter來記錄k2對應的功能(清零/加一/暫停)。功能分配如下:

void

functionselect()

case1:

//加1

case2:

//暫停

default:;

}}

3、將k1按鍵記錄的數字k1_counter顯示出來。(數碼管字元碼用的共陽極的。)

void

digitaldisplay()

4、在主函式中進行實現

int

main()

return0;

}

至此,我們的目標就達到啦!

但是這裡存在乙個小小的問題:當按鍵k2處於清零的狀態下,按下k1則數碼管不會進行加1計數,並顯示「00」。但會在k1按鍵回彈時,會顯示一瞬間的「01」。並立刻恢復「00」。

我重新檢查了**,目前無法鎖定問題根源,希望大家可以有所改進。

好啦!以上就是本次分享的全部內容啦!(^o^)y!祝大家學習愉快!!!

採用WTL及LibXML2進行傳真軟體的開發

珊瑚紅批量傳真軟體 珊瑚紅批量傳真軟體是一款以windows傳真服務為基礎的傳真軟體,它可以同時給多個目的位址傳送傳真,而每個目的位址的內容可以根據你具體的傳真位址而改變。1.該軟體可以執行於windows xp sp2及以上版本的windows作業系統,使用該軟體之前必須事先配置好windows自...

關於計數中斷迴圈的一些錯誤思考

for int i 1 i n i 對於這個 我們要注意這個是先進行條件判斷,再進行計數判斷。如果存在剛開始就已經符合k了的話,這種就會少考慮了。同樣,如果是這樣 for int i 1 i n i 把中斷條件放到最後的話,也會少考慮一些情況如,最後一此迴圈 i n時達成count 此時符合coun...

基於STM32的頻率計(採用外部中斷的方式)

最近在了解電賽相關的東西,和指導老師交流一下,我決定先從最簡單的頻率計做起。頻率計是來檢測訊號的頻率的,在做頻率計的時候可以用訊號發生器發出的訊號來進行測試。這是最基礎的方波,我們可以通過檢測上公升沿的方式來測量其頻率。從週期的角度出發連續兩個上公升沿的時間就是這個方波的週期,那這個週期分之一就是這...