微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 双RAM技术在LED显示屏控制系统的应用

双RAM技术在LED显示屏控制系统的应用

时间:03-15 来源:3721RD 点击:

据,在SPI时钟驱动下,输出显示数据。并且可以用单片机模拟串行FLASH时钟信号控制任意位数据输出。

  2.2 数据选择控制电路

  设计的LED显示屏控制系统如图3所示,VRS51L3074单片机内部自带精确的40MHz振荡器,不需要外部晶振电路提供系统时钟,显示数据使用内存为16Mb的SST25VF016B,这是一款具有SPI接口的8PIN串行FLASH[7]。双RAM技术输出显示数据的时候,是将两块RAM中相同地址的两个数据同时输出,所以,将两块RAM的显示数据存放在一块串行存储器中的时候,偶地址单元应存储RAM0的数据,奇地址单元存储RAM1的数据,数据输出时,每次输出16位数据。串行存储器和单片机的工作电压都在3.3V左右,但是VRS51L3074单片机可以兼容5V,简化了控制电路。控制信号和显示数据在输出到寄存器74LS164和显示屏的时候,需要用74LVC07进行电平转换。

  控制系统控制显示数据输出的流程为:

  ①将扫描线行地址通过P2端口的低四位送给LED显示屏。

  ②通过显示数据在显示区域中的位置,计算显示数据在存储器中的地址,并计算出数据选择的位数

  ③通过单片机P3.0口模拟移位脉冲,输出到串行FLASH时钟信号,移位脉冲数由数据选择位数 决定。使输出数据产生错位,正确的选择输出显示数据。

  ④启动SPI读取显示数据, SPI传输字长设置为16位。模拟脉冲已经输出到串行FLASH使数据产生了错位,输出16位数据 ,输出到显示屏的数据 在高8位,经过移位刚好可以存放在移位寄存器中,每行第一个数据输出后,以后此行各列数据都是直接输出。

  ⑤16位数据输出完毕后,通过P3.1脚产生一个SCK脉冲,将移位寄存器74LS164中的数据输出移入到单元板的74HC595串行移位寄存器中。

  ⑥重复第 eq oac(○,4)4至 eq oac(○,5)5步,直到一行数据全部输出完毕后,由P3.2 产生一个RCK脉冲,读取的一行数据将输出显示,然后扫描线下移一行。

  ⑦重复第 eq oac(○,1)1至 eq oac(○,6)6步。

  此电路有这样几个特点:显示数据从串行FLASH输出后,不经单片机的处理,直接以"DMA"方式输出到移位寄存器74LS164,同时实现串并转换,节省数据处理时间,提高显示效率;在每场数据输出之前,通过信息在显示区域中的地址计算数据选择位数 ,并通过P3.0 端口模拟 个脉冲输出到串行FLASH,移出 位数据,数据产生错位,使输出显示的数据在16位输出数据的高8位,可以直接存放在移位寄存器中,输出到显示屏,以后同行各列的显示数据输出时,无需再进行数据选择位的判断,直接将显示数据从存储器中输出到显示屏。

  存储器效率分析:

  表1 存储器效率存储器

\

  观察表1可知,在垂直移动显示使用双RAM技术组织,大大提高了存储器效率,降低了显示数据存储器的占用。当显示信息比较大时,动态数据组织使用的存储器比较大,利用率低,而采用双RAM技术正好解决这个问题。一块RAM的效率是100%,双RAM是50%,当有N块RAM时,效率为

  3 程序设计

  针对图3所示控制电路,按照数据输出控制流程,编写了一段程序,随机显示一屏信息,显示数据已按顺序存储在串行FLASH中。

  Flash的前身是Future Wave公司的Future Splash,是世界上第一个商用的二维矢量动画软件,用于设计和编辑Flash文档。1996年11月,美国Macromedia公司收购了Future Wave,并将其改名为Flash.在出到Flash 8以后,Macromedia又被Adobe公司收购。最新版本为:Adobe Flash Professional CS5.5.Flash通常也指Macromedia Flash Player(现Adobe Flash Player),用于播放Flash文件。Flash被大量应用于互联网网页的矢量动画设计。 因为使用向量运算﹙Vector Graphics﹚的方式,产生出来的影片占用存储空间较小。 使用Flash创作出的影片有自己的特殊档案格式﹙swf﹚, 该公司声称全世界97%的网络浏览器都内建Flash播放器﹙Flash Player﹚ Flash是Macromedia提出的"富因特网应用"(RIA)概念的实现平台

  void display(unsigned int YL)

  { unsigned int i,j,p;

  unsigned char line, unit_board_num, board_i;

  unsigned char code *ram_point, *block_addr,* region_addr,* ram_begin_addr;

  block_addr=YL/(Bw*Sw) * (Sw*Dw); //所在块的起始地址

  region_addr=(YL%Sw)*Dw; /所在区的相对块的相对地址

  i=YL/Sw;

  region_recod=YL%Sw; //此变量记录显示数据已进入哪一区

  ram_point=ram_begin_addr+block_addr+region_addr-1; // ram_begin_addr为数据起始地址

  SPI_write_read(0x03); //向串行FLASH发读命令,0x03为读控制字

SPI_write_read(

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top