LED点阵书写显示屏.docx
《LED点阵书写显示屏.docx》由会员分享,可在线阅读,更多相关《LED点阵书写显示屏.docx(34页珍藏版)》请在冰豆网上搜索。
![LED点阵书写显示屏.docx](https://file1.bdocx.com/fileroot1/2022-11/22/67cf05b7-7e63-47f2-af8f-2095b1ee8121/67cf05b7-7e63-47f2-af8f-2095b1ee81211.gif)
LED点阵书写显示屏
LED点阵显示屏的设计
摘要
本设计是基于16×16点阵LED电子显示屏的设计。
设计以STC89C52RC为核心,介绍了以它为操纵系统的LED点阵电子显示屏的动态设计和开发进程。
本设计要紧模块组成:
主控CPU模块、按键输入模块,光笔检测电路,LCD信息显示器,16×16点阵LED点阵显示与驱动模块。
设计中16×16点阵LED点阵显示与驱动模块中,CPU输出信号先经74HC245进行锁存,再输出信号经由38译码器74HC138译码选通APM4953驱动行,由移位寄放器74HC595作为列驱动,单片机操纵系统程序采纳C语言进行模块化编程,操纵各显示点对应LED阳极和阴极端的电平,就能够够有效的操纵各显示点的亮灭。
文中详细介绍了LED点阵显示的硬件设计思路、硬件电路各个部份的功能及原理、相应软件的程序设计,和利用说明等。
所显示字符的点阵数据能够自行编写(即直接点阵画图),也可从标准字库中提取。
经实践证明,该系统显示误差小,性能稳固,结构合理,扩展能力强。
关键词:
STC89C52单片机;LED;点阵书写显示;动态显示;C语言。
一、技术指标
LED显示屏是一种通过操纵半导体发光二极管的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信号等各类信息的显示屏幕。
图文显示屏可与运算机同步显示汉字、英文文本和图形;视频显示屏采纳微型运算机进行操纵,图文、图像并茂,以实时、同步、清楚的信息传播方式播放各类信息,还可显示二维、三维动画、录像、电视、VCD节目和现场实况。
LED显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,普遍应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业治理和其它公开场合。
本设计基于LED点阵的一般显示成效加上光笔检测模块,实现自由书写显示功能。
它的优势:
亮度高、工作电压低、功耗小、微型化、易与集成电路匹配、驱动简单、寿命长、耐冲击、性能稳固。
1.2功能实现
(1)在“点亮”功能下,当光笔接触屏上某点LED时,能即时点亮该点LED,并在操纵器上同步显示该点LED的行列坐标值(左上角定为行列坐标原点)。
(2)在“划亮”功能下,当光笔在屏上快速划过时,能同步点亮划过的各点LED,其速度要求2s内能划过并点亮20点LED。
(3)在“反显”功能下,能对屏上显示的信息实现反相显示(即:
字体笔画处不亮,无笔画处高亮)。
(4)在“整屏擦除”功能下,能实现对屏上所显示信息的整屏擦除。
(5)自概念显示字符。
二、方案论证
2.1主控CPU的选择与比较
一、STM32(STM32F103VCT6):
具有多功能按时器,低功耗,速度高,256KHz嵌入式闪存寄放器,稳固性强等特点,具有最高72MHz的CPU工作频率和很强的操纵和运算能力,能够实现点阵屏的高速扫描的一些复杂的操纵和运算功能。
但相较于STC89C58其功能实现复杂。
二、CPLD(EPM240T100C5):
具有丰硕的I/O口、内部逻辑和连线资源、运行速度快、能够显示大量的信息,但CPLD实现运算功能复杂,在该系统中,需要显示的信息量较少,可是操纵和运算功能较多,用CPLD实现一些运算功能复杂。
3、STC89C52:
CPU采纳低本钱、多功能的STC89C52单片机。
STC89C52是一种低功耗、高性能CMOS8位微操纵器,具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗按时器,内置4KBEEPROM,MAX810复位电路,3个16位按时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。
该单片机性价比很高,且相对容易操纵,大体能够实现所需功能。
经比较,选择STC89C52作为主控芯片。
2.2光笔检测的选择与比较
1、光敏电阻:
光谱响应范围宽,体积小,但灵敏度低,响应速度慢,受温度阻碍大,很难确信点亮点坐标。
2、光敏二极管(2CU2B):
光电流小,响应时刻短,利用于要求光电流与照度成线性关系或要求工作频率高的电路,但其灵敏度较低,光电流较小,不易判定所在处LED在点阵屏中的坐标。
光敏三极管(3DU35C):
光电流大,响应时刻短,且其灵敏度超级高,易判定所在处LED在点阵屏中的坐标。
经比较,选择光敏三极管作为光笔检测灵敏器件。
2.3LCD显示屏的选择
考虑到有系统低功耗的要求,采纳价钱低廉的1602液晶作为显示。
LCD功耗比较低,不需要循环扫描,且信息量大,能灵活多变的显示多种信息。
2.4键盘输入模块的选择
键盘采纳4×4标准矩阵键盘,用8个I/O口操纵16个键,4个I/O口接4行,另外4个接4列,通过行列扫描取得按键值。
2.516×16点阵屏模块的选择
由4块8×8单色LED点阵(红色)模块组合成16×16的LED点阵屏。
用红外光电三极管自制光笔。
在检测时依次点亮红色LED,当点亮到某个LED时,若是此光阴笔放在该LED时,这时红外光电三极管的阻值会发生转变,通过相应的检测电路能够得出一个高低电平的转变,单片机检测到信号转变时就能够够判定光笔的当前位置。
该方案简单易行,对光笔位置判断的灵敏度较高,抗外界干扰能力强。
采用红色点阵和红外光电三极管能够有效地减少环境可见光对光笔中光电三极管的干扰。
三、系统简述
本设计要紧模块组成:
主控CPU模块、按键输入模块,光笔检测电路,LCD信息显示器,16×16点阵LED点阵显示与驱动模块。
利用具有价廉易购的STC89C52单片机编程操纵,通过修改程序可方便实现系统升级。
系统的框图结构如下:
四、硬件设计
图1系统原理框图
系统要紧部件包括8×8的LED点阵屏、STC89C52RC单片机、方向可控的八路缓冲器74HC24五、38译码器74HC138、P沟道的增强型场效应管APM4953、移位寄放器74HC59五、液晶显示器1602,双电压比较器LM393,光敏三极管3DU5C。
辅助元件包括电阻、电容、晶振、电源、按键等。
4.1系统各器件简介
4.1.1STC89C52RC单片机
STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机械周期和6时钟/机械周期能够任意选择。
图STC89C52RC引脚图
STC89C52RC引脚功能说明
VCC(40引脚):
电源电压
VSS(20引脚):
接地
P0端口(P0.0~P0.7,39~32引脚):
P0口是一个漏极开路的8位双向I/O口。
作为输出端口,每一个引脚能驱动8个TTL负载,对端口P0写入“1”时,能够作为高阻抗输入。
在访问外部程序和数据存储器时,P0口也能够提供低8位地址和8位数据的复用总线。
现在,P0口内部上拉电阻有效。
在FlashROM编程时,P0端口接收指令字节;而在校验程序时,那么输出指令字节。
验证时,要求外接上拉电阻。
P1端口(P1.0~P1.7,1~8引脚):
P1口是一个带内部上拉电阻的8位双向I/O口。
P1的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。
P1口作输入口利历时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流(
)。
P2端口(P2.0~P2.7,21~28引脚):
P2口是一个带内部上拉电阻的8位双向I/O端口。
P2的输出缓冲器能够驱动(吸收或输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。
P2作为输入口利历时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(
)。
在对FlashROM编程和程序校验期间,P2也接收高位地址和一些操纵信号。
P3端口(P3.0~P3.7,10~17引脚):
P3是一个带内部上拉电阻的8位双向I/O端口。
P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。
P3做输入口利历时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流(
)。
在对FlashROM编程或程序校验时,P3还接收一些操纵信号。
P3口除作为一样I/O口外,还有其他一些复用功能,如下表所示:
P3口引脚复用功能
引脚号
复用功能
RXD(串行输入口)
TXD(串行输出口)
(外部中断0)
(外部中断1)
T0(定时器0的外部输入)
T1(定时器1的外部输入)
(外部数据存储器写选通)
(外部数据存储器读选通)
XTAL1(19引脚):
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2(18引脚):
振荡器反相放大器的输入端。
4.1.2方向可控的八路缓冲器74HC245
总线收发器,典型的CMOS型三态缓冲门电路。
由于单片机或CPU的数据/地址/操纵总线端口都有必然的负载能力,若是负载超过其负载能力,一样应加驱动器。
要紧用于实现数据总线的双向异步通信。
为了爱惜脆弱的主控芯片,通常在主控芯片的并行接口与外部受控设备的并行接口间添加缓冲器。
当主控芯片与受控设备之间需要实现双向异步通信时,自然就得选用双向的八路缓冲器了,245确实是面向这种需求的。
常见于同并口液晶屏、并口打印机、并口传感器或通信模块等设备的接口上。
图374HC595引脚图
引脚概念:
第1脚DIR,为输入输出端口转换用,DIR=“1”高电平常信号由“A”端输入“B”端输出,DIR=“0”低电平常信号由“B”端输入“A”端输出。
第2~9脚“A”信号输入输出端,A0=B0,A7=B7,A0与B0是一组,若是DIR=“1”OE=“0”那么A1输入B1输出,其它类同。
若是DIR=“0”OE=“0”那么B1输入A1输出,其它类同。
第11~18脚“B”信号输入输出端,功能与“A”端一样,再也不描述。
第19脚OE,使能端,假设该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也确实是起到开关的作用。
第10脚GND,电源地。
第20脚VCC,电源正极。
真值表
控制输入
运行
G
DIR
L
L
B数据到A总线
L
H
A数据到B总线
H
X
隔开
H=高电平L=低电平×=不定
4.1.338译码器74HC138
74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。
可同意3位二进制加权地址输入(A0,A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。
74HC138特有3个使能输入端:
两个低有效(E1和E2)和一个高有效(E3)。
除非E1和E2置低
且E3置高,不然74HC138将维持所有输出为高。
图474HC138引脚图
4.1.4P沟道的增强型场效应管APM4953
行驱动管,功率管。
每一显示行需要的电流是比较大的,要利用行驱动管,每片4953能够驱动2个显示行。
其内部是两个CMOS管,一、3脚VCC,二、4脚操纵脚,2脚操纵7、8脚的输出,4脚操纵五、6脚的输出,只有当二、4脚为“0”时,7、八、五、6才会输出,不然输出为高阻状态。
图54953引脚图及内部结构
4.1.5移位寄放器74HC595
74HC595是硅结构的CMOS器件,兼容低电压TTL电路。
具有8位移位寄放器和一个存储器,三态输出功能。
移位寄放器和存储器是别离的时钟。
数据在SHcp的上升沿输入到移位寄放器中,在STcp的上升沿输入到存储寄放器中去。
若是两个时钟连在一路,那么移位寄放器老是比存储寄放器早一个脉冲。
移位寄放器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄放器有一个并行8位的,具有三态的总线输出,当使能OE时(为低电平),存储寄放器的数据输出到总线。
8位串行输入/输出或并行输出移位寄放器,具有高阻关断三态。
图674HC595引脚图
表274HC595功能表
输入
输出
功能
SHCP
STCP
OE
MR
DS
Q7’
Qn
×
×
L
↓
×
L
NC
MR为低电平时仅仅影响移位寄存器
×
↑
L
L
×
L
L
空移位寄存器到输出寄存器
×
×
H
L
×
L
Z
清空移位寄存器,并行输出为高阻状态
↑
×
L
H
H
Q6
NC
逻辑高电平移入移位寄存器状态0,包含所有的移位寄存器状态移入
×
↑
L
H
×
NC
Qn’
移位寄存器的内容到达保持寄存器并从并口输出
↑
↑
L
H
×
Q6’
Qn’
移位寄存器内容移入,先前的移位寄存器的内容到达保持寄存器并出
4.1.6液晶显示器1602
液晶显示器以其微功耗、体积小、显示内容丰硕、超薄轻巧的诸多优势,在各类仪表和低功耗系统中取得普遍的应用。
功能:
位数多,可显示32位;显示内容丰硕,可显示所有数字和大、小写字母;程序简单,若是用数码管动态显示,会占用很多时刻来刷新显示,而1602自动完成此功能。
4.1.7双电压比较器LM393
LM393是双电压比较器集成电路。
该电路的特点如下:
工作温度范围:
0°C--+70°C;工作电源电压范围宽,单电源、双电源都可工作,单电源:
2~36V,双电源:
±1~±18V;消耗电流小,ICC=0.8mA;输入失调电压小,VIO=±2mV;共模输入电压范围宽,VIC=0~VCC-1.5V;输出与TTL,DTL,MOS,CMOS等兼容;输出能够用开路集电极连接“或”门。
图7LM393内部结构图
4.1.8硅光敏三极管3DU5C
结构:
NPN扩散型光敏三极管是具有放大能力的光电转换三极管,普遍应用与各类高空电路中。
在无光照射时,光敏三极管处于截止状态,无电信号输出。
当有光信号照射其基极(受光窗口)时,光敏三极管导通,从发射极或集电极输出放大后的电信号。
其要紧技术参数为:
反向击穿电压:
15V;
最高工作电压:
10V;
暗电流:
0.3uA;
—1mA;
功耗:
30mW;
峰值波长:
880nm。
图8光敏三极管等效电路
4.2各部份电路设计
4.2.1主控模块
主控模块包括LCD液晶显示,键盘扫描模块及CPU操纵模块。
通过通过编程,当按下相应按键时,LCD模块实现相应功能及LED扫描点坐标的显示。
操纵模块有晶振电路及复位电路组成。
图9
4.2.2LED点阵显示模块
LED模块为本设计的要紧模块。
由锁存器、行驱动及列驱动组成。
其中,所有了LED灯驱动信号由操纵模块P2口送出,经锁存器74HC245锁存再送至4块移位寄放器74HC595的4个公共操纵端,驱动列;锁存器的另外三个输出接至38译码器74HC138,经译码后的信号通过P沟道的增强型场效应管APM4953驱动相应的行。
图10
4.2.3光笔模块
光笔模块要紧由光敏三极管3DU5C及电压比较器LM393组成。
用红外光电三极管自制光笔,光笔检测电路如下图。
图中Q1是用红外光电三极管,用来完成对16×16点阵红色LED灯点亮或熄灭的检测;R4、R6用于对Q2进行限流,另外还能够调剂R6来提高或减小输出的电压值;R一、R3是用于给U1(比较器)的同相端提供基准电压值,通过它跟搜集信息输出来的电压值进行比较(U2>U3,Uout=Umin),R2是U1的输出上拉电阻。
工作原理如下:
当红光照到红外光电三极管上时,红外光电三极管的电阻变小,其射极电压升高,现在2脚电压比3脚电压高,比较器1端输出为低电平。
当电容C1充电一段时刻以后,比较器2脚电压比3脚电压低,比较器1端输出为高电平。
由此,当检测到光信号时,该电路将产生一个脉冲信号。
由于在电路中加了耦合电容,可有效地避免环境对光笔的阻碍。
图11
五、软件设计
程序采纳模块化编程方式,分为主程序,按键扫描程序,LED扫描程序,LCD1602液晶显示程序,延时程序,点亮模式程序,反显模式程序,整屏擦除及显示自概念字符程序。
5.1主程序
主程序中要紧执行键盘扫描程序。
5.2键盘扫描程序
在键盘扫描程序中进行键盘扫描,当键盘扫描到某个按键按下时,1602显示相应功能模式,同时对应模式的LED点阵执行相应功能。
5.31602液晶显示程序
要紧为液晶的初始化,及概念相关模式显示。
5.4延时程序
将所有全局变量及数组的概念全都放在那个.h文件中,同时概念50us延时和50ms延时。
5.5点亮模式程序
按行逐列扫描(即点亮),当光笔检测到信号时,停止扫描,依照具体功能将现在的点延时显示相应时刻(操纵扫描速度),并将此点的行列值赋给全局变量x一、x2,用于1602中的坐标显示。
5.6画线模式程序
检测信号方式同点亮模式。
此模式中点显示为50ms,实现快速扫描的要求。
先概念4个全局数组liea[],lieb[],liec[],lied[]保留列值,初值全设为0xff(即相应列灭),当扫描到信号时,将扫描到的点赋给相应的全局数组(即检测到的信号保留在这四个数值中)。
此程序用用按时器中断来计时检测光笔信号,进入中断时开始计时count0,当光笔检测到信号时,计时count0清零(即光笔画线为完成),不然当count0计时到100(即5秒,说明光笔已完成画线)时显示检测到的信号,延时显示3s,只有当键盘检测到整屏擦除功能按键按下时才终止并清除检测到的信号以便下一次的画线。
5.7整屏擦除模式程序
当键盘检测到整屏擦除功能按键按下时清除画线模式下检测检测到的信号并显示“NO”。
5.8反显模式程序
在画线模式下,将检测到的信号点反显。
5.9自概念字符显示程序
相应键按下时显示相应字符。
六、安装调试
52单片机,将单片机插入到目标板中,连好线。
在各模式下,大体能实现相应功能,光笔检测到信号时1602实时显示亮点坐标。
测试结果说明,本系统实现了预期功能。
附录1程序流程图
图12主程序流程图
附录2源程序
//**************.h头文件*******************************
//LED点阵书写显示屏
////////////1.延时//////////////////////////////
#ifndef__DELAY_H__
#define__DELAY_H__
#defineucharunsignedchar
#defineuintunsignedint
externucharx1,x2;//行列坐标点
externucharkeyx;//用于判定键盘是不是有按下,在超时关显示用
externucharcodedot[];//保存哪一列亮,作扫描用
externucharliea[];//保存扫描到的列,作显示用
externucharlieb[];
externucharliec[];
externucharlied[];
voiddelay_50us(uintt);
voiddelay_50ms(uintt);
#endif
#ifndef__LCD1602_H__
#define__LCD1602_H__
#include"delay.h"
sbitrs=P2^3;
sbitrw=P3^2;
sbitelcd=P3^3;
voidinit(void);//lcd初始化函数
voidwr_1602com(ucharcom);//1602写指令函数
voidwr_1602dat(uchardat);//1602写数据函数
#endif
#ifndef__LED_H__
#define__LED_H__
#include"delay.h"
sbitaled=P2^0;
sbitbled=P2^1;
sbitcled=P2^2;
sbitser=P2^4;
sbitsrclk=P2^5;
sbiteled=P2^6;
sbitrclk=P2^7;
sbitgb=P3^7;
voiddisplay_595();//送显示
voidwr_595(uchar);//写数据
voidledscan1(void);
#endif
#ifndef__KEYBOARD_H__
#define__KEYBOARD_H__
#include"delay.h"
voidkey_scan(void);
voidxianshi(uchar*p1,uchar*p2);
voiddisplay_zb(void);
#endif
////////////整屏擦除//////////////////////////////
#ifndef__eraall_H__
#define__eraall_H__
voideraall(void);
voiddis_led(ucharp[][9]);
#endif
////////////反显//////////////////////////////
#ifndef__ECHO_H__
#define__ECHO_H__
voide_cho(void);
#endif
#ifndef__LIGHT_H__
#define__LIGHT_H__
#include"delay.h"
#include"led.h"
voidlie0(ucharz,ucharx,uchary);
voidlight(uchark);
#endif
/////////////////延时函数////////////////////////
#include"delay.h"
voiddelay_50us(uintt)//延时50us函数
{
ucharj;
for(;t>0;t--)
for(j=19;j>0;j--);
}
voiddelay_50ms(uintt)//延时50ms函数
{
uintj;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
/////////////////////lcd声明部份////////////////////////
#include
#include"delay.h"
#include"lcd1602.h"
voidinit(void)//lcd初始化函数
{
delay_50us(30);
wr_1602com(0x38);
delay_50us(10);
wr_1602com(0x38);
delay_50us(10);
wr_1602com(0x38);
wr_1602com(0x38);
wr_1602com(0x08);
wr_1602com(0x01);
wr_1602com(0x06);
wr_1602com(0x0c);
}
voidwr_