;***************************************************************** ;開關(guān)SP1接在P1.0管腳上,在AT89C51單片機的P0端口接有四個發(fā)光二極管,上電的時候, ;L1接在P0.0管腳上的發(fā)光二極管在閃爍,當(dāng)每一次按下開關(guān)SP1的時候,L2接在P0.1管腳上的發(fā)光二極管在閃爍, ;再按下開關(guān)SP1的時候,L3接在P0.2管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時候, ;L4接在P0.3管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時候,又輪到L1在閃爍了,如此輪流下去 ;*************************************************************************************** ORG 0000H AJMP MAIN MAIN: MOV R0,#0
ST1: MOV P0,#0FEH; 燈L1閃爍 LCALL DE1; 調(diào)用延時子程序 MOV P0,#0FFH; LCALL DE1; 調(diào)用延時子程序 LCALL CHECK; 調(diào)用按鍵掃描程序
ST2:MOV P0,#0FDH; 燈L2閃爍 LCALL DE1; MOV P0,#0FFH; LCALL DE1; LCALL CHECK
ST3:MOV P0,#0FBH; 燈L3閃爍 LCALL DE1; MOV P0,#0FFH; LCALL DE1; LCALL CHECK
ST4:MOV P0,#0F7H; 燈L4閃爍 LCALL DE1; MOV P0,#0FFH; LCALL DE1; LCALL CHECK CHECK: ;******************************* ;判斷按鍵有沒有按下及按了幾次,即按鍵的識別 ;******************************** CHECK1:JB P1.0,L1; 按下鍵了嗎? LCALL DE2; JB P1.0,CHECK1; 真的按下了嗎? CHECK2:JNB P1.0,CHECK2; 等待釋放,釋放了嗎? LCALL DE2; JNB P1.0,CHECK2; 真的釋放了嗎? ;********************************* INC R0; R0的值加1 L1:CJNE R0,#1,L2; R0的值為1嗎?不為1,繼續(xù)判斷 AJMP ST2; 為1,燈L2開始閃爍 L2:CJNE R0,#2,L3; R0的值為2嗎?不為2,繼續(xù)判斷 AJMP ST3; 為2,燈L3開始閃爍 L3:CJNE R0,#3,L4; R0的值為1嗎?不為1,繼續(xù)判段 AJMP ST4; 為3,燈L4開始閃爍 L4:CJNE R0,#4,ST1; R0的值為1嗎?不為1,繼續(xù)判斷 LJMP MAIN ; 為4,返回主程序, DE1: MOV R5,#20 LOOP2: LCALL DE2; 調(diào)用延時10ms子程序 DJNZ R5,LOOP2 RET
DE2: MOV R6,#20 ;延時10ms子程序 L5: MOV R7,#248 DJNZ R7,$ DJNZ R6,L5 RET END
程序在板子上調(diào)試的時候,發(fā)現(xiàn)按鍵按快了似乎來不及識別啊,要按下去一會會兒再松開才行,不過按了十幾次之后發(fā)現(xiàn)燈L1變成常亮的了,不再閃爍,這時候隨便怎么按也沒有反應(yīng)了,不知道怎么回事,希望各位幫忙指導(dǎo)指導(dǎo),感激…… |