51单片机led点阵显示滚动
时间: 2023-12-13 15:04:29 浏览: 281
下面是51单片机led点阵显示滚动的基本思路和代码实现:
1. 点阵LED的接线方式为行列式,其中行由P0口控制,列由P2口控制;
2. 定义一个8*8的字符数组,存储要显示的内容;
3. 定义一个计数器变量i,控制字符数组的滚动;
4. 每次滚动时,将字符数组中的第i列数据分别送入P2口,同时将P0口控制的行口输出低电平,达到显示效果;
5. 每隔一定时间(如50ms)更新一次i的值,实现滚动效果。
以下是示例代码:
```c
#include<reg51.h>
#define uint unsigned int//宏定义
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
uchar code weiduan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共阴数码管
uchar code arr[8][8]={
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0}
};//定义一个8*8的字符数组
uint i,j,k;//计数器
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display()
{
for(k=0;k<8;k++)
{
P0=0x01<<k;
P2=0xff;
P2=weiduan[k];
P0=0xff;
P2=duan[arr[k][i]];
delay(1);
}
}
void main()
{
while(1)
{
for(i=0;i<8;i++)
{
display();
}
for(j=0;j<7;j++)
{
for(k=0;k<8;k++)
{
arr[k][j]=arr[k][j+1];
}
}
for(k=0;k<8;k++)
{
arr[k][7]=0;
}
delay(50);
}
}
```
这段代码实现了一个基本的8*8点阵LED滚动显示效果,可以根据实际需求进行调整和修改。
阅读全文