1.前言
1.1 LED点阵屏介绍
LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字、图片、视频等。LED点阵屏广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等
LED点阵屏分类
按颜色:单色、双色、全彩
按像素:8*8、16*16等(大规模的LED点阵通常由很多个小点阵拼接而成)
1.2 显示原理
LED点阵屏的结构类似于数码管,只不过是数码管把每一列的像素以“8”字型排列而已
LED点阵屏与数码管一样,有共阴和共阳两种接法,不同的接法对应的电路结构不同
LED点阵屏需要进行逐行或逐列扫描,才能使所有LED同时显示
1.3 开发板引脚对应关系
点阵列P07到P00直接接到I/O口上,直接给P0口赋值就好了,点阵行D0到D7而是接到了8位的串行输入,并行输出的移位缓存器74HC595上。74HC595 可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于IO口扩展。
(左:74HC595 右:LED点阵屏)
(--OE)为Output Enable低电平有效,简单来说(--OE)为低电平时才有输出(J24中GND与OE短接);P35,P36,P4控制右边QA到QH的输出; (--SRCLR)串行清零端,SRCLK串行时钟,SER串行数据,共同控制输出;QH'是用来多片级联的。
左:移位寄存器;右:输出缓存器
SER:串行数据,在时钟的激励下一个一个数据从这个引线中出去,给移位寄存器输入数据,SERCLK:串行时钟,时钟每来一个上升沿,数据就会向下移位,数据一位一位往下走;RCLK:寄存器时钟如果寄存器时钟有上升沿的话,就会把移位寄存器中的数据同时搬运到输出缓存器中去。
2.源码
#include <REGX52.H>sbit RCK=P3^5; //RCLK
sbit SCK=P3^6; //SRCLK
sbit SER=P3^4; //SER#define MATRIX_LED_PORT P0 //宏定义P0口//延时函数
void Delay(unsigned int xms)
{unsigned char i,j;while(xms){i=2;j=239;do{while(--j);}while(--i);xms--;}
}void _74HC595_WriteByte(unsigned char Byte)
{unsigned char i;for(i=0;i<8;i++){SER=Byte&(0x80>>i);SCK=1;//时钟每来一个上升沿,数据就会往下移,循环8次,//把发送来的串行数据全部放到移位寄存中去;SCK=0;//为下次移位做准备;}RCK=1; //把移位寄存器的数据搬运到输出缓存器中;RCK=0;
}void MatrixLED_ShowColumn(unsigned char Column,Data)
{_74HC595_WriteByte(Data);MATRIX_LED_PORT=~(0x80>>Column);//选中列; 1000 0000取反0111 1111即选中第一列Delay(1);MATRIX_LED_PORT=0xFF;//消影
}void main()
{SCK=0;//单片机上电初始化后,所有I/O口都为高电平,所以上电后RCLK和SRCLK要置零;RCK=0;while(1){//MatrixLED_ShowColumn(0,0x24);//显示第一列MatrixLED_ShowColumn(1,0x18);//显示第二列MatrixLED_ShowColumn(2,0x24);MatrixLED_ShowColumn(3,0x22);MatrixLED_ShowColumn(4,0x11);MatrixLED_ShowColumn(5,0x22);MatrixLED_ShowColumn(6,0x24);MatrixLED_ShowColumn(7,0x18);}
}