1.LED点阵屏的结构:
与数码管相同(数码管只是把LED排成8字结构),8*8的点阵屏有8+8=16个引脚。
双色点阵屏有8+2*8=24个引脚,结构如图:
注:点阵屏引脚多为乱序排列, 控制需看单片机说明。
2.LED控制方法:
同动态数码管,利用人眼延迟,扫描法。
3.51单片机LED点阵屏原理:
其中P00-7为引脚,但D0-7是链接到74HC595上的。
4._74HC595_介绍:
74HC595是串行输入并行输出的移位寄存器,常用于IO口扩展。
原理:一位一位对8个位(D0-7)进行赋值,再一起输出。理论上来说,只要时间要求不高,可以 对很多位(32,64)进行赋值再输出,从而3位控制很多位。
其中SER为赋值的数据,SETCLK可使数据向下移位,RCLK会将缓存的数据同时输出。
例:要使D0-7依次为 0000 0101:
令SER=1,SETCLK=0,再令SETCLK=1,可使SER的1赋值给缓存区,得到1。
随后令SER=0,SETCLK=0,再令SETCLK=1,可使SER的0赋值得到 01。
依次类推,得到 0000 0101。
最后令RCLK=1输出。
5. sfr 与 sbit :寄存器声明:
sfr:声明寄存器
例:sfr P0 = 0x80;声明P0口寄存器,地址为0x80。
sbit:声明特殊位
例:sbit P0_1 = 0x81;声明P0寄存器的第一位。
例2:sbit RCLK = P3^5;给P3的第五位起别名RCLK。
6.集成_74HC595_使用函数:
使用方法:直接将要要传入的8位数据传给函数。
//74HC595写入字节,参数为要写入的字节
void _74HC595_WriteByte(unsigned char Byte)
{
unsigned char i;
for (i = 0; i < 8; i++)
{
SER = Byte & (0x80>>i);//8位赋值1位,非0赋值1,0赋0
SCK = 1;//移进去
SCK = 0;//复位
}
RCK = 1;
RCK = 0;
}
7.实战:静态-笑脸显示:
void MatrixLED_ShowColumn(unsigned char Column, unsigned char Data)
{
_74HC595_WriteByte(Data);
P0 = ~(0x80 >> Column) ; //确定亮的是第几列
}
void main()
{
SCK = 0;
RCK = 0;
while (1)
{
MatrixLED_ShowColumn(0, 0x3C);
MatrixLED_ShowColumn(1, 0x42);
MatrixLED_ShowColumn(2, 0xA9);
MatrixLED_ShowColumn(3, 0x85);
MatrixLED_ShowColumn(4, 0x85);
MatrixLED_ShowColumn(5, 0xA9);
MatrixLED_ShowColumn(6, 0x42);
MatrixLED_ShowColumn(7, 0x3C);
}
}
8.实战:动态- hello! 流动字幕:
unsigned char 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,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void main()
{
unsigned char i, Offset = 0, Count = 0;
MatrixLED_Init();
while (1)
{
for (i = 0; i < 8; i++)
{
MatrixLED_ShowColumn(i, Animation[i + Offset]);
}
Count++;
if (Count > 10)
{
Count = 0;
Offset++;
if (Offset > 40)
{
Offset = 0;
}
}
}
}