#include <reg51.h> // AT89C51寄存器定义
// 定义LED点阵连接的端口
#define ROW P0 // 行连接到P0
#define COL P1 // 列连接到P1
// 延时函数
void delay(unsigned int time) {
unsigned int i, j;
for(i = 0; i < time; i++)
for(j = 0; j < 120; j++);
}
// 流水灯显示函数
void display() {
unsigned char i, j;
unsigned char row_pattern[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; // 行数据
unsigned char col_pattern[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; // 列数据
for(i = 0; i < 8; i++) { // 遍历每一行
ROW = row_pattern[i]; // 设置当前行
for(j = 0; j < 8; j++) {
COL = ~col_pattern[j]; // 设置当前列并反转,点亮对应的LED
delay(50); // 控制流水灯的速度
}
}
}
void main() {
while(1) {
display(); // 不断显示流水灯效果
}
}
代码说明:
行与列的控制:ROW和COL分别定义了点阵的行和列连接的端口,程序中通过简单的扫描来实现流水灯效果。
行列数据:row_pattern和col_pattern数组用于定义哪一行、哪一列的LED应该点亮。
延时:通过delay()函数控制流水灯的速度。 |