找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15206|回复: 1
打印 上一主题 下一主题
收起左侧

基于单片机16*16点阵显示屏的设计及论文

[复制链接]
跳转到指定楼层
楼主
ID:121362 发表于 2016-5-17 09:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
摘  要
        伴随着科技的进步,LED点阵显示屏作为一种新兴的显示器件走进我们的视野,它是由多个独立的LED发光二极管封装而成。通过LED点阵显示屏可以显示数字、符号以及文字,通常用在广告,指示牌,公告牌上。
本设计利是一种基于STC89C52单片机的16*16点阵显示屏的设计,其中STC89C52单片机负责对整个系统进行总体控制,设计中使用48*8单红色点阵屏来组成16*16点阵屏,通过三极管来控制点阵的行方向的控制,而列方向的控制采用两片串行输入八位并行输出的74LS595级联来控制,通过快速的动态刷新来显示我们需要的内容,已达到动态显示的目的。
关键词:点阵 单片机 译码器 动态扫描

Abstract
With advances in technology, LED dot matrix display as a display device into our new vision, it is more independent of the LED light emitting diode packages. LED dot matrix display can show by numbers, symbols and text, often used in advertising, signs, bulletin boards.
The design is based on STC89C52 Lee microcontroller 16 * 16 dot matrix display design, which is responsible for the entire chip STC89C52 overall control system design using four 8 * 8 to form a single red dot-matrix screen 16 * 16 points front panel, through the decoder to control the direction of the control line dot matrix, and the column direction is controlled by two serial input parallel output of the 74LS595 eight cascaded to control, through a fast dynamic refresh to show that we need content, has reached the dynamic display purposes.
Keywords: dot matrix single-chip decoder dynamic scan



目 录
摘  要        2
第1章  绪  论        4
1.1  课题的研究背景        4
1.1.1 LED电子显示屏概述        4
1.1.2  LED电子显示屏的分类        4
1.1.3  设计任务        5
1.2  MCS-51系统单片机简介        6
第2章 总体设计        7
2.1  系统概述        7
2.1.1  显示单元的选择        7
2.1.2  滚屏方式选择        7
2.1.3  关于屏幕的可扩展性        7
2.1.4  单片机控制器的考虑        8
2.1.5  关于点阵数据的存储方式        8
第3章 硬件电路设计        9
3.1 整体设计框图        9
3.2 主控电路        9
3.2.1 STC89C52 单片机简介        9
3.3 LED点阵显示电路        18
3.3.1 74LS595的总体特点和工作原理        19
3.4整体电路        21
3.5实物图        21
第4章 软件实现        22
4.1 概述        22
4.2系统程序方案设计        22
4.2.1主程序设计        23
4.2.2子程序设计        24
4.2.3延时函数        25
4.2.4行选控制        25
总    结        27
参考文献        28
附录1:  电路原理图        29
附录2:  LED点阵显示源程序        30
致   谢        38
元件清单        39

1章  绪  论1.1  课题的研究背景
本文主要围绕点阵的特点开展的点阵设计,设计中的难度诸多如限流电阻的计算,扫描时间的控制等,下面我们就介绍下点阵的概况。
1.1.1 LED电子显示屏概述
LED电子显示屏(Light Emitting Diode Panel)是由几百--几十万个半导体发光二极管构成的像素点,按矩阵均匀排列组成。利用不同的半导体材料可以制造不同色彩的LED像素点。目前应用最广的是红色、绿色、黄色。而蓝色和纯绿色LED的开发已经达到了实用阶段。 LED显示屏是一种通过控制半导体发光二极管的亮度的方式,来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。
LED显示屏分为图文显示屏和条幅显示屏,均由LED矩阵块组成。图文显示屏可与计算机同步显示汉字、英文文本和图形;而条幅显示屏则适用于小容量的字符信息显示。LED显示屏因为其像素单元是主动发光的,具有亮度高,视角广、工作电压低、功耗小、寿命长、耐冲击和性能稳定等优点。因而被广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。
LED显示屏的发展前景极为广阔,目前正朝着更高亮度、更高气候耐受性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。
1.1.2  LED电子显示屏的分类
按颜色分类
单基色显示屏:单一颜色(红色或绿色)。
双基色显示屏:红和绿双基色,256级灰度、可以显示65536种颜色。
全彩色显示屏:红、绿、蓝三基色,256级灰度的全彩色显示屏可以显示一千六百多万种颜色。
按显示器件分类
LED数码显示屏:显示器件为7段码数码管,适于制作时钟屏、利率屏等,显示数字的电子显示屏。
LED点阵图文显示屏:显示器件是由许多均匀排列的发光二极管组成的点阵显示模块,适于播放文字、图像信息。
按使用场合分类
室内显示屏:发光点较小,一般Φ3mm--Φ8mm,显示面积一般零点几至十几平方米。
室外显示屏:面积一般几十平方米至几百平方米,亮度高,可在阳光下工作,具有防风、防雨、防水功能。
按发光点直径分类
室内屏:Φ3mm、Φ3.75mm、Φ5mm、
室外屏:Φ10mm、Φ12mm、Φ16mm、Φ19mm、Φ21mm、Φ26mm
室外屏发光的基本单元为发光筒,发光筒的原理是将一组红、绿、蓝发光二极管封在一个塑料筒内共同发光增强亮度。
1.1.3  设计任务
本设计的任务就是完成一个16*16的点阵设计,并能滚动显示“你好!我是陆敏杰”内容。
任务要求:
(1)        能同时流动显示汉字
(2)        能实现显示汉字无闪烁
(3)        能实屏幕亮度较高

