基于51单片机16LED点阵的设计.docx

上传人:b****5 文档编号:7663159 上传时间:2023-05-11 格式:DOCX 页数:20 大小:2.76MB
下载 相关 举报
基于51单片机16LED点阵的设计.docx_第1页
第1页 / 共20页
基于51单片机16LED点阵的设计.docx_第2页
第2页 / 共20页
基于51单片机16LED点阵的设计.docx_第3页
第3页 / 共20页
基于51单片机16LED点阵的设计.docx_第4页
第4页 / 共20页
基于51单片机16LED点阵的设计.docx_第5页
第5页 / 共20页
基于51单片机16LED点阵的设计.docx_第6页
第6页 / 共20页
基于51单片机16LED点阵的设计.docx_第7页
第7页 / 共20页
基于51单片机16LED点阵的设计.docx_第8页
第8页 / 共20页
基于51单片机16LED点阵的设计.docx_第9页
第9页 / 共20页
基于51单片机16LED点阵的设计.docx_第10页
第10页 / 共20页
基于51单片机16LED点阵的设计.docx_第11页
第11页 / 共20页
基于51单片机16LED点阵的设计.docx_第12页
第12页 / 共20页
基于51单片机16LED点阵的设计.docx_第13页
第13页 / 共20页
基于51单片机16LED点阵的设计.docx_第14页
第14页 / 共20页
基于51单片机16LED点阵的设计.docx_第15页
第15页 / 共20页
基于51单片机16LED点阵的设计.docx_第16页
第16页 / 共20页
基于51单片机16LED点阵的设计.docx_第17页
第17页 / 共20页
基于51单片机16LED点阵的设计.docx_第18页
第18页 / 共20页
基于51单片机16LED点阵的设计.docx_第19页
第19页 / 共20页
基于51单片机16LED点阵的设计.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机16LED点阵的设计.docx

《基于51单片机16LED点阵的设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机16LED点阵的设计.docx(20页珍藏版)》请在冰点文库上搜索。

基于51单片机16LED点阵的设计.docx

基于51单片机16LED点阵的设计

南华大学

《单片机》设计报告

 

16×16点阵显示屏的设计

 

姓名:

王佳杰

学号:

20114400218

专业班级:

通信1102班

指导老师:

朱卫华

所在学院:

电气工程学院

2014年6月15日

 

摘要

本设计使用简单单片机AT98C52作为主控制模块,利用简单的外围电路来驱动16×16的点阵LED显示屏。

在本设计中主要用两个74HC595来驱动16×16点阵显示屏的列,用一个74HC154来驱动16×16点阵显示屏的行,可以最终实现字符的上下左右移动。

也就是说,硬件电路大致上可以分成单片机系统及外围电路、列驱动电路和行驱动电路三部分。

从而可以实现一个室内用的16×16点阵LED图文显示屏,在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰,图形或文字显示有静止、移入移出等显示方式。

最后,利用烧录器可以很方便的实现单片机与PC机等外围存储设备的数据传输,并能利用软件方便的进行显示内容的多样变化,另一方面,LED点阵显示屏作为一种新兴的显示器件,是由多个独立的LED发光二极管封装而成。

LED点阵显示屏可以显示数字或符号,通常用来显示时间、速度、系统状态等。

文章给出了一种基于MCS-51单片机的16×16点阵LED显示屏的设计方案。

包括系统具体的硬件设计方案,软件流程图和部分C语言程序等方面。

在负载范围内,只需通过简单的级联就可以对显示屏进行扩展,是一种成本低廉的图文显示方案。

 

1概述4

1.1LED及LED显示屏4

1.2功能要求4

1.3方案论证4

1.4LED点阵的选取5

1.5LED点阵引脚说明6

1.6LED点阵拼接方式6

2系统总体方案及硬件设计7

2.1显示屏总体设计方案7

2.2列驱动电路7

2.2.174HC595引脚图7

2.3行驱动电路9

2.3.174HC154概述9

2.3.274HC154引脚图10

2.3.374HC154管脚说明10

2.3.474HC154在电路中的连接10

3软件设计12

3.1显示驱动程序12

3.2系统主程序13

4Proteus软件仿真14

4.1Proteus软件简介14

4.1proteus仿真过程15

4.3proteus仿真效果图15

5课程设计体会16

参考文献17

附1源程序代码18

附2系统原理图27

附3实物图28

1概述

1.1LED及LED显示屏

LED显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。

在实际应用中的显示屏由于成本和可靠性的因素常采用一种称为动态扫描的显示方法。

LED就是LightEmittingDiode(发光二极管)的缩写。

在某些半导体材料的PN结中,注入的少数载流子与多数载流子复合时会把多余的能量以光的形式释放出来,从而把电能直接转换为光能。

PN结加反向电压,少数载流子难以注入,故不发光。

这种利用注入式电致发光原理制作的二极管叫发光二极管,通称LED。

LED显示屏是一种通过控制半导体发光二极管的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。

LED显示屏分为图文显示屏和视频显示屏,均由LED矩阵块组成。

图文显示屏可与计算机同步显示汉字、英文文本和图形;视频显示屏采用微型计算机进行控制,图文、图像并茂,以实时、同步、清晰的信息传播方式播放各种信息,还可显示二维、三维动画、录像、电视、VCD节目以及现场实况。

LED显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。

它的优点:

亮度高、工作电压低、功耗小、微型化、易与集成电路匹配、驱动简单、寿命长、耐冲击、性能稳定。

1.2功能要求

设计一个室内用16×16点阵LED图文显示屏,要求在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰,图形或文字显示有静止、移入移出等显示方式。

1.3方案论证

16×16的点阵显示屏共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,16×16的点阵需要256/8=32个锁存器。

这个数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大的多,这样在锁存器上花的成本将是一个很庞大的数字。

因此在实际应用中的显示屏几乎都不采用这种设计,而采用另一种称为动态扫描的显示方法。

动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套列驱动器。

具体就16×16的点阵来说,我们把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其燃亮一定的时间,然后熄灭;再送出第二行的数据并锁存,然后选通第二行使其燃亮相同的时间,然后熄灭;……第十六行之后又重新燃亮第一行,这样反复轮回。

当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,我们就能看到显示屏上稳定的图形了。

采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。

但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。

这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两个部分。

对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下,留给行显示的时间就太少了,以至影响到LED的亮度。

解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。

即在显示本行各列数据的同时,传送下一行的列数据。

为了达到重叠处理的目的,列数据的显示就需要具有锁存功能。

经过上述分析,可以归纳出列驱动器电路应具备的主要功能。

对于列数据准备来说,它应能实现串入并出的移位功能;对于列数据显示来说,应具有并行锁存的功能。

这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。

1.4LED点阵的选取

本次设计LED点阵采用的是4个8*8LED点阵拼接成16*16点阵的形式,其中8*8LED点阵分为两类:

分别为共阳极点阵和共阴极点阵。

其内部电路形式如下图:

其中AX为共阴极点阵,BX为共阳极点阵。

本设计采用共阳极点阵。

1.5LED点阵引脚说明

通过万用表的引脚测试,特将8*8共阳极点阵引脚信息绘制如下:

1.6LED点阵拼接方式

4块点阵拼接方式如下,其中左右两个同行引脚相连,上下两个同列引脚相连。

2系统总体方案及硬件设计

2.1显示屏总体设计方案

 

 

 

LED显示点阵

行驱动器

列驱动器

 

2.2列驱动电路

列驱动电路有集成电路74HC595构成。

它具有一个8位串入并出的移位寄存器和一个8位输出锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行列数据的同时,传送下一行的列数据,既达到重叠处理的目的。

74HC595输入侧有8个串行移位寄存器,每个移位寄存器的输出都连接一个输出锁存器。

引脚SI是串行数据的输入端。

引脚SCK是移位寄存器的移位时钟脉冲,在其上升沿发生移位,并将SI的下一个数据打入最低位。

移位后的各位信号出现在各移位寄存器的输出端,也就是输出锁存器的输入端。

RCK是输出锁存器的打入信号,其上升沿将移位寄存器的输出打入输出锁存器。

引脚G是输出三态门的开放信号,只有当其为低时锁存器的输出才开放,否则为高组态。

SCLR信号是移位寄存器清零输入端,当其为低时移位寄存器的输出全部为零。

由于SCK和RCK两个信号是互相独立的,所以能够做到输入串行移位与输出锁存互不干扰。

芯片的输出端为QA~QH,最高位QH可作为多片74HC595级联应用时,向上一级的级联输出。

但因为QH受输出锁存器的打入控制,所以还从输出锁存器前引出QH,作为与移位寄存器完全同步的级联输出。

 

2.2.174HC595引脚图

74HC595的引脚

2.2.274HC595管脚说明

2.2.374HC595在电路中的接线

74HC595在电路中的连线

2.3行驱动电路

本设计中采用一个74HC154译码器实现4线16线输出,来驱动点阵显示屏的行。

2.3.174HC154概述

74HC154是一款高速CMOS器件,74HC154引脚兼容低功耗肖特基TTL(LSTTL)系列。

74HC154译码器可接受4位高有效二进制地址输入,并提供16个互斥的低有效输出。

74HC154的两个输入使能门电路可用于译码器选通,以消除输出端上的通常译码“假信号”,也可用于译码器扩展。

该使能门电路包含两个“逻辑与”输入,必须置为低以便使能输出端。

任选一个使能输入端作为数据输入,74HC154可充当一个1-16的多路分配器。

当其余的使能输入端置低时,地址输出将会跟随应用的状态。

74HC154这种单片4线—16线译码器非常适合用于高性能存储器的译码器。

当两个选通输入G1和G2为低时,它可将4个二进制编码的输入译成16个互为独立的输出之一。

实现解调功能的方法是:

用4个输入线写出输出线的地址,使得在一个选通输入为低时数据通过另一个选通输入。

当一个选通输入是高时,所有输出都为高。

2.3.274HC154引脚图

74HC154引脚图

2.3.374HC154管脚说明

1-1113-17:

输出端。

(outputs(activeLOW))

12:

Gnd电源地 (ground(0V))

18-19:

使能输入端、低电平有效(enableinputs(activeLOW))

20-23:

地址输入端(addressinputs)

24:

VCC电源正(positivesupplyvoltage)

2.3.474HC154在电路中的连接

74HC138在电路中的连线

2.4点阵恒流驱动电路

行驱动芯片与LED点阵之间加入4.7K电阻和8550三极管。

列驱动芯片与LED点阵之间加入220欧姆电阻。

其中仿真中是不加恒流驱动电路的,否则会仿真失败,其中此电路用非门代替。

2.5单片机系统及外围电路

单片机采用AT89C52,采用频率晶振12MHZ,以获得较高的刷新频率,时期显示更稳定。

单片机的串口与列驱动器相连,用来显示数据。

P2口低5位与行驱动器相连,送出行选信号;P2.5~P2.7口则用来发送控制信号。

 

3软件设计

3.1显示驱动程序

显示驱动程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定,1/16扫描显示屏的刷新率(帧频)计算公式如下:

刷频率(帧频)=1/16×T0溢出率

=1/16×f/12(65536-t)

其中f位晶振频率,t为定时器T0初值(工作在16位定时器模式)。

然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。

为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示。

图3-1为显示驱动程序(显示屏扫描函数)流程图。

定时器赋初值

读取行号并增加1

送新行显示数据

消隐

切换显示数据

发送新行号,打开显示

退出中断

进入中断

 

 

 

 

 

 

3.2系统主程序

本文设计的系统软件能使系统在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。

图形或文字显示有静止、移入移出等显示方式。

系统主程序开始以后,首先是对系统环境初始化,包括设置串口、定时器、中断和端口;然后以“卷帘出”效果显示图形,停留约3s;接着向上滚动显示“河南理工大学电气学院”这10个汉字及一个图形,然后以“卷帘入”效果隐去图形。

由于单片机没有停机指令,所以可以设置系统程序不断的循环执行上述显示效果。

单元显示屏可以接收来自控制器(主控制电路板)或上一级显示单元模块传输下来的数据信息和命令信息,并可将这些数据信息和命令信息不经任何变化地再传送到下一级显示模块单元中,因此显示板可扩展至更多的显示单元,用于显示更多的显示内容。

图3-2是系统主程序流程图。

开始

系统初始化

“卷帘出”显示效果

“上滚屏”显示效果

“左跑马”显示效果

“卷帘入”显示效果

 

 

 

 

4Proteus软件仿真

4.1Proteus软件简介

Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。

它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前最好的仿真单片机及外围器件的工具。

虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

使用Proteus软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;在单片机课程设计和全国大学生电子设计竞赛中,我们使用Proteus开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单片机的学习比单纯学习书本知识更容易接受,更容易提高。

实践证明,在使用Proteus进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。

因此,Proteus有较高的推广利用价值。

4.1proteus仿真过程

原理图的绘制

程序编写和编译

装载HEX代码调试

得到仿真效果

 

4.3proteus仿真效果图

5课程设计体会

在这次毕业设计的过程中我通过查阅大量的相关资料,详细了解了LED的发光原理和LED显示屏的原理,了解了LED的现状,清楚地了解了LED显示屏与其它显示屏相比较有那些优点。

为将来从事该行业在一定程度上奠定了基础。

在设计过程中,我熟练掌握了proteus仿真软件的基本使用,与此同时也感到proteus仿真软件对我们电气专业的同学来说是一款相当有用的软件。

不仅如此,通过这次毕业设计,进一步学习了单片机的相关知识。

在设计过程中,我也遇到个各种各样的困难,其中最主要的就是4个8*8点阵级联的问题,由于一开始对于点阵各个引脚的作用没有搞太清楚,导致第一次焊接完成时并没有达成任务目标,后来经过更深层次的查询和学习,最终完成了课程设计。

从这次设计中,我们最重要的感受是:

做任何事都有耐心和毅力,否则将一事无成。

 

参考文献

[1]何立民.MCS-51系列单片机应用系统设计与接口技术.北京:

北京航空航天大学出版社,1990.23-25

[2]何立民.单片机应用技术选编.北京:

北京航空航天大学出版社,2000.30-33

[3]邬宽明.单片机外围器件实用手册.北京:

北京航空航天大学出版社,1998.70-73

[4]张毅刚等.MCS-51单片机应用设计.哈尔滨:

哈尔滨工业电子出版社,1996.55-56

[5]张新成,杨志邦.c语言程序设计.郑州:

河南科学技术出版社,2009.55-65

[6]余发山,王福忠.单片机原理及应用技术.徐州:

中国矿大出版社,2004.34-36

 

附1源程序代码

#include

#defineucharunsignedchar

sbitsi=P2^5;/*P2.5为数据线*/

sbitsck=P2^7;/*P2.7为数据输入时钟线*/

sbitrck=P2^6;/*P2.6为输出存储器锁存时钟线*/

uchari,j,k,zb;

ucharxsz[32],xsz1[32];

ucharcodesmsg[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,

0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};

ucharcodewz[][32]={

{0x00,0x00,0x00,0x00,0x00,0x1E,0x88,0x09,0x18,0x07,0x00,0x1C,0x80,0x13,0x98,0x16,

0x8C,0x13,0x88,0x17,0x48,0x12,0x48,0x1E,0x76,0x08,0x80,0x7F,0x00,0x1C,0x00,0x00},/*"通",0*/

{0x00,0x00,0x00,0x00,0x20,0x06,0x10,0x04,0x10,0x20,0xC8,0x1F,0x08,0x00,0x14,0x07,

0x12,0x00,0x10,0x07,0x10,0x08,0x90,0x17,0x90,0x08,0x10,0x1F,0x00,0x00,0x00,0x00},/*"信",1*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x01,0x80,0x01,0x80,0x00,0x80,0x04,

0xF0,0x03,0x80,0x00,0x80,0x00,0x80,0x00,0xC0,0x7F,0x3C,0x00,0x00,0x00,0x00,0x00},/*"王",2*/

{0x00,0x00,0x00,0x02,0x20,0x04,0x20,0x04,0x10,0x12,0x90,0x0F,0x08,0x02,0x14,0x7E,

0x92,0x03,0x10,0x02,0x90,0x0F,0x10,0x02,0x10,0x32,0xF0,0x0F,0x10,0x00,0x00,0x00},/*"佳",3*/

{0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x04,0xE0,0x03,0xC0,0x01,0xC0,0x06,

0xA0,0x18,0x98,0x70,0x80,0x00,0x00,0x09,0x20,0x33,0x44,0x22,0x04,0x00,0x00,0x00},/*"杰",4*/

{0x18,0x18,0x3C,0x3C,0x7E,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x7F,

0xFC,0x3F,0xF8,0x1F,0xF8,0x1F,0xF0,0x0F,0xE0,0x07,0xC0,0x03,0xC0,0x03,0x80,0x01},/*"心",5*/

};

voidys(uchara)

{ucharb,c;

for(b=a;b>0;b--)

for(c=110;c>0;c--);

}

voidfs(uchara)

{ucharb;

sck=0;

for(b=8;b>0;b--)

{a=a<<1;

si=CY;

sck=1;

sck=0;

}}

voidxs()

{for(i=0;i<16;i++)

{P2=smsg[i];

fs(~xsz[2*i+1]);

fs(~xsz[2*i]);

rck=1;

rck=0;

ys(4);

}}

voidco(uchar*p,uchar*p1)

{uchara;

for(a=0;a<16;a++)

{p[a*2]=p1[a*2];

p[a*2+1]=p1[a*2+1];

}}

voidshy(uchare,ucharg,uchar*p1)/*左右移动*/

{uchara,b,c,d=0,f=31;

for(a=0;a<16;a++)

{if(g==1)

{for(b=0;b<30;b++)

xsz[b]=xsz[b+2];

if(p1==0)

{xsz[30]=0xff;

xsz[31]=0xff;

}

else

{xsz[30]=p1[d++];

xsz[31]=p1[d++];

}

for(c=e;c>0;c--)

xs();

}

else

{for(b=29;b>0;b--)

xsz[b+2]=xsz[b];

xsz[2]=xsz[0];

if(p1==0)

{xsz[1]=0xff;

xsz[0]=0xff;}

else{xsz[1]=p1[f--];

xsz[0]=p1[f--];}

for(c=e;c>0;c--)

xs();

}}}

voidzyy(uchara,ucharb,uchar*p)/*上线移动*/

{uchari,j,k,c;

for(i=0;i<16;i++)

{if(p==0)

{xsz1[2*i]=0xff;

xsz1[2*i+1]=0xff;

}

else{xsz1[2*i]=p[2*i];

xsz1[2*i+1]=p[2*i+1];

}

}

if(b==1)

for(k=0;k<16;k++)

{for(i=0;i<16;i++)

{xsz[i*2+1]=xsz[i*2+1]<<1;

xsz[i*2]=xsz[i*2]<<1;

if(CY==1)

xsz[i*2+1]=xsz[i*2+1]|0x01;

xsz1[i*2+1]=xsz1[i*2+1]<<1;

if(CY==1)

xsz[i*2]=xsz[i*2]|0x01;

xsz1[i*2]=xsz1[i*2]<<1;

if(CY==1)

xsz1[i*2+1]=xsz1[i*2+1]|0x01;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2