实验1-李荷心-0203

作者: 李荷心0203 | 来源:发表于2018-05-14 18:26 被阅读146次

    实验背景:

    LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,是各部分组件都模块化的显示器件,通常由显示模块、控制系统及电源系统组成。LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。

    实验说明:

    8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮。

    实验步骤:

    • 1.首先将开发板与电脑用USB线连接(连接串口可用),并用排线将芯片管教与点阵行孔和列控相连。

    • 2.打开Keil软件进行控制程序编写,建立工程。

    • 3.用一个8X8点阵显示字形“我❤你生生世世”为例,需要LED点阵显示相应字形,采用点阵列扫描(如下程序),可将上图连线点电平设为1,再翻转90°,把每一行显示的二进制化为16进制,直接写在程序中即可,具体如下图示代码:


      代码.PNG
    • 4.继续添加头文件、点阵显示程序、74HC595驱动程序、扫描延时程序等,写完完整程序后并生成hex文件。

    • 头文件

    //该板子上的点阵为8*8,只能显示简单的一些汉子,如果要显示真正的汉字
    //通过取模软件取的可以选择16*16点阵的板子
    
    #include<reg51.h>
    #include<intrins.h>
    
    sbit SRCLK=P3^6;
    sbit RCLK=P3^5;
    sbit SER=P3^4;
    
    //--定义要使用的IO口--//
    #define COMMONPORTS     P0
    
    //--列选通控制--//
    unsigned char code TAB[8]  = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
    
    • 点阵显示程序
      本次实验使用的是7X8二维数组,所以如下代码要改成[7][8],在扫描延时程序中,j的值也要相应的改为7。
    //--点阵字码--//
    unsigned char code CHARCODE[7][8]=
    {
    0x10,0x55,0xBF,0x14,0x10,0xFE,0x99,0x52,    //我
    0x38,0x64,0x22,0x11,0x11,0x22,0x64,0x38,    //心形
    0x20,0x7F,0x84,0x6A,0xC1,0x5F,0x68,0x44,    //你 
    0x11,0x21,0xE9,0x29,0xFF,0x29,0x29,0x21,   //生
    0x11,0x21,0xE9,0x29,0xFF,0x29,0x29,0x21,    //生
    0x20,0xFF,0x21,0xFD,0x25,0xFD,0x21,0x20,    //世 
    0x20,0xFF,0x21,0xFD,0x25,0xFD,0x21,0x20,    //世
    };
    void delay(unsigned int time)
    {
      unsigned int i,j;
      for(i=0;i<time;i++)
        for(j=0;j<121;j++);
    }
    
    
    • 74HC595驱动程序
    /*******************************************************************************
    * 函数名         : Hc595SendByte(unsigned char dat)
    * 函数功能         : 想74H595发送一个字节的数据
    * 输入           : 无
    * 输出             : 无
    *******************************************************************************/
    void Hc595SendByte(unsigned char dat)
    {
        unsigned char a;
        SRCLK=0;
        RCLK=0;
        for(a=0;a<8;a++)
        {
            SER=dat>>7;
            dat<<=1;
    
            SRCLK=1;
            _nop_();
            _nop_();
            SRCLK=0;    
        }
    
        RCLK=1;
        _nop_();
        _nop_();
        RCLK=0;
    }
    
    • 扫描延时程序
      j的值相应的改为7。
    /*******************************************************************************
    * 函数名         : main
    * 函数功能         : 主函数
    * 输入           : 无
    * 输出             : 无
    *******************************************************************************/
    
    void main()
    {   
        unsigned char tab, j;
        unsigned int  i;
    
        while(1)
        {   
            for(i= 0; i<50; i++ )   //两个字之间的扫描间隔时间
            {
                for(tab=0;tab<8;tab++)
                {   
    
                    Hc595SendByte(0x00);                 //消隐                                                               
                    COMMONPORTS = TAB[tab];              //输出字码 
                    Hc595SendByte(CHARCODE[j][tab]);    
                    delay(2);       
                }
                 
            }
            j++;
            if(j == 7)
            {
                j = 0;
            }
        }   
    }
    
    
    • 5.利用烧录软件进行烧录同时重启开发板。

    • 6.可以看到LED点阵屏显示字形“我❤你生生世世”。


      我.jpg
    心形.jpg 你.jpg 生.jpg 生.jpg 世.jpg 世.jpg

    实验总结:

    • 1.使用字模提取软件zimo221.exe (密码:s0gi)可以直接得到所需字形的代码,无须计算,当字形太多时,挨个计算就有点繁杂,懂得计算方法即可。详细说一下这个软件:
      ①用的时候要改成8X8的,因为默认是16X16,输入文字之后,记得要摁“crtl+enter”结束文字输入。我在用的时候,发现输入文字的时候,有的他自动跳成16X16的了,所以我是直接在生成的白板上画的(在“模拟动画”栏里有个“放大格点”,画的时候就不会眼疼了),然后取模方式改成“C51模式”,直接复制生成的十六进制数就好了。我感觉8X8有点小,字太复杂的话,弄出来可能会乱。我是一开始弄了个比较复杂的字,代码也是对的,但是在单片机上显示的时候就看不清了。
    捕获1.PNG
    捕获2.PNG

    ②记得在选项中改成“纵向取模”。

    捕获3.PNG

    ③但是也要懂得计算的方法。要注意两个问题,一是采用的是点阵列扫描,由左至右共八列,从上到下为高位到低位;二是二进制转十六进制的计算过程要正确。

    • 2.每一个字由8行8列的点阵组成显示。我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字,也可以显示在64象素范围内的任何图形。
    • 3.本次实验使用的是7X8的二维数组,所以在计算点阵显示代码的同时,还要注意将代码中4X8二维数组改成7X8二维数组,以及j的改动,注意前后对应,切勿只随意添加点阵显示代码,忽略了前后的照应。
    • 4.刚开始电脑识别不到单片机,老是在设备管理器里显示USB2.0,然后就右击更新驱动,选择自动搜索更新,还不行。之后就找到网盘里的文件,下载“应用驱动”里的CH341SER.EXE,然后发现安装失败。然后就发现网盘里还有一个word文件“关于驱动手动安装失败”,然后就按步骤一步步的来,我的是属于“数据无效”的情况,做完word里的的步骤,然后重新安装了一下那个驱动文件(CH341SER.EXE),就能安装上了。然后再到设备管理器里去右击USB2.0更新驱动,然后就能在烧录软件那里找到端口号了。


    • 5.通过本次实验,我了解了LED点阵显示的基本原理和实现方法,掌握了常用LED和单片机元件的识别和测试、8×8点阵的显示代码的计算;了解了电路的连接方法以及如何提高电路的性能,并在独立思考、动手操作的能力上有了提高。

    相关文章

      网友评论

      • 张fafa:智慧如我,阿弥陀佛。

      本文标题:实验1-李荷心-0203

      本文链接:https://www.haomeiwen.com/subject/ahijdftx.html