;*****************************************************************
;開關(guān)SP1接在P1.0管腳上,在AT89C51單片機(jī)的P0端口接有四個(gè)發(fā)光二極管,上電的時(shí)候,
;L1接在P0.0管腳上的發(fā)光二極管在閃爍,當(dāng)每一次按下開關(guān)SP1的時(shí)候,L2接在P0.1管腳上的發(fā)光二極管在閃爍,
;再按下開關(guān)SP1的時(shí)候,L3接在P0.2管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時(shí)候,
;L4接在P0.3管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時(shí)候,又輪到L1在閃爍了,如此輪流下去
;***************************************************************************************
ORG 0000H
AJMP MAIN
MAIN: MOV R0,#0
ST1: MOV P0,#0FEH; 燈L1閃爍
LCALL DE1; 調(diào)用延時(shí)子程序
MOV P0,#0FFH;
LCALL DE1; 調(diào)用延時(shí)子程序
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:
;*******************************
;判斷按鍵有沒有按下及按了幾次,即按鍵的識(shí)別
;********************************
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)用延時(shí)10ms子程序
DJNZ R5,LOOP2
RET
DE2: MOV R6,#20 ;延時(shí)10ms子程序
L5: MOV R7,#248
DJNZ R7,$
DJNZ R6,L5
RET
END
程序在板子上調(diào)試的時(shí)候,發(fā)現(xiàn)按鍵按快了似乎來不及識(shí)別啊,要按下去一會(huì)會(huì)兒再松開才行,不過按了十幾次之后發(fā)現(xiàn)燈L1變成常亮的了,不再閃爍,這時(shí)候隨便怎么按也沒有反應(yīng)了,不知道怎么回事,希望各位幫忙指導(dǎo)指導(dǎo),感激……
我請(qǐng)教過別人了,問題已經(jīng)解決,程序也修改好了,不過也感謝你的幫忙。他說是按鍵的靈敏度太低,主要原因是程序延時(shí)時(shí)間過長。也就導(dǎo)致在一定時(shí)間內(nèi)檢測按鍵的次數(shù)很少,所以會(huì)出現(xiàn)按下按鍵卻沒有檢測到的現(xiàn)象,只要想辦法提高檢測按鍵的頻率就可以了;不過關(guān)于 “按了十幾次之后發(fā)現(xiàn)燈L1變成常亮的了,不再閃爍”這個(gè)問題,他說是程序死機(jī),原因是程序跑飛了,我不明白,程序?yàn)槭裁磿?huì)跑飛,哪些情況會(huì)導(dǎo)致程序跑飛呢?得百度一下了,呵呵!謝謝
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |