基于51单片机和可编程逻辑器件实现LED显示屏的硬件设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于51单片机和可编程逻辑器件实现LED显示屏的硬件设计

0 引言

LED显示屏主要由电流驱动电路及LED点阵阵列、控制系统和PC端管理软件三部分构成(图1)。控制系统负责接收、转换和处理各种外部信号,并实现扫描控制,然后驱动LED点阵显示需要的文字或图案。控制系统作为LED显示屏的核心部分,直接决定了显示屏的显示效果和性能的优劣。本文详细分析采用Verilog HDL对ATF1508AS进行编程,实现双口RAM访问和产生LED点阵驱动电路所需的各种时序信号。

1 LED显示屏的基本结构及关键技术

本系统设计中,控制系统采用单片机+CPLD的方案来实现,整个控制系统可分为:信号接收及处理模块和CPLD的扫描控制模块和LED点阵驱动模块,。本系统的关键技术是使用双口RAM 和CPLD芯片,解决LED显示屏中高速数据传输和快速扫描控制的难题,大大提高了动态显示的刷新率。

信号接收与处理模块的功能是AT89S52单片机通过串口接收PC送来的点阵信息,同时对点阵信息做各种不同的处理。利用双口RAM IDT7007在单片机和ATF1508AS之间以共享的方式建立高速的数据交换通道。

CPLD的扫描控制模块采用ATF1508AS芯片实现。其功能是从双口RAM读取点阵信息,串行化后送显示扫描驱动电路,同时输出各种所需的控制信号。CPLD具有扫描速度快,延时短等特点,克服了单片机由于传输速率慢而造成在大屏幕显示时产生的闪烁效应。

2 基于CPLD的扫描控制模块的设计

2.1 设计思想

本模块的功能是从存储器中读取数据,将数据输送到显示屏体上,同时产生各种控制信号。时序产生模块由两部分构成,一是产生访问双口RAM的时序,二是产生LED显示屏接口所需的各种信号。

硬件电路我们采用较常见的CPLD芯片ATF1508来实现控制系统中的时序产生部分。CPLD是一种具有丰富的可变成I/O引脚的可编程逻辑器件,不仅可以实现常规的逻辑器件功能,还可以实现复杂而独特的时序逻辑功能。软件我们采用Verilog HDL语言来进行设计。Verilog HDL是用于逻辑设计的硬件描述语言,已成为IEEE标准。利用Verilog HDL语言对ATF1508AS 进行编程,实现扫描控制模块所需的功能。

扫描控制部分的原理电路,ATF1508AS是核心部分,需要根据系统需要定义ATF1508AS的各个I/O端口,下面是I/O端口定义和内部寄存器定义的Verilog HDL语言代码。

module LedSequ(color, datain, addrout, CE, OE, SEMR, RWC, sdr, sdb, sck, le, oe1, cs, clk, counter);input clk; //系统时钟input[7:0] datain;//RAM数据输入input[1:0] color;//颜色控制output[13:0] addrout;//地址输出口output SEMR,RWC;output CE,OE,sdr,sdb,sck,le,oe1,cs;output[3:0] counter;reg[3:0] hcnt;//38译码器计数器reg [7:0] data1;//数据寄存器reg[3:0] counter;//38翻码器输出端reg SEMR,RWC;reg SDA,SDC;reg[13:0] addrout,addr;//addr地址计数器reg[3:0] state;// 状态寄存器reg [2:0] shcnt; //移位脉冲读数器reg CE,OE,sdr,sdb,sck,le,oe1,cs;reg [8:0] byte;parameter s0=1'd0,s1=1'd1,s2=1'd2,s3=1'd3, s4=1'd4, s5=1'd5; //状态常量

2.2 访问双口RAM时序的产生

IDT7007是具有32KB的双口RAM电路,与ATF1508AS的连接电路,其中:为片选信号,为

