Arduino入门到精通第40课:8x8点阵实验(组图)

点击2198  回复0  分享1


    点阵实验

    概述
    点阵在我们生活中很常见,很多都有用到他,比如LED广告显示屏,电梯显示楼层。公交车报站,等等,,,数不胜数。废话不多说,赶紧学习吧。
    1.8*8点阵原理图
    8 ×8点阵原理图 - cdx19901103@yeah - cdx19901103@yeah的博客

    2. 8*8点阵实物图
    8 ×8点阵原理图 - cdx19901103@yeah - cdx19901103@yeah的博客

    图为8×8点阵LED外观及引脚图,其等效电路如图(2)所示,只要其对应的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点阵应用举例
    点阵内部结构及外形如下,8X8点阵共由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脚)送(1111011101111111,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”的数字显示。
    点亮8X8点阵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);


    }

    实验截图:


    8 ×8点阵原理图 - cdx19901103@yeah - cdx19901103@yeah的博客
    Arduino 8x8点阵 //注意引脚图是反起看的,当原件插上去的时候,左右交换。
    例如:‘H’变成 ‘0’
    连线对应关系:
    要在其中一列加上1K220欧姆限流电阻
    Arduino 8x8点阵
    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 8x8点阵
    10 ---------------------A //列选A
    11 ---------------------B //列选B
    12 ---------------------C //列选C
    13 ---------------------D //列选D
    14 ---------------------E //列选E
    15 ---------------------F //列选F
    16 ---------------------G //列选G
    17 ---------------------H //列选H

    学习有问题在线提问>>



    【相关精彩阅读】
    Arduino入门到精通第39课:三色LED RGB模块实验(组图)
    http://tieba.aiwenwen.com/tie/126564.html
    Arduino入门到精通第38课:步进电机试验(组图)
    http://tieba.aiwenwen.com/tie/126563.html

    Arduino入门到精通第40课:8x8点阵实验(组图)


    发表回复

    申请加精
    加大 减小

    * 验证码,看不清楚?请点击刷新验证码 看不清楚?请点击刷新验证码

    每位会员第一次回帖审核成功可获5分[积分规则]
    关闭
    爱问问贴吧郑重承诺:我们将尽一切努力,坚决杜绝低俗信息,为广大网友创造一个绿色、健康、和谐的网络空间。同时,我们也真诚的希望广大网友对我们的工作进行监督。请点击:关于爱问问整治低俗内容的公告