1.2  MCS-51系统单片机简介
MCS-51系类单片机就有:
1.可靠性高:因为芯片是按工业测控环境要求设计的,故抗干扰的能力优于PC机。系统软件(如:程序指令,常数,表格)固化在ROM中,不易受病毒破坏。许多信号的通道均在一个芯片内,故运行时系统稳定可靠。
2.便于扩展:片内具有计算机正常运行所必需的部件,片外有很多工扩展用的(总线,并行和串行的输入/输出)管脚,很容易组成一定规模的就算计机应用系统。
3.控制功能强:具有丰富的控制指令:如:条件分支转移指令,I/O的逻辑操作指令,位处理指令。
4.实用性好:体积小,功耗低,价格便宜,易于产品化。
单片机的发展历史简介:
(1) 第1阶段(1971年—1978年),以MCS-48系列为代表,称4位单片机。在片内:CPU有4位或8位;ROM有1KB或2KB;RAM有64B或128B;只有并行接口,无串行接口;只有1个8位的定时/计时器;中断源只有2个。在片外:寻址范围只有4KB;芯片引脚有40个。
(2) 第2阶段(1978年—1983年)以MCS-51系列为代表,称8位单片机。在片内:CPU有8位;ROM有4KB或8KB;RAM有128B或256B;有串/并行接口;有2个或者3个16位的定时/计时器;中断源有5至7个。在片外:寻址范围有64KB;芯片引脚有40个。
(3) 第3阶段(1983年以后),以MCS-96系列为代表,称16位单片机。在片内:CPU有16位;ROM有8KB;RAM有232B;有串/并行接口;有4个16位的定时/计时器;中断源有8个;增加了D/A和A/D转换电路。在片外:寻址范围有64KB;芯片引脚有48个或者68个。
以上是对MCS-51系列以其优良的性价比,在我国得到了广泛的应用。

2章 总体设计2.1  系统概述
        一个完备的系统要考虑到多种问题的实现,点阵的设计也是如此,下面我详细说明我的设计过程。
2.1.1  显示单元的选择
显示一个简体汉字,至少需要16×16点阵来描述。为了在较远距离处获得清晰的视觉效果,本设计采用48×8点阵,像素直径5mm的红色LED模块拼接成16×16点阵的LED阵列。这样每个16×16汉字能够获得12×12cm的显示尺寸,因此在50米处仍能清晰阅读。本设计要求整个屏幕能显示“你好!我是陆敏杰”一系列汉字,则需要用使用16*16红色点阵滚动显示。
2.1.2  滚屏方式选择
字符的位置在屏幕上实现移动,即术语“滚屏”。可以用硬件实现,但无疑增加了额外的硬件成本及设计难度。因此本设计采用软件算法实现左滚屏显示的常见滚屏方式。用软件来完成滚屏算法,其最大的优点在于成本低廉,而且可维护性、可升级性大大增强。
2.1.3  关于屏幕的可扩展性
除了基本要求外,本设计还要实现显示单元数目的随意扩展。在传统的并行传输方式中,因受到列数据锁存器地址线数目的制约,不能随意的增添显示单元,且每个显示单元的电路结构不同,PCB结构也不同,完全不符合模块化设计的要求。因此摒弃了传统的并行传输方式,而采用独特的串行锁存技术,通过控制五根总线就能实现各显示单元之间的列数据锁存。不仅板间连接简单,更是降低了PCB布局及布线的难度。每个显示单元的PCB都是完全一样的,便于量产。
2.1.4  单片机控制器的考虑
因本设计采用软件来实现滚屏,且传输方式为串行方式。所以对微控制器单元的处理速度要求较高,可供选择的有ARM7和高速8位单片机。ARM的处理速度极快,但对于条屏的应用,ARM内部的资源浪费严重,且成本较高。因此选择高速8位单片机作为控制器,常见的高速8位单片机有AVR系列单片机,C8051F系列单片机,STC89C52单片机。这几种单片机的处理速度均能达到1MIPS/MHz(在时钟频率为1MHz时处理能力为每秒100万条指令),但AVR系列单片机的极限时钟频率只能到16MHz,而C8051F系列SOC类似于ARM7,时钟速度可到100MHz,但会浪费其内部丰富的资源,而且价格昂贵,用在单色条屏的控制中颇感浪费。于是最佳选择为STC89C52系列单片机,其最高时钟能到40MHz,且有较丰富的接口及存储器资源,价格极其低廉,零售价仅为9/片。大幅降低了产品成本。
2.1.5  关于点阵数据的存储方式
目前使用最广泛的技术是,通过上位机软件将待显示的字符串转换为对应的点阵字模数据,通过烧写的方式将这些字模数据按一定的顺序编址后存储在E2PROM中。在条屏显示的过程中按规定的方式取出E2PROM中的字模数据进行处理。对于一个16×16点阵的汉字字模数据,需要连续32字节的E2PROM空间来存储。照此计算,若有256个需要显示的字符,则至少需要32B×256=8192字节(8KB)的E2PROM存储空间。通常的单片机内部没有集成这么大容量的E2PROM。因此这种方案,需要在单片机外部扩展大容量的E2PROM,增加硬件成本。上位机程序设计由于涉及到汉字取模,取模算法的难度较大。在多字下载的时候传输时间也较长。诸多弊端使本设计放弃了传统方案。因为本设计只需要很少的显示内容所以直接保存在STC89C52中是足够的,因此没有使用外部设备。
3章 硬件电路设计3.1 整体设计框图
        经过对此设计的分析,为了能够实现要求,利用单片机STC89C52作为本系统的主控模块。LED点阵显示屏作为显示模块,把单片机传来的数据显示出来,并且可以实现滚动显示。硬件整体设计框图如图1所示:
