看板 ASM 關於我們 聯絡資訊
想請問一下 我使用keil c寫一個按鍵控制程式 我有一個0v,5v的控制訊號,想要讓兩個led交互亮 動作是按鍵1按下時即開始偵測,輸入第一次0v時,led1 on,led2 off 接著輸入5v,led1 off,led2 off 再下來輸入0v,led1 off ,led2 on 接著輸入5v,led1 off,led2 off 如此反覆一直下去 在途中 如果按鍵2按下時,led1和led2要off 我寫不出交替亮的動作 我的程式碼如下 #include "reg51.h" sbit SHin=0x80; //將0v,5v輸入至於P0.0 sbit start=0x81; //按鍵1開始動作 sbit stop=0x82; //按鍵2停止動作 sbit LD1=0x83; //LED1 sbit LD2=0x84; //LED2 unsigned char LDno=0; //LD編號讓led交互亮 char one=0; //按鍵stop邏輯1的次數 char zero=0; //按鍵stop邏輯0的次數 char one0=0; //按鍵start邏輯1的次數 char zero0=0; //按鍵start邏輯0的次數 bit KeyData=1; //stop已清除彈跳值,原始狀態 bit KeyData0=1; //start已經除彈跳值,原始狀態 void oneKeyScanstart(void); //單鍵掃描函式start void oneKeyScanstop(void); //單鍵掃描函式stop void main(void) { SHin=1; //將SHin設為輸入 start=1; //將start設為輸入 stop=1; //將stop設為輸入 LD1=1; LD2=1; LDno=0; while(1) { oneKeyScanstart(); if(KeyData0==0) { if (SHin==0) { if(LDno==0) { LD1=0; //LD1 on LD2=1; //LD2 off } else { LD1=1; LD2=0; } if(LDno==1) LDno=0; else LDno=1; } else { LD1=1; LD2=1; } KeyData0=1; } } } void oneKeyScanstart(void) { start=1; if(start==0) { one0=0; if(zero0<5) { zero0+=1; if(zero0==5) KeyData0=0; } } one0+=1; if(one0==5) { zero0=0; KeyData0=1; } } 請教各位,謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.76.226 ※ 文章網址: https://www.ptt.cc/bbs/ASM/M.1443605411.A.5E8.html ※ 編輯: chlb (60.248.76.226), 09/30/2015 17:39:13
sss22213: 先畫個流程圖出來看看吧 10/01 01:12