51单片机:按三个键开始流水灯,为什么单独按不行,必须三个键同时按?

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-29
51单片机8路流水灯! 用三个按键控制三个程序!每个按键对应一个程序!按键一个键死循环一个程序!

#include
#define uchar unsigned char
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
uchar led1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar led2[]={0xe7,0xdb,0xbd,0x7e};
bit flag;
void delay(uchar a)
{
uchar i;
while(a--)for(i=0;i<120;i++);
}
void prog1(void)
{
uchar i;
while(flag)
{
P0=led1[i];
i++;
i%=8;
delay(200);
}
}
void prog2(void)
{
uchar i;
while(flag)
{
P0=led2[i];
i++;
i%=4;
delay(200);
}
}
viud prog3{void)
{
uchar i=7;
while(flag)
{
P0=led1[i];
i--;
if(i>7)i=7;
delay(200);
}
}
main()
{
flag=0;
while(1)
{
if(key1==0)
{
flag=0;
while(key1==0);
flag=1;
}
if(key2==0)
{
flag=0;
while(key2==0);
flag=1;
}
if(key3==0)
{
flag=0;
while(key3==0);
flag=1;
}
}
}

void main()
{
int i=0; //设置参考变量
//初始化
p1.0=1;
p1.1=0;
p1.2=0;
//进入按键操作
while(1)
{
if(p2.2==0)
{
i++;
if(i==1)
{
p1.0=0;
p1.1=1;
p1.2=0;
delay();//延时,由于不知道你用的单片机型号,这个需要你自己设定了。
}
if(i==2)
{
p1.2=1;
p1.0=0;
p1.1=0;
delay();//延时,由于不知道你用的单片机型号,这个需要你自己设定了。
}
if(i==3)
{
p1.0=1;
p1.1=0;
p1.2=0;
delay();//延时,由于不知道你用的单片机型号,这个需要你自己设定了。
i=0;//参考变量归0
}
}
}
}

k=a&b&c; k为a、b、c三者相与
只有三个按键同时按下(a、b、c同时为1)k才等于1
程序才能进入while(k)中。

void main(void)
{
uchar i,k,a,b,c;

uchar code xxx[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
if(P14==0)
{a=1;}
if(P15==0)
{b=1;}
if(P16==0)
{c=1;}
// k=a&b&c;
k=a|b|c; //改成这样就可以了
while(k)
{
for(i=0;i<8;i++)
{
P2=xxx[i];
delay(9000);
}
}

}

  • 51单片机:按三个键开始流水灯,为什么单独按不行,必须三个键同时按?
    答:只有三个按键同时按下(a、b、c同时为1)k才等于1 程序才能进入while(k)中。
  • 51单片机8路流水灯! 用三个按键控制三个程序!每个按键对应一个程序...
    答:while(key3==0);flag=1;} } }
  • 51单片机按键控制流水灯程序怎样写?
    答:编程的世界,每一步都充满了惊喜。不要被看似复杂的代码吓倒,51单片机按键控制流水灯的程序编写,就像一场与机器的对话,耐心与理解是你的魔法棒。跟随教程,亲自动手实践,你将发现,这个看似简单的任务,其实蕴含着无尽的乐趣和挑战。快来开启你的单片机之旅,让流水灯的闪烁照亮你的创新之路吧!
  • 实现P0口驱动8个发光二极管流水灯点亮,设置三个按键 c51单片机 急...
    答:return(0);//返回0,表示没有按键按下
  • c51单片机独立按键控制三种流水灯
    答:include<reg51.h>#include<intrins.h>#define uchar unsigned charuchar keyval,led,led1;sbit key=P3^2;void ext0() interrupt 0{while(key==0);keyval++;keyval%=3;}void delay(uchar a){uchar i;while(a--)for(i=0;i<120;i++);}main(){led=0xfe;led1=0x55;while(1) { ...
  • 求C51单片机 按键切换三种样式流水灯代码
    答:include<reg51.h>#include<intrins.h>#define uchar unsigned charuchar led,tm,key;sbit K=P1^0;void t0isr() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;tm++;if(tm>=10) { tm=0; switch(key) { case 0:led=_crol_(led,1);P0=led;break; cas...
  • 51单片机流水灯程序
    答:sbit led5 = P2^4;sbit led6 = P2^5;sbit led7 = P2^6;sbit led8 = P2^7;void main(){ int i,j;//点亮第一个灯 led1 = 1;led2 = 0;led3 = 0;led4 = 0;led5 = 0;led6 = 0;led7 = 0;led8 = 0;//延时1秒 for(i = 0;i < 110; ++i){ for(j = 0; j ...
  • 求51单片机同时控制流水灯和蜂鸣器七段数码管,分别用3个开关控制,流水...
    答:我这有两个以前写好的数码管显示程序及左右流水灯程序,但是是分开的,你自己再修改下吧,把两个合到一起,再加入按键就可。include<reg52.h> define uchar unsigned char define uint unsigned int uchar num;uchar code table[]={ 0xC0,0XF9,0X24,0X30,0X19,//0,1,2,3,4 0X12,0X02,...
  • 51单片机:按键,流水灯开始显示,仿真成功,但是实物是初始亮,按键灭了...
    答:while(!PIN_ROTARY_A) //BMA为低电平时 { Current_BMB_status = PIN_ROTARY_B;flag = 1; //标志位置为1说明编码开关被旋转了 } if(flag == 1){ flag = 0; //时刻要注意这一点!给标志位清零 if((Last_BMB_status == 0)&&(Current_BMB_status == 1)) //BMB上升沿表示正转 { ...
  • 51单片机中如何用汇编语言编写流水灯
    答:流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:ORG 0000H;复位启动AJMP START;ORG 001BH;T1中断AJMP T1INT;;定义变量===YSJSEQU 30H;延时计数器LEDEQU 31H;LED控制缓冲器 ;主程序===START:MOV LED,#0FEH;初始化数据MOV YSJS,#0;MOV TMOD,#10H;定时器1工作于方式1,16位定时...