[问题] 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