以下是一份使用C语言在51单片机上实现LED点阵爱心图案的完整代码
#include <reg51.h>
#define ROW_NUM 8 // 点阵行数
#define COL_NUM 8 // 点阵列数
unsigned char heart[] = {
0x00, 0x38, 0x7C, 0xFE, 0xFE, 0x7C, 0x38, 0x10,
0x10, 0x38, 0x7C, 0xFE, 0xFE, 0x7C, 0x38, 0x10,
0x10, 0x1C, 0x3E, 0x7F, 0x7F, 0x3E, 0x1C, 0x08,
0x08, 0x1C, 0x3E, 0x7F, 0x7F, 0x3E, 0x1C, 0x08,
0x08, 0x0C, 0x1E, 0x3F, 0x3F, 0x1E, 0x0C, 0x04,
0x04, 0x0C, 0x1E, 0x3F, 0x3F, 0x1E, 0x0C, 0x04,
0x04, 0x06, 0x0F, 0x1F, 0x1F, 0x0F, 0x06, 0x02,
// 此处省略剩余的点阵数据,可以根据需要自行添加
};
void delay(unsigned int time) // 延时函数
{
unsigned int i, j;
for (i = time; i > 0; i--)
for (j = 256; j > 1; j--);
}
void main() // 主函数
{
unsigned char row = ROW_NUM - 1;
unsigned char col = COL_NUM - 1;
unsigned char bit_index = 7;
while (1) // 主循环,一直循环执行下面的代码块直到断电等特殊情况发生
{
P2 = heart[row]; // 将点阵数据赋值给P2口,控制行扫描
row--;
delay(5);
if (row == 0)
{
row = ROW_NUM - 1;
col--;
if (col == 0)
{
col = COL_NUM - 1;
bit_index--;
if (bit_index == 0)
{
bit_index = ROW_NUM * COL_NUM - 1;
}
}
}
delay(5);
}
}