c51控制16个流水灯的呼吸灯
时间: 2023-11-14 17:04:38 浏览: 84
基于c51的流水灯控制
由于c51控制器只有一个IO口,不能同时控制16个流水灯,因此需要使用外部芯片或者扩展IO口来实现控制。
以下是使用74HC595芯片扩展IO口来控制16个流水灯的呼吸灯程序:
```c
#include <reg51.h>
//定义74HC595芯片的引脚
sbit HC595_Serial = P2^0;
sbit HC595_SCLK = P2^1;
sbit HC595_RCLK = P2^2;
//定义流水灯的引脚
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit LED5 = P1^4;
sbit LED6 = P1^5;
sbit LED7 = P1^6;
sbit LED8 = P1^7;
//定义呼吸灯的数组
unsigned char breath_data[] = {0, 1, 3, 7, 15, 31, 63, 127, 255, 127, 63, 31, 15, 7, 3, 1};
void delay(unsigned int t)
{
unsigned int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 120; j++);
}
void HC595_Send_Byte(unsigned char dat)
{
unsigned char i;
for (i = 0; i < 8; i++)
{
HC595_Serial = dat & 0x80;
HC595_SCLK = 0;
HC595_SCLK = 1;
dat <<= 1;
}
HC595_RCLK = 0;
HC595_RCLK = 1;
}
void LED_Display(unsigned char dat)
{
HC595_Send_Byte(~dat);
}
void main()
{
unsigned char i, j;
while (1)
{
for (i = 0; i < 16; i++)
{
for (j = 0; j < 16; j++)
{
LED_Display(breath_data[j]);
delay(20);
}
}
}
}
```
该程序中,使用74HC595芯片扩展了IO口,通过移位寄存器的方式控制16个流水灯的亮灭。同时,通过呼吸灯的数组来实现流水灯的呼吸效果。
程序流程如下:
1. 定义74HC595芯片的引脚和流水灯的引脚。
2. 定义呼吸灯的数组。
3. 定义延时函数delay(),用于控制流水灯的亮灭。
4. 定义HC595_Send_Byte()函数,用于发送数据到74HC595芯片。
5. 定义LED_Display()函数,用于控制流水灯的亮灭。
6. 主函数中,循环控制流水灯的呼吸效果。先循环16次,控制流水灯的亮灭,然后在每个流水灯的位置循环16次,控制流水灯的呼吸效果。
注意:该程序中使用了延时函数,如果延时时间过长,会导致流水灯的呼吸效果不明显或者芯片过热,需要根据实际情况调整延时时间。
阅读全文