总想上传一张89S51经74HC138+74HC595串口驱动的点阵屏电路图,但总嫌麻烦,始终也没画完,今天又整理了一下,总算完成了,贴在这里,共感兴趣的朋友共享,此图是根据网上比较流行的电路整理编绘的,如有问题,欢迎交流指正,如有雷同纯属巧合,如有转载,请注明出处。
驱动程序可根据本人的16*16点阵程序改编,另外还有一个本人对程序中显示数据生成函数的解释资料一并录于此处,也欢迎切磋。 语句temp=(h1<<tempcol)|(h2>>(8-tempcol));的设计原理: 下面我们以程序进行左移3位的运算为例解释一下语句temp=(h1<<tempcol)|(h2>>(8-tempcol));的设计原理;我们知道,在8位二进制数据进行运算时,若要将一个3位的二进制数据置入另一个8位二进制数据后3位的空位中,(注:这里所说的数据置入,是指当一个显示数据显示后,这个数据经左移以后变成了下一个要显示的新数据,而这个新的数据实际上就是由已显示数据的前7位与后一个数据的前1位数据组合形成的,也就相当与将后面的数据置入了前一个数据。)可以采用的方法不外乎有两个,一个是加入YYYYY000+00000XXX=YYYYYXXX。另一个方法是按位或,而后一个方法更加直观方便。本语句就是采用了按位或的方法,详解如下:设寄存器D中有数据D=0X33=00110011其左移3位后D中的数据改变为10011000后置入DY(数据移出后寄存器相应位自动清零); 设寄存器C中有数据C=0XA6=10100110其右移8-3=5位后C中的数据改变为00000101后置入CY。 DY|CY运算后,结果为10011101其结果不难看出,相当于将C(0XA6)中的前3位数据左移进入了DY的后3位中。这一算式的设计,是为了适应我们的硬件系统,解决了一个8位显示数据由当前的8位锁存输出芯片(595)进入下一片(595)时能够保持连贯;因为我们的硬件系统的组成为8位单片机通过级联的8位数字电路驱动点阵屏,假如我们的硬件无所不有,那么,我们可以使用16位的系统驱动16列的屏,32位驱动32列,64位驱动64列,128位……。那么我们只要用一句简单的移位语句,即可达到目的,就不必如此费周折了。
|