基于单片机的流水灯程序设计,实现左右循环的流水灯功能
时间: 2023-12-23 07:05:54 浏览: 204
单片机做的流水灯程序
好的,以下是基于单片机的流水灯程序设计,实现左右循环的流水灯功能的代码:
```c
#include<reg52.h>
sbit LED=P2^0; //定义P2.0为LED控制口
sbit KEY1=P3^0; //定义P3.0为向右流水灯的按键口
sbit KEY2=P3^1; //定义P3.1为向左流水灯的按键口
void delay(unsigned int t) //延时函数
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<125;j++);
}
void main()
{
unsigned char flag=0; //定义标志位,初始值为0
while(1)
{
if(KEY1==0) //检测向右流水灯的按键是否按下
{
flag=1; //设置标志位为1,表示向右流水灯
while(!KEY1); //等待按键松开
}
if(KEY2==0) //检测向左流水灯的按键是否按下
{
flag=0; //设置标志位为0,表示向左流水灯
while(!KEY2); //等待按键松开
}
if(flag==1) //向右流水灯
{
LED=0x01; //第一盏灯亮
delay(100); //延时
LED=0x02; //第二盏灯亮
delay(100); //延时
LED=0x04; //第三盏灯亮
delay(100); //延时
LED=0x08; //第四盏灯亮
delay(100); //延时
LED=0x10; //第五盏灯亮
delay(100); //延时
LED=0x20; //第六盏灯亮
delay(100); //延时
LED=0x40; //第七盏灯亮
delay(100); //延时
LED=0x80; //第八盏灯亮
delay(100); //延时
}
if(flag==0) //向左流水灯
{
LED=0x80; //第八盏灯亮
delay(100); //延时
LED=0x40; //第七盏灯亮
delay(100); //延时
LED=0x20; //第六盏灯亮
delay(100); //延时
LED=0x10; //第五盏灯亮
delay(100); //延时
LED=0x08; //第四盏灯亮
delay(100); //延时
LED=0x04; //第三盏灯亮
delay(100); //延时
LED=0x02; //第二盏灯亮
delay(100); //延时
LED=0x01; //第一盏灯亮
delay(100); //延时
}
}
}
```
在该代码中,我们定义了一个标志位flag,来表示流水灯的方向,如果flag为1,则表示向右流水灯,否则表示向左流水灯。我们使用P3.0和P3.1作为按键输入口,当检测到按键按下时,通过修改flag的值来实现流水灯方向的切换。
在主函数中,我们使用一个无限循环来不断执行流水灯程序。根据flag的值,选择向左或向右流水灯,通过修改P2.0的值来控制LED灯的亮灭。我们还使用了一个延时函数delay来控制LED灯的流水速度。
注意:该程序中的延时函数是简单的循环计数延时,实际应用中可能需要更加精确的延时方式,如定时器中断等。
阅读全文