我的要求是:两个按键独立控制两个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;}
}
不会写延时
追答网上搜一下,抄过过放在前面就行了。
...KEY1按一下LED1亮 再按一下LED1灭 KEY2按下LED2亮 LED1灭
Delay(10);if(!key1) { while(!key1);led1 = ~led1;\/\/KEY1按一下LED1亮 再按一下LED1灭 } } if(!key2) { Delay(10);if(!key2) { while(!key2) led1 = 1; \/\/按下KEY2时LED1灭 led2 = ~led2;\/\/KEY2也是这样 } } } } ...
求一单片机c语言程序:两个按键控制两个led,按键按住不放led闪烁,松手...
{ delayms(20);\/\/延时消抖 if(key==0)\/\/再次判断按键是否按下 { while(key==0)\/\/按键没有抬起 { led=!led; delayms(200);}\/\/LED闪烁 } } else led=0;}
单片机ATc52,实现按下key1,led1亮,再按下key2,led2亮led1灭,求具体程序...
void main(){ led=1;\/\/初始化输出,可初始化=0 while(1){ if(key1==0){ led=0;\/\/亮 } if(key2==0){ led=1;\/\/灭 } } }
两个按键怎么实现两个Led灯切换,单片机c语言怎么写?
if(key1==0){led1=1;led2=1;} } if(key2=0){deIayms(20);if(key2=0){led1=0;led2=0;} } }
单片机编写两个按键控制两个LED灯的程序,要求当按下任何一个按键并松开...
void scan_key(void);\/\/用来控制LED_RED void DelayMS(unsigned int x);void main(){ while(1){ if(K==0)LED_BLUE=1;scan_key();else LED_BLUE=0;} } void scan_key(void){ unsigned int i;for(i=0;i<10000;i++);LED_RED=0;DelayMS(50);} \/\/延时 void DelayMS(unsigned int...
求助51单片机编程,按一下KEY1,LED常亮,按一下KEY2,LED灭
我还附带给你加了按键防抖,程序如下:include<reg51.h> sbit key1=P1^0;sbit key2=P1^1;sbit led=P0^0;void delay(m){ int i,j;for(i=0;i<m;i++){ for(j=0;j<125;j++){ } } } void main(){ while(1){ P1=0xff;if (key1==0){ delay(20);if(key1==0){ while...
51单片机,用两个按键分别控制两个led,一个亮\/灭,另一个闪烁\/灭,为什么...
void led_filcker(usigned char x){ while(x){ led1=~led1;x--:} } 如果你是想,按一下,松开也会闪烁,再按一下熄灭。你得定义一个变量来表示按键的按下。include<reg52.h> define uchar unsigned char bit stop=1;sbit k5=P1^4;void delay(uchar xms){ while(xms--);} void ...
...按一下按键,LED灯灭。再按一下,LED亮,用C语言编程该怎么写
LED1_01 = 1; \/\/打开LED灯点亮 while(1){ if(KEY0_01 == 0) \/\/检测按键是否按下 { Delay_1ms(10); \/\/延时去抖动 if(KEY0_01 == 0) \/\/确定按键按下 { LED1_01 = ~ LED1_01; \/\/取反LED灯 [ 亮 . 灭 ]} while(KEY0_01 == 0); \/\/检测松手 } }...
如何用两个开关分别控制两个灯,进行四种情况的反应编程
下面是仿真过的代码 满足你的要求 include<reg51.h> sbit key1 = P2^0;sbit key2 = P2^1;sbit led1 = P3^0;sbit led2 = P3^1;void main(){ while(1){ led1 = key1;led2 = key2;} }
...口接8个LED灯。key1按下左移动1位点亮LED key2按下右移动1位点LED...
给个四路:定意一个变量;if(按键1按下)变量为1;if(按键2按下)变量为2;if(变量==1){ 左移控制;} else if(变量==2){ 右移控制;}