本帖最后由 lijiankun 于 2015-4-20 11:17 编辑
最近在搞LED单板的显示控制,在这里总结一下自己的体会和经验,还望大家多多指教。
首先对于LED单板,驱动电路是LED生产厂家已经做好的,所以我们并不需要太关注它是如何驱动的。我用的是32*16(32列,16行)的LED单板,它的驱动芯片用的是74HC595,单板对外的接口是灯板接口中常见的08接口。
对08接口的管脚的说明:A、B、C、D,这是控制灯板的行选信号,其中D是高位,A是低位。对于1/16扫模式ABCD四位都会用上,对于1/8扫模式会用到ABC,对于1/4扫模式则只会用到AB两位。
说明:对于LED灯板一些概念性的东西,这片**不细说,想了解者,可以在百度上搜索“最全的LED显示屏知识”(我没有发链接的权限,大家就自己去搜索吧)
CLK是时钟信号,通过这个时钟信号可以将需要显示的数据,送到led屏上去。这个时钟只能用IO口模拟,不能用单片机上现有的时钟,时钟信号每变化一次,就会向屏传入一个数据。
OE是使能信号,控制屏是显示数据还是不显示。我用的这块屏是OE=1,允许显示,OE=0,禁止显示。对于不同的灯板信号可能有所不同,实地应用时需要自己去试一试。
R,G是数据输入端,R代表的是红灯信号,G代表的绿灯信号,我使用的灯板只有红灯,所以这里只需要用到R管脚。可以把它理解成一个移位寄存器,时钟每变化一次,就会从这个端口向屏上移入一位数据(灯板的显示原理是串入并出的)。对于我的灯板,送0灯亮,送1灯灭。
LAT是锁存信号,当数据串入完成,将数据一锁存,驱动电路就会并行的把数据送到屏上用于显示。对于我的灯板LAT=0,不锁存数据,LAT=1,锁存数据
对于08接口剩下的管脚都是接地的。
一般来说对于灯板的控制,需要LED控制卡,这里因为只是学习,所以我们用新唐M451开发板模拟LED控制卡的功能,所以单片机与灯板的连接需要我们自己用跳线去做。
其次要想自如的控制LED单板,你还必须了解单板的走线规律,因为数据是串行输入的,所以数据送进去后,灯板上的灯必然亮灭起来有个先后顺序,这个顺序就叫灯板的走线顺序。一般来说这个顺序都不会是一行完了紧接着下一行这么的理想化,所以我们就必须自己想办法测出这个规律。
下面是我用新唐M451控制的部分代码,供大家参考
灯板是32*16的,1/4扫描模式,这里只是简单的显示了一些静态数据,并不牵扯到动态显示
char data[16]={0xfe,0xfe,0xfe,0x00,0xff,0xff,0xff,0x00,0xf7,0x7f,0xff,0x00,0xff,0xff,0xf7,0x00};
int main(void)
{
int i,j;
SYS_Init();
/* Select SysTick clock source as HXT */
CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLKSEL_HXT);
//用单片机的IO口模拟08接口
GPIO_SetMode(PC, BIT14, GPIO_MODE_OUTPUT); //OE
GPIO_SetMode(PE, BIT3, GPIO_MODE_OUTPUT); //LAT
GPIO_SetMode(PD, BIT7, GPIO_MODE_OUTPUT); //R1
GPIO_SetMode(PD, BIT11, GPIO_MODE_OUTPUT); //A
GPIO_SetMode(PF, BIT2, GPIO_MODE_OUTPUT); //B
GPIO_SetMode(PD, BIT8, GPIO_MODE_OUTPUT); //C
GPIO_SetMode(PC, BIT8, GPIO_MODE_OUTPUT); //D
GPIO_SetMode(PC, BIT13, GPIO_MODE_OUTPUT); //clk
PC14 =1; //OE ,打开显示使能端
PE3=0; //LAT,关闭锁存信号
PF2=0; //B ,行选信号,高位
PD11=1; //A,行选信号,低位
for(i=0;i<16;i++)
{
for(j=0;j<8;j++)
{
PC13=0; //模拟时钟低电平
PD7=(data>>j); //显示数据发送
PC13=1; //模拟时钟高电平
}
}
|