我的要求是:两个按键独立控制两个LED 按一下KEY1 LED1亮 再按一下KEY1 LED1就灭 KEY2也是这样,但是 按下KEY2的同时如果LED1亮 LED1灭
大哥 有完整点的吗
追答方案一:
将key1 与 key2 AND gate 到EXT INT pin, 利用中断如上代码逻辑
方案二:
BYTE KeyTrig=0;
ReadKey(){
bit ReadKey1=P0^1;
Sleep(n); // for de-bounce
if(ReadKey1!=P0^1){
Key1++;
KeyTrig|=1;
}
bit ReadKey2=P0^2;
Sleep(n); // for de-bounce
if(ReadKey2!=P0^2){
Key2++;
KeyTrig|=2;
}
}
while(1){
ReadKey();
if(KeyTrig>0){
if(KeyTrig&1){
if(Key1%2){ //Key1==odd
LED1=1;
}
else{ //
LED1=0;
if(Key1>=100) Key1=0;
}
KeyTrig=KeyTrig&0xfe;
}
if(KeyTrig&2){
if(Key2%2){ //Key2==odd
LED2=1;
LED1=0;
}
else{ //
LED2=0
LED1=1;
if(Key2>=100) Key2=0;
}
KeyTrig=KeyTrig&0xfd;
}
}
}
不行 按下KEY1或KEY2后 LED闪
追答#include
sbit key1=P1^0;
sbit key2=P1^1;
sbit led1=P1^2;
sbit led2=P1^3;
main()
{
led1=1;
led2=1;
while(1)
{
if(key1==0)
{
led1=~led1;
while(key1==0);
}
if(key2==0)
{
led2=~led2;
while(key2==0);
}
}
}
我的要求是:两个按键独立控制两个LED 按一下KEY1 LED1亮 再按一下KEY1 LED1就灭 KEY2也是这样, 按下KEY2的同时如果LED1亮 LED1灭
追答#include
sbit key1=P1^0;
sbit key2=P1^1;
sbit led1=P1^2;
sbit led2=P1^3;
main()
{
led1=1;
led2=1;
while(1)
{
if(key1==0)
{
led1=~led1;
while(key1==0);
}
if(key2==0)
{
if(led1==0)led1=1;
led2=~led2;
while(key2==0);
}
}
}
如果再按下KEY2 LED2灭
追答加两句话就行了
while(1)
{
if(!key1)led1=0; //低电平亮灯
while(key2);
led1=1;
led2=0;
delay();
while(key2);
key2=1;
}
好像不行呀:
我的要求是:两个按键独立控制两个LED 按一下KEY1 LED1亮 再按一下KEY1 LED1就灭 KEY2也是这样, 按下KEY2的同时如果LED1亮 LED1灭
发现两次提问不大一样啊。是不是要key1 和key2关联,led1亮时le2就得灭,反之亦然
追问对
追答延时部分你自己会写色,
while(1)
{
if(!key1){led1=0;led2=1;}
delay(); //延时0.5S
if(key1==0&&led1==0){key1=1;}
if(!key2){led1=1;led2=0;}
delay();
if(key2==0&&led2==0){led1=1;led2=1;}
}
不会写延时
追答网上搜一下,抄过过放在前面就行了。