《led点阵显示屏论文-led汉字点阵论文-led点阵显示论文.doc》由会员分享,可在线阅读,更多相关《led点阵显示屏论文-led汉字点阵论文-led点阵显示论文.doc(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、绪论摘要系统以高速单片机STCF1132为核心,设计并制作了一个基于3232点阵LED模块显示屏。该点阵可以实现扫描微亮和显示点亮两种工作模式,在扫描过程中通过自制光笔检测,获取行列坐标信息,实现“点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移”等书写显示功能,并且通过按键可以实现不同功能之间的切换。同时还能够根据环境光强的变化,自动连续调节显示屏上显示的亮度。设计方案运用了4-16线译码器74HC154驱动点阵的行和列,通过单片机的控制实现各种显示功能,显示屏亮度的自动调节采用光敏电阻检测环境光强,通过A/D转换、D/A转换实现对显示亮度的自动调节。关键词:LED点阵 单片机 74
2、HC15433目录摘要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.2 3232LED点阵的连接63.3 3232LED点阵的驱动控制电路73.4 显示电路部分功能及原理73.5 键盘的使用及设计83.6 光照的检测与控制9第四章 系统软件设计114.1主程序设计114.2 外中断0服务程序(坐标检测)124.3.外中断1服务程序(按键处理)134.4LCM103驱
3、动程序设计13第五章 系统测试与结果155.1 划亮反显擦除拖移的测试和结果155.2屏亮自动调节测试和结果155.3 超时关显示节电测试和结果15总结及展望16致谢17参考文献18附录1 总电原理图(单片机系统与点阵驱动电路)19附录2 总电原理图(3232点阵连接电路)20附录3 源程序21第一章 绪论1.1课题来源 本课题来源于全国大学生电子设计竞赛LED点阵书写显示屏,它是一种控制半导体发光二极管的显示装置,其主要功能是实现“点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移”等书写显示。1.2设计任务及要求设计并制作一个基于3232点阵LED模块的书写显示屏,其系统结构如图1-
4、1所示。在控制器的管理下,LED点阵模块显示屏工作在人眼不易觉察的扫描微亮和人眼可见的显示点亮模式下;当光笔触及LED点阵模块表面时,先由光笔检测触及位置处LED点的扫描微亮以获取其行列坐标,再依据功能需求决定该坐标处的LED是否点亮至人眼可见的显示状态,从而在屏上实现“点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移”等书写显示功能。控制器3232 LED 点阵模块 光笔 图1-1 LED点阵书写显示屏系统结构示意图设计的最终要求是:在点亮功能下当光笔接触屏上某点LED时,能即时点亮该LED;在划亮功能下当光笔快速划过时,能同步点亮划过的各LED,其速度要求2S内能划过并点亮40点L
5、ED;在反显功能下能对屏上显示的信息实现反向显示;在屏幕擦除功能下能实现对屏上所显示信息整屏擦除;在笔画擦除功能下,能用光笔擦除屏上所显汉字的笔画;在连写多字功能下,能结合自选的擦除方式,在30S内以划亮方式写出四个汉字且存入机内;在对象拖移功能下,能用光笔将选定显示内容在屏上进行拖移,先用光笔以划亮方式在屏上圈定欲拖移显示对象,再用光笔将该对象拖移到屏上另一位置;当光强改变时,能自动连续调节屏上显示亮度;当光笔连续未接触屏面的时间超过1-5MIN时,自动关闭屏上显示,并使系统进入休眠模式。第二章 系统方案设计2.1系统的总体设计根据课题要求,LED点阵书写显示屏由主控模块,按键电路、LED点
6、阵模块、光笔电路及LED点阵驱动显示等部分组成。系统框图如图2-1所示:按键MCU驱动电 路LED点阵光笔检 测LCD显示光强检 测 图2-1系统框图2.2各模块的设计。2.2.1核心控制模块的的设计核心控制模块是系统的大脑,控制着系统的所有输入输出、计算、判断与决策。“LED点阵书写显示屏”检测精度要求高且数据存储容量大,选择适合的控制模块,能确保其快速是实现稳定及达到系统要求的基本条件。使用STC系列单片机,该系列单片机是高集成单片机,功能和性能都要比51系列强大很多。比如STC11F32是1T单片机,速度是AT89S51的12倍。而且内部集成了内置振荡器和复位,EEPROM、ADC、PW
7、M、四态I/O接口。2.2.2光笔设计光笔设计的关键是选择合适的传感器件,只有具有很高的灵敏度和一定的响应时间的传感器才能完成系统的要求及功能。方案一:采用核心部件为光敏电阻制成的光笔检测系统。光敏电阻是将光能转换为电能的一种传感器件,它是构成光电式传感器的主要部件。光敏电阻结构简单、使用方便、价格便宜,但经调试发现其响应时间长,不易检测。方案二:采用光敏二极管,与光敏电阻相比有较好的高频特性,具有一定的可靠性,功耗低.相比于光敏电阻而言灵敏度较差,需要较高倍数的放大器才能实现精准识别的效果。方案三:采用光敏三极管,其工作原理与光敏二极管相似。但光敏三极管除了具有光敏二极管能将光信号转换成电信
8、号的功能外,还有对电信号放大的功能。所以其灵敏度更高,响应时间快。基于以上分析,我们采用光敏三极管作为光笔的检测部件。2.2.3显示方案的设计采用LCD液晶显示器。LCD有明显的优点:微功耗、尺寸小,超薄轻巧、显示信息量大、字迹清晰、美观、视觉舒适。使整个控制系统更加人性化。采用LCM301液晶显示器,其是串行口显示,所需I/O口较少,节省了资源,焊接电路时也较为方便。2.2.4点阵显示模式设计将点阵的驱动电源分为两路,一路为正常电压,另一路通过硬件电路调节恰好能使点阵处于微亮状态。结合软件实现点阵的显示模式的改变。这样节省了资源的同时,也节约了时间第三章 系统硬件设计3.1光笔的设计光笔用光
9、电三极管3DU33型光敏三极管检测点阵屏发光的强弱变化电压信号,LM393为比较器。由于点阵的光强相对较弱,通过光电三极管的电流很小,通过串接硅二极管来提升光电三极管发射极电压,方便后级比较器作业,便于单片机检测信号。光笔原理图如下图3-1所示:图3-1光笔原理图在一空的笔壳内,将光敏三极管放置在笔壳底端,光敏三极管的引脚从一个与其直径等宽的空管引出至空管的顶部,并在其中一引脚中接一弹片,在接近的地方用铜片贯穿空管且正好卡在笔管的内部。与此同时,用一弹簧套在空管外部,并将其底不固定,这样,当笔管在点阵屏上上下抖动时,内部光敏三极管就能很好的检测了。其结构如图3-2所示:图3-2 光笔的结构图3
10、.2 3232LED点阵的连接经分析要想得到3232的点阵需要用16个共阳型88点阵(其引脚图如图3-3所示)来构建。其方法是将点阵对应的行线和列线分别进行连接,使每一条行线引脚接一行32个LED,列线也相同。图3-3LED点阵3.3 3232LED点阵的驱动控制电路3232 LED点阵的行信息控制用2片74HC154,构成532译码器,单片机口线控制其译码输出。列的微亮扫描、点亮也分别用2片74HC154,4个片选分别单独控制,微亮扫描(2.5V)、点亮(5V)电源分别通过三极管构成的开关加到点阵的列控制端。由于整屏显示是1024个灯循环亮,为提高显示亮度,限流电阻取51欧姆(取消也可以,但
11、为了防止制作调试过程中烧坏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线串行接口可与任何单片机接口。其接口应用
12、模块如图3-5所示:引脚排列图如表3-1所示。引脚符号说明输入/输出1VDD正电源,必须接! 输入2VLCDLCD 屏工作电压调整,可调整视角对比度,必须接!。输入3/INTWDT/定时器输出,集电极开路输出,不用可不接。输出4LED不用输入5BZ压电陶瓷蜂鸣片驱动 +极输出6/BZ压电陶瓷蜂鸣片驱动 极 输出7/CS模块片选,内部上拉,必须接! 输入8/RD模块数据读出控制线,内部上拉输入9/WR模块数据/指令写入控制线,内部上拉,必须接! 输入10DATA数据输入/输出,内部上拉,必须接! 输入/输出11VSS负电源,接地线,必须接!图3-5 LCD接口应用模块表3-1 LED接口引脚排列
13、图注:B 处焊盘为用户需降低功耗时外加32.768KHz 晶体。A 处两焊盘分别接VDD 与VLCD。3.5 键盘的使用及设计键盘是使用比较简单的独立式键盘,而且具有发光二极管指示功能模块。在程序中采用中断扫描的方式,在没有键操作时CPU执行正常程序,只在有键操作时才处理键盘程序。其电路如图3-6所示:图3-6 独立式键盘电路图按键功能:按键一:实现点亮等功能;按键二:修改休眠时间;按键三:实现多姿连写时的保存与回放;按键四:实现整屏擦除于休眠唤醒3.6 光照的检测与控制经分析,想要实现当环境光强改变时能自动连续调节屏上显示亮度的要求,其关键是对点阵周围环境光照的检测与控制。我们通过硬件电路很
14、好的完成了对光照的检测。基本原理是用LM358与光敏电阻够成一恒流源并于三极管的基极连接,当光敏电阻因光强的变化而改变其自身阻值时,三极管的基极电压也会随着变化。与其集电极连接的发光二极管的亮度也会伴随着改变,以此判断周围光强的变化。电路如图3-7所示:。图3-7 光照检测电路系统软件设计第四章 系统软件设计4.1主程序设计 主程序包括系统初始化,点阵扫描控制,液晶显示,以及“反显”、“擦除”等功能下数据处理程序,流程图如图4-1所示。其中点阵扫描控制程序,微亮扫描控制由单片机口控制对以译码器的片选和地址输入,使点阵按行列有规律地循环点亮,由图3-3知点亮显示的列控制信息译码地址与微亮连接在一
15、起,控制点亮的工作过程是通过判断点阵显示缓冲内容对应位的信息,控制其片选,当需要点亮时,控制片选有效,反之,控制片选无效,利用微亮扫描过程实现点亮控制。图4-1 主程序框图4.2 外中断0服务程序(坐标检测)外中断0是作为光笔的检测使用,由图3-2知,光笔碰触显示屏过程中,遇到发光点输出翻转的跳变信号,送给单片机中断,作为中断的触发信号,由于中断程序优先执行,打断微亮扫描过程,在中断服务程序中根据此时的行列扫描的序号,就可判断光点的坐标,进而为其他功能的实现提供依据,流程图如图4-2所示图4-2 图4-2 中断程序框图4.3.外中断1服务程序(按键处理)外中断1为按键操作处理程序,如图4-3所
16、示:图4-3 外中断1服务程序框图4.4LCM103驱动程序设计LCM103采用的是串行接口,所有数据都是在脉冲的作用下一位一位按顺序写入模块内部,由时序图知数据线上信息是在脉冲上升沿写入。写命令的数据格式是12位,单个写数据的格式是13位,写数据也可以连续写,由于每个字位占用内部3个RAM空间存放字段码,因此写数据采用连续写方式比较好。在数据连续写格式中,前面9位为模式位和模块内部RAM的起始地址,后面数据格式是每3位加1个0,取三个一组构成一个字位的信息,也是12位,这样就可以将所有写操作(命令和数据)分为写9位信息和写12位信息两个功能程序。显示字段的排列方式与LED数码管一致,每位字段
17、编码由8段构成(显示RAM笔画表),占用连续的3个地址空间,但在写入格式中每个数据是4位,编写字符的字段码时要给每个数据后加0,09显示字符的字段码如表4-1所示。表4-1 09显示字符的字段码字符二进制十六进制D0 D1 D2 D3D0 D1 D2 D3D0 D1 D2 D301 0 0 00 1 1 01 1 1 086EH11 0 0 00 0 1 00 0 0 0820H21 0 0 01 1 0 01 0 1 08CAH31 0 0 01 1 1 00 0 1 08E2H41 0 0 01 0 1 00 1 0 08A4H50 0 0 01 1 1 00 1 1 00e6H60 0
18、0 01 1 1 01 1 1 00EEH71 0 0 00 1 1 00 0 0 0860H81 0 0 01 1 1 01 1 1 08EEH91 0 0 01 1 1 00 1 1 08E6H地址低 高在写数据送显示之前,先按照初始化步骤进行初始化,然后写数据,程序见附录。第五章 系统测试与结果5.1 划亮反显擦除拖移的测试和结果 各模块均调通,将调好的模块连在一起,加上5v电压源,启动进行系统初始化。按键进入点亮模式,用光电笔在LED点阵书写显示屏上接触,可以看到接触的点点亮,LCD上显示亮点的精确坐标。用光笔快速的在书写显示屏上划过,发现划过的地方变亮,多次操作都能实现。再次按键,进
19、入反显模式,光笔划过,发现经过的地方没有亮其他的部分高亮,反显测试正常。再次按键进入擦除模式,用光笔在屏幕上划过,显示屏亮的地方变暗了。再按一次键可以看到整屏由亮变暗,实现了擦除这一功能。最后进入多字连写模式和区域拖动模式用光笔在LED点阵显示屏上写四个字,最后在屏上循环显示。最后对写的字用笔圈起来可以用笔移动。实现了对象拖移功能。经过反复的测试,所有的功能都能很好的实现,系统正常。5.2屏亮自动调节测试和结果 外部光环境人为地改变后,测试LED点阵书写显示屏的亮度是否发生变化如果发生变化,则表明能够自动调节,结果屏亮随外部环境的变化而改变,系统正常。5.3 超时关显示节电测试和结果加5v电压
20、启动系统,对系统初始化。设定待机关显示的时间,在测试点接入万用表,不进行任何操作到设定的时间,看显示屏是否自动关闭。结果书写显示屏自动关闭,电路板测试点上的电流小于5mA。表明测试正常,完成系统要求。总结及展望本作品完成了题目的基本要求和发挥部分的全部要求,系统性能良好。通过对作品的各项进行了优化,使系统的性能有了提高。应用74HC154译码器设计3232点阵的行列驱动控制信号,扫描速度满足设计要求。虽然这次设计满足了课题的要求,但在很多方面都有许多的不足,还不能满足正常的书写需求,但在设计的过程中提高了自己学习思考的能力,让自己能更好的去面对未来的工作。致谢通过这次毕业设计,综合的应用并学习
21、了自己的专业知识,得到了许多平时很难道道的知识及经验。在设计的过程中我得到了很多其他老师和同学的帮助,从人才完成了这次设计。在本论文的写作过程中,我的导师徐江海老师倾注了大量的心血,从选题到开题报告,从写作提纲,到一遍又一遍地指出每稿中的具体问题,严格把关,循循善诱,在此我表示衷心感谢。同时我还要感谢在我学习期间给我极大关心和支持的各位老师以及关心我的同学和朋友。参考文献1周航慈,周立功,朱旻等PHILIPS 51LPC系列单片机原理及应用设计M北京:北京航空航天大学出版社,20012何立民单片机应用系统设计M北京:北京航空航天大学出版社,1999附录附录1 总电原理图(单片机系统与点阵驱动电
22、路)附录2 总电原理图(3232点阵连接电路)附录3 源程序#include reg52.h#includeintrins.h#define uchar unsigned char#define uint unsigned intsbit cs103=P10; / 液晶sbit wr103=P11; / 液晶sbit da103=P12; / 液晶sbit csH=P26;/sbit p14=P14;sbit p15=P15;sbit p16=P16;sbit p17=P17;uint idata zb322=0; /点亮存储单元uint xdata zb1322=0; /第一个字存储uint
23、 xdata zb2322=0; /第二个字存储uint xdata zb3322=0; / 第三个字存储uint xdata zb4322=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; /
24、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
25、=5;uchar clzl=0;uint dlzbw; /点亮坐标位uint dlzbw1; /点亮坐标位 缓冲uchar z_t=0; /显示方式状态uchar xzgs;/写字个数uchar xs_s;/字符显示时间uchar xs_weishu;sfr AUXR = 0x8e; /扩展RAM的SFRuint 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)
26、 /12MHZ晶振延时Xms的子函数 uint y=0; while(x0) while(y1000) y+; x-; void del() /延时函数 uchar j; for(j=0;j10;j+);void write12(int data1) /液晶写12位数据 uchar i; for(i=0;i12;i+) wr103=0; /wr=0 if(data1&0x8000)!=0)/最高位为1 da103=1; /输出1 else /最高位为0 da103=0; /输出0 del(); wr103=1; /上升沿del(); data1=1; /数据整体左移1位 void write9
27、(int data1) /液晶写9位数据 uchar i; for(i=0;i9;i+) wr103=0; /wr=0 if(data1&0x8000)!=0)/最高位为1 da103=1; /输出1 else /最高位为0 da103=0; /输出0 del(); wr103=1; /上升沿 del(); data1=1; /数据整体左移1位 void yjcsh() /液晶初始化 uint k; for(k=0;k2000;k+); cs103=0; /cs=0 del();write12(0x8480); /定义模块 del(); cs103=1; /cs=1 del(); cs103=
28、0; /cs=0 del(); write12(0x8300); /定义内部振荡方式 del(); cs103=1; /cs=1 del(); cs103=0; /cs=0 del(); write12(0x8020); /开振荡器 del(); cs103=1; /cs=1del();cs103=0; /cs=0 del(); write12(0x8060); /开显示器 del();cs103=1; /cs=1void yjxs() /液晶显示 cs103=0; /cs=0 del(); write9(0xa000); /连续写,从地址00000开始 write12(lcdjs_s%10)
29、; write12(lcdjs_s/10); write12(lcdxsdy2); write12(lcdjs_fen); write12(lcdxsdy4); write12(lcdxsdy5); write12(lcdxsdy6); write12(lcdxsdy7); write12(lcdxsdy8); write12(lcdxsdy9); del(); cs103=1; /cs=1,写结束void del1() /扫描延时函数 uchar j; for(j=0;j30;j+);void lsm() /列扫描函数 ucharj; dlzbw=0x0001; lsmcs=0; / 列次数
30、初值 p0hc=p0hc&0xf0;/p0缓冲低4位清0p0hc=p0hc|lsmcs;/p0缓冲添列信息P0=p0hc; /微亮输出列 for(j=0;j16;j+) /zbhsmcs /点亮信息 if(bhzl) dlzbw1=zbhsmcs+16clzl&dlzbw; else dlzbw1=zbhsmcsclzl&dlzbw; if (dlzbw1=0) /不亮 p0hc=p0hc|0xc0; else /点亮 if(bhzl) /高 p0hc=p0hc|0x40; p0hc=p0hc&0x7f; else /低 p0hc=p0hc|0x80; p0hc=p0hc&0xbf; p0hc
31、=p0hc&0xf0;/p0缓冲低4位清0p0hc=p0hc|lsmcs;/p0缓冲添列信息P0=p0hc; /微亮输出列del1(); /亮延时 lsmcs+; dlzbw = _irol_(dlzbw,1); /左移1位 lsmcs=15; p0hc=p0hc&0xf0;/p0缓冲低4位清0p0hc=p0hc|lsmcs;/p0缓冲添列信息P0=p0hc; /微亮输出列void dzsm() uchark; p0hc=p0hc|0x20;/ / 微亮片选低位 p0hc=p0hc&0xef;/ / 微亮片选低位 P0=p0hc; bhzl=0; /行小于16 hsmcs=0; /行次数初值
32、for(k=0;k16;k+) /行循环16次 015行 blzl=0; /列小于16 clzl=0; p2hc=p2hc&0xbf; /p26 p2hc=p2hc&0xf0; / p2hc=p2hc|hsmcs;/p0缓冲添列信息 P2=p2hc; /微亮输出列 lsm(); /调列扫描函数 blzl=1; /列大于16 clzl=1; p2hc=p2hc|0x40; /p26 p2hc=p2hc|hsmcs;/p0缓冲添列信息 P2=p2hc; /微亮输出列 lsm(); /调列扫描函数 hsmcs+; p0hc=p0hc|0x10;/ / 微亮片选低位 p0hc=p0hc&0xdf;/
33、/ 微亮片选低位 P0=p0hc; bhzl=1; /行大于16 hsmcs=0; /行次数初值 for(k=0;k16;k+) /行循环16次 1631 行 blzl=0; /列小于16 clzl=0; p2hc=p2hc&0xbf; /p26 p2hc=p2hc&0xf0; / p2hc=p2hc|hsmcs;/p0缓冲添列信息 P2=p2hc; /微亮输出列 lsm(); blzl=1; /列大于16 clzl=1; p2hc=p2hc|0x40; /p26 p2hc=p2hc|hsmcs;/p0缓冲添列信息 P2=p2hc; /微亮输出列 lsm(); hsmcs+; void zbhs() interrupt 0 / 坐标显示uint zbw; /坐标位初值xm_flag=0;js_s=0;js_5ms=0;js_fen=js_fen_set;if(bxzb=0) zbw=1; /坐标位初值=1 zbw = _irol_(zbw,lsmcs); /左移到当前列位 if(bh_cc_flag) /笔画反显 / bh_cc_flag=0; zbw=zbw; /坐标对于与0 if(bhzl) if(blzl)