請問一下如果我要設計一個程式是讓LED由右往左亮(反覆由右往左) ,然後只要按一下按鈕他就會變成由左向右亮(反覆由左往右),再案一下按鈕他就又會回覆到由右往左亮。
--------------按鈕只有一顆唷!----------------這樣要怎麼設計程式??
○○○○○○○●
○○○○○○●○
○○○○○●○○
○○○○●○○○
○○○●○○○○
○○●○○○○○
○●○○○○○○
●○○○○○○○
( 循環 )
2007-01-19 19:37:33 · 2 個解答 · 發問者 我是問號 2 in 電腦與網際網路 ➔ 軟體
請依照像→ ORG 0000H
LOOP: MOV P1,#00000000B
ACALL DELAY
等....像這樣的把程式格開,不然我看不懂...謝謝~~~~~
2007-01-23 11:47:33 · update #1
樓下的ㄚ超大哥....你的程式我有試驗了...可是按鈕按下去沒辦法得到我要的動作耶...
2007-01-25 07:25:49 · update #2
依你的要求,幫你寫了一個程式
Port1 LED輸出 ,八顆LED陽極接VCC ,最好都串330歐姆
P3.0 8051第10腳為按鍵輸入,按鍵另一頭接地
在每次LED一循環時會偵測按鍵是否閉合以改變方向
希望符合你的需求
ORG0000H;Power On Reset
LEFT_TURN:MOVP1,#FFH
CALLDELAY
MOVP1,#FEH
CALLDELAY
MOVP1,#FDH
CALLDELAY
MOVP1,#FBH
CALLDELAY
MOVP1,#F7H
CALLDELAY
MOVP1,#EFH
CALLDELAY
MOVP1,#DFH
CALLDELAY
MOVP1,#BFH
CALLDELAY
MOVP1,#7FH
CALLDELAY
JNBP3.0,RIGHT_TURN
JMPLEFT_TURN
RIGHT_TURN:MOVP1,#FFH
CALLDELAY
MOVP1,#7FH
CALLDELAY
MOVP1,#BFH
CALLDELAY
MOVP1,#DFH
CALLDELAY
MOVP1,#EFH
CALLDELAY
MOVP1,#F7H
CALLDELAY
MOVP1,#FBH
CALLDELAY
MOVP1,#FDH
CALLDELAY
MOVP1,#FEH
CALLDELAY
JNBP3.0,LEFT_TURN
JMPRIGHT_TURN
DELAY:MOVR6,#60H
DELAY1: MOVR7,#FAH
$2:DJNZR7,$2
DJNZR6,DELAY1
RET
2007-01-25 17:28:58 補充:
貼上去的程式擠成一團,會不會打錯了
不行的情況是怎樣,請敘述一下
我有提過按鍵要按到LED跑過一個循環,才會偵測到
按一下就放可能會沒改變
2007-01-25 17:33:03 補充:
補充回答可以mail到dennis_hsia@yahoo.com.tw
這樣我比較快知道你的回訊
因為你在知識的補充訊息,雅虎不會主動通知
要我主動去所有的回答看補充,比較沒效率
2007-01-25 04:20:59 · answer #1 · answered by 有兩把刷子的ㄚ超 5 · 0⤊ 0⤋
動作主要是偵測KEY(P2.0)〈因為不知道你按鍵是0的時候算按下還是1的時候算按下,所以就先假設是1的時候算按下〉,當有按下時就去改變LED_SEL(P2.1)。
LED_SEL=0的時候做由左向右亮的循環
LED_SEL=1的時候做由右向左亮的循環
程式如下:
KEYREGP2.0;按鍵按鈕
LED_SELREGP2.1;跑馬燈左右移的狀態
ORG 00H
AJMPSTART
START:MOVA,#00000001B;給初始值
;*****************************************************
;********************主程式**************************
;*******************LOOP迴圈***********************
LOOP:
JBKEY,KEYIN;判別按鍵是否按下
CALLLED_RUN
MOVP1,A;資料丟入P1顯示
CALLDELAY
JMPLOOP
KEYIN:
CPLLED_SEL;切換跑馬燈的狀態
JBKEY,$;等待按鍵放開
JMPLOOP
;*****************************************************
;********************副程式**************************
;******************LED_RUN***********************
LED_RUN:;LED_SEL=0右移,=1左移
JBLED_SEL,LEFT
RIGHT:;跑馬燈向右移
RRCA
RET
LEFT:;跑馬燈向左移
RLCA
RET
END
2007-01-28 00:36:22 補充:
有用到的語法有:
REG,ORG,AJMP,MOV,JB,CALL,RRC,RLC
如果跑馬燈顯示相反的話,只要把
MOV A,#00000001B改成
MOV A,#11111110B即可
DELAY部分要自己加喔
2007-01-27 19:14:26 · answer #2 · answered by ? 2 · 0⤊ 0⤋