/ 按键位置:P0.1;功能:1,当第一次按键按下,第一个灯亮,按键放开灯灭 2,当第二次按键按下,第二个灯亮,按键放开灯灭 3,重复执行前面两个步骤 灯的位置:P2口;/ include
1)是否有一组接反了,LED是有极性的,反接时不亮。2)是否两组的额定电压不同,当两组电压不同时有可能会导致一组亮一组不亮。3)是否电源功率不够,如果功率不足以同时点亮两组灯,也可能出现一组亮一组灭 电流和
} //KEY1按一下LED1亮 再按一下LED1灭 //KEY2按下LED2亮 LED1灭 main(){ while(1) { if (!key2) { led1 = 1; led2 = 0;} else { if(!key1) { Delay(10);if(!key1) { while(!key1);
最简单的,就是直接延时,如下图,实现灯1亮;然后灯1灭;再然后灯2亮;再灭掉:第二种是用定时器,如下图,先是灯1亮半秒,再全熄半秒;再灯2亮半秒,再全熄半秒:
当俩个按键的输入都为高电平(都按下了)就点亮LED,当俩个按键的输入都为低电平时(都释放了)就熄灭LED while(1){ if(key1 && key2) { //点亮LED led = 0; } if(!key1 && !key2) {
很简单那就是当按下某个按键时调用对应LED灯闪烁程序就可以了
你的led1=~led1;这个语句没有循环,所以只会反转一次。要么加循环,要么再写一个闪烁函数。void led_filcker(usigned char x){ while(x){ led1=~led1;x--:} } 如果你是想,按一下,松开也会闪烁,再按一下熄
51单片机,用两个按键分别控制两个led,一个亮/灭,另一个闪烁/灭,为什么我按下了第二个灯不闪呢?
led2 = 亮;} while(k1);led1 = 灭;led2 = 灭;} if(k2){ delay(10ms);if(k2){ led1 = 亮; //不知道你是0为亮还是1为亮 delay(1S) //延时1s led3 = 亮;} while(k1);led1 = 灭;led3 =
/ 按键位置:P0.1;功能:1,当第一次按键按下,第一个灯亮,按键放开灯灭 2,当第二次按键按下,第二个灯亮,按键放开灯灭 3,重复执行前面两个步骤 灯的位置:P2口;/ include
void delay(void) //两个void意思分别为无需返回值,没有参数传递。{ unsigned int i; //定义无符号整数,最大取值范围65535。for(i=0;i<20000;i++) //做20000次空循环。; //什么也不做,等待一个机
当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循环,LED取反得到LED = 0,灯亮。*/ delay(500); /*此处延迟,保证连续两次按键
while(!key1);led1 = ~led1;//KEY1按一下LED1亮 再按一下LED1灭 } } if(!key2) { Delay(10);if(!key2) { while(!key2) led1 = 1; //按下KEY2时LED1灭 led2 = ~led2;//KEY2也是这样 }
while(key==0)//按键没有抬起 { led=!led; delayms(200);}//LED闪烁 } } else led=0;}
求一单片机c语言程序:两个按键控制两个led,按键按住不放led闪烁,松手led熄灭
这个很容易嘛,你先设置一个寄存器,然后一直扫描两个按键(假设K1按下为加,K2按下为减),假设检测到K1被按下,寄存器就加1,如果检测到K2被按下,寄存器就减1;然后再调用显示函数就OK了。、 ORG 0000H LJMP
寄存器a = a+1 如果寄存器a == 100,{寄存器b=b+1;寄存器a = 0} 这样就可以了,b中的1代表100,a中的1就是1
include
while(!KEY_ADD);//如果确认按下按键等待按键释放,没有释放则一直等待 { if(num<99) //加操作 num++;} } } if(!KEY_DEC) //如果检测到低电平,说明按键按下 { DelayMs(10); //延时去抖,一般10-20ms
c51单片机怎么用两个按键控制两个数码管的加减,加到99就好,求程序
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
led1=~led1;x--:} } 如果你是想,按一下,松开也会闪烁,再按一下熄灭。你得定义一个变量来表示按键的按下。include
void main(){ led=1;//初始化输出,可初始化=0 while(1){ if(key1==0){ led=0;//亮 } if(key2==0){ led=1;//灭 } } }
两个LED灯打开 led1=0; led2=0; } if(key6==0){//按键6按下,两个LED灯关闭 led1=1; led2=1; } }}业界良心,希望采纳
if(key1==0){led1=1;led2=1;} } if(key2=0){deIayms(20);if(key2=0){led1=0;led2=0;} } }
Delay(10);if(!key1) { while(!key1);led1 = ~led1;//KEY1按一下LED1亮 再按一下LED1灭 } } if(!key2) { Delay(10);if(!key2) { while(!key2) led1 = 1; //按下KEY2时LED1灭 led2
求一单片机C语言程序:两个按键控制两个LED KEY1按一下LED1亮 再按一下LED1灭 KEY2按下LED2亮 LED1灭
具体看LED的接法,改变两个if的参数,改变状态效果:例如led一边接了高电平,连接单片机这边给led=0为亮,若led一边为地GND(就是低电平)另外一边就要led=1才亮。 以下程序为一边接高电平,单片机引脚给0亮给1灭 #include sbit led=P1^0; sbit key1=P1^1; sbit key2=P1^2; void main() { led=1;//初始化输出,可初始化=0 while(1) { if(key1==0) { led=0;//亮 } if(key2==0) { led=1;//灭 } } }P1.0 接KEY1 到地 ,P1.1接KEY2到地,P0.0接LED到高电平。 我还附带给你加了按键防抖,程序如下: #include 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(!key1); led=0; } } if (key2==0) { delay(20); if(key2==0) { while(!key2); led=1; } } } }
#include "reg52.h" #include #define uchar unsigned char uchar code LED_TAB[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned int x=9999; void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() { uchar a,b,c,d; EX0=1; EX1=1; IT0=1; IT1=1; EA=1; while(1) { a=x/1000; b=x/100%10; c=x/10%10; d=x%10; P2=0X7F; P2=_crol_(P2,1); P0=LED_TAB[a]; delay(2); P2=_crol_(P2,1); P0=LED_TAB[b]; delay(2); P2=_crol_(P2,1); P0=LED_TAB[c]; delay(2); P2=_crol_(P2,1); P0=LED_TAB[d]; delay(2); } }void aa() interrupt 0 { x--; }void bb() interrupt 2 { x=9999; }
下面这个刚好可以,只少一个减计数: http://zhidao.baidu.com/question/1798279664316263987
#include sbit key1 = P1^0; sbit key2 = P1^1; sbit led1 = P1^2; sbit led2 = P1^3; void Delay(unsigned int x) { unsigned int i, j; for(i = 0; i < x; i++) for(j = 0; j <= 148; j++); } //KEY1按一下LED1亮 再按一下LED1灭 //KEY2按下LED2亮 LED1灭 main() { while(1) { if (!key2) { led1 = 1; led2 = 0;} else { if(!key1) { Delay(10); if(!key1) { while(!key1); led1 = ~led1; } } } } } //-------------------------------- #include sbit key1 = P1^0; sbit key2 = P1^1; sbit led1 = P1^2; sbit led2 = P1^3; void Delay(unsigned int x) { unsigned int i, j; for(i = 0; i < x; i++) for(j = 0; j <= 148; j++); } main() { while(1) { if(!key1) { 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也是这样 } } } }
首先你的贴出来的程序不完整,最好贴出完整代码! 其次,如果你的程序没问题的话,你的LED闪烁是必须在你按住按键且不能弹起情况下才会发生的,你是一直按着吗? 而且注意你n的类型,因为你这样一直加,会溢出的
对你这种编程思想,我想问是跟谁学的啦! 对你这程序,我想问①先按K3、后按K2,你觉得程序结果会如何?②如果2个按键都按住不放,结果又会如何。 考虑一下上面的问题,就能看到你的程序问题了。当然你的程序问题,跟你的题目一样,没那么简单!后面还有一堆!!
参考: http://hi.baidu.com/do_sermon/item/21321b80887395d25e0ec1f8