Arduino入门之8x8点阵实验
2019-09-10
点阵在我们生活中很常见,很多时候都有用到它,比如LED广告显示屏、电梯显示楼层、公交车报站,等等。废话不多说,赶紧学习吧。
1.8×8点阵原理图
2. 8×8点阵实物图
图为8×8点阵LED外观及引脚图,其等效电路,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如想使左上角LED点亮,则Y0=1、X0=0即可。应用时限流电阻可以放在X轴或Y轴。
3. 8×8点阵扫描方式
LED一般采用扫描式显示,实际运用分为两种方式:
(1)点扫描
(2)行列扫描
16×64=1024Hz,周期小于1ms即可。若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。
3. 8×8点阵应用举例
点阵内部结构及外形如下,8×8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则9脚接高电平13脚接低电平,则第一个点就亮了;如果要将第一行点亮,则第9脚要接高电平,而(13、3、4、10、6、11、15、16)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第13脚接低电平,而(9、14、8、12、1、7、2、5)接高电平,那么第一列就会点亮。
一般我们使用点阵显示汉字是用的16×16的点阵宋体字库,所谓16×16,是每一个汉字在纵、横各16点的区域内显示的。也就是说得用四个8×8点阵组合成一个16×16的点阵。要显示“你”则相应的点就要点亮,由于我们的点阵在列线上是低电平有效,而在行线上是高电平有效,所以要显示“你”字的话,它的位代码信息要取反,即所有列(13-16脚)送(1111011101111111,
0xF7,0x7F),而第一行(9脚)送1信号,然后第一行送0。再送第二行要显示的数据(13-16脚)送(1111011101111
111,0xF7,0x7F),而第二行(14脚)送1信号。依此类推,只要每行数据显示时间间隔够短,利用人眼的视觉暂停作用,这样送16次数据扫描完16行后就会看到一个“你”字;第二种送数据的方法是字模信号送到行线上再扫描列线也是同样的道理。同样以“你”字来说明,16行(9、14、8、12、1、7、2、5)上送(0000000000000000,0x00,0x00)而第一列(13脚)送“0”。同理扫描第二列。当行线上送了16次数据而列线扫描了16次后一个“你”字也就显示出来了。
因此,形成的列代码为 00H、00H、3EH、41H、41H、3EH、00H、00H;只要把这些代码分别依次送到相应的列线上面,即可实现“0”的数字显示。点亮8×8点阵LED的一个LED:
这个是显示“0”的程序代码。
//定义了一个数组,用来存放“0”字的字模
unsigned char Text[]={0x00,0x1c,0x22,0x22,0x22,0x22,0x22,0x1c};
void Draw_point(unsigned char x,unsigned char y)//画点函数
{
clear_();
digitalWrite(x+2, HIGH);
digitalWrite(y+10, LOW);
delay(1);
}
void show_num(void)//显示函数,最终还是调用了画点函数。
{
unsigned char i,j,data;
for(i=0;i<8;i++)
{
data=Text[i];
for(j=0;j<8;j++)
{
if(data & 0x01)Draw_point(j,i);
data>>=1;
}
}
}
void setup(){
int i = 0 ;
for(i=2;i<18;i++)
{
pinMode(i, OUTPUT);
}
clear_();
}
void loop()
{
show_num();
}
void clear_(void)//清除屏幕
{
for(int i=2;i<10;i++)
digitalWrite(i, LOW);
for(int i=0;i<8;i++)
digitalWrite(i+10, HIGH);
}
实验结果如图4的LED亮灯。
Arduino8×8点阵,注意引脚图5是反起看的,当元件插上去的时候,左右交换。
例如:‘H’变成 ‘0’。
4.连线对应关系:要在其中一列加上1K或220欧姆限流电阻
Arduino 8×8点阵
2--------0 //行选0
3--------1 //行选1
4--------2 //行选2
5--------3 //行选3
6--------4 //行选4
7--------5 //行选5
8--------6 //行选6
9--------7 //行选7
Arduino 8×8点阵
10--------A //列选A
11--------B //列选B
12--------C //列选C
13--------D //列选D
14--------E //列选E
15--------F //列選F
16--------G //列选G
17--------H //列选H