两组LED实际上是一组P1口的,更改程序
时间: 2024-10-19 21:09:12 浏览: 9
既然两组LED实际上都在P1口,我们可以优化代码并减少硬件资源的使用。下面是修改后的程序:
```c
#include <REGX52.H>
typedef unsigned int u16;
typedef unsigned char u8;
sbit LEDs = P1^0; // 仅用P1.0作为开关,控制整个LED串
void delay10us(u16 ten_us) //延时程序,输入ten_us为1,则延时10us =1e-6s
{
while(ten_us--);
}
void toggle_LEDs(int start_pos, int length) // 开关指定位置到长度内的LED
{
for (u8 i = start_pos; i < start_pos + length; i++)
{
LEDs = ~LEDs; // 所有LED同时切换状态
delay10us(50000); // 延时50ms
}
}
void main()
{
u8 pattern[] = {0, 2, 4, 6}; // 指定要交替闪烁的LED索引
u8 current_index = 0; // 当前闪烁起始位置
while(1)
{
toggle_LEDs(pattern[current_index], 4); // 闪烁当前索引对应的LED
current_index = (current_index + 1) % 4; // 循环索引
}
}
```
在这个版本中,我们只保留了P1.0用于控制整个LED串,通过改变`toggle_LEDs`函数的`start_pos`参数,可以切换不同的LED组合。数组`pattern`用于存储LED的交替顺序。
阅读全文