首先应该清楚点阵的显示原理,先拿 8X8 的点阵举例说明如下:点阵可以看成是由 8 行 8 列的导线交叉排列,在每一个交叉点上放上二极管,这是一个三行三列的示意图
例如我们想点亮中间的一个二极管,只需要让第二行给高电平,第二列给低电平就能点亮了
8X8 的点阵点亮方式也是一样
用这样的方式可以点亮一个 8X8 点阵上的任意一点,那么,如何让一个 8X8 的点阵显示图像呢
我们拿一个箭头示例
这样的话,我们只需要分别算出各行各列上需要点亮的点的数据就可以了,因为要完成整个屏的显示要打开到每一行每一列,所以我们可以让单片机一个数据口端只做行扫描或列扫描(比方说在所有点的阳极做扫描,也就是从第一行依次打开(若是阳极则给高电平)到第 8 行或第一列依次打开到第八列,在打开其中任意一行或一列时其他行或列给高电平或低电平使其关闭显示),这里只说行扫描,从打开第一列 0x01,第二列 0x02,第三列 0x04······第八列 0x80,可以组成数组 code unsigned char tabh[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};然后则是在这些扫描的基础上需要点亮那些点,因为这里是做阳极列扫描,所以要想点亮某些点则需要在这个点所对应的行控制端给低电平
在 点 亮 第 一 列 , 也 就 是 这 个 箭 头 的 最 上 最 左 边 两 个 点 , 二 进 制 数 据 是11100111,换算成十六进制是 0xe7,然后是第二行的四个点 11000011,换算成十六进制是 0xc3,依次到第八行,装进数组则是 code unsigned char tabh[]={0xe7,0xc3,0x81,0x24,0x66,0xe7,0xe7,0xe7};然后我们在这两组数据的基础上用一个 for 循环让这些列数据与行数据同步对应到单片机数据输