[問題] 8051按鍵控制問題

看板ASM (組合語言)作者 (微笑天使)時間9年前 (2015/09/30 17:30), 9年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/2 (看更多)
想請問一下 我使用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

10/01 01:12, , 1F
先畫個流程圖出來看看吧
10/01 01:12, 1F
文章代碼(AID): #1M2wkZNe (ASM)
討論串 (同標題文章)
文章代碼(AID): #1M2wkZNe (ASM)