×32点阵led模块显示屏设计方案 本文关键词:点阵,设计方案,显示屏,模块,led
×32点阵led模块显示屏设计方案 本文简介:目录摘要I目录II第一章绪论11.1课题来源11.2设计任务及要求1第二章系统方案设计32.1.系统的总体设计32.2各模块的设计。32.2.1.核心控制模块的的设计32.2.2.光笔设计32.2.3.显示方案的设计42.2.4.点阵显示模式设计4第三章系统硬件设计53.1光笔的设计53.232×3
×32点阵led模块显示屏设计方案 本文内容:
目
录
摘要I
目录II
第一章
绪论1
1.1课题来源1
1.2设计任务及要求1
第二章
系统方案设计3
2.1.系统的总体设计3
2.2各模块的设计。3
2.2.1.核心控制模块的的设计3
2.2.2.光笔设计3
2.2.3.显示方案的设计4
2.2.4.点阵显示模式设计4
第三章
系统硬件设计5
3.1光笔的设计5
3.2
32×32LED点阵的连接6
3.3
32×32LED点阵的驱动控制电路7
3.4
显示电路部分功能及原理7
3.5
键盘的使用及设计8
3.6
光照的检测与控制9
第四章
系统软件设计11
4.1主程序设计11
4.2
外中断0服务程序(坐标检测)12
4.3.外中断1服务程序(按键处理)13
4.4.LCM103驱动程序设计13
第五章
系统测试与结果15
5.1
划亮反显擦除拖移的测试和结果15
5.2屏亮自动调节测试和结果15
5.3
超时关显示节电测试和结果15
总结及展望16
致谢17
参考文献18
附录1
总电原理图(单片机系统与点阵驱动电路)19
附录2
总电原理图(32×32点阵连接电路)20
附录3
源程序21
第一章
绪论
1.1课题来源
本课题来源于全国大学生电子设计竞赛LED点阵书写显示屏,它是一种控制半导体发光二极管的显示装置,其主要功能是实现“点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移”等书写显示。
1.2设计任务及要求
设计并制作一个基于32×32点阵LED模块的书写显示屏,其系统结构如图1-1所示。在控制器的管理下,LED点阵模块显示屏工作在人眼不易觉察的扫描微亮和人眼可见的显示点亮模式下;当光笔触及LED点阵模块表面时,先由光笔检测触及位置处LED点的扫描微亮以获取其行列坐标,再依据功能需求决定该坐标处的LED是否点亮至人眼可见的显示状态,从而在屏上实现“点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移”等书写显示功能。
控制器
32×32
LED
点阵模块
光笔
图1-1
LED点阵书写显示屏系统结构示意图
设计的最终要求是:在点亮功能下当光笔接触屏上某点LED时,能即时点亮该LED;在划亮功能下当光笔快速划过时,能同步点亮划过的各LED,其速度要求2S内能划过并点亮40点LED;在反显功能下能对屏上显示的信息实现反向显示;在屏幕擦除功能下能实现对屏上所显示信息整屏擦除;在笔画擦除功能下,能用光笔擦除屏上所显汉字的笔画;在连写多字功能下,能结合自选的擦除方式,在30S内以划亮方式写出四个汉字且存入机内;在对象拖移功能下,能用光笔将选定显示内容在屏上进行拖移,先用光笔以划亮方式在屏上圈定欲拖移显示对象,再用光笔将该对象拖移到屏上另一位置;当光强改变时,能自动连续调节屏上显示亮度;当光笔连续未接触屏面的时间超过1-5MIN时,自动关闭屏上显示,并使系统进入休眠模式。
第二章
系统方案设计
2.1.系统的总体设计
根据课题要求,LED点阵书写显示屏由主控模块,按键电路、LED点阵模块、光笔电路及LED点阵驱动显示等部分组成。系统框图如图2-1所示:
按键
MCU
驱动电
路
LED点阵
光笔检
测
LCD
显示
光强检
测
图2-1系统框图
2.2各模块的设计。
2.2.1.核心控制模块的的设计
核心控制模块是系统的大脑,控制着系统的所有输入输出、计算、判断与决策。“LED点阵书写显示屏”检测精度要求高且数据存储容量大,选择适合的控制模块,能确保其快速是实现稳定及达到系统要求的基本条件。使用STC系列单片机,该系列单片机是高集成单片机,功能和性能都要比51系列强大很多。比如STC11F32是1T单片机,速度是AT89S51的12倍。而且内部集成了内置振荡器和复位,EEPROM、ADC、PWM、四态I/O接口。
2.2.2.光笔设计
光笔设计的关键是选择合适的传感器件,只有具有很高的灵敏度和一定的响应时间的传感器才能完成系统的要求及功能。
方案一:采用核心部件为光敏电阻制成的光笔检测系统。光敏电阻是将光能转换为电能的一种传感器件,它是构成光电式传感器的主要部件。光敏电阻结构简单、使用方
便、价格便宜,但经调试发现其响应时间长,不易检测。
方案二:采用光敏二极管,与光敏电阻相比有较好的高频特性,具有一定的可靠性,功耗低.相比于光敏电阻而言灵敏度较差,需要较高倍数的放大器才能实现精准识别的效果。
方案三:采用光敏三极管,其工作原理与光敏二极管相似。但光敏三极管除了具有光敏二极管能将光信号转换成电信号的功能外,还有对电信号放大的功能。所以其灵敏度更高,响应时间快。
基于以上分析,我们采用光敏三极管作为光笔的检测部件。
2.2.3.显示方案的设计
采用LCD液晶显示器。LCD有明显的优点:微功耗、尺寸小,超薄轻巧、显示信息量大、字迹清晰、美观、视觉舒适。使整个控制系统更加人性化。采用LCM301液晶显示器,其是串行口显示,所需I/O口较少,节省了资源,焊接电路时也较为方便。
2.2.4.点阵显示模式设计
将点阵的驱动电源分为两路,一路为正常电压,另一路通过硬件电路调节恰好能使点阵处于微亮状态。结合软件实现点阵的显示模式的改变。这样节省了资源的同时,也节约了时间
第三章
系统硬件设计
3.1光笔的设计
光笔用光电三极管3DU33型光敏三极管检测点阵屏发光的强弱变化电压信号,LM393为比较器。由于点阵的光强相对较弱,通过光电三极管的电流很小,通过串接硅二极管来提升光电三极管发射极电压,方便后级比较器作业,便于单片机检测信号。光笔原理图如下图3-1所示:
图3-1光笔原理图
在一空的笔壳内,将光敏三极管放置在笔壳底端,光敏三极管的引脚从一个与其直径等宽的空管引出至空管的顶部,并在其中一引脚中接一弹片,在接近的地方用铜片贯穿空管且正好卡在笔管的内部。与此同时,用一弹簧套在空管外部,并将其底不固定,这样,当笔管在点阵屏上上下抖动时,内部光敏三极管就能很好的检测了。其结构如图3-2所示:
图3-2
光笔的结构图
3.2
32×32LED点阵的连接
经分析要想得到32×32的点阵需要用16个共阳型8×8点阵(其引脚图如图3-3所示)来构建。其方法是将点阵对应的行线和列线分别进行连接,使每一条行线引脚接一行32个LED,列线也相同。
图3-3LED点阵
3.3
32×32LED点阵的驱动控制电路
32×32
LED点阵的行信息控制用2片74HC154,构成5—32译码器,单片机口线控制其译码输出。列的微亮扫描、点亮也分别用2片74HC154,4个片选分别单独控制,微亮扫描(2.5V)、点亮(5V)电源分别通过三极管构成的开关加到点阵的列控制端。由于整屏显示是1024个灯循环亮,为提高显示亮度,限流电阻取51欧姆(取消也可以,但为了防止制作调试过程中烧坏LED灯,不取消为好),电路如图3-4所示。
微亮扫描时流过LED的电流为:
(2.5-1.8)/51=13.7mA
点亮点阵时流过LED的电流为:
(5-1.8)/51=62.7mA
流过LED电流虽然比较大,但时间很短,因此不会烧坏LED灯。
图3-4LED驱动电路
3.4
显示电路部分功能及原理
为了满足系统在工作时能准确显示光笔对应亮点所处的行列坐标值,我们采用型号为LCM103的液晶显示器显示。LCM103为10位多功能通用型8段式液晶显示模块,内含看门狗时钟发生器2种频率的蜂鸣驱动电路内置显示RAM,可显示任意字段笔画划3-4线串行接口可与任何单片机接口。其接口应用模块如图3-5所示:引脚排列图如表3-1所示。
引脚
符号
说明
输入/输出
1
VDD
正电源,必须接!
输入
2
VLCD
LCD
屏工作电压调整,可调整视角对比度,必须接!。
输入
3
/INT
WDT/定时器输出,集电极开路输出,不用可不接。
输出
4
LED
不用
输入
5
BZ
压电陶瓷蜂鸣片驱动
+极
输出
6
/BZ
压电陶瓷蜂鸣片驱动
-极
输出
7
/CS
模块片选,内部上拉,必须接!
输入
8
/RD
模块数据读出控制线,内部上拉
输入
9
/WR
模块数据/指令写入控制线,内部上拉,必须接!
输入
10
DATA
数据输入/输出,内部上拉,必须接!
输入/输出
11
VSS
负电源,接地线,必须接!
图3-5
LCD接口应用模块
表3-1
LED接口引脚排列图
注:B
处焊盘为用户需降低功耗时外加32.768KHz
晶体。A
处两焊盘分别接VDD
与VLCD。
3.5
键盘的使用及设计
键盘是使用比较简单的独立式键盘,而且具有发光二极管指示功能模块。在程序中采用中断扫描的方式,在没有键操作时CPU执行正常程序,只在有键操作时才处理键盘程序。其电路如图3-6所示:
图3-6
独立式键盘电路图
按键功能:
按键一:实现点亮等功能;
按键二:修改休眠时间;
按键三:实现多姿连写时的保存与回放;
按键四:实现整屏擦除于休眠唤醒
3.6
光照的检测与控制
经分析,想要实现当环境光强改变时能自动连续调节屏上显示亮度的要求,其关键是对点阵周围环境光照的检测与控制。我们通过硬件电路很好的完成了对光照的检测。基本原理是用LM358与光敏电阻够成一恒流源并于三极管的基极连接,当光敏电阻因光强的变化而改变其自身阻值时,三极管的基极电压也会随着变化。与其集电极连接的发光二极管的亮度也会伴随着改变,以此判断周围光强的变化。电路如图3-7所示:
。
图3-7
光照检测电路
系统软件设计
第四章
系统软件设计
4.1主程序设计
主程序包括系统初始化,点阵扫描控制,液晶显示,以及“反显”、“擦除”等功能下数据处理程序,流程图如图4-1所示。其中点阵扫描控制程序,微亮扫描控制由单片机口控制对以译码器的片选和地址输入,使点阵按行列有规律地循环点亮,由图3-3知点亮显示的列控制信息译码地址与微亮连接在一起,控制点亮的工作过程是通过判断点阵显示缓冲内容对应位的信息,控制其片选,当需要点亮时,控制片选有效,反之,控制片选无效,利用微亮扫描过程实现点亮控制。
图4-1
主程序框图
4.2
外中断0服务程序(坐标检测)
外中断0是作为光笔的检测使用,由图3-2知,光笔碰触显示屏过程中,遇到发光点输出翻转的跳变信号,送给单片机中断,作为中断的触发信号,由于中断程序优先执行,打断微亮扫描过程,在中断服务程序中根据此时的行列扫描的序号,就可判断光点的坐标,进而为其他功能的实现提供依据,流程图如图4-2所示
图4-2
图4-2
中断程序框图
4.3.外中断1服务程序(按键处理)
外中断1为按键操作处理程序,如图4-3所示:
图4-3
外中断1服务程序框图
4.4.LCM103驱动程序设计
LCM103采用的是串行接口,所有数据都是在脉冲的作用下一位一位按顺序写入模块内部,由时序图知数据线上信息是在脉冲上升沿写入。写命令的数据格式是12位,单个写数据的格式是13位,写数据也可以连续写,由于每个字位占用内部3个RAM空间存放字段码,因此写数据采用连续写方式比较好。在数据连续写格式中,前面9位为模式位和模块内部RAM的起始地址,后面数据格式是每3位加1个0,取三个一组构成一个字位的信息,也是12位,这样就可以将所有写操作(命令和数据)分为写9位信息和写12位信息两个功能程序。
显示字段的排列方式与LED数码管一致,每位字段编码由8段构成(显示RAM
笔画表),占用连续的3个地址空间,但在写入格式中每个数据是4位,编写字符的字段码时要给每个数据后加0,0~9显示字符的字段码如表4-1所示。
表4-1
0~9显示字符的字段码
字符
二进制
十六进制
D0
D1
D2
D3
D0
D1
D2
D3
D0
D1
D2
D3
0
1
0
0
0
0
1
1
0
1
1
1
0
86EH
1
1
0
0
0
0
0
1
0
0
0
0
0
820H
2
1
0
0
0
1
1
0
0
1
0
1
0
8CAH
3
1
0
0
0
1
1
1
0
0
0
1
0
8E2H
4
1
0
0
0
1
0
1
0
0
1
0
0
8A4H
5
0
0
0
0
1
1
1
0
0
1
1
0
0e6H
6
0
0
0
0
1
1
1
0
1
1
1
0
0EEH
7
1
0
0
0
0
1
1
0
0
0
0
0
860H
8
1
0
0
0
1
1
1
0
1
1
1
0
8EEH
9
1
0
0
0
1
1
1
0
0
1
1
0
8E6H
地址
低
→
高
在写数据送显示之前,先按照初始化步骤进行初始化,然后写数据,程序见附录。
第五章
系统测试与结果
5.1
划亮反显擦除拖移的测试和结果
各模块均调通,将调好的模块连在一起,加上5v电压源,启动进行系统初始化。按键进入点亮模式,用光电笔在LED点阵书写显示屏上接触,可以看到接触的点点亮,LCD上显示亮点的精确坐标。用光笔快速的在书写显示屏上划过,发现划过的地方变亮,多次操作都能实现。再次按键,进入反显模式,光笔划过,发现经过的地方没有亮其他的部分高亮,反显测试正常。再次按键进入擦除模式,用光笔在屏幕上划过,显示屏亮的地方变暗了。再按一次键可以看到整屏由亮变暗,实现了擦除这一功能。最后进入多字连写模式和区域拖动模式用光笔在LED点阵显示屏上写四个字,最后在屏上循环显示。最后对写的字用笔圈起来可以用笔移动。实现了对象拖移功能。经过反复的测试,所有的功能都能很好的实现,系统正常。
5.2屏亮自动调节测试和结果
外部光环境人为地改变后,测试LED点阵书写显示屏的亮度是否发生变化如果发生变化,则表明能够自动调节,结果屏亮随外部环境的变化而改变,系统正常。
5.3
超时关显示节电测试和结果
加5v电压启动系统,对系统初始化。设定待机关显示的时间,在测试点接入万用表,不进行任何操作到设定的时间,看显示屏是否自动关闭。结果书写显示屏自动关闭,电路板测试点上的电流小于5mA。表明测试正常,完成系统要求。
总结及展望
本作品完成了题目的基本要求和发挥部分的全部要求,系统性能良好。通过对作品的各项进行了优化,使系统的性能有了提高。应用74HC154译码器设计32×32点阵的行列驱动控制信号,扫描速度满足设计要求。
虽然这次设计满足了课题的要求,但在很多方面都有许多的不足,还不能满足正常的书写需求,但在设计的过程中提高了自己学习思考的能力,让自己能更好的去面对未来的工作。
致谢
通过这次毕业设计,综合的应用并学习了自己的专业知识,得到了许多平时很难道道的知识及经验。在设计的过程中我得到了很多其他老师和同学的帮助,从人才完成了这次设计。在本论文的写作过程中,我的导师徐江海老师倾注了大量的心血,从选题到开题报告,从写作提纲,到一遍又一遍地指出每稿中的具体问题,严格把关,循循善诱,在此我表示衷心感谢。同时我还要感谢在我学习期间给我极大关心和支持的各位老师以及关心我的同学和朋友。
参考文献
[1]周航慈,周立功,朱旻等.PHILIPS
51LPC系列单片机原理及应用设计[M].北京:北京航空航天大学出版社,2001.
[2]何立民.单片机应用系统设计[M].北京:北京航空航天大学出版社,1999
[3]徐江海,单片机实用教程[M],北京:机械工业出版社,2008
[4]张毅刚,MCS-51单片机应用设计[M],哈尔滨,哈尔滨工业大学出版社,1992
附录
附录1
总电原理图(单片机系统与点阵驱动电路)
附录2
总电原理图(32×32点阵连接电路)
附录3
源程序
#include
“reg52.h“#include“intrins.h“#define
uchar
unsigned
char
#define
uint
unsigned
int
sbit
cs103=P1^0;
//
液晶
sbit
wr103=P1^1;
//
液晶
sbit
da103=P1^2;
//
液晶
sbit
csH=P2^6;//
sbit
p14=P1^4;
sbit
p15=P1^5;
sbit
p16=P1^6;
sbit
p17=P1^7;
uint
idata
zb[32][2]={0};
//点亮存储单元
uint
xdata
zb1[32][2]={0};
//第一个字存储
uint
xdata
zb2[32][2]={0};
//第二个字存储
uint
xdata
zb3[32][2]={0};
//
第三个字存储
uint
xdata
zb4[32][2]={0};
//
第四个字存储
uchar
xsdy0=2;
//
显示缓冲,低位
uchar
xsdy1=1;
uchar
xsdy2=11;
uchar
xsdy3=3;
uchar
xsdy4=10;
uchar
xsdy5=5;
uchar
xsdy6=6;
uchar
xsdy7=11;
uchar
xsdy8=8;
uchar
xsdy9=9;
//
显示缓冲,高位
uchar
hsmcs=0;
//行扫描控制
uchar
lsmcs=0;
//列扫描控制
uchar
p0hc;
//P0缓冲
uchar
p2hc;
//P2缓冲
bit
bxzb=0;
//
bit
bhzl=0;
bit
blzl=0;
//
bit
f_x_flag;
//反显状态标志
bit
zp_cc_flag;
//整屏擦除状态标志
bit
bh_cc_flag;
//笔画擦除标志
bit
lz_dx_flag;
//连字多写标志
bit
shijiang_flag;
//时间设置标志
bit
xz_bc_flag;
//写字保存标志
bit
hx_flag;
//唤醒标志
bit
xm_flag;
//休眠
bit
yjxs_flag;
uchar
js_5ms;
uchar
js_s;
uchar
js_fen;
uchar
js_fen_set=5;
uchar
clzl=0;
uint
dlzbw;
//点亮坐标位
uint
dlzbw1;
//点亮坐标位
缓冲
uchar
z_t=0;
//显示方式状态
uchar
xzgs;//写字个数
uchar
xs_s;//字符显示时间
uchar
xs_weishu;
sfr
AUXR
=
0x8e;
//扩展RAM的SFR
uint
code
lcd[]=
//字段编码
{0x86e0,0x8200,0x8ca0,0x8e20,0x8a40,0x0e60,0x0ee0,0x8600,0x8ee0,0x8e60,0x0000,0x0800};
//
0
1
2
3
4
5
6
7
8
9
空
-
void
delay(uint
x)
//12MHZ晶振延时Xms的子函数
{
uint
y=0;
while(x>0){
while(y=6){z_t=0;}
}
if(p15==0){
bh_cc_flag=0;
shijiang_flag=1;
//时间设置
}
if(p16==0){//写字保存
xz_bc_flag=1;
bh_cc_flag=0;
}
if(p17==0){
//
hx_flag=1;//唤醒
zp_cc_flag=1;//整屏擦除状态
bh_cc_flag=0;
}
}
/*************************************/
void
key()
{
uchar
m;
if(f_x_flag){
//反显状态
f_x_flag=0;
lz_dx_flag=0;
zb[0][0]=0x0000|0x0004;
zb[0][1]=~zb[0][1];
for(m=1;m<32;m++){
zb[m][0]=~zb[m][0];zb[m][1]=~zb[m][1];
}
}
if(zp_cc_flag){
//整屏擦除状态
lz_dx_flag=0;
zp_cc_flag=0;
zb[0][0]=0x0000|0x0002;
zb[0][1]=0;
for(m=1;m<32;m++){
zb[m][0]=0;zb[m][1]=0;
}
}
if(shijiang_flag){
//
shijiang_flag=0;
lz_dx_flag=0;
zb[0][0]=0x0000|0x0040;
//时间设置
js_fen++;
if(js_fen==6)
{
js_fen=1;
}
js_fen_set=js_fen;
js_s=0;
yjxs();
}
if(
xz_bc_flag){
//写字保存
xz_bc_flag=0;
xzgs++;
if(xzgs==1)
{
for(m=0;m<32;m++){
zb1[m][0]=zb[m][0];zb1[m][1]=zb[m][1];
}
}
if(xzgs==2)
{
for(m=0;m<32;m++){
zb2[m][0]=zb[m][0];zb2[m][1]=zb[m][1];
}
}
if(xzgs==3)
{
for(m=0;m<3