关于led显示的一点粗浅经验之谈 (关于led显示屏)
编辑:rootadmin
这段时间有不少朋友在作led显示,问了我不少问题,一一回答总是找不到要点在此我把我几年来作led的一点经验总结以下,作为对大家回答,希望对大家有点启发,也作为抛砖引玉吧,大虾们多谈谈自己的宝贵经验!一:LED显示器件的基础LED发光器件一般常用的有2类、数码管和点阵1:数码管a,数码管常用的一般8字型,分为ABCDEFGP段,其中P位小数点b,数码管常用的有根管脚(单位),每段一根管脚,另外两根管脚为公共端,2根是通的c,从尺寸上分的话种类很多,常用的有0...........0等等d,一般小于1.0的为单管芯,(1.0有单有双),1.2~~1.5为*芯,1.8以上为3个以上的管芯,因而他们的供电电压要求不同,一般每个关芯的压降为2.1v左右,我的经验是0.8以下5v供电,1.0~2.3为v,3.0以上更高e,数码管分共阴和共阳两种2:点阵a,点阵常用的为8*8,以前还有5*8(现在不大用了)b,点阵都是单管芯,分(行)共阴和(行)共阳,一般都用5v供电c,8*8点阵为根管脚(单色,也有根的,可能是作废的双色点阵或者为了能在同一种线路板上实现单色双色都可用而设计的,也比较常见)8根行8根绿,双色为根管脚,8根行,8根列红,8根列绿。二:显示基本原理分为静态(只有数码管能实现)和动态1:静态的比较好实现,在此不多讲了2:数码管动态a,硬件连接数码管一般为1/能扫描,再高的话亮度损失比较大,在此假设为列为列,行为行,共阳管,每行数码管的各段连在一起,每列数码管的公共段连在一起.列开关用tip,他可以直接用驱动,达林顿管5安培,注意输出不要加电阻行用(不建议)+或者+一个,在的输出要加上限流电阻,一般为~欧姆(如果是<1.0的数码管,可以直接用加电阻驱动)b,软件采用c为cpu,存储器可采用c系列,或者c系列,注意他们的写入速度都不是很快,不过一般数码管的输入设备为键盘或*,速度足够了,还有c系列的读出速度也比较慢,我发现每次读出的数据大概只有以内才不会影响更新显示显示采用时钟中断1,中断时间不能超过1.5ms,最好为1.2ms左右,可以在中断服务程序中读c,也可以在中断的间隙中读取,但必须保证能够读出所有的一列数据!读出的数据放到一块显示区中,(在内存中定义一个数组buf[]),在中断子程序中把数据发送的中即可,最好采用串口发送,编程最简单.发送完毕后,关掉控制行的,给的RCLK(脚)一个脉冲,把数据从移位寄存器传输到锁存器,而后打开并输入列信号即可3:点阵a,点阵一般采用1/扫描,控制原理和数码管差不多b,硬件:行用+tip,列用加电阻(0~欧姆)直接驱动c,软件:方案比较多,见下面三:先说说信息的存储分为2种,1:一种为固化的汉字,汉字点阵信息存于c中,最多存个*点阵汉字,要修改只能重新写c,优点是不丢失,一般我们为银行做的都是这种,他很少修改显示能容,而且以后每次修改可以收费(哈哈~~~),缺点是不灵活2:另一种是可以用户自己修改的,修改方式又分为2种,早期一般用键盘或者*修改,那样必须在主办上固化有汉字字库,可用c固化ucdos的hzk全角字库和asc半角字库,用户输入区位吗进行修改,用户需要显示的汉字以区位码的方式存到一片E2POM中,显示的时候程序根据区位吗读取点阵信息送到屏上显示,还有一种近年来常用的方式就是利用微机串口进行修改,这里面还分为两种A,控制板上没有字库,微机发送的是显示的点阵信息,控制板接受后把信息存到带电池的RAM中(也可用E2PROM,但速度很慢),这种的缺点是掉电池的RAM不太可靠,常常丢失信息B,控制板上带字库,微机发送汉字的机器码(内码)即可,其他同上四:显示的控制信息的发送可以有好多方式,根据采用器件的不同而不同,有的厂家采用控制而不采用,那样的话直接写一个外部端口即可,级连方式,(如果用1排的话在传输中必须关掉显示,显示字较多的话影响亮度,用2排不必关掉显示但增加硬件成本),目前用得较少了,的很常见。发送可以用传口,很简单,也可以用别的口模拟串口发送(因为传口还有可能随时接受微机的信号),也可以采用串口复用(不过我不会,:)~~)我采用的是用+向发送数据,硬件比较复杂,但是在以后的显示花样中很好用!特别是左右移位,爽极了!提示一下:最近用双龙的S发现很好,因为他还有一个SPI口,用来送信号更爽!速度可到3M,(M晶体),强烈建议大家用这种芯片(靠,也不知到双龙看到了会不会给点奖励....)五:一些注意事项:1:显示时间,每行<1.5MS2:根据经验,CM晶体最大控制个*点阵,再大的话可以提高晶体频率和优化程序,(就是发送程序的时间最短)3:在显示的字比较多时,一定要注意发送子程序的代码效率,因为发送是一个循环,所以循环体内的处理越快越好,大家现在大都用C,更得注意,我可是吃过亏的。大家看下面的例子:if(hangno==0x)hangno=0;//hangno为显示的行序号for(i=0;i<;i++){PORT1=*(addr+hangno*0x+i);//我的汉字信息是0~为第一行信息//~0c为第二行信息...PORT2=0x0ff;}每次发送个字节(个字),程序编译通过,没有问题,可是当显示个汉字时(假设)显示就乱了,后来改为if(hangno==0x)hangno=0;//hangno为显示的行序号w=hangno*0x;for(i=0;i<;i++){PORT1=*(addr+w+i);//我的汉字信息是0~为第一行信息//~0c为第二行信息...PORT2=0x0ff;}就没有问题了,大家自己看看,就知道原因了,对吧?写了这么多,想到那些到那,很不*,不过好累呀,我下两盘军旗放松放松,大家多提提意见,这只是讲的小屏的控制方法(<2m2),大屏的完全不同,有人感兴趣的话以后再谈.