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