• 基于单片机的点阵电子显示屏上下左右移加减速系统


    一、系统方案
    本设计的任务就是完成一个1616的点阵设计,并能滚动显示“********************”内容。
    主要内容是,能同时流动显示汉字;能实现显示汉字无闪烁;能实屏幕亮度较高。本LED显示屏能够以动态扫描的方式显示一个16×16点阵汉字,并能通过单片机实现内容滚动显示。课题研究了LED的显示原理,详细了解了LED动态显示的过程,以及硬件电路的设计、计算和软件的算法。LED点阵显示系统中各模块的显示方式: 有静态和动态显示两种。静态显示原理简单、控制方便,但硬件接线复杂,在实际应用中一般采用动态显示方式,动态显示采用扫描的方式工作,由峰值较大的窄脉冲电压驱动,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出表示图形或文字信息的列数据信号,反复循环以上操作,就可显示各种图形或文字信息。
    点阵式LED汉字广告屏绝大部分是采用动态扫描显示方式,这种显示方式巧妙地利用了人眼的视觉暂留特性。将连续的几帧画面高速的循环显示,只要帧速率高于24帧/秒,人眼看起来就是一个完整的,相对静止的画面。最典型的例子就是电影放映机。在电子领域中,因为这种动态扫描显示方式极大的缩减了发光单元的信号线数量,因此在LED显示技术中被广泛使用。
    在这里插入图片描述
    二、硬件设计
    原理图如下:在这里插入图片描述

    三、单片机软件设计
    1、首先是系统初始化
    EA=1;
    TMOD=0x01;
    TH0=0x3c;
    TL0=0xb0;
    ET0=1;
    TR0=1;
    //595c初始化
    Init595_l1();
    Init595_l2();
    Init595_c1();
    Init595_c2();
    2、点阵显示程序
    if(flag1) //左移函数
    {
    for(k=0;k {
    for(i=1;i<17;i++) //一个for循环,分别选中16个列
    {
    if(flag
    1)
    {
    Write_byte595_l1(0xff);
    Write_byte595_l2(0xff);
    if(i<9)
    {
    Write_byte595_c1(a[i-1]);
    Write_byte595_c2(0x00);
    }
    else
    {
    Write_byte595_c2(a[i-9]);
    Write_byte595_c1(0x00);
    }
    Write_byte595_l1(H1[i2-2+2X]);
    Write_byte595_l2(H1[i2-1+2X]); //显示内容
    delay(7);
    }
    if(KEY_&&KEY_ADD&&KEY_DEC&&KEY_PAUSE1) TR0=1;
    }
    }
    }
    3、按键程序
    if(KEY_0)
    {
    KEY_NUM++;
    if(KEY_NUM>=2)
    {
    KEY_NUM=0;
    TR0=0;
    pause=0;
    flag++;
    if(flag>=6) //切换模式
    {
    flag=1;
    }
    Write_byte595_l1(0xff);
    Write_byte595_l2(0xff);
    Write_byte595_c1(0x00);
    Write_byte595_c2(0x00);
    i=1;X=0;j=0;k=0;
    }
    }
    if(KEY_ADD
    0) //加速按键
    {
    speed-=2; //速度变量减2(速度变量越小速度越快)
    if(speed<2) //最小减到2
    speed=2;
    TR0=0;
    }
    if(KEY_DEC
    0) //减速按键
    {
    speed+=2;
    if(speed>20)
    speed=20;
    TR0=0;
    }
    if(KEY_PAUSE==0) //暂停按键
    {
    pause=!pause; //变量为1时进入暂停状态
    TR0=0;
    }
    4、核心算法程序
    //初始化595
    void Init595_l1()
    {
    flag=1;
    SI=1;
    SCK=0;
    RCK=0;
    }
    void Init595_l2()
    {
    SI0=1;
    SCK0=0;
    RCK0=0;
    }
    void Init595_c1()
    {
    SI1=1;
    SCK1=0;
    RCK1=0;
    }
    void Init595_c2()
    {
    SI2=1;
    SCK2=0;
    RCK2=0;
    }
    四、 proteus仿真设计
    Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
    在这里插入图片描述

  • 相关阅读:
    《Go Web 编程》之第2章 ChitChat论坛
    SpringBoot+Vue项目疫苗接种管理系统
    matlab实现MCMC的马尔可夫转换MS- ARMA - GARCH模型估计
    前端定义了全局变量后,再定义一个同名的局部变量
    antd vue实现table的分页组件固定位置的效果
    第一章.线性空间和线性变换
    Bytebase 和 GitLab 签署 Technology Partner 技术合作伙伴协议
    [题]当天是该年的第几天? #switch的小用法
    信我,ThreadPoolExecutor经典面试问题就在这~
    网络爬虫之爬虫原理
  • 原文地址:https://blog.csdn.net/bbxyliyang/article/details/132640005