[問題] 8051按鍵控制問題

作者: chlb (微笑天使)   2015-09-30 17:30:08
想請問一下
我使用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;
}
}
請教各位,謝謝!!
作者: sss22213 (sss22213)   2015-10-01 01:12:00
先畫個流程圖出來看看吧

Links booklink

Contact Us: admin [ a t ] ucptt.com