大部分点阵的汉字都是16*16显示的,下面让我们来
学习16*16点阵的显示。
和上面一样我们先选择元件:AT89C52,74LS138,,MATRIX-8*8-GREEN,因为要显示16*16的汉字,我们就不能再使用一个38译码器进行行选了,这里我们用两个38译码器组合成一个
4选16的译码器(当然也可以使用74159)。而MATRIX-8*8-GREEN点阵需要4个。完成后如下图:
2.先来看看4选16的译码器是如何
工作的,这里有4个输入端a、b、c、d,16个输出端H0~H15,如上图连线后即可完成类似于38译码器一样的工作。只不过扩展到了16行选。关于连线的
原理这里不再赘述,只要明白38译码器的原理这个可以轻松理解。接着完成全部布线。如下图所示:
3.连好线后,P1作为行选,P2、P3一起作为列选。现在16*16的点阵被分成两块并不完整的部分,我们可以整体移动(包括点阵屏、连线以及连接点,)来方便我们观察显示的效果
(最好同时去掉仿真中电平的指示灯)。接着我们来看一个程序,还是让此点阵屏显示一个汉字:"明"。
先看效果图:
源代码如下:
/************16*16LED点阵屏显示*****************/
#include
char code table[]={0x00,0x20,0x20,0x7F,0x7E,0x21,0x22,0x21,
0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,
0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,
0x80,0x20,0x80,0x20,0x40,0x28,0x20,0x10}; // "明"
void delay(int z)
{
int x,y;
for(x=0;x for(y=0;y<110;y++);
}
void main()
{
int num;
while(1)
{
for(num=0;num<16;num++)
{
P1=num; //行选
P2=table[2*num]; //列选
P3=table[2*num+1]; //列选
delay(2);
}
}
}
4..先来看这次使用的table数组,因为是16*16的点阵,所以总共有32个数据,其中第1、2个数据用于第一行的显示,第2、3个数据用于第二行的显示,以此类推,总共16行。
然后还是来看while循环内,同样for循环依次扫描16行,以第一行为例,即num=0时,首先P1=0,选中第一行,P2=table[0]、P3=table[1]送出列选数据,即第一行要显示的两个字节的数据。
其他行同理。这样很轻松的我们就完成了16*16点阵的显示。程序虽然完