流水灯c语言代码switch,51单片机流水灯代码,四种方式,开关启动

#include

#include

sbit  s1=P3^3;

sbit  s2=P3^4;

void  delay  (unsigned int i)

{

unsigned int k;

for(k=0;k

}

void main()

{

unsigned char aa,i,s=0;

while(1){

if(s1==0)

{

delay(1200);

if(s1==0)

{

aa=0x01;//8个流水灯逐个闪烁

for(i=0;i<8;i++){

P0=~aa;

delay(30000);

aa<<=1;

}

aa=0x80;//8个流水灯逐个反向闪烁

for(i=0;i<8;i++){

P0=~aa;

delay(30000);

aa>>=1;

}

aa=0xfe;//8个流水灯依次全亮

for(i=0;i<8;i++){

P0=~aa;

delay(30000);

aa<<=1;

}

aa=0x7f;//8个流水灯反向依次全亮

for(i=0;i<8;i++){

P0=~aa;

delay(30000);

aa>>=1;

}

}

}

else {

if(s2==0)

{delay(1200);

if(s2==0)

{if(++s==5)s=1;}

}

switch(s)

{

case 1:P0=0x00;break; //全亮

case 2:P0=0x55;break;//交叉亮

case 3:P0=0x0f;break; //高四位亮

case 4:P0=0xf0;break;//低四位亮

default:break;

}

while(!s2);

delay(1200);

}

}

}

  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个基于51单片机流水灯的完整C语言代码: ```c #include <reg51.h> #define LED P0 // 将P0端口定义为LED输出端口 sbit KEY1 = P1^0; // 定义按键1的输入端口 sbit KEY2 = P1^1; // 定义按键2的输入端口 sbit KEY3 = P1^2; // 定义按键3的输入端口 sbit KEY4 = P1^3; // 定义按键4的输入端口 void delay(unsigned int t) // 延时函数 { unsigned int i, j; for(i = t; i > 0; i--) for(j = 110; j > 0; j--); } void main() { unsigned char flag = 0; // 定义标志位 LED = 0xfe; // 初始状态下,P0口输出11111110,即只有第一个LED亮 while(1) // 主循环 { if(KEY1 == 0) // 按键1按下 { delay(100); // 延时去抖动 if(KEY1 == 0) // 确认按键1按下 { flag = 0; // 标志位清零 LED = 0xfe; // 初始状态下,P0口输出11111110,即只有第一个LED亮 } } if(KEY2 == 0) // 按键2按下 { delay(100); // 延时去抖动 if(KEY2 == 0) // 确认按键2按下 { flag = 1; // 标志位置1,表示正向流水灯 } } if(KEY3 == 0) // 按键3按下 { delay(100); // 延时去抖动 if(KEY3 == 0) // 确认按键3按下 { flag = 2; // 标志位置2,表示反向流水灯 } } if(KEY4 == 0) // 按键4按下 { delay(100); // 延时去抖动 if(KEY4 == 0) // 确认按键4按下 { flag = 3; // 标志位置3,表示所有LED同时亮 LED = 0xff; // 所有LED同时亮 } } switch(flag) // 根据标志位来判断流水灯的方向 { case 0: // 初始状态下,只有第一个LED亮 break; case 1: // 正向流水灯 LED = LED << 1; // 左移一位 if(LED == 0xff) // 如果所有LED都亮了,则从头开始 LED = 0xfe; break; case 2: // 反向流水灯 LED = LED >> 1; // 右移一位 if(LED == 0x7f) // 如果所有LED都亮了,则从头开始 LED = 0xfe; break; case 3: // 所有LED同时亮 break; } delay(500); // 延时一段时间,以控制LED灯的闪烁速度 } } ``` 该代码中使用了51单片机的GPIO口来控制LED的亮灭,并通过按键输入来控制流水灯的流动方向。其中,flag是一个标志位,用来记录当前流水灯状态。根据不同的状态,通过左移、右移等操作来控制LED的亮灭情况。同时,为了控制LED灯的闪烁速度,还使用了一个延时函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值