基于c51单片机设计模块化程序通过两个按键分别控制8个LED灯交替亮灭和奇偶位亮灭
时间: 2024-03-18 08:41:58 浏览: 477
好的,下面是基于C51单片机设计模块化程序通过两个按键分别控制8个LED灯交替亮灭和奇偶位亮灭的代码:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1 = P3^2; // 定义按键1
sbit key2 = P3^3; // 定义按键2
void delay(uint i) // 延时函数
{
while (i--);
}
void led1() // 交替亮灭
{
uchar i, j;
for (i = 0; i < 8; i++) // 循环左移
{
j = 0x01 << i;
P1 = j;
delay(50000);
}
}
void led2() // 按奇偶位亮灭
{
uchar i, j;
for (i = 0; i < 8; i += 2) // 奇数位亮灭
{
j = 0x01 << i;
P1 = j;
delay(50000);
P1 = 0x00;
delay(50000);
}
for (i = 1; i < 8; i += 2) // 偶数位亮灭
{
j = 0x01 << i;
P1 = j;
delay(50000);
P1 = 0x00;
delay(50000);
}
}
void main()
{
while (1)
{
if (key1 == 0) // 按键1控制交替亮灭
{
led1();
}
else if (key2 == 0) // 按键2控制按奇偶位亮灭
{
led2();
}
}
}
```
在这个程序中,我们定义了两个按键key1和key2,分别用来控制交替亮灭和按奇偶位亮灭。当按下key1时,调用led1()函数实现交替亮灭的效果;当按下key2时,调用led2()函数实现按奇偶位亮灭的效果。
led1()函数实现了8个LED灯的交替亮灭效果。我们使用循环左移的方法,每次将P1口的值左移1位,再延迟一段时间,从而实现LED灯的交替亮灭。
led2()函数实现了8个LED灯按奇偶位亮灭的效果。我们首先让奇数位灯亮起,偶数位灯熄灭;然后让偶数位灯亮起,奇数位灯熄灭。同样使用延迟函数来控制LED灯的亮灭时间。
希望这个程序能够帮助你实现控制8个LED灯的交替亮灭和按奇偶位亮灭的需求。
阅读全文