實踐中,單片機端口在連接開關器件時都要考慮消抖的問題,或在硬件上增加延遲,或是增加軟件延遲查詢的功能模塊。這里,我們考慮這樣一個檢測電路:單片機連接一個開關和兩個LED。程序是這樣的,如果開關的消抖正確,就點亮LED1,否則就閃亮LED2。按下開關,點亮LED1,釋放開關,LED1即熄滅。我們加入20毫秒的消抖延遲時間。當檢測到開關為低電平時,單片機在延遲20毫秒后再次檢測開關的狀態(tài)。如果此時開關狀態(tài)為高,則LED2就閃亮,如為低則點亮LED1。 源代碼: led1 bit P2.0 led2 bit P2.1 switch1 bit P1.0 ORG 0000h setb switch1 //initialize switch 1 as input setb led1 //Turn OFF LED1 setb led2 //Turn OFF LED2 wait: jb switch1,wait // Wait till switch1 has been pressed call debounce_delay jb switch1,c1_wait //switch low even after debouncing period //switch has been succesfully debounced clr led1 //Turn ON LED1 jnb switch1,$ //wait till switch has been released setb led1 //Turn OFF LED1 ajmp wait c1_wait: //Switch PIN high after debounce period so error in debouncing cpl led2 ajmp wait debounce_delay: //Subroutine for generating 20ms delay MOV r7,#245 l1_debounce_delay: MOV r6,#40 djnz r6,$ djnz r7,l1_debounce_delay ret END |