在51单片机实验板上,用C语言编程实现独立按键对LED流水灯显示的控制。 1.最多使用单片机实验板上3个独立按键,控制由8个LED组成的流水灯的显示。 2.通过独立按键控制流水灯实现4种不同样式的循环显示。 3.当流水灯显示某一种样式时,可通过独立按键实现暂停和重新开始显示, 4.相邻两个LED灯点亮的时间间隔使用软件延时的方法实现,延时时间自定(以方便观察流水灯的点亮情况为准)。
时间: 2023-05-20 14:06:24 浏览: 304
51单片机---C语言代码,流水灯控制
以下是实现独立按键对LED流水灯显示的控制的C语言代码:
#include <reg51.h>
#define LED P0 // 定义LED端口
sbit KEY1 = P1^0; // 定义按键1
sbit KEY2 = P1^1; // 定义按键2
sbit KEY3 = P1^2; // 定义按键3
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; // 模式变量,初始值为0
unsigned char led = 0x01; // LED灯初始值为00000001
unsigned char key1_state = 1; // 按键1状态变量,初始值为1
unsigned char key2_state = 1; // 按键2状态变量,初始值为1
unsigned char key3_state = 1; // 按键3状态变量,初始值为1
while(1)
{
if(KEY1 == 0 && key1_state == 1) // 按键1按下
{
key1_state = 0; // 按键1状态变为0
mode++; // 模式加1
if(mode > 3) mode = 0; // 模式循环
}
else if(KEY1 == 1) // 按键1松开
{
key1_state = 1; // 按键1状态变为1
}
if(KEY2 == 0 && key2_state == 1) // 按键2按下
{
key2_state = 0; // 按键2状态变为0
if(mode == 0) // 模式0下,LED灯流水循环
{
led = led << 1; // 左移一位
if(led == 0) led = 0x01; // 如果左移后为0,重新赋值为00000001
}
else if(mode == 1) // 模式1下,LED灯交替闪烁
{
led = ~led; // 取反
}
else if(mode == 2) // 模式2下,LED灯从左到右依次点亮
{
led = led << 1; // 左移一位
if(led == 0) led = 0x01; // 如果左移后为0,重新赋值为00000001
}
else if(mode == 3) // 模式3下,LED灯从右到左依次点亮
{
led = led >> 1; // 右移一位
if(led == 0) led = 0x80; // 如果右移后为0,重新赋值为10000000
}
}
else if(KEY2 == 1) // 按键2松开
{
key2_state = 1; // 按键2状态变为1
}
if(KEY3 == 0 && key3_state == 1) // 按键3按下
{
key3_state = 0; // 按键3状态变为0
while(KEY3 == 0); // 等待按键3松开
}
else if(KEY3 == 1) // 按键3松开
{
key3_state = 1; // 按键3状态变为1
}
LED = led; // LED灯显示
delay(100); // 延时100ms
}
}
在这个程序中,我们使用了三个独立按键 KEY1、KEY2 和 KEY3,分别用来切换模式、控制 LED 灯的显示和暂停/重新开始 LED 灯的显示。LED 灯的显示方式有四种,分别是流水循环、交替闪烁、从左到右依次点亮和从右到左依次点亮。相邻两个 LED 灯点亮的时间间隔使用软件延时的方法实现,延时时间为100ms。
阅读全文