51单片机led随机点亮不重复至八盏灯全亮函数
时间: 2024-02-28 22:55:16 浏览: 199
实现这个功能,可以采用如下思路:
1. 定义一个包含8个元素的数组,表示8盏LED灯的状态,初始值都为0。
2. 采用随机数生成函数,每次生成一个0~7之间的随机数,表示要点亮的LED灯的编号。
3. 判断该随机数对应的LED灯是否已经点亮。如果已经点亮,则重新生成随机数;否则,将该LED灯点亮,并将该位置的数组元素值设为1。
4. 当所有LED灯都点亮时,退出循环,函数结束。
下面是一个示例代码实现:
```c
#include <reg51.h>
#include <stdlib.h>
// 定义8个LED灯的IO口
sbit LED1 = P0^0;
sbit LED2 = P0^1;
sbit LED3 = P0^2;
sbit LED4 = P0^3;
sbit LED5 = P0^4;
sbit LED6 = P0^5;
sbit LED7 = P0^6;
sbit LED8 = P0^7;
// 定义包含8个元素的数组,表示8盏LED灯的状态
unsigned char led_status[8] = {0};
// 随机数生成函数
unsigned char rand_gen()
{
return rand() % 8; // 生成0~7之间的随机数
}
// led随机点亮不重复至八盏灯全亮函数
void led_random_on()
{
unsigned char i, led_no, led_count = 0;
while (led_count < 8) // 当所有LED灯都点亮时,退出循环
{
led_no = rand_gen();
if (led_status[led_no] == 0) // 判断该LED灯是否已经点亮
{
switch (led_no) // 点亮对应的LED灯
{
case 0: LED1 = 1; break;
case 1: LED2 = 1; break;
case 2: LED3 = 1; break;
case 3: LED4 = 1; break;
case 4: LED5 = 1; break;
case 5: LED6 = 1; break;
case 6: LED7 = 1; break;
case 7: LED8 = 1; break;
}
led_status[led_no] = 1; // 更新数组元素值
led_count++; // 统计已经点亮的LED灯个数
}
}
}
void main()
{
led_random_on(); // 调用led随机点亮函数
}
```
阅读全文