读写控制信号,为输出使能信号,A0R-A13R为右端口地址总线,D0R-D7R为右端口数据总线,

其右端口读写时序。我们采用有限状态机实现,其基本工作原理是:S0状态进行初始化,S1

状态时ATF1508AS首先输出地址信号addrout,然后置相有效,S2状态读取双口RAM的数据,

并存储到内容寄存器datain中,从而完成双口RAM的读数据过程。下面给出ATF1508AS读取

双口RAM数据的主要代码:

always @ (posedge clk)begin //每个时钟周期,状态变化一次 case(state) s0: begin

//初始化状态 CE=1'b0; //IDT7007片选 OE=1'b1; //IDT7007读选通

le=1'b0; oe1 = 1'b0; cs = 1'b0; addr= 14'b0; SEMR=1'b1;

//IDT7007 置1有 RWC = 1'b1; //写控制 1 hcnt=4'b0000; counter=4'b0000;

state=s1; ends1: begin //输出RAM地址 CE=1'b0; addrout=addr;//输出地址

OE=1'b0; SEMR=1'b1; RWC = 1'b1; shcnt = 3'b000; state=s2;end s2:

begin //读双口RAM数据 oe1=1'b0; data1 = datain; state=s3; end

……(显示扫描及LED驱动代码部分) endcase end

2.3 LED显示驱动时序信号的产生

CPLD 与LED点阵的驱动电路接口,其中:CS为3-8译码器片选信号;OE为BMI5026输出使

能信号,控制LED点阵是否能被点亮;LE为驱动芯片数据锁存信号;sck为移位脉冲,将CPLD

串行输出的红绿数据串行移入MBI5026(移位寄存器);A-D为双3-8译码器构成的4-16译码

器的数据输入,实现显示行选通控制; sdr为红数据信号线;sdb为绿数据信号线。

其工作过程为:S3状态,sck脉冲置0,sdr和sdb分别输出一位数据;S4状态时,sck置 1,

红和绿数据分别移入相应移位寄存器BMI5026,若不足8位时,返回S3状态,若不足一行时,

返回S1状态,读下一个字节,若完成一行数据移位过程,则转S5状态;S5状态时,置le

为0,将BMI5026的缓冲寄存中一个显示行的点阵数据送输出寄存器,同时置cs1有效,控

制第hcnt行的点阵显示,然后判断一屏内容是否显示完成,返回s1状态。图4为完整的有

限状态机的状态图。

下面给出LED显示屏体驱动时序信号对应的Verilog HDL程序代码: s3: begin

sck=1'b0; sdr= SDA && color[0]; sdb= SDC &&

color[1]; OE=1'b1; CE=1'b1; state=s4; end s4: begin // 移

位输出到LED显示屏 sck = 1'b1; shcnt = shcnt +1'b1; if (shcnt = = 0)

begin addr=addr+1'b1; //读完一个字节地址记数器加1 byte=byte+8'b1;

if(byte= = nrow)// 如果读完一行数据 begin oe1=1'b1;//关LED显示

cs=1'b1; le=1'b0;//驱动芯片写入数据 byte = 8'b0; state=s5;//读

完一行数据则显示 end else state=s1; end else state=s3; //当前字节移

位输出end s5: begin sck=1'b0;le=1'b0; counter=hcnt;

OE=1'b1; CE=1'b0; if(addr = = nscreen) addr=0; oe1=1'b0; cs=1'b0; state =s1; end

4系统测试及仿真

系统的开发调试环境是:单片机部分在KeilC51下调试,CPLD部分在Maxplus10下调试。LED

显示屏的扫描控制模块的Verilog HDL源程序编写完成后,在ALTERA公司Maxplus10可以先

进行软件仿真,以观察各信号是否符合硬件电路所需的时序要求。图5为扫描模块 CLPD仿

真结果,符合设计要求。通过JTAG接口下载到ATF1508AS后,系统工作正常。

相关文档
最新文档