基于单片机80C51的3232点阵LED.docx
- 文档编号:29350505
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:25
- 大小:121.38KB
基于单片机80C51的3232点阵LED.docx
《基于单片机80C51的3232点阵LED.docx》由会员分享,可在线阅读,更多相关《基于单片机80C51的3232点阵LED.docx(25页珍藏版)》请在冰豆网上搜索。
基于单片机80C51的3232点阵LED
摘要
本课题的主要任务是开发一款基于单片机80C51的32×32点阵LED汉字滚动显示屏。
和其他普通显示屏一样,该显示屏能按使用者需求滚动显示预先设定的文本和图形,并且可以准确显示系统时间。
本次设计吸收了硬件软件化的思想,大部分功能通过软件来实现,使电路相对简单明了,系统稳定性也有所提高。
本文撰写的主导思想是软、硬件相结合,以硬件为基础,来进行各功能模块的设计。
本设计实用性强、操作简单。
显示屏的设计也具有体积小、硬件少、电路结构简单及容易实现等优点。
本课题所用的硬件仿真环境是,软件编译环境是KeiluVision4。
关键词:
单片机80C51、LED、滚动显示屏
第1章绪论
1.1课题背景和意义
在大型商场、车站、地铁站以及银行、医院等各类办事窗口等越来越多的场所需要用LED点阵显示图形和汉字。
LED显示屏行业已成为一个快速发展的新兴产业,市场空间巨大,前景广阔。
随着信息产业的高速发展,LED显示作为信息传播的一种重要手段,已广泛应用于室内外需要进行服务内容和服务宗旨宣传的公众场所,例如户内外公共场所广告宣传、机场车站旅客引导信息、公交车辆报站系统、证券与银行信息显示、餐馆报价信息豆示、高速公路可变情报板、体育场馆比赛转播、楼宇灯饰、交通信号灯、景观照明等。
显然,LED显示已成为城市亮化、现代化和信息化社会的一个重要标志。
LED显示屏主要原理是点阵设计,它利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。
由于它具有发光效率高、使用寿命长、组态灵活、色彩丰富以及对室内室外环境适应能力强等优点,所以被人们广泛使用。
1.2国内外研究现状
1970年代最早的GaP、GaAsP同质结红、黄、绿色低发光效率的LED已开始应用于指示灯、数字和文字显示。
从此LED开始进入多种应用领域,包括宇航、飞机、汽车、工业应用、通信、消费类产品等,遍及国民经济各部门和千家万户。
到1996年LED在全世界的销售额已达到几十亿美元。
尽管多年以来LED一直受到颜色和发光效率的限制,但由于GaP和GaAsPLED具有长寿命、高可靠性,工作电流小、可与TTL、CMOS数字电路兼容等许多优点因而却一直受到使用者的青眯。
最近十年,高亮度化、全色化问题一直是LED材料和器件工艺技术研究的前沿课题。
超高亮度(UHB)是指发光强度达到或超过100mcd的LED,又称坎德拉(cd)级LED。
高亮度A1GaInP和InGaNLED的研制进展十分迅速,现已达到常规材料GaA1As、GaAsP、GaP不可能达到的性能水平。
1991年日本东芝公司和美国HP公司研制成InGaA1P620nm橙色超高亮度LED,1992年InGaA1p590nm黄色超高亮度LED实用化。
同年,东芝公司研制InGaA1P573nm黄绿色超高亮度LED,法向光强达2cd。
1994年日本日亚公司研制成InGaN450nm蓝(绿)色超高亮度LED。
至此,彩色显示所需的三基色红、绿、蓝以及橙、黄多种颜色的LED都达到了坎德拉级的发光强度,实现了超高亮度化、全色化,使发光管的户外全色显示成为现实。
我国发展LED起步于七十年代,产业出现于八十年代。
全国约有100多家企业,95%的厂家都从事后道封装生产,所需管芯几乎全部从国外进口。
通过几个“五年计划”的技术改造、技术攻关、引进国外先进设备和部分关键技术,使我国LED的生产技术已向前跨进了一步。
第2章需求分析
2.1可行性分析
首先,我们来了解一下LED显示屏具体被人们用来干什么,也就是它有哪些具体的功能。
(1)起到商品宣传,吸引顾客的作用。
(2)起到店面装饰,提高企业档次的作用。
(3)起到照明,标新立异的作用。
(4)起到普及知识的作用(可用于播放企业产品的小信息,相关行业的知识等)。
(5)起到公告板的作用(促销,招聘信息发布等)。
(6)起到烘托气氛的作用。
通过显示屏幕可播放上级领导及各种贵宾莅临参观、指导的欢迎词,各种重大节日的庆祝词等
LED显示屏正是凭借这些独特的功能再加上它简单、灵动的结构来吸引商家们的注意。
而商家们树立广告牌的最终目的就是宣传商品信息,吸引目标顾客,尽最大可能地赚取最大的利润。
所以LED显示屏成为了企业宣传实现他们目的的头项选择。
2.2整体功能
本次设计的这款32×32点阵LED滚动显示屏硬件部分主要是以80C51单片机为控制器,结合74HC595、DS1302和74HC154三块芯片制作完成的。
软件部分主要是处理了所需显示文字图形的字模的发送,以及对74HC154的选位控制。
设计整体实现了课题的基本要求,即能用32×32的点阵LED屏滚动显示预先设定好的文字后图形。
在此基础生,还添加了显示系统时间的功能,使得人们在现代都市的快节奏生活中随时能知道时间,从而能及时安排自己的行程。
第3章关键技术
3.151定时器
51单片机内部有两个16位可编程的定时器/计数器T0和T1。
它们各自具有4种工作状态,其控制字和状态均在相应的特殊功能寄存器中,可以通过软件对控制寄存器编程设置,使其工作在不同的定时状态或计数状态。
由于本次设计是用到定时器,所以下面就定时器如何工作进行简单介绍。
3.1.1工作原理
定时器T0由两个8位计数器TH0和TL0构成,定时器T1也由两个8位计数器TH1和TL1构成,TMOD寄存器控制定时器的工作方式,TCON寄存器控制定时器的启动和停止以及定时器的状态。
在作定时器使用时,输入的时钟脉冲是由晶体振荡器的输出经12分频后得到的,也就是说时钟周期是晶振周期的12倍。
若单片机晶振频率为12MHz,则时钟频率为1/12×12=1MHz,所以时钟周期为1µs。
一个时钟周期计数器计数一次,当计数器增加到最大值溢出时,就会产生中断,我们可以通过改变计数器计数次数从而达到定时器的功能。
那如何设置计数器的计数次数呢?
首先我们要了解定时器的四种工作方式以及工作方式寄存器(TMOD),下面就对此做简单介绍。
3.1.2工作方式控制
1.工作方式寄存器(TMOD)。
TMOD确定定时器的工作方式及功能选择,不能位寻址。
其中,高4位用于控制定时器1,低4位用于控制定时器0。
TMOD各位的定义如表31:
89H
GATE
C/
M1
M0
GATE
C/
M1
M0
控制T1
控制T0
表31
其中控制定时器工作方式的是M1M0两位。
当M1M0为00时,对应的是定时器工作方式0,M1M0为01时,工作方式1,M1M0为10时,工作方式2,M1M0为11时,工作方式3。
2.工作方式
(7)方式0:
定时器/计时器按13位加1计数,这13位由TH中的高8位和TL中的低5位组成,其中TL中的高3位弃之不用(与MCS-48兼容)。
13位计数器按加1计数器计数,计满为0时能自动向CPU发出溢出中断请求,但要它再次计数,CPU必须在其中断服务程序中为它重装初值。
(8)方式1:
16位加1计数器,由TH和TL组成,在方式1的工作情况和方式0的相同,只是计数器值是方式0的8倍。
(9)方式2:
计数器被拆成一个8位寄存器TH和一个8位计数器TL,CPU对它们初始化时必须送相同的定时初值。
当计数器启动后,TL按8位加1计数,当它计满回零时,一方面向CPU发送溢出中断请求,另一方面从TH中重新获得初值并启动计数。
(10)方式3:
TH0和TL0按两个独立的8位计数器工作。
在方式3下的TH0和TL0是有区别的:
TL0可以设定为定时器/计时器或计数器模式工作,仍由TR0控制,并采用TF0作为溢出中断标志;TH0只能按定时器/计时器模式工作,它借用TR1和TF1来控制并存放溢出中断标志。
3.274HC595
由于单片机引脚有限,而32×32点阵LED显示屏接收字模数据的引脚有32个,为此,我们需要将串行的数据通过一定方法转换为并行输出,这样就可以将32个引脚浓缩为一个引脚。
我们常用的将串行输入转为并行输出的芯片是移位寄存器74HC595。
图31
74HC595是一款漏极开路输出的CMOS移位寄存器,输出端口为可控的三态输出端74,也能串行输出控制下一级级联芯片。
74HC595级联电路图见图32:
下面是对该芯片引脚的说明
SH_CP:
移位脉冲。
向该引脚每发送一次脉冲,芯片输出引脚Q0~Q7上的数据向前移一位,一般该引脚接控制器时钟脉冲,在本次设计中,通过软件对该引脚置1清0,模拟时钟脉冲;
DS:
输入引脚,接受待发送的串行数据。
本次设计中式向该引脚发送待显示文字的字模;
ST_CP:
芯片并行输出的触发脉冲,这也是通过软件模拟实现的;
:
移位寄存器清零端,向该位输入低电平,则输出引脚全部清零。
所以在平时正常工作时,需将该位置1。
:
移位寄存器使能端,低电平有效。
正常工作时,需保持该位为高电平。
Q0~Q7:
并行输出引脚,当有输出触发脉冲时,端口输出从DS引脚接收的串行数据。
:
串行数据输出引脚,用于两块芯片的级联。
由于本设计所采用字模为C51格式的纵向取模,如“我”的字模为:
“0x04,0x04,0x44,0x44,0x7F,0x84,0x84,0x04,0x04,0xFF,……’’,所以所需发送的串行字模数据以8位为一组,但是,由于是16×16点阵的字模,需同时发送16位数据,而一个74HC595只能同时发送8位数据,所以需将两个74HC595级联同时并行输出16为数据。
其具体的实现是通过软件控制的,具体实现过程在后面的软件介绍部分有详细的说明。
3.3字模
3.3.1文字取模方案
图32
方案一:
横向取模。
最初设计的时候是打算用横向取模的,所谓横向取模,就是在点阵中一行一行地将字模信息转换成二进制输出。
还是例如“我”字:
它的横向取模方法如图32左图所示,则字模的第一个数据为0x06,第二个为0x40。
但是如果采用这种取模方式的话,很难实现字体的横向移动。
因为字模是横向扫描的,所以要想实现移动则需对字模数据进行移位操作,增加了软件实现的难度和代码的长度,所以最终没有采用此套方案。
方案二:
纵向取模,原理如图32中间图所示,这样实现起来会比方案一更加简单,不需要对每一个字模数据实行位操作,而只需改变扫描的次序就能实现文字的左移。
当在最终的设计里,也没有采用这套方案,这是因为在编写程序时需将由字模转换器生成的字模分为上下两部分分别用数组存储,从而减少算法复杂度,但是由此就增加了重新装载文字的工作量。
在改变所需显示文字的时候,需要人为地将字模分为两部分输入存储的数组中,当要显示的字很多时,会很麻烦也很容易出错,所以此方案不可取。
最终方案:
这套方案其实是前两套方案的结合。
它是采用横向取模,但是才取模之前对文字进行了简单的翻转,原理见图32右图。
采用这种方案,即能实现一个数组存储所有字模数据,也能实现采用简单的算法来实现文字移动,具体算法在后面会有详细的讲解。
3.3.2字模数据传输
上面介绍了文字取模的方法,那么有了字模的数据后,我们怎样才能正确的向LED点阵显示屏发送数据从而实现文字的移动呢?
在该设计中,采用了一个一维数组WORD_C51[]来存储所需显示文字的字模数据,由于使用的字模是16×16的点阵,而数组元素是一个8位的十六进制数,所以需连续从数组发送两次数据给74HC595,发送完毕后给74HC595发一个发送数据的触发脉冲,将数据从595芯片的并行输出端发送给LED显示屏。
但是要想实现文字的移动仅仅这些事不够的,这些只能实现文字的静态显示。
为了让文字“动”起来,本设计设置了一个Begin变量表示WORD_C51[]起始扫描的下标,通过改变此数值,每一列的数据就好像向左移动一样,从而实现了文字的滚动。
另外,LED显示屏是利用两片4_16译码器74HC154连接而成的5_64译码器来扫描列的,这样软件设计进非常简单,只需要让译码器的输入口自增就行。
3.4系统时间显示
该模块主要是利用DS1302这块芯片获取系统时间,接收数据后采用自制的0~9字模根据数据分析将系统时间显示出来,显示方法同文字显示一致。
下面对DS1302芯片简单介绍。
DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。
工作电压宽达~。
采用双电源供电可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力本次设计只是简单的用到了它所提供时、分这两组数据,所以使用相对简单。
其引脚功能如下:
(11)Vcc1:
主电源;
(12)Vcc2:
备份电源。
当时,由Vcc2向DS1302供电,当Vcc2 (13)SCLK: 串行时钟,输入,控制数据的输入与输出; (14)I/O: 三线接口时的双向数据线; (15)CE: 输入信号,在读、写数据期间,必须为高。 该引脚有两个功能: 第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。 第4章概要设计 该系统的整体设计思路如下: 单片机 LED显示屏 列驱动器 行驱动器 时钟电路 复位电路 电源电路 下面是对软件设计的思路流程进行阐述 程序流程图如下: 这里对上图进行简要说明。 首先定义一些引脚和相关的变量,然后对定时器初始化。 在没有中断的情况下向74HC595发送字模数据,然后再进行列扫描。 再次需要说明的是,由于有两个595分频,使得数据发送的很慢,所以要先发送字模在选列,否则会出现前一行覆盖后一行的现象,这是我们所不期望的。 就这样一直循环扫描,由于人地视觉暂态,看起来就是连续的文字或图像。 当出现中断时,程序转移到执行中断服务程序,对扫描起始下标加一,然后再回到主程序,重新扫描显示数据。 至于系统时间的显示,只需在主程序中不停的向DS1302读取时间再显示出来即可。 第5章详细设计 5.1硬件设计 5.1.132×32点阵LED 由于仿真环境中只提供了8×8点阵的LED显示屏,所以要想实现32×32点阵的点阵,只有自己将8×8的连接组合而成。 根据单个8×8点阵的LED屏显示原理(见下图),我们可知,上面一排引脚是接收文字字模数据的,下面一排是选择那一列亮的,并且容易看出,数据端也就是上面那一列高电平有效,下面列低电平有效。 所以,将所有行并联,所有列串联就可以连接成我们想要的32×32点阵。 5.1.2LED屏列扫描 上面已经说到,点阵LED的列是低电平有效,同时我们可以看到,在我们扫描显示数据时,我们只让一列灯全部可以亮,而其他的列都置高电平熄灭。 这个原理同数码管显示原理一致,这是利用人的视觉反应时间大概是是0.01s,而我们的扫描频率比0.01s快得多,所以虽然每次只亮了一列,但整体来看,所有列都是亮的。 根据这个原理,我们可以每次向行发送一组数据,而只让一列灯亮起来,然后再向行发送另一组数据,再让另一列亮起来,这样依次扫描,就可以实现显示固定图像了。 由上面我们可知,我们需要从32列里只亮一列,也就是说从32位数据中选取1位,并且是选出一位低电平,这要求恰好和4_16译码器74HC154的功能一致,但是74HC154只能从16位中选取1位出来,所以需要将两块4_16译码器连接成一块5_32译码器,其电路图如下: 5.1.3LED屏行数据 在前面已经简单介绍了如何发送LED显示屏所需显示文字的字模数据,也就是如何发送行数据的。 本设计是利用两块移位寄存器74HC595级联而成,连接电路图将图31。 值得说明的是,需从字模数组中连续发送两个数据到移位寄存器的并行输出端口再将数据一起发送给LED显示屏,而不能一个数据一个数据的发,那样会造成文字重叠,现实的东西也就会让使用者大吃一惊的。 由于前面已经讲解了595的相关知识,这里就不在赘述。 5.2软件设计 5.2.1头文件说明 #include #include #include"WORD_C51.h" 定义了51单片机的一些常用寄存器的,让使用者使用起来更加方便,不用去死记那些无聊枯燥的十六进制地址,而只需记住通俗易懂的代号,如sfrP0=0x80;我们只记住P0这个引脚,而不需记住0x08这个地址。 声明了一些操作函数,我们再次调用它只是需要用到其中有关移位的函数_cror_()和_crol_()。 该函数在程序中有详细的注释,可参见附录B.1 "WORD_C51.h": 由调用的形式可以看出,该头文件是由编程者自己编写的,该头文件主要的目的是为了将一些复杂的全局变量(主要是字模数组)另外打包存储,这样方便以后改动维护,也使得主函数文件相对更加简洁明了,不会被大量地数组定义所混淆。 其具体的内容可参见附录。 5.2.2定时器0初始化 voidTime0_Int() {IE=0x82; TMOD=0x00; TH0=(8192-5000)/32; TL0=(8192-5000)%32; TR0=1; } 在第三章已经详细的介绍了定时器的内部结构和定时原理,从上段程序中我们可以找到之前讲的几个寄存器的影子。 IE是控制中断开关的,程序中的语句实现了开启定时器0; TMOD全部位都为零,联系前面所讲的相关知识,我们不难得知,这里是选择了定时器0模式的方式0。 该方式下能达到的最大定时时间为。 TH0和TL0所装载的值是为了控制计数器中断时间,也就是定时器的时间,由于计数器只能加5000次就会溢出中断,所以定时器的时间为5ms。 TR0=1,开启定时器0,定时器开始计数。 5.2.3行数据发送 voidIn_595(uchartemp) {uchari; for(i=0;i<8;i++) {temp<<=1; DS=CY; SH_CP=1; _nop_();op_(); SH_CP=0; } } voidOut_595() {P1++; ST_CP=0; _nop_(); ST_CP=1; _nop_(); ST_CP=0; } 由硬件设计可知,LED行数据是由74HC595发送的,而595是怎样发送数据的呢,这主要还是靠软件来实现。 前面已经说了,595要将串行的数据发送到并行的输出端口处需要时钟脉冲才能完成,在本次设计中,为了方便控制,采用了软件模拟脉冲信号。 在上段序中有SH_CP=1;SH_CP=0;这两句程序。 就是通过这简单的两句话,就模拟出了一个脉冲信号。 那它是如何工作的呢? 首先我们知道SH_CP是时钟脉冲引脚,我们对该引脚置1清0,就如同将它接到有时钟脉冲的引脚上,每完成一次置1清0,就如同接收了一次脉冲,从而数据向后移一位。 等到调用两次In_595()函数后,一共向595输入了16位数据,此时595并行输出端口上就是我们想要输出的LED行数据,在此时调用函数Out_595,同理,模拟了一个触发脉冲,将数据通过并行输出端口Q1~Q7将数据发送给LED显示屏,从而完成了LED的行数据发送。 5.2.4文字滚动 在主函数中我们可以看到有下面一段代码。 ………… if(N_Y)//移位,重新初始化P1,跳出循环, { N_Y=0; Begin=(Begin+2)%DATA_MAX; ………… ………… 在这行代码中,有一个关键的变量Begin,虽然它只是一个小小的变量,但是没有它,文字就不会“动起来”! 下面就对它做详细的说明。 在主函数中,还有这样一句代码j=Begin。 这个j是向595发送数据时从字模数组WORD_C51[]提取字模时的下标,通过下标的递加,以及循环语句实现对字模数组数据的发送。 而我们在对j赋初始值的时候,不是让它从0开始递加,而是从Begin开始,也就是不是从第0个元素开始发送,而是从第Begin个元素开始发送,有字模知识可知,前两个元素是文字第一列,然后两个是第二列,以此后推,所以改变起始下标Begin也就是改变了第一列灯显示的文字图像,在定时器中,每个固定的时间就会对Begin自增,也就是起始下标会增加,第一列显示的字模也就往后推,文字依旧向前移了,从而实现了文字的滚动,详细的程序将附录中的主函数main()以及定时器0的中断服务程序Int_T0()。 第6章设计结果和仿真分析 本次设计的硬件电路详见附录A,软件设计详见附录B。 6.1Proteus软件简要介绍 Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。 它运行于Windows操作系统上,可以仿真,分析(SPICE)各种模拟器件和集成电路,该软件的特点是: (16)实现了单片机仿真和SPICE电路仿真相结合。 具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。 (17)支持主流单片机系统的仿真。 目前支持的单片机类型有: ARM7(LPC21xx)、8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。 (18)提供软件调试功能。 在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2、MPLAB等软件。 (19)具有强大的原理图绘制功能。 总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。 6.2仿真结果及分析 本设计采用C语言进行编程,编程后利用KeiluVision4RB2芯片中即可进行仿真,仿真结果如下图所示: 上面部分显示的是当前系统时间,但由于屏幕太小,只能显示时、分,不能显示秒。 下面部分是“江西理工大学”这几个字的滚动显示,这里就不方便演示了。 总体来说,功能实现的比较理想,屏幕不会闪烁,滚动也比较平滑,完成了课题预期的效果。 另外时间显示也能及时的根据系统时间自动刷新。 第7章总结 参考文献 [1]《51单片机定时器的使用》 [2]《74HC595中文资料》 [3]《》 附录A硬件电路 附录B程序设计 B.1 #include #include #include"WORD_C51.h" #defineTIME0.17//闪烁时间间隔,单位s #defineWORD6//显示的文字数 #defineDATA_MAX(32*(WORD+1)+12)//存储字模数组的大小 sbitSH_CP=P2^0;//定义P2_0为74HC595的时钟信号 sbitDS=P2^1;//定义P2_1为74HC595的数据接口 sbitST_CP=P2^2;//定义P2_3为74HC5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 80 C51 3232 点阵 LED