学术论文网
基于LINUX的点阵式LED广告屏设计
发布日期:2024-07-25 12:26:25

  第1章 绪论

  1.1 论文研究背景

  led广告屏也称LED显示屏,通过控制半导体发光二极管点亮或熄灭的方式来显示字符。随着公众对公众场合发布信息的需求日益强烈,LED显示屏的出现正好适应了这一市场形势,因而在LED显示屏的设计制造技术与应用水平上都得到了迅速的提高。LED点阵式广告屏以二极管为图案,它用高亮度LED晶粒进行阵列组合后,在透过环氧树脂和塑模封装而成,具有低功耗、引脚少、高亮度、视角大、耐冷热、寿命大耐等特点。点阵式广告屏的发展已经从单色发展为多色,根据图案的数目具体分为单原色、双原色、三原色等,根据图素的不同所显示的文字、图像等内容的颜色也不同,单原色点阵只能显示固定色彩如红、绿、黄等单色,双原色和三原色点阵显示内容的颜色由图案不同颜色发光二极体点亮组合方式决定,如红绿都亮时可显示黄色;如果按照脉冲方式控制二极管的点亮时间,则可实现256或更高级灰度显示,即可实验彩色显示。同时LED点阵式也已经发展为拥有4x4、4x8、5x7、5x8、8x8、16x16等多种形式。如今LED显示作为信息传播的一种重要手段,已广泛应用于各类场景,例如户内外公共场所广告宣传、机场车站旅客引导信息、公交车辆报站系统、证券与银行信息显示等等。

  随着LED发布的信息量越来越多,对于硬件的要求也更高,ARM的出现很好的适应了其需求。随着技术的的进度,工业科技的成熟,ACORM有限公司投放了一款ARM处理器,ARM处理器是基于30位设计,ARM处理器具有多重优点:体积小、低成本、低功耗、高性能。支持THUMB/ARM双指令集,能很好的兼容8位/16位器件;执行速度快,使用大量寄存器;执行效率高,寻址方式灵活;指令固定长度。

  在对LED点阵的控制方式上,随着ARM及LED硬件的发展,采用基于LINUX的ARM环境进行开发在技术和硬件上已经成熟,且在适应环境性、操作性、稳定性方面有一定优势。

  1.2 论文研究的目的和意义

  在传统的单片机控制LED的方案中,存在操作不便、稳定性差、开发效率低等弊端,例如工程师在帮助用户编辑好广告标语离开以后,若用户需要更改文字内容,只能自己使用单片机语言和相关软硬件操作以后才能实现,或者只能等待厂家的专业人员到现场帮助修改,这样的方式不仅消耗多余的人力财力,并且响应很慢,无法体现广告的实时性特点,使得广告回报率降低,而通过本文提出的采用基于LINUX的ARM环境进行对点阵式LED的控制,可以避免此类情景的出现,只需要在操作系统中直接运行工具程序后即可进行修改文本等操作,提高的效率且操作方便,充分体现了灵活性和实时性。 同时传统的单片机模式由于受到硬件性能影响,在开发过程中如果进行了误操作,很容易产生系统崩溃,这样在开发和使用效率上都比较低,而本方案采用LUNIX系统配合ARM进行开发和控制,可以很明显的达到提升稳定性和效率的目的。

  通过本方案,不仅达到了对LED点阵屏的灵活稳定控制的目的,造价成本也很低廉,使用环境也更加广泛,为一些如路边、出租车、小商店等有该类广告需求的同时又受到成本和环境限制的小型场所提供了更优秀的选择,具有一定的现实意义。

  1.3 论文的研究内容和组织结构

  本文从提高控制LED点阵式广告屏的操作灵活性、稳定性的角度出发,设计和开发了一套基于LINUX的LED点阵式广告屏的设计方案,系统主要包括LiNUX驱动程序、ARM开发环境及点阵式LED屏,实现了整个控制流程的优化,最终实现稳定方便操作切换LED广告屏内容的目的。论文的组织结构如下:

  第一章 绪论:本章主要介绍了LED行业的现状背景,以及当前研究所面临的问题和现阶段研究方案,并对本文的研究内容进行阐述。

  第二章 工作原理:本章主要是对整个系统的原理进行阐述

  第三章 系统方案设计:本章内容主要包括系统软硬件的设计方案

  第四章 系统实现及测试:本章主要具体介绍了系统功能的实现方法并进行了模拟测试,同时在过程中进行界面展示。

  第五章 总结与展望:本章主要对全文进行总结,对今后工作作出展望。

  第2章 工作原理

  2.1 点阵式LED

  点阵式LED的一般由8行8列二极管组成一个单元,其外形和内部结构连接如图1所示,可以再由这8行8列二极管组成的单元进行拼接成更大的LED阵列。点阵式LED显示器能显示各种字符、汉字及图形、图像,并具有色彩。

  点阵式LED中,每个LED表示一个像素,通过每个LED的亮与灭来构造出所需的图形,各种字符及汉字也是通过图形方式来显示的。对于单色点阵式LED,每个像素需要1位二进制数表示,1表示亮,0表示灭。对于彩色点阵式LED,则每个像素需要更多的二进制位表示,通常需要一个字节。

  点阵式LED广告屏的显示方式采用方式是扫描,在数据存储器中有显示缓冲区,根据显示大小而占据相应的显示缓冲区。缓冲区中存信息、这些信息是显示图片所必须的。驱动对应的行信号,将信号传输到每个二极管上,每行每列。扫描的速度帧数达到一定的数值,我们观看时就不会接的卡顿。

  (2.1-1)

  生活中随处可见LED最简单的文字显示广告屏,如:的士后方的LED广告屏,公交车报站位置显示屏等,这些都是LED点阵式广告屏。LED显示方式有两种,第一种显示是静态显示。静态显示内容少,但显示稳定,不容易出现乱码等情况。第二种也就是点阵式LED广告屏的显示方式,它的显示方式是扫描方式,有信号驱动器发射信号,信号会从上到下,从左到右的进行扫描。在扫描的过程中得到点亮的信号时,该处的二极管就会发光。

  以8X8点阵单元为例,说明解释一下使用方法和控制过程。如图(2)以左下角的二极管为原点建立直角坐标系。一行列为单位,一行共用一根信号线,该信号线与相邻的信号线绝缘。一列共用一根信号线,该信号线与相邻的信号线绝缘。在这样的LED点阵式单元中,由控制中心信号发射驱动发射一个信号单元。该信号单元是一个(X、Y),扫面方式没一帧发射一组信号单元,它会点亮对应坐标的发光二极管。

  (2.1-2)

  2.2 ARM

  ARM是一款处理器,是Acorn有限公司面向低端市场设计的第一款RISC微处理器。全称为Acorn RISC Machine。ARM处理器是32位设计,但有配备指令集为16位,一般来说比等价32位代码少35%,却能保留所有优势。对32位系统来说。

  ARM处理器具有这样优点:体积小、低成本、低功耗、高性能;支持Thumb(16位)/ARM(32位)双指令集,对8位/16位器件具有很好的兼容性;指令执行速度更快,大量使用的寄存器;寄存器中完成大部分数据操作;执行效率高,寻址方式灵活简单;固定的指令长度。

  ARM的体系结构:在CISC指令集的各种指令中,不经常使用的指令集,在程序设计中只占20%,占整个程序代码的80%,大约有20%的指令会被反复使用。RISC结构优先选取使用频最高的简单指令,避免复杂指令;以控制逻辑为主,不用或少用微码控制;将指令长度固定,指令格式和寻址方式种类减少等。

  RISC体系结构具有这些优点:采用固定长度的指令格式,指令简单、规整、基本寻址方式有2~3种;能用单周期指令,执行流水线操作方便;大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执行效率;除此以外,ARM体系结构还采用了一些特别的技术,在保证高性能的前提下降低功耗并尽量缩小芯片的面积;所有的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率;可用加载/存储指令批量传输数据,以提高数据的传输效率;可在一条数据处理指令中同时完成逻辑处理和移位处理;在循环处理中使用地址的自动增减来提高运行效率。

  ARM的寄存器结构:ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄存器包括:31个通用寄存器,包括程序计数器(PC指针),均为32位的寄存器;6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位,只使用了其中的一部分。

  ARM的指令结构:ARM微处理器的在较新的体系结构中支持两种指令集:ARM指令集和Thumb指令集。其中,ARM指令为32位的长度,Thumb指令为16位长度。Thumb指令集为ARM指令集的功能子集,但与等价的ARM代码相比较,可节省30%~40%以上的存储空间,同时具备32位代码的所有优点。

  2.3 linux

  Linux的前身源于unix,由芬兰的helsinki大学技术科学系学生lins torvalds开发,1991年发生了linux0.11版。

  由于linux开元,很多企业对其进行了特色处理,我们常间的有叫这些名字的系统,这些都是基于LIUNX开发的。如现在小米的MIUI跟魅族的FLAME等都是基于安卓开发的。常见的有

  1、Redhat linux 2、debian 3、slackware linux 4、turbo linux 5、CENTOS 6、linux mandrake 7、informagic 8、suse linux

  Linux是一种非常优秀的操作系统,支持多用户,多进程,实时性好,功能强大而且稳定。同时具有良好的兼容性和可移植性。

  centos作为目前众多发行版本中的一种,cents系统的稳定性及安全性非常出色, centos是自由软件,获得途径很多,可以自由使用.

  CENTOS具备unix最基本的命令、排版、文本处理、各种服务器管理、程序设计开发、网络联机与管理甚至还可以使用windowsxp,具体表现如下: Linux是抢占式多任务,多用户操作系统,具有优秀的内存和多任务管理能力,不仅可以让用户可以同时执行数十程序,还允许用户远程登陆,对用户帐号等各方面都极其出色;Linux自带开机管理程序:lilo及GRUB来对多操作系统进行配置;Linux配有特殊的用户界面即x windows system,这是unix系统的标准图形界面; Linux使用tcp/ip协议作为主要的网络通信协议,内建ftp、telnet、mail、apache等各种功能,另外也提供拨号方式连接网络。而且稳定性高。Windows能够做得,linux都能做,而且稳定性及安全性都要比windows好得多多;Linux当中有大量的开发工具,例如:gcc、cc、c++、perl等。;因为linux是免费的,自由的开放的操作系统,所以很多软件可以容易在互联网上找到其升级包。无须任何费用。

  第3章 系统方案设计

  3.1 LINUX驱动

  3.1.1驱动原理

  LINUX提供标准给底层标准接口函数,按照LIUNX底层驱动编程规则进行编写驱动。驱动是操作系统用来控制硬件的,操作系统最基本的功能就是控制硬件,并提供一个统一的操作方式。内核也是设备驱动程序的一部分,驱动程序是操作系统最基本的组成部分,内核源程序中也占有60%以上。LIUNX采用的事可加载的模块化设计,一般情况下LINUX内核支持可插入式模块编译的,换句话说,基本核心编译在内核中,其他编译代码可以在内核中,也可以为模块文件(需要时加载)

  3.1.2内核模块的主要相关命令

  LSMOD:列出系统中当前加载的模块,从走边第三列是该模块的使用对象数目,第二列是模块大小,第一列是模块名。RMMOD:将当前模块卸载。INSMOD和MODPROBE是用于当前模块加载,区别在于INSMOD不会AUTO解决依存关系,MODPEOBE可以根据依存关系以及/ETC/MODULES.CONF文件中的自动加载其他有依赖的内容模块。

  3.1.3、设备驱动程序工作原理

  模块在INSMOD调用时被加载,此时的入口是函数Init_module,通常在设备完成注册在该函数中。反之,模块在RMMOD时被卸载,此时的入口是函数cleaunp_module(),在该函数完成设备的卸载。在设备完成加载注册之后,应用程序就可以进行一定的操作对该设备,如open()、write()、read()等,实现这些操作就是驱动程序。

  (3.1.3-1)

  3.1.4LINUX驱动程序

  #ifdef MODULE

  #include

  #include

  #include /* printk() */

  #include /* kmalloc() */

  #include /* everything... */

  #include /* error codes */

  #include /* size_t */

  #include

  #include /* O_ACCMODE */

  #include /* COPY_TO_USER */

  #include /* cli(), *_flags */

  #include

  #include #include

  #define DEVICE_NAME "UP-LED" #define LEDRAW_MINOR 0

  struct cdev *mycdev; dev_t devno;

  /************************************************************************************* Initialization function for leds of 2410CL devices

  led1 :gpc5 led2 :gpc6 led3 :gpc7

  *************************************************************************************/

  static void gpio_init()

  {

  s3c2410_gpio_cfgpin(S3C2410_GPC5,S3C2410_GPC5_OUTP); s3c2410_gpio_setpin(S3C2410_GPC5,1);

  s3c2410_gpio_cfgpin(S3C2410_GPC6,S3C2410_GPC6_OUTP); s3c2410_gpio_setpin(S3C2410_GPC6,1);

  s3c2410_gpio_cfgpin(S3C2410_GPC7,S3C2410_GPC7_OUTP); s3c2410_gpio_setpin(S3C2410_GPC7,1);

  }

  {

  return 0;

  }

  /*************************************************************************************/ static unsigned int led_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos)

  {

  return 0;

  }

  cmd(chanel): arg(status) 1(led1) : 1/0(on/off) 2(led2) : 1/0(on/off) 3(led3) : 1/0(on/off)

  static int led_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)

  {

  switch(cmd){ case 1:

  //printk("runing command 1 \n"); if(arg==1){

  s3c2410_gpio_setpin(S3C2410_GPC5,0);

  }

  if(arg==0){

  s3c2410_gpio_setpin(S3C2410_GPC5,1);

  }

  break; case 2:

  if(arg==1){ s3c2410_gpio_setpin(S3C2410_GPC6,0);

  }

  if(arg==0){ s3c2410_gpio_setpin(S3C2410_GPC6,1);

  }

  break;

  case 3:

  if(arg==1){ s3c2410_gpio_setpin(S3C2410_GPC7,0);

  }

  if(arg==0){ s3c2410_gpio_setpin(S3C2410_GPC7,1);

  }

  break;

  default:

  printk("error cmd number\n");break;

  }

  return 0;

  }

  /*************************************************************************************/ static int led_open(struct inode *inode, struct file *filp)

  {

  printk("led device open sucess!\n"); return 0;

  }

  /*********************/ static int led_release(struct inode *inode, struct file *filp)

  {

  printk("led device release\n"); return 0;

  }

  /*************************************************************************************/ static struct file_operations led_fops = {

  owner: THIS_MODULE, write:led_write,

  read: led_read, ioctl: led_ioctl, open: led_open,

  release: led_release,

  };

  /************************************************************************************* Leds initialized and register device function

  *************************************************************************************/

  static int __init led_init(void)

  {

  int result,err; result=alloc_chrdev_region(&devno,LEDRAW_MINOR,1,DEVICE_NAME);

  if(result < 0) printk(KERN_ERR "can't get device number \n"); else

  printk("get device number\n"); gpio_init();

  mycdev = cdev_alloc(); cdev_init(mycdev,&led_fops); err=cdev_add(mycdev,devno,1); if (err < 0)

  printk(KERN_ERR "can't add led device");

  return 0;

  }

  #ifdef MODULE

  void __exit led_exit(void)

  {

  cdev_del(mycdev); unregister_chrdev_region(devno,);

  }

  module_exit(led_exit); #endif

  /*************************************************************************************/

  module_init(led_init);

  MODULE_LICENSE("Dual BSD/GPL");

  #endif // MODULE

  3.2 ARM连接LED

  (3.2-1)逻辑关系图

  S3C44BOX是三星公司基于ARM7架构制作的RISC处理器,EPM570为芯片的扩展内存,将扩展内存芯片的读写引脚与nGCS2,nWE,nOE等相连使RISC控制内存的读写,同时EPM570引脚与LED驱动板相连由S3C44BOX驱动EPM570来驱动LED驱动板来控制LED阵列。

  (3.2-2)LED数码管电路图

  数字显示模块电路图,由控制芯片发送数据到3—8译码器上将数据由二进型号转为可视光信号

  (3.2-3)LED数码管电路图

  主要芯片为74HC273,在图中起到原码输出的功能,数据由D1-D8并行输入并由Q1-Q8并行输出在没有变更信号的输入情况下,显示器将一直显示当前数据值

  (3.2-4)8x8平面LED等矩阵阵列

  2个74HC273构成,每个引脚控制一行或一列的导通,矩阵上的LED由一横一纵两个引脚的导通而点亮.

 1/2    1 2  
Copyright © 2008-2020 学术论文网 版权所有 粤ICP备16093775号