file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps3FB.tmp.jpg
                                                      图1 整体设计框图
下面对硬件电路进行说明:
3.2 主控电路
        此方案通过主控电路控制完成LED点阵显示屏的字符滚动显示,主控制器使用STC公司生产的单片机STC89C52
3.2.1 STC89C52 单片机简介
STC89C52 STC公司推出的一款超强抗干扰,加密性强,在线可编程,高速,低功耗CMOS 8位单片机。片内含 8k bytes 的可反复擦写Flash只读程序存储器和256 bytes 的随机数据存储器(RAM),器件采用STC公司的高密度、非易失性存储技术生产,与标准MCS51指令系统及8052产品引脚兼容, 片内置通用8位中央处理器 (CPU)和Flash存储单元, 功能强大的STC89C52单片机适合于许多较为复杂控制应用场合。
1STC89C52 外部结构及特性
其外形封装有两种方式:双列直插式40脚封装(DIP)和方形44脚封装 (PLCC),直插式40 脚封装(DIP)和外部总线结构如图2和图3所示:
file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps3FC.tmp.jpg
       图2 STC89C52引脚排列              图3外部总线
STC89C524 8 I/O口的功能说明如下:
1P0口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动8TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低 8 位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash 编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。
2P1口:P1口是一个具有内部上拉电阻的8位双向 I/O口,p1输出缓冲器能驱动4TTL 逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0 P1.2 分别作定时器/计数器 2 的外部计数输入(P1.0/T2)和定时器/计数器 2 的触发输入(P1.1/T2EX)。在 flash 编程和校验时,P1口接收低8位地址字节。
3P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动 4 TTL 逻辑电平。对 P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用 16 位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送 1。在使用8 位地址(如 MOVX @RI)访问外部数据存储器时,P2 口输出 P2 锁存器的内容。在 flash 编程和校验时,P2 口也接收高 8 位地址字节和一些控制信号。
4P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,p2 输出缓冲器能驱动4TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在 flash 编程和校验时,P3 口也接收一些控制信号。P3 口亦作为AT89C52特殊功能(第二功能)使用,如下所示:
l  P3.0  RXD(串行输入口)
l  P3.1  TXD(串行输出口)
l  P3.2  INTO(外部中断0 输入口)
l  P3.3  INT1(外部中断 1 输入口)
l  P3.4  TO(定时器 0 外部输入)
l  P3.5  TI(定时器 1 外部输入)
l  P3.6  WR(外部数据存储器写选通信号)
l  P3.7(外部数据存储器读选通信号)
2)功耗特性
        (1)掉电模式:
                典型功耗 <0.1uA,可由外部中断唤醒,中断返回后,继续执行原程序
        (2)空闲模式:
                典型功耗 2mA
        (3)正常工作模式:
                典型功耗 4mA-7mA
         (4)掉电模式可由外部中断唤醒,适用于水表,气表等电池供电系统及便携设备
3STC单片机的命名规则
file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps41C.tmp.pngfile:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps41D.tmp.pngfile:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps41E.tmp.pngfile:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps41F.tmp.pngfile:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps420.tmp.pngfile:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps421.tmp.pngfile:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps422.tmp.png                        STC89 xx xx xx—40 x-xxxx
file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps423.tmp.png

file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps424.tmp.png

file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps434.tmp.png



file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps435.tmp.png


file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps436.tmp.png


file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps437.tmp.png

file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps438.tmp.png

4STC89C52的内部组成
STC89C52单片机在一块芯片中集成了 CPURAMROM、定时器/计数器、看门狗和多种功能的 I/O 口设备的等,相当于一台计算机所需要的基本功能部件。
STC89C52单片机内包含的具体部分如下:
l  一个8 位 CPU。
l  一个片内振荡器及时钟电路。
l  8KB Flash 程序存储器。
l  256 B RAM 数据存储器。
l  三个16 位定时器/计数器。
l  可寻址 64KB 的外部数据存储器和 64KB 的外部程序存储器空间的控制电路。 32 条可编程的 I/O线(4组8 位并行 I/O端口)。
l  一个可编程全双工串口通信。
l  8 个中断源、两个优先级嵌套中断结构。
STC89C52单片机的框图如图4所示,各功能部件由内部总线连接在一起。
file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps439.tmp.jpg
                           图4 STC89C52单片机框图
5)特殊功能寄存器SFR
1)单片机内核特殊功能寄存器
Mnemonic
Add
Name
7
6
5
4
3
2
1
0
RestValue
ACC
E0h
Accumulator
















0000,0000
B
F0h
B Register
















0000,0000
PSW
D0h
ProgramStatusWord
CY
AC
F0
RS1
RS0
OV
F1
P
0000,0001
SP
81h
StackPoint
















0000,0111
DPL
82h
DataPointerLowByte
















0000,0000
DPH
83h
DataPointerHighByte
















0000,0000
2)系统管理特殊功能寄存器
Mnemonic
Add
Name
7
6
5
4
3
2
1
0
RestValue
PCON
87h
PowerControl
SMOD
SMOD0
-
P0F
GF1
GF0
PD
IDL
00x1,0000
AUXR
8Eh
AuxiliaryRegister0
-
-
-
-
-
-
EXTRAM
ALE0FF
xxxx,xx00
AUXR1
A2h
AuxiliaryRegister1
-
-
-
-
GF2
-
-
DPS
xxxx,0xx0
(3)中断特殊功能寄存器
Mnemonic
Add
Name
7
6
5
4
3
2
1
0
RestValue
IE
A8h
InterruptEnable
EA
-
ET2
ES
ET1
EX1
ET0
EX0
0000,0000
IP
B8h
InterruptPriorityLow
-
-
PT2
PS
PT1
PX1
PT0
PX0
xx00,0000
IPH
B7h
InterruptPriorityHigh
PX3H
PX2H
PT2H
PSH
PT1H
PX1H
PT0H
PX0H
0000,0000
TCON
88h
Timer/Counter0and1Contrl
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
0000,0000
SCON
98h
SerialContrl
SM0/FE
SM1
SM2
REN
TB8
RB8
TI
RI
0000,0000
T2CON
C8h
Timer/Counter2Control
TF2
EXF2
RCLK
TCLK
EXEN2
TR2
C/T2#
CP/RL2#
0000,0000
XICON
C0h
AuxiliaryInterrupControl
PX3
EX3
IE3
IT3
PX2
EX2
IE2
IT2
0000,0000
6STC89C52单片机定时器的使用
        定时和计数功能由特殊功能寄存器TMOD的控制位C/`T进行选择,TMOD寄存器的各位信息如下表所列。可以看出,2个定时/计数器有4中操作模式,通过TMOD的M1和M0选择。2个定时/计数器的模式0、1和2都相同,模式3不同,各模式下的功能如图5所述:
file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps44A.tmp.jpg
                                                                图5 定时/计数器各模式功能
符号
功能
TMOD.7
GATE
TMOD.7控制定时器1,置1时只有在INIT0脚为高及TR1控制位置1时才可打开定时器/计数器1
TMOD.3
GATE
TMOD.3控制定时器0,置1时只有在`INIT1脚为高及TR0控制位置1才可打开定时器/计数器1
TMOD.6
C/`T
TMOD.6控制定时器1用作定时器或计数器,清零则用作定时器(从内部系统时钟输入),置1用作计数器(从T1/P3.5脚输入)
TMOD.2
C/`T
TMOD.2控制定时器0用作定时器或计数器,清零则用作定时器(从内部系统时钟输入),置1用作计数器(从T0/P3.4脚输入)
TMOD.5/ TMOD.4
M1 M0
定时器/计数器1模式选择


0  0
13位定时器/计数器,兼容8048定时器模式,TL1只用低5位参与分频,TH1整个8位全用
0  1
16位定时器/计数器,TL1TH1全用
1  0
8位自动重装载定时器,当溢出时将TH1存放的值自动重装入TL1
1  1
定时器/计数器1此时无效(停止计数)
TMOD.1/ TMOD.0
M1 M0
定时器/计数器0模式选择


0  0
13位定时器/计数器,兼容8048定时器模式,TL0只用低5位参与分频,TH1整个8位全用
0  1
16位定时器/计数器,TL0TH0全用
1  0
8位自动重装载定时器,当溢出时将TH1存放的值自动重装入TL0
1  1
定时器0此时作为双8位定时器/计数器。TL0作为一个8位定时器/计数器,通过标准定时器0的控制位控制。TH0仅作为一个8位定时器,由定时器1的控制位控制。
1)模式0
将定时器设置成模式0时,类似8048定时器,即8位计数器带32分频的预分频器。下图所示为模式0工作方式。此模式下,定时器配置为13位的计数器,由TLn的低5位和THn8位所构成。TLn5位溢出向THn进位,THn计数溢出置为TCON中的溢出标志位TFnn=0,1)。GATE=0时,如TRn=1,则定时器计数。GATE=1时,允许由外部输入INIT1控制定时器1INIT0控制定时器0,这样可实现脉宽测量。
file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps45B.tmp.jpg
                                        图6 定时器/计数器0和定时器/计数器1的模式0
2)模式1
        模式1除了使用THnTLn全部16位外,其他与模式0完全相同、
file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps45C.tmp.jpg
                                        图7定时器/计数器0和定时器/计数器1的模式1
3)模式2
此模式下定时器/计数器01作为可自动重装载的8位计数器(TLn),如下图所示,TLn的溢出不仅置位TFn,而且将THn内容重新装入TLnTHn内容由软件预置,重装时THn内容不变,模式2的操作对于定时器0及定时器1是相同的。
file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps46C.tmp.jpg
                                        图8 定时器/计数器01的模式2
4)模式3
对定时器1,在模式3时,,定时器1停止计数,效果与将TR1设置为0相同。
对定时器0,此模式下定时器0TL0TH0作为2个独立的8位计数器。下图为模式3时的定时器0逻辑图。TL0占用定时器0的控制位:C/`TGATETR0INT0及TF0TH0限定为定时器功能(计数器周期),占用定时器1TR1TF1。此时,TH0控制定时器1中断。
模式3是为了增加一个附加的8位定时器/计数器而提供的,使单片机具有三个定时器/计数器。模式3只使用与定时器/计数器0,定时器T1处于模式3时相当于TR1=0,停止计数(此时T1可用来作串行口波特率发生器),而T0可作为两个定时器用。
file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps46D.tmp.jpg
                                        图9 定时器/计数器0的模式3
3.3 LED点阵显示电路
本设计使用的是48*8单色点阵屏设计16*16点阵屏,采用单色显示,进行显示所要显示的字符,通过三极管来控制点阵的行方向的显示,而列方向的16条线则由74LS595的八位并行输出端控制。
3.3.1 74LS595的总体特点和工作原理
1)总体特点:74LS5958位串行输入转并行输出移位寄存器,三态输出功能,具有数据存储寄存器,移位寄存器和存储器是分别的时钟。数据在SHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。其DIP封装引脚图如图7所示:
file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps46E.tmp.jpg
7  74LS595引脚图

各引脚及其功能:
Q0~Q7
八位并行输出端
Ds
串行数据输入端
/OE
输出使能端
STcp
存储寄存器的时钟脉冲输入口
SHcp
移位寄存器的时钟脉冲输入口
/MR
芯片复位端
Q7'
并行数据输出口,即储寄存器的数据输出口

2)工作原理
        每当SHcp上升沿到来时, Ds引脚当前电平值在移位寄存器中左移一位,在下一个上升沿到来时移位寄存器中的所有位都会向左移一位,同时Q7'也会串行输出移位寄存器中高位的值,这样连续进行8次,就可以把数组中每一个数(8位的数)送到移位寄存器;然后当STcp上升沿到来时,移位寄存器的值将会被锁存到锁存器里,并从Q1~7引脚输出。74LS595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,点阵没有闪烁感。
74HC5955V供电的时候能够达到30MHz的时钟速度,每个并行输出端口均能承受20mA的灌电流和拉电流。这个特点保证了不用增加额外的扩流电路即可轻松的驱动LED。它输入端允许500nS的上升(下降)时间,对严重畸形的时钟脉冲仍能检测。这样就可以容纳较大的传输线对地电容,使本设计的抗干扰能力增强。
74HC595并行输出端与LED模块列线之间通过20Ω的电阻连接,这里电阻起到分压,去除红色LED的并联嵌位作用。使红绿两组LED均能正常发光。
由于LED显示屏的工作电流时刻在变化,造成了系统电压的波动。这种电压波动有高频成分,也有低频成分。轻则对周围无线电环境造成电磁污染,重则使系统时钟紊乱,逻辑错误。为避免此,在每个74HC595的电源VCCGND旁边都并联了两个电容,用于滤波和退耦。稳定系统电压,旁路掉电源中的高频脉动成份。消除自激,减小对外杂散电磁辐射,提高EMI电磁兼容性。
3.4整体电路
见附录1(电路原理图)
3.5实物图
        下面为我制作的16*16点阵实物图,正面图与背面图。
file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps46F.tmp.pngfile:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps480.tmp.png
                        16*16正面点阵图                                                        16*16背面点阵图


4章 软件实现4.1 概述
整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。 从软件的功能不同可分为两大类: 一是监控软件 (主程序) ,它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。二是执行软件(子程序),它是用来完成各种实质性的功能。每一个执行软件也就是一个小的功能执行模块。这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。各执行模块规划好后,就可以规划监控程序了。 首先要根据系统的总体功能选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。
4.2系统程序方案设计
系统程序主要包括了:主程序、点阵显示驱动程序。
主程序:主要控制整个显示部分的初始化,使系统在目测条件下LED显示屏各点亮度均匀、充足,可显示文字和数字,显示的文字和数字应稳定、清晰无串扰。文字显示可以移入移出。本设计的显示内容为“你好!我是陆敏杰”实现向右移动功能。
下面是主程序部分:
程序中首先对各个变量进行初始化,并对74HC595进行初始化,当时初始化过程完成后,开始显示处理。
//主函数
void main()
{
        uchar i=1,j=0;
        uchar X=0;
        //595c初始化
        Init595();
        //循环演示
        下面的程序是对显示的处理主要是对汉字的移动和显示的处理
        while(1)
        {
                for(j=0;j<10;j++)//循环显示10
                {
                        //送入16个位数据
                        for(i=1;i<17;i++)
                        {
                                WriteS(0xff,0xff);//消影
                                Wei_154(i);
                                WriteS(HanZi[i*2-2+2*X],HanZi[i*2-1+2*X]);//显示内容
                                Wei_154(i);
                                delay(7);//显示
                                G2=0;//关闭
                        }
                }
                X++;
                if(X==17*16)
                        X=0;
        }
}
在主函数中完成函数的调用及字体的移动处理,所以使人们能看见可以移动字体显示。
点阵显示驱动程序:
主要实现对74ls595,已实现画面的动态刷新。



//74ls595初始化
void Init595()
{
        SI=1;
        SCK=0;
        RCK=0;
}
//595中写一个字节
void Write_byte595(uchar temp)
{
        uchar i,data_=temp;
        G2=1;
        for(i=0;i<8;i++)//传值8
        {
                if(data_&0x01==0x01)//低位为1
                {
                        SI=1;
                }
                else                                         //低位为0
                {
                        SI=0;
                }
                //产生一个上升沿
                SCK=0;
                SCK=1;
                SCK=0;
                data_>>=1;
        }
        RCK=0;//显示数据
        RCK=1;
        RCK=0;
}
//595写入一行的字节
void WriteS(uchar data1,uchar data2)
{
        Write_byte595(data2);
        Write_byte595(data1);
}







4.2.1主程序设计
        通过主程序对74ls595的初始化和对子程序的调用完成单片屏幕的动态刷新以达到点阵的动态显示目的。
4.2.2子程序设计
        将各个功能程序以子程序的形式写好, 当写主程序的时候, 只需要调用子程序,然后在寄存器的分配上作一下调整,消除寄存器冲突和 I/O 冲突即可。程序应该尽可能多的使用调用指令代替跳转指令。因为跳转指令使得程序难以看懂各程序段之间的结构关系。而调用指令则不同,调用指令使得程序结构清晰,无论是修改还是维护都比较方便。将功能程序段写成子程序的形式,除了方便调用之外,还有一个好处那就是以后写程序的时候如果要用到,就可以直接调用这个单元功能模块。下面对LED点阵显示屏的显示部分流程图做介绍:

4.2.3延时函数
        因为显示原理是视觉暂留原理需要有延时控制显示。延时函数如下:
//等待函数
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=7;y>0;y--);
}
4.2.4行选控制
        通过单片机IO口控制三极管,可以实现5线控制16线的过程,如程序所示:



//154位选驱动
void Wei_154(uchar W)
{
        G2=0;//使能
        switch(W)
        {
                case 16:
                {
                        A_=1;
                        B_=1;
                        C_=1;
                        D_=1;        
                        break;               
                }
                case 15:
                {
                        A_=0;
                        B_=1;
                        C_=1;
                        D_=1;        
                        break;               
                }
                case 14:
                {
                        A_=1;
                        B_=0;
                        C_=1;
                        D_=1;        
                        break;               
                }
                case 13:
                {
                        A_=0;
                        B_=0;
                        C_=1;
                        D_=1;        
                        break;               
                }
                case 12:
                {
                        A_=1;
                        B_=1;
                        C_=0;
                        D_=1;        
                        break;               
                }
                case 11:
                {
                        A_=0;
                        B_=1;
                        C_=0;
                        D_=1;        
                        break;               
                }
                case 10:
                {
                        A_=1;
                        B_=0;
                        C_=0;
                        D_=1;        
                        break;               
                }
                case 9:
                {
                        A_=0;
                        B_=0;
                        C_=0;
                        D_=1;        
                        break;               
                }
                case 8:
                {
                        A_=1;
                        B_=1;
                        C_=1;
                        D_=0;        
                        break;               
                }
                case 7:
                {
                        A_=0;
                        B_=1;
                        C_=1;
                        D_=0;        
                        break;               
                }
                case 6:
                {
                        A_=1;
                        B_=0;
                        C_=1;
                        D_=0;        
                        break;               
                }
                case 5:
                {
                        A_=0;
                        B_=0;
                        C_=1;
                        D_=0;        
                        break;               
                }
                case 4:
                {
                        A_=1;
                        B_=1;
                        C_=0;
                        D_=0;        
                        break;               
                }
                case 3:
                {
                        A_=0;
                        B_=1;
                        C_=0;
                        D_=0;        
                        break;               
                }
                case 2:
                {
                        A_=1;
                        B_=0;
                        C_=0;
                        D_=0;        
                        break;               
                }
                case 1:
                {
                        A_=0;
                        B_=0;
                        C_=0;
                        D_=0;        
                        break;               
                }




总    结
经过近两个月的努力,终于顺利完成了毕业设计。在此LED点阵显示系统中,由于我采用了STC89C5单片机,并且采用串行移位寄存器74HC595作列线驱动,使本设计的硬件成本大幅下降,而又提高了显示单元的可扩展性。因为使用了高速单片机,使本系统的动态刷新率,移动速度等得到保障。本设计充分利用了单片机的E2PROM等片上资源,节约成本的同时使外围电路简洁美观,故障率降低。总体的性能指标均达到或超过了题目的要求。
毕业设计是每个大学生必须面临的一项综合素质的考验,如果说在过去四年里,我们的学习是一个知识的积累过程,那么现在的毕业设计就是对过去所学知识的综合运用,是对理论进行深化和重新认识的时间活动。在这近两个月的毕业设计中,我们有艰辛的付出,当然更多的是丰收的喜悦。知识固然得到了巩固和提高,但我相信在实践中的切身体会将会使我在以后的工作和学习中终身受用。
首先,学习能力得到了提高。在毕业设计中,自始至终独立完成硬件电路的设计、单片机软件编写等。在这些过程中,遇到许多困难,但通过书籍或网络查阅了很多相关文章和向导师请教后终于解决了。通过这次毕业设计,我不仅对理论有了更深一步的认识,增强了和外界技术的沟通,还培养了自学能力和分析解决问题的能力,更重要的是,培养了克服困难的勇气和信心。
其次,培养了自己的市场观念。一个商品是否能够抢占市场,除了必须的功能和质量要求外,其价格是最大的竞争优势。如何在保证质量和完成同等功能的情况下,把产品的成本降到最低。是每个设计人员在作出方案时首要考虑的因素。
再次,则是人际交流能力得到锻炼。人非生而知之者!人的学识总是不能面面俱到的,这就要求我们必须善于借鉴别人的成功经验或失败教训,使自己少走弯路。
总之,毕业设计完成了,但又面临着工作。我相信我会把自己的热情和所学奉献到自己的工作中,不断努力,不断进取!
参考文献
[1] 谭浩强. C程序设计(第二版)[M]. 北京:清华大学出版社,1999.12.
[2] 彭为.单片机典型系统设计实例精讲[M].北京:电子工业出版社,2006.5.
[3] 李良荣.现代电子设计技术-基于Multisim7[M].北京:机械工业出版社,2005.4.
[4] 姜承昊. 最新LED驱动电路设计、应用与制造新技术新工艺实用手册[M].北京:中国科学技术文献出版社,2008.3.
[5] 魏洪兴.嵌入式系统设计与实例开发实验教材I[M].北京:清华大学出版社,2005.9.
[6] 童诗白.模拟电子技术基础(第三版)[M].北京:高等教育出版社,2001.1.
[7] 阎石.数字电子技术基础(第四版)[M].北京:高等教育出版社,1998.11.
[8] 中国集成电路大全编委会编.《中国集成电路大全——CMOS集成电路》[M].   北京:国防工业出版社,1985.

附录1:  电路原理图
file:///C:/Users/阿坤/AppData/Local/Temp/ksohtml/wps491.tmp.jpg

附录2:  LED点阵显示源程序
#include <reg52.h>                 //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255
#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535

//                         //           1    2     3     4        5     6        7    8
uint code we[16]={0xfffb,0xffdf,0xff7f,0xffef,0xfffe,0xfffd,0xffbf,0xfff7,
                  0xdfff,0xfbff,0xfdff,0x7fff,0xf7ff,0xbfff,0xfeff,0xefff};         //


/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{
        uint i,j;
        for(i=0;i<q;i++)
                for(j=0;j<50;j++);
}



uchar code table[][32] = {//   

{0xFB,0x7F,0xFB,0xBF,0xFB,0xDF,0xFB,0xE7,0xFB,0xF9,0x03,0xFE,0xBB,0xFF,0xBB,0xFF,0xBB,0xBF,0xBB,0x7F,0xBB,0xBF,0x3B,0xC0,0xFB,0xFF,0xFB,0xFF,0xFB,0xFF,0xFF,0xFF},/* ,0*/

{0xF7,0xFF,0xF7,0x7F,0xF7,0xBF,0xF7,0xDF,0xF7,0xE7,0x07,0xF8,0x76,0xFF,0x71,0xFF,0x77,0xBF,0x77,0x7F,0x77,0xBF,0x77,0xC0,0xF7,0xFF,0xF7,0xFF,0xF7,0xFF,0xFF,0xFF},/* ,1*/


{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",8*/

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",9*/
};


uchar hanzi[32] ;
uchar i;

sbit SI=P3^6;        
sbit SCK=P3^3;   //上升沿有效
sbit RCK=P3^4;     //上升沿有效

/**********发送一个数据************/
void send_byte(uchar a)
{
        uchar i,nn;
        nn=a;
        for(i=0;i<8;i++)
        {
                SCK=0;
                nn<<=1;
                SI=CY;        
                SCK=1;
        }
}

/**********595输出************/
void out()
{
        RCK=0;
        RCK=1;
}


uint flag_value = 0;
uchar you = 0 ;

/**********主函数************/
void main()
{
        static uchar value,value1,j;
        for(i=0;i<32;i++ )
                hanzi = 0xff;         
        flag_value = 0;
        while(1)
        {

                value ++;
                if(value >= 10)         //延时进来处理
                {
                        value = 0;
                        value1 ++;
                        if(value1 <= 16)
                        {
                                value1 = 0;        
                                for(j=0;j<15;j++)
                                {
                                        hanzi[j*2+1] = hanzi[j*2+3] ;                                                                                
                                        hanzi[j*2] = hanzi[j * 2+2];
                                }
                                hanzi[30] = table[you][flag_value * 2];
                                hanzi[31] = table[you][flag_value * 2 + 1];
                                flag_value ++;
                                if(flag_value >= 16)
                                {
                                        flag_value = 0;        
                                        you ++;
                                        if(you >= geshu)        //字全部显示完了
                                                you = 0;
                                }                                
                        }
                }


                for(i=0;i<16;i++)
                {
                        out();                         //595输出
                        P2 = we / 256;
                        P0 = we % 256;        
                        send_byte(hanzi[i*2])        ;                 //
                        send_byte(hanzi[i*2+1])        ;                 //
                        delay_1ms(1);
                }
        }
}


致   谢
        此设计及论文是在*888*老师悉心指导和大力支持下完成的,*888*老师以其严谨求实的治学态度、高度的敬业精神、兢兢业业的工作作风和大胆创新的进取精神对我产生重要影响。在论文的写作过程中,也得到了许多同学的宝贵建议,同时还有那些与我一起工作奋斗的兄弟姐妹,所以在此,我要一并致以诚挚的谢意。感谢所有关心、支持、帮助过我的良师益友。

元件清单
STC89C52                        1
40DIP座                        1
30P电容                        2
12MHZ晶振                     1
10K电阻                        1
10uf电容                       1
排座                           3
自锁开关                        1
10CM*10CM电路板               1
导线                            若干
排针                            1
74HC595                         2
74HC154                         1
8550 16
2K电阻                          16
470欧电阻                        16
28DIP座                          1
16DIP座                          2
电池盒                            1
8*8红色点阵块                    4

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:99188 发表于 2016-6-13 22:00 | 只看该作者
学长,您有详细的16*16点阵资料吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表