编写51单片机流水灯程序,要求如下:1、流水灯样式用两个按键开关控制 2、至少有三种流水灯样式
时间: 2023-06-13 11:02:40 浏览: 204
以下是一个简单的51单片机流水灯程序,它可以通过两个按键控制三种不同的流水灯模式:
```c
#include <reg51.h>
#define LED_PORT P1 // 定义LED端口为P1
sbit KEY1 = P3^0; // 定义按键1引脚
sbit KEY2 = P3^1; // 定义按键2引脚
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 mode = 0; // 定义模式变量
unsigned char led = 0x01; // 定义LED初始值
unsigned char key1_state = 0, key2_state = 0; // 定义按键状态变量
LED_PORT = 0x00; // 初始化LED端口为低电平
while(1)
{
if(KEY1 == 0) // 检测按键1是否按下
{
delay(10); // 延时去抖动
if(KEY1 == 0)
{
key1_state = !key1_state; // 切换按键状态
while(!KEY1); // 等待按键释放
}
}
if(KEY2 == 0) // 检测按键2是否按下
{
delay(10); // 延时去抖动
if(KEY2 == 0)
{
key2_state = !key2_state; // 切换按键状态
while(!KEY2); // 等待按键释放
}
}
if(key1_state == 1) // 如果按键1被按下
{
mode = 1; // 切换到模式1
led = 0x01; // 重置LED初始值
}
else if(key2_state == 1) // 如果按键2被按下
{
mode = 2; // 切换到模式2
led = 0x80; // 重置LED初始值
}
switch(mode) // 根据模式选择流水灯样式
{
case 1: // 模式1:从1到8循环流水灯
LED_PORT = led;
delay(100); // 延时100ms
led <<= 1; // 移位操作
if(led == 0) // 如果移位后值为0,重置为1
led = 0x01;
break;
case 2: // 模式2:从8到1循环流水灯
LED_PORT = led;
delay(100); // 延时100ms
led >>= 1; // 移位操作
if(led == 0) // 如果移位后值为0,重置为0x80
led = 0x80;
break;
default: // 默认模式:从左到右循环流水灯
LED_PORT = led;
delay(100); // 延时100ms
led <<= 1; // 移位操作
if(led == 0) // 如果移位后值为0,重置为1
led = 0x01;
break;
}
}
}
```
在这个程序中,我们使用了两个按键来控制三种不同的流水灯模式。按键1用于切换到模式1,按键2用于切换到模式2。默认情况下,程序将以从左到右的方式循环流水灯。
阅读全文