51单片机以p0口作为列选,p1口作为列值输出,实现led点阵渐变显示字母
时间: 2023-12-26 16:03:54 浏览: 64
基于51单片机的led点阵显示屏设计
好的,以下是51单片机以P0口作为列选,P1口作为列值输出,实现LED点阵渐变显示字母的程序:
```
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar code LEDChar[] = { // 0~9、A~Z共36个字符的点阵表示
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, // 0~9
0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x00,0x00,0x00, // A~E
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // F~J
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 // K~Z
};
void delay(uint t)
{
while (t--);
}
void main()
{
uchar i, j;
uchar Gradation[8] = {1, 2, 3, 4, 5, 6, 7, 8}; // 定义8级渐变
uchar LEDCode[8] = {0}; // 定义8个字节存储点阵数据
while (1)
{
for (i = 0; i < 36; i++) // 循环显示0~9、A~Z
{
for (j = 0; j < 8; j++) // 渐变显示8级灯光
{
LEDCode[0] = LEDChar[i * 8];
LEDCode[1] = LEDChar[i * 8 + 1];
LEDCode[2] = LEDChar[i * 8 + 2];
LEDCode[3] = LEDChar[i * 8 + 3];
LEDCode[4] = LEDChar[i * 8 + 4];
LEDCode[5] = LEDChar[i * 8 + 5];
LEDCode[6] = LEDChar[i * 8 + 6];
LEDCode[7] = LEDChar[i * 8 + 7];
for (uchar k = 0; k < 8; k++) // 显示8列数据
{
P0 = ~(1 << k); // 选中一列
P1 = LEDCode[k] >> j; // 输出对应行的点阵数据
P2 = Gradation[j]; // 调整灯光强度
delay(100); // 延时
P1 = 0xFF; // 清空当前列
}
}
}
}
}
```
这段程序可以实现渐变显示0~9、A~Z共36个字符,其中Gradation数组定义了8级渐变,可以根据需要调整。另外,LEDChar数组定义了0~9、A~Z共36个字符的点阵表示,可以根据需要添加或修改。程序中使用了一个简单的延时函数,可以根据需要调整延时时间。
阅读全文