本周的学习内容是LED点阵的使用。
其实LED点阵与动态数码管的原理非常相似,都是通过扫描和视觉暂停现象来实现多个LED同时点亮的视觉效果。不同的是,点阵可以通过74HC595来实现三根线串行输入多根线并行输出的效果。开发板上的点阵是8*8的,因此使用8根线输出,利用多个74CH595也可以实现例如16、32行并行输出,不过会降低扫描频率。
下面是一个在点阵上滚动显示 Hello!的代码
#include <REGX52.H>
#include <INTRINS.H>
sbit RCK=P3^5;
sbit SCK=P3^6;
sbit SER=P3^4;
unsigned char code Animation[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0x08,0x08,0x08,0xff,0x00,0x0e,0x15,
0x15,0x15,0x08,0x00,0x7e,0x01,0x02,0x00,
0x7e,0x01,0x02,0x00,0x0e,0x11,0x11,0x0e,
0x00,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,};
void Delay (unsigned char xms)
{
unsigned char i, j;
while(xms>0)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms--;
}
}
void Write(unsigned char Byte)
{
unsigned char i;
for(i=0;i<8;i++)
{
SER=Byte&(0x80>>1);
SCK=1;
SCK=0;
}
RCK=1;
RCK=0;
}
void ShowColumn(unsigned char Column,Data)
{
Write(Data);
P0=~(0x80>>Column);
Delay(1);
P0=0xff;
}
void main()
{
unsigned char i, j;
SCK=0;
RCK=0;
while(1)
{
for(i=0;i<8;i++)ShowColumn(i,Animation[i+j]);
j++;
if(j>38)j=0;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)