基于单片机(C51)的流水灯程序设计,实现左右循环的流水灯功能
时间: 2023-12-23 07:05:54 浏览: 149
好的,以下是基于单片机(C51)的流水灯程序设计,实现左右循环的流水灯功能的代码:
```c
#include <reg51.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); // 延时
}
}
}
```
该程序与基于单片机的流水灯程序设计,实现左右循环的流水灯功能的代码类似。不同之处在于,该程序使用了51单片机的寄存器操作方式,如使用sbit定义IO口,以及使用循环计数方式实现延时等。
阅读全文