ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:34.43KB ,
资源ID:30640306      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30640306.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机和可编程逻辑器件实现LED显示屏.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于单片机和可编程逻辑器件实现LED显示屏.docx

1、基于单片机和可编程逻辑器件实现LED显示屏目录基于单片机和可编程逻辑器件实现LED显示屏 151单片机汇编语言教程:23课:LED数码管静态显示接口与编程 6基于单片机和可编程逻辑器件实现LED显示屏0 引言 LED显示屏主要由电流驱动电路及LED点阵阵列、控制系统和PC端管理软件三部分构成(图1)。控制系统负责接收、转换和处理各种外部信号,并实现扫描控制,然后驱动LED点阵显示需要的文字或图案。控制系统作为LED显示屏的核心部分,直接决定了显示屏的显示效果和性能的优劣。本文详细分析采用Verilog HDL对ATF1508AS进行编程,实现双口RAM访问和产生LED点阵驱动电路所需的各种时序

2、信号。1LED显示屏的基本结构及关键技术 本系统设计中,控制系统采用单片机+CPLD的方案来实现,整个控制系统可分为:信号接收及处理模块和CPLD的扫描控制模块和LED点阵驱动模块,如图1 所示。本系统的关键技术是使用双口RAM和CPLD芯片,解决LED显示屏中高速数据传输和快速扫描控制的难题,大大提高了动态显示的刷新率。 信号接收与处理模块的功能是AT89S52单片机通过串口接收PC送来的点阵信息,同时对点阵信息做各种不同的处理。利用双口RAM IDT7007在单片机和ATF1508AS之间以共享的方式建立高速的数据交换通道。 CPLD的扫描控制模块采用ATF1508AS芯片实现。其功能是从

3、双口RAM读取点阵信息,串行化后送显示扫描驱动电路,同时输出各种所需的控制信号。CPLD具有扫描速度快,延时短等特点,克服了单片机由于传输速率慢而造成在大屏幕显示时产生的闪烁效应。2基于CPLD的扫描控制模块的设计2.1 设计思想 本模块的功能是从存储器中读取数据,将数据输送到显示屏体上,同时产生各种控制信号。时序产生模块由两部分构成,一是产生访问双口RAM的时序,二是产生LED显示屏接口所需的各种信号。 硬件电路我们采用较常见的CPLD芯片ATF1508来实现控制系统中的时序产生部分。CPLD是一种具有丰富的可变成I/O引脚的可编程逻辑器件,不仅可以实现常规的逻辑器件功能,还可以实现复杂而独

4、特的时序逻辑功能。软件我们采用Verilog HDL语言来进行设计。Verilog HDL是用于逻辑设计的硬件描述语言,已成为IEEE标准。利用Verilog HDL语言对ATF1508AS进行编程,实现扫描控制模块所需的功能。 扫描控制部分的原理电路如图2所示,ATF1508AS是核心部分,需要根据系统需要定义ATF1508AS的各个I/O端口,下面是I/O端口定义和内部寄存器定义的Verilog HDL语言代码。 module LedSequ(color, datain, addrout, CE, OE, SEMR, RWC, sdr, sdb, sck, le, oe1, cs, clk

5、, counter);input clk;/系统时钟input7:0 datain;/RAM数据输入input1:0 color;/颜色控制output13:0 addrout;/地址输出口output SEMR,RWC;output CE,OE,sdr,sdb,sck,le,oe1,cs;output3:0 counter;reg3:0 hcnt;/38译码器计数器reg 7:0 data1;/数据寄存器reg3:0 counter;/38翻码器输出端reg SEMR,RWC;reg SDA,SDC;reg13:0 addrout,addr;/addr地址计数器reg3:0 state;/

6、状态寄存器reg 2:0 shcnt;/移位脉冲读数器reg CE,OE,sdr,sdb,sck,le,oe1,cs;reg 8:0 byte; parameter s0=1d0,s1=1d1,s2=1d2,s3=1d3, s4=1d4, s5=1d5; /状态常量2.2 访问双口RAM时序的产生 IDT7007是具有32KB的双口RAM电路,与ATF1508AS的连接电路如图2所示,其中: 为片选信号, 为读写控制信号, 为输出使能信号,A0R-A13R为右端口地址总线,D0R-D7R为右端口数据总线,其右端口读写时序如图4所示。我们采用有限状态机实现,其基本工作原理是:S0状态进行初始化,

7、S1状态时ATF1508AS首先输出地址信号addrout,然后置 相有效,S2状态读取双口RAM的数据,并存储到内容寄存器datain中,从而完成双口RAM的读数据过程。下面给出ATF1508AS读取双口RAM数据的主要代码:always (posedge clk)begin /每个时钟周期,状态变化一次case(state)s0: begin /初始化状态CE=1b0; /IDT7007片选OE=1b1; /IDT7007读选通le=1b0;oe1 = 1b0;cs= 1b0;addr= 14b0;SEMR=1b1; /IDT7007 置1有RWC = 1b1;/写控制 1hcnt=4b0

8、000;counter=4b0000;state=s1; ends1: begin/输出RAM地址CE=1b0;addrout=addr;/输出地址OE=1b0;SEMR=1b1;RWC = 1b1;shcnt = 3b000;state=s2;ends2: begin /读双口RAM数据oe1=1b0; data1 = datain; state=s3;end(显示扫描及LED驱动代码部分) endcaseend 2.3LED显示驱动时序信号的产生 CPLD 与LED点阵的驱动电路接口如图所示,其中:CS为3-8译码器片选信号;OE为BMI5026输出使能信号,控制LED点阵是否能被点亮;L

9、E为驱动芯片数据锁存信号;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有效,控制第hcn

10、t行的点阵显示,然后判断一屏内容是否显示完成,返回s1状态。图4为完整的有限状态机的状态图。 下面给出LED显示屏体驱动时序信号对应的Verilog HDL程序代码: s3: beginsck=1b0; sdr= SDA & color0; sdb= SDC & color1; OE=1b1; CE=1b1; state=s4; ends4: begin / 移位输出到LED显示屏sck = 1b1;shcnt = shcnt +1b1;if (shcnt = = 0) begin addr=addr+1b1; /读完一个字节地址记数器加1 byte=byte+8b1; if(byte= =

11、nrow)/ 如果读完一行数据 begin oe1=1b1;/关LED显示 cs=1b1; le=1b0;/驱动芯片写入数据 byte = 8b0; state=s5;/读完一行数据则显示 end else state=s1; end else state=s3; /当前字节移位输出ends5: begin sck=1b0;le=1b0; counter=hcnt; OE=1b1; CE=1b0; if(addr = = nscreen) addr=0; oe1=1b0; cs=1b0; state =s1; end 4系统测试及仿真 系统的开发调试环境是:单片机部分在KeilC51下调试,C

12、PLD部分在Maxplus10下调试。LED显示屏的扫描控制模块的Verilog HDL源程序编写完成后,在ALTERA公司Maxplus10可以先进行软件仿真,以观察各信号是否符合硬件电路所需的时序要求。图5为扫描模块 CLPD仿真结果,符合设计要求。通过JTAG接口下载到ATF1508AS后,系统工作正常。51单片机汇编语言教程:23课:LED数码管静态显示接口与编程2010-02-27 18:56 在单片机系统中,常常用LED数码数码管显示器来显示各种数字或符号。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。 引言:还记得我们小时候玩的“火柴棒游戏”吗,几根火柴

13、棒组合起来,能拼成各种各样的图形,LED数码管显示器实际上也是这么一个东西。八段LED数码管显示器 八段LED数码管显示器由8个发光二极管组成。基中7个长条形的发光管排列成“日”字形,另一个贺点形的发光管在数码管显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED数码管显示器有两种不一样的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED数码管显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED数码管显示器。如下图所示。 共阴和共阳结构的LED数码管显示器各笔划段名和安排位置是相同的。当二极管导通时,对应的笔划段发亮,由发亮的笔划段组合而显示的各

14、种字符。8个笔划段hgfedcba对应于一个字节(8位)的D7 D6 D5 D4 D3 D2 D1 D0,于是用8位二进制码就能表示欲显示字符的字形代码。例如,对于共阴LED数码管显示器,当公共阴极接地(为零电平),而阳极hgfedcba各段为0111011时,数码管显示器显示P字符,即对于共阴极LED数码管显示器,“P”字符的字形码是73H。如果是共阳LED数码管显示器,公共阳极接高电平,显示“P”字符的字形代码应为10001100(8CH)。这里必须注意的是:很多产品为方便接线,常不按规则的办法去对应字段与位的关系,这个时候字形码就必须根据接线来自行设计了,后面我们会给出一个例程。 在单片

15、机应用系统中,数码管显示器显示常用两种办法:静态显示和动态扫描显示。所谓静态显示,就是每一个数码管显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种办法单片机中CPU的开销小。能供给单独锁存的I/O接口电路很多,这里以常用的串并转换电路74LS164为例,介绍一种常用静态显示电路,以使大家对静态显示有一定的了解。 MCS-51单片机串行口方式押为移们寄存器方式,外接6片74LS164作为6位LED数码管显示器的静态显示接口,把8031的RXD作为数据输出线,TXD作

16、为移位时钟脉冲。74LS164为TTL单向8位移位寄存器,可实现串行输入,并行输出。其中A、B(第1、2脚)为串行数据输入端,2个管脚按逻辑与运算规律输入信号,公一个输入信号时可并接。T(第8脚)为时钟输入端,可连接到串行口的TXD端。每一个时钟信号的上升沿加到T端时,移位寄存器移一位,8个时钟脉冲过后,8位二进制数全部移入74LS164中。R(第9脚)为复位端,当R=0时,移位寄存器各位复0,只有当R=1时,时钟脉冲才起作用。Q1Q8(第3-6和10-13管脚)并行输出端分别接LED数码管显示器的hg-a各段对应的管脚上。关于74LS164还能作如下的介绍:所谓时钟脉冲端,其实就是需要高、低

17、、高、低的脉冲,不管这个脉冲是怎么来的,比如,我们用根电线,一端接T,一端用手拿着,分别接高电平、低电平,那也是给出时钟脉冲,在74LS164获得时钟脉冲的瞬间(再讲清楚点,是在脉冲的沿),如果数据输入端(第1,2管脚)是高电平,则就会有一个1进入到74LS164的内部,如果数据输入端是低电平,则就会有一个0进入其内部。在给出了8个脉冲后,最先进入74LS164的第一个数据到达了最高位,然后再来一个脉冲会有什么发生呢?再来一个脉冲,第一个脉冲就会从最高位移出,就象车站排队买票,栏杆就那么长,要从后面进去一本人,前面必须要从前面走出去一本人才行。 搞清了这一点,下面让我们来看电路,6片7LS16

18、4首尾相串,而时钟端则接在一起,这样,当输入8个脉冲时,从单片机RXD端输出的数据就进入到了第一片74LS164中了,而当第二个8个脉冲到来后,这个数据就进入了第二片74LS164,而新的数据则进入了第一片74LS164,这样,当第六个8个脉冲完成后,首次送出的数据被送到了最左面的164中,其他数据依次出现在第一、二、三、四、五片74LS164中。有个问题,在第一个脉冲到来时,除了第一片74LS164中接收数据外,其他各片在干吗呢?它们也在接收数据,因为它们的时钟端都是被接在一起的,可是数据还没有送到其他各片呢,它们在接收什么数据呢?。其实所谓数据不过是一种说法而已,实际就是电平的高低,当第一

19、个脉冲到来时,第一片164固然是从单片机接收数据了,而其它各片也接到前一片的Q8上,而Q8是一根电线,在数字电路中它只可能有两种状态:低电平或高电平,也就是“0”和“1”。所以它的下一片74LS164也相当于是在接收数据啊。只是接收的全部是0或1而已。这个问题放在这儿说明,可能有朋友不屑一顾,而有的朋友可能还是不清楚,这实际上涉及到数的本质的问题,如果不懂的,请仔细思考,并找一些数字电路的数,理解164的工作原理,再来看这个问题,或者去看看我的另一篇文章27课:关于单片机的一些基本概念的文章。务必搞懂,搞懂了这一点,你的级别就高过开始学习者,可谓入门者了。入口:把要显示的数分别放在显示缓冲区6

20、0H-65H共6个单元中,并且分别对应各个数码管LED0-LED5。出口:将预置在显示缓冲区中的6个数成对应的显示字形码,然后输出到数码管显示器中显示。单片机led显示程序如下:DISP: MOV SCON,#00H ;初始化串行口方式0MOV R1,#06H ;显示6位数MOV R0,#65H ;60H-65H为显示缓冲区MOV DPTR,#SEGTAB ;字形表的入口地址LOOP:MOV A,R0 ;取最高位的待显示数据MOVC A,A+DPTR ;查表获取字形码MOV SBUF,A ;送串行口显示DELAY: JNB TI,DELAY ;等待发送完毕CLR TI ;清发送标志DEC R0

21、 ;指针下移一位,准备取下一个待显示数DJNZ R1,LOOP ;直到6个数据全显示完。RETSETTAB: ;字形表,前面有介绍,以后我们再介绍字形表的制作。DB 03H 9FH 27H 0DH 99H 49H 41H 1FH 01H 09H 0FFH; 0 1 2 3 4 5 6 7 8 9 消隐码单片机显示测试用主程序ORG 0000HAJMP STARTORG 30HSTART: MOV SP,#6FHMOV 65H,#0MOV 64H,#1MOV 63H,#2MOV 62H,#3MOV 61H,#4MOV 60H,#5LCALL DISPSJMP $ 如果按图示数码管排列,则以上主程

22、序将显示的是543210,想想看,如果要显示012345该怎样送数? 下面我们来分析一下字形表的制作问题。先就上述“标准”的图形来看吧。写出数据位和字形的对应关系并列一个表如下(设为共阳型,也就是对应的输出位为0时笔段亮)如何,字形表会做了吧,就是这样列个表格,根据要求(0亮或1亮)写出对应位的0和1,就成了。做个练习,写出A-F的字形码吧。如果为了接线方便而打乱了接线的次序,那么字形表又该如何接呢?也很简单,一样地列表啊。以新实验板为例,共阳型。接线如下:P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0C E H D G F A B则字形码如下所示:;0 001

23、01000 28H;1 01111110 7EH;2 10100100 0A4H;3 01100100 64H;4 01110010 72H;5 01100001 61H;6 00100001 21H;7 01111100 7CH;8 00100000 20H;9 01100000 60H作为练习,大家写出A-F的字形代码。本来这里是讲解单片机数码管显示器的静态接口的,到此应当可算结束了,但是我还想接着上面讲到的数的本质的问题再谈一点。单片机中有一些术语、名词本来是帮助我们理解事物的,但有时我们会被这些术语的相关语义所迷惑,以致不能进一步认清他们的本质,由此一般陷入困惑的境界。只有深入地了解了74LS164的工作特性,才能真正理解何谓串行的数据。有兴趣的朋友还能再看看我网站查找相关内容

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1