版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
辽东学院本科毕业论文(设计)题目成员姓名:专业:网络工程班级学号:信息技术学院独创性说明作者郑重声明:本毕业论文(设计)是我个人在指导教师指导下进行的研究工作及取得研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,毕业论文(设计)中不包含其他人已经发表或撰写的研究成果,也不包含为获得辽东学院或其他单位的学位或证书所使用过的材料。与我一同工作的同志对本研究所做的贡献均已在论文中做了明确的说明并表示了谢意。作者签名:___________日期:____1摘要本设计是基于51系列单片机的16*16点阵LED手写屏的设计与实现。系统主要要包括单片机控制系统模块、点阵LED显示模块、手写笔模块和电源模块等几部分组成。通过软件算法实现了LED点阵显示屏的手写功能的设计与实现。本文给出了系统具体的硬件设计方案,软件流程图和C语言程序等几个方面。是一种价格低廉的图文显示方案。本设计主要以51系列单片机作为核心,采用串行传输、动态扫描技术,制作的一款拥有多功能的模块化16×16LED点阵的多功能显示屏。关键词:51单片机;LED点阵;驱动电路;手写屏
目录一、绪论 1(一)课题的研究意义 1(二)设计任务及要求 1(三)单片机的发展史 2(四)单片机的发展趋势 3二、系统的整体结构 5三、单片机介绍 61、单片机引脚介绍 92、复位电路设计 92.时钟电路设计 11四、点阵电路介绍 12(一)LED点阵显示部分简介 12(二)LED驱动方式 14(三)手写笔电路设计 16五、软件设计 17(一)系统软件流程图 17(二)程序函数介绍 181、延时函数 182、行扫描函数 183、手写笔中断函数 18(三)编程环境介绍 19六、仿真与调试 21(一)系统的整体实物图 21总结 23参考文献 24附录A 25(一) 硬件电路原理图 25附录B 26(二) 系统程序源代码 26致谢 38PAGE43 1一、绪论(一)课题的研究意义LED显示屏是随着计算机及相关的微电子、光电子技术的迅猛发展而形成的一种新型信息显示媒体。它利用发光二极管构成的点阵模块或像素单元组成可变面积的显示屏幕,并可基于LED点阵显示及光笔检测输入实现人机交互功能。LED显示屏凭借其可靠性高、寿命长、功耗低、应用领域宽泛等优势在显示领域得到了广泛地应用,它被大量应用于各类会议、教学、远程教育、电视直播、设计分析及实时指挥等领域,实现了高效、直观和无障碍沟通,大大节省了时间,提高了工作效率,降低了交流成本。在当今的信息时代,便捷高效的信息传播媒体是成功不可或缺的要素,LED显示屏技术顺应了时代的诉求,将在经济发展中扮演越来越重要的角色。本设计基于单片机控制的LED点阵书写显示屏,在实现基本显示功能的前提下,可以通过自制光笔,实现点亮,划亮,反显,整屏擦除,连写多字,对象拖移,滚屏显示等功能。系统硬件电路简单,软件功能多样,控制系统可靠性高,有较高性价比,具有一定的实用性和参考价值。本设计旨在通过设计实现LED点阵书写显示屏,综合应用所学的电子技术知识,丰富个人设计和制造技能,更好地达成知识和实践的完美契合,并力争为显示领域提供一种便捷有效的显示方案,让先进的电子科技服务于社会。(二)设计任务及要求控制器控制器16×16点阵模块笔LED点阵书写显示屏系统结构示意图设计并制作一个基于16×16点阵LED模块的书写显示屏,其系统结构如图1-1所示。在控制器的管理下,LED点阵模块显示屏工作在人眼不易觉察的扫描微亮和人眼可见的显示点亮模式下;当光笔触及LED点阵模块表面时,先由光笔检测触及位置处LED点的扫描微亮以获取其行列坐标,再依据功能需求决定该坐标处的LED是否点亮至人眼可见的显示状态,从而在屏上实现LED点阵屏的书写显示功能。设计的最终要求是:在点亮功能下当光笔接触屏上某点LED时,能即时点亮该LED;在划亮功能下当光笔快速划过时,能同步点亮划过的各LED,其速度要求2S内能划过并点亮40点LED;在反显功能下能对屏上显示的信息实现反向显示;在屏幕擦除功能下能实现对屏上所显示信息整屏擦除;在笔画擦除功能下,能用光笔擦除屏上所显汉字的笔画;在连写多字功能下,能结合自选的擦除方式,在30S内以划亮方式写出四个汉字且存入机内;在对象拖移功能下,能用光笔将选定显示内容在屏上进行拖移,先用光笔以划亮方式在屏上圈定欲拖移显示对象,再用光笔将该对象拖移到屏上另一位置;当光强改变时,能自动连续调节屏上显示亮度。(三)单片机的发展史单片机诞生于20世纪70年代末,经历了SCM、MCU、SOC三大阶段。第一个阶段是SCM,即单片微型计算机(SingleChipMicrocomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。创新模式获得成功,奠定了SCM与通用计算机完全不同的发展道路。在开创嵌入式系统独立发展道路上,Intel公司功不可没。第二个阶段是MCU,即微控制器(MicroControllerUnit)阶段,主要的技术发展方向是:不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。在发展MCU方面,最著名的厂家当数Philips公司。Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。第三个阶段是SOC,即单片机嵌入式系统。单片机的嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SOC化趋势。随着微电子技术、IC设计、EDA工具的发展,基于SOC的单片机应用系统设计会有较大的发展。因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。
(四)单片机的发展趋势CMOS化,近年由于CHMOS技术的进步,大大地促进了单片机的CMOS化。CMOS芯片除了低功耗特性之外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态。这也是今后以80C51取代8051为标准MCU芯片的原因。因为单片机芯片多数是采用CMOS(金属栅氧化物)半导体工艺生产。CMOS电路的特点是低功耗、高密度、低速度、低价格。采用双极型半导体工艺的TTL电路速度快,但功耗和芯片面积较大。随着技术和工艺水平的提高,又出现了HMOS(高密度、高速度MOS)和CHMOS工艺。CHMOS和HMOS工艺的结合。目前生产的CHMOS电路已达到LSTTL的速度,传输延迟时间小于2ns,它的综合优势已在于TTL电路。因而,在单片机领域CMOS正在逐渐取代TTL电路。低功耗化单片机的功耗已从毫瓦级,甚至1uA以下;使用电压在3~6V之间,完全适应电池工作。低功耗化的效应不仅是功耗低,而且带来了产品的高可靠性、高抗干扰能力以及产品的便携化。低电压化几乎所有的单片机都有WAIT、STOP等省电运行方式。允许使用的电压范围越来越宽,一般在3~6V范围内工作。低电压供电的单片机电源下限已可达1~2V。目前0.8V供电的单片机已经问世。低噪声与高可靠性为提高单片机的抗电磁干扰能力,使产品能适应恶劣的工作环境,满足电磁兼容性方面更高标准的要求,各单片厂家在单片机内部电路中都采用了新的技术措施。大容量化以往单片机内的ROM为1KB~4KB,RAM为64~128B。但在需要复杂控制的场合,该存储容量是不够的,必须进行外接扩充。为了适应这种领域的要求,须运用新的工艺,使片内存储器大容量化。目前,单片机内ROM最大可达64KB,RAM最大为2KB。高性能化主要是指进一步改进CPU的性能,加快指令运算的速度和提高系统控制的可靠性。采用精简指令集(RISC)结构和流水线技术,可以大幅度提高运行速度。现指令速度最高者已达100MIPS(MillionInstructionPerSeconds,即兆指令每秒),并加强了位处理功能、中断和定时控制功能。这类单片机的运算速度比标准的单片机高出10倍以上。由于这类单片机有极高的指令速度,就可以用软件模拟其I/O功能,由此引入了虚拟外设的新概念。小容量、低价格化与上述相反,以4位、8位机为中心的小容量、低价格化也是发展动向之一。这类单片机的用途是把以往用数字逻辑集成电路组成的控制电路单片化,可广泛用于家电产品[1]。外围电路内装化这也是单片机发展的主要方向。随着集成度的不断提高,有可能把众多的各种处围功能器件集成在片内。除了一般必须具有的CPU、ROM、RAM、定时器/计数器等以外,片内集成的部件还有模/数转换器、DMA控制器、声音发生器、监视定时器、液晶显示驱动器、彩色电视机和录像机用的锁相电路等。串行扩展技术在很长一段时间里,通用型单片机通过三总线结构扩展外围器件成为单片机应用的主流结构。随着低价位OTP(OneTimeProgramble)及各种类型片内程序存储器的发展,加之处围接口不断进入片内,推动了单片机“单片”应用结构的发展。特别是I/C、SPI等串行总线的引入,可以使单片机的引脚设计得更少,单片机系统结构更加简化及规范化。单片机作为当前应用广泛的嵌入式系统的核心部分之一,具有体积小、速度快、功耗低、价格低廉等特点,在仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控等诸多领域得到广泛的应用。例如,在冰箱、微波炉、洗衣机等家用电器中使用单片机控制系统,可以使它们更加智能地工作;电话、传真、打印机中可以使用单片机系统控制拨号打印;单片机还可以在工业控制和机电一体化系统中作为核心控制部件[1]。为了顺应市场需求,世界上各大芯片制造公司都推出了自己的单片机,从8位、16位到32位,低功耗、高性能,它们各具特色,为单片机的应用提供了广阔的天地。在此文中所运用的是MCS-51系列单片机,MCS-51单片机卓越的性能深受广大单片机爱好者的喜爱。本文运用的即是MCS-51单片机。
二、系统的整体结构(一)控制芯片的确定方案一:采用STC公司生产的STC125A60S28位单片机。该单片机具有成本低,性价比高的优点,且编程较方便,其外部具有32个可编程I/O口、内部含有3个16位定时器/计数器、可使用八个中断源、并且可进行全双工的串行通信。但是其内部模块较少、功能局限性大,并且内部没有集成模/数转换模块、脉冲宽度调制模块,如果需要使用AD模块和脉冲宽度调制模块的话不需加这些外围电路,内部有八路10位AD,两路PWM输出单片机的运行速度非常的快是普通51单片机的8-12倍。给系统的点阵刷新提供了有力的保证。方案二:采用飞思卡尔半导体公司生产的MK10DN512系列32位单片机。该单片机内部具有128K的RAM和128K的ROM、512K可编程Flash存储器、16路精度为8bit/10bit/12bit的AD转换模块、16路脉冲宽度调制(PWM)通道、8个定时器/计数器、2个全双工UART串行通道、看门狗定时器、80个可编程I/O口、16个外部事件触发中断引脚、超过150个中断输入源。是一款性能十分强大的综合性单片机,并且内部自带PLL模块,总线频率最高可以设置成256MHz,运算速度快并稳定。100引脚的MK10DN512芯片的质量仅为50g。不过其做工复杂,成本较高,因此性价比较低,一般应用在汽车,航天等高精度控制领域。在本次设计中,流量计回传为脉冲型,因此不必采集模拟量,且控制方式为电平式,从成本的角度出发,STC125A60S2单片机完全可以满足要求,因此本次设计中选择性价比更高的STC125A60S2单片机。(二)点阵驱动方案论证方案一:串行显示此种显示方式由主要由74HC138译码器单元、数据移位寄存器74HC595和列驱动器组成,这种控制方式是单片机的I/O口得到了缩减不影响接收控制器传输下来的大量数据,此方案为点阵显示屏系统中比较常用的,所用器件也比较常用,价格便宜。方案二:并行显示可以通过锁存器芯片来增强单片机的I/O口的驱动能力,将8位宽的数据同时输入到LED点阵列中,达到并行控制LED点阵的目的。方案中运用4片锁存器74HC373来组成双缓冲寄存器,来驱动LED点阵行线,用5片3-8译码器74HC138组合成5-32译码器对LED点阵的32列进行选取。这样就避免了各行数据显示不同步的问题。由于并行数据传输速度非常快,所以高速度的地址编码信息可以同步发出。但由于单片机的引脚资源有限无法实现综上所述,本设计最终选择了第一个方案。(三)光笔设计的方案选择光笔设计的关键是选择合适的传感器件,只有具有很高的灵敏度和一定的响应时间的传感器才能完成系统的要求及功能。方案一:采用核心部件为光敏电阻制成的光笔检测系统。光敏电阻是将光能转换为电能的一种传感器件,它是构成光电式传感器的主要部件。光敏电阻结构简单、使用方便、价格便宜,但经调试发现其响应时间长,不易检测。方案二:采用光敏二极管,与光敏电阻相比有较好的高频特性,具有一定的可靠性,功耗低.相比于光敏电阻而言灵敏度较差,需要较高倍数的放大器才能实现精准识别的效果。方案三:采用光敏三极管,其工作原理与光敏二极管相似。但光敏三极管除了具有光敏二极管能将光信号转换成电信号的功能外,还有对电信号放大的功能。所以其灵敏度更高,响应时间快。基于以上分析,我们采用光敏三极管作为光笔的检测部件。(四)系统整体方案确立经过深思熟虑过后对单片机的选择以及点阵的扫描方式进行了论证最终确定了系统的基本结构,本设计中系统大致分为五部分:单片机控制单元、点阵驱动单元(行驱动和列驱动)、点阵显示单元、手写笔单元和电源五个单元组成。如图2.1给出系统的整个系统结构图电源单片机电源单片机点阵驱动点阵屏手写笔扫描检测按键中断光电检测图2.1系统结构图三、单片机介绍本设计中要求单片机的频率必须要快,要不然将会明显的看出刷屏现象。所以经过对比试验确定选用STC公司的STC12C5A60S2系列单片机这款单片机是单时钟/机器周期(1T)的单片机,具有高速、低功耗、超强抗干扰等特点是新一代8051单片机,指令代码完全兼容传统8051,但速度比普通的单片机快8-12倍。内部集成MAX810专用复位电路,拥有2路PWM,8路高速10位的A/D转换(频率250K/S),适合对电机控制,抗干扰场合。单片机的实物图如图3.1所示:图3.1单片机实物图STC12C5A60S2基本的特性介绍如下:1.内部集成增强型8051CPU,1T,单时钟、机器周期,指令代码完全与8051兼容2.工作电压:STC12C5A60S2 系列工作电压:5.5V-3.5V(5V单片机)STC12LE5A60S2系列工作电压:3.6V-2.2V(3V单片机)3.工作频率范围:0~35MHz,相当于普通8051的0~420MHz4.用户应用程序空间8K/16K/20K/32K/40K/48K/52K/60K/62K字节5.片上集成1280字节RAM6.通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051I/O口)可设置成四种模式:准双向口/弱上拉,推挽/上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串口(P3.0/P3.1)直接下载用户程序,数�即可完成一片8.有EEPROM功能(STC12C5A62S2/AD/PWM无内部EEPROM)9.看门狗10.内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地)11.外部掉电检测电路:在P4.6口有一个低压门槛比较器5V单片机为1.33V,误差为±5%,3.3V单片机为1.31V,误差为±3%12.时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为±5%到±10%以内)用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟常温下内部R/C振荡器频率为:5.0V单片机为:11MHz~17MHz;3.3V单片机为:8MHz~12MHz精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准13.共4个16位定时器两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再上2路PCA模块可再实现2个16位定时器14.3个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟,独立波特率发生器可以在P1.0口输出时钟15.外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块,PowerDown模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,CCP0/P1.3,CCP1/P1.416.PWM(2路)/PCA(可编程计数器阵列,2路)也可用来当2路D/A使用也可用来再实现2个定时器也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持)17.A/D转换,10位精度ADC,共8路,转换速度可达250K/S(每秒钟250次)18.通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口19.STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,RxD2/P1.2(可通过寄存器设置到P4.2),TxD2/P1.3(可通过寄存器设置到P4.3)20.工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)21.封装:LQFP-48,LQFP-44,PDIP-40,PLCC-44,QFN-40I/O口不够时,可用2到3根普通I/O口线外接74HC164/165/595(均可级联)来扩展I/O口,还可用A/D做按键扫描来节省I/O口,或用双CPU,三线通信,还多了串口。
(一)单片机最小系统介绍1、单片机引脚介绍STC12C5A62S2单片机外部引脚图如图3.2所示,与89c51单片机的外部引脚图完全相同只不过功能方面有所提高。图3.2单片机外部引脚图2、复位电路设计复位电路的基本功能是:可以使单片机初始化,也可以是死机状态下的单片机重新启动。系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。复位电路分为上电复位和手动复位两种:不管哪种复位只要在RESET引脚有持续两个机械周期以上的高电平就可以是单片机复位。图3.3上电复位这种上电复位功能是利用电容器充电来实现的,当加电时,电容C充电,电路中有电流流过,构成回路,在电阻R上产生压降,RESET引脚上为高电平;当电容C充满电后,电路相当于断开,RESET的电位与地相同,复位结束。可见复位的时间与充电的时间有关,充电时间越长复位的时间越长,增大电容或电阻都可以增加复位时间。图3.4按键电平复位按键式复位电路与上电复位电路的原理相同,但是它还可以通过按键实现复位,按下按键后,通过R1和R2形成回路,是RESET引脚产生高电平。按键时间决定了复位的时间。图3.5按键脉冲复位按键脉冲式复位电路是利用RC微分电路在RESET端产生正脉冲来实现复位的。综合本设计的要求,最终方案选取的是按键复位电路。2.时钟电路设计时钟电路是单片机的心脏,它控制着单片机的工作节奏。单片机工作的时候,是在统一的时钟脉冲控制下一拍一拍地进行的,这个脉冲的来源是单片机控制中的时序电路发出的,这种时钟信号可以有两种方式产生:内部时钟方式和外部时钟方式。内部时钟方式:单片机内部有一个高增益反相放大器,用于构成内振荡器,引脚XTAL1和XTAL2分别是放大器的输入端和输出端。在XTAL1和XTAL2两端跨接晶体或陶瓷振荡器,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部时钟发生器。本设计总C1和C2选择30pF,晶振为12MHz。基本原理如图3.6所示:图3.6振荡电路
四、点阵电路介绍(一)LED点阵显示部分简介LED点阵显示器广为人知主要是以发光二极管为像素的,LED屏用高亮度LED晶粒进行阵列组合,然后再透过环氧树脂和塑模封装而成。特点是具有较高的亮度、低功耗、外界引脚少、可看视角大、使用寿命长、耐湿、耐冷热、耐腐蚀等优点。如图4.1所示为LED点阵的实物图:图4.1点阵实物图LED点阵显示器有单色和彩色两类,最常见是红的单色的了的点阵屏。本设计就是使用单色的红色点阵屏。LED点阵常见的规格有4×4、8×8、16×16、32×32等多种;根据所能显示的图素的数目分为,单色、双原色、三原色三种。显示图素顏色即可显示的文字、图像等内容的顏色也有所不同,顾名思义单原色点阵只能显示固定色彩如红、绿、黄等单种颜色,双原色和三原色点阵显示内容的顏色由图素内不同顏色发光二极管点亮的组合方式决定,例如红绿都亮时可显示黄色,如果按照脉冲方式控制二极管的点亮时间,则可实现256高级灰度显示,即可实现彩色显示。本设计是基于单片机的LED点阵手写显示器的设计与实现其使用的内部电路结构和外型规格,即为单红色LED点阵屏。可书写文字也可用于图形显示。用多块点阵显示器组合则可构成大荧幕显示器,通过手写笔的点触即可实现手写。由LED点阵显示器的内部结构可知,器件宜采用动态扫描驱动方式工作,由于LED管芯大多为高亮度型,因此M行或N列的单体LED驱动电流可选用窄脉冲,但其平均电流应小于20mA,否则将对点阵的寿命起到影响,绝大多数点阵显示器的单体LED的正向压降都在2V上下。当所需显示的屏幕较大时一般会将多个LED点阵组成的小模组合点阵的方式组合而成,每一个组合都有自己的独立的控制系统,组合在一起后只要一个通信系统将所有的组合联系来用一个总控制器控制即可。LED点阵显示系统中各模组的显示方式有静态和动态显示两种。本设计中采用动态扫描的方式进行显示应为数据需要不断的刷新,在实际应用中也是一般采用动态显示方式,动态显示采用扫描的方式工作,从上到下逐次对LED屏幕的各行进行扫描点亮,同时又向各列送出表示图形或文字资讯的脉冲信号,反复以上操作,就可显示各种图形或文字等。本设计中采用四块8*8点阵组合成16*16的点阵组合屏如图4.2所示:图4.216×16点阵LED实物图8×8点阵LED的工作原理。其等效电路如图4.3所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴。而16×16就是在8×8原理的基础上将四块8×8级联而成[5],如图4.4所示。
图4.38×8点阵LED电路图4.416×16点阵LED电路(二)LED驱动方式LED点阵的驱动方式可分为静态驱动和动态驱动两种。静态驱动方式:在静态驱动的有机发光显示器件上,一般各有机电致发光像素的阴极是连在一起引出的,各像素的阳极是分立引出的,这就是共阴的连接方式。若要一个像素发光只要让恒流源的电压与阴极的电压之差大于像素发光值的前提下,像素将在恒流源的驱动下发光,若要一个像素不发光就将它的阳极接在一个负电压上,就可将它反向截止。但是在图像变化比较多时可能出现交叉效应,为了避免我们必须采用交流的形式。静态驱动电路一般用于段式显示屏的驱动上。动态驱动方式:在动态驱动的有机发光显示器件上人们把像素的两个电极做成了矩阵型结构,即水平一组显示像素的同一性质的电极是共用的,纵向一组显示像素的相同性质的另一电极是共用的。如果像素可分为N行和M列,就可有N个行电极和M个列电极。行和列分别对应发光像素的两个电极。即阴极和阳极。在实际电路驱动的过程中,要逐行点亮或者要逐列点亮像素,通常采用逐行扫描的方式,行扫描,列电极为数据电极。实现方式是:循环地给每行电极施加脉冲,同时所有列电极给出该行像素的驱动电流脉冲,从而实现一行所有像素的显示。该行不再同一行或同一列的像素就加上反向电压使其不显示,以避免“交叉效应”,这种扫描是逐行顺序进行的,扫描所有行所需时间叫做帧周期。本设计的驱动电路由行驱动和列驱动构成。为了充分利用单片机外部接口资源,行驱动电路中采用两个个3-8线译码器74LS138,然后由A、B、C三脚为输入端,形成16种不同的输入状态值,行驱动电路如图4.5所示。设计中列驱动由集成电路74HC595构成,74HC595具有一个8位串入并出的移位寄存器和一个8位输出锁存器的机构,可以实现在显示本行列数据的同时,传送下一行的列数据,即达到重叠处理的目的,列驱动电路如图4.6所示。图3.7点阵LED行驱动电路图3.8点阵LED列驱动电路(三)手写笔电路设计手写笔中用光电三极管做为的感光元件,LM393运放作为比较器。由于点阵的光强相对较弱,通过光电三极管的电流很小,通过串接硅二极管来提升光电三极管发射极电压,方便后级比较器作业手写笔的设计的基本原理图如图3.9所示:图3.9手写笔电路
五、软件设计(一)系统软件流程图如图5.1所示给出系统的主函数流程图和中断服务程序的流程图。主程序主要对点阵进行扫描,等待手写笔的中断到来,若有中断到来即进入中断服务程序。中断服务程序进行现场的保护,并记录中断到来时的行列坐标,显示所记录坐标。开始开始程序初始化开中断扫描点阵显示缓存区数据中断保护现场记录当前列坐标y行扫描记录当前行坐标x点亮缓存区(x,y)还原现场开启中断结束返回图5.1系统流程图手写笔的使用时需要按住按键才能进行识别光线的,点阵在屏幕扫描时会有一定的残余的光,点阵笔一旦检测到有光线时单片机的中端口将有一个中断打断,单片机并将刚刚来中断时所点亮点阵的行和列记住并存入数组中。以后将在没扫描一边屏幕后调用一边显示函数,显示函数的数据将来自于之前的锁存数组。实现了屏幕的手写功能。(二)程序函数介绍1、延时函数函数名称:voiddelay(unsignedintyanshi);主要通过程序的循环实现延时功能。功能:根据延时值的大小进行延时等待操作,1默认为2uS入口参数:延时的值,范围0-65535voiddelay(unsignedintyanshi){unsignedintl;//定义延时循环控制变量 for(l=0;l<=yanshi;l++); //根据延时参数进行空循环操作,达到延时功能}2、行扫描函数函数名称:voidhansao(unsignedcharhs);功能:根据入口参数hs的值,进行判断选择哪一行,选通1-16行的选通入口参数:hs的值,范围0-15voidhansao(unsignedcharhs)3、手写笔中断函数光笔中断程序(选择外中断1,下降沿触发)记录光笔的行列坐标voidexint1()interrupt2{ EX1=0; //进入中断之后马上关闭中断会造成识别不了列1-16的数据guangbi=1; if(dm<16) {lieyouxiao=1; adr_j=dm;}}4、主函数主函数首先对各个模块函数进行初始化,调节各个函数工作,是整个系统的核心。voidmain(void){unsignedcharnum=0;//定义按键扫描值的控制变量IT1=1;//setINT1inttype(1:Fallingonly0:Lowlevel)EX1=0;//enableINT1interrupt IE1=0; EA=1; yid=1; ts=1; zimuo=0; //控制字摸数据从第一个字模取值 k2=0; while(1) {k2=1; disp();//扫描光笔 shuju_chuli(); k2=0; //数据处理完就进行显示 if(ts==1) {
(三)编程环境介绍KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,,本站特地制作了一个相对简单的教程。此软件能嵌入汇编语言保留了汇编代码高效,快速的特点。KEILC51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品,其效率已经达到了相当搞的程度。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2IDE可为它们提供单一而灵活的开发环境。
KeilC51软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM语言和C语言的程序设计,界面友好,易学易用。如图5.2为打开界面:图5.2keil打开界面工程新建后保存即可在打开界面进行编程,如图5.3为编写程序时的界面图。
六、仿真与调试(一)系统的整体实物图经过紧张的调试制作后系统的基本模型搭接完成了,如下图给出了系统的模型图,系统基本的基本组成为:底板、单片机、四个8*8点阵屏以及与单片机连接的各个驱动部分、其次就是手写笔部分。驱动电路手写笔笔驱动电路手写笔笔单片机点阵屏系统整体实物图(正面)系统整体实物图(背面)下图为系统上电后试验效果。汉字书写图图案绘制图
总结本作品完成了题目的基本要求和发挥部分的全部要求,系统性能良好。通过对作品的各项进行了优化,使系统的性能有了提高。应用74HC138译码器设计16×16点阵的行列驱动控制信号,扫描速度满足设计要求。 虽然这次设计满足了课题的要求,但在很多方面都有许多的不足,还不能满足正常的书写需求,但在设计的过程中提高了自己学习思考的能力,让自己能更好的去面对未来的工作。
参考文献[1]单片机原理与实践/陈连坤编著[M].北京:清华大学出版社;北京交通大学出版社,2009.11.[2]王为青,程国钢编著.单片机KeilCx51应用开发技术[M].北京:人民邮电出版社,2007.2[3]雷伏容,张小林,崔浩.51单片机常用模块设计查询手册[M].北京清华大学出版社,2010.1.[4]51系列单片机开发宝典[M].电子工业出版社出版.[5]例说51单片机(C语言版)[M].人民邮电出版社出版.[6]李广地.单片机基础[M].北京:北京航空航天大学出版社,2001.7.[7]网站:/.[8]俞国亮,蒋敏,俞日龙.MCS-51单片机原理与应用[M].[9]网站:/搜索天狼星51单片机C语言学习.[10]张毅刚.新编MCS-51单片机应用设计(第3版)[M].哈尔滨工业大学出版[11]ProgressinComputer[D]MauriceWilkesPrestigeLecturedeliveredtoIEE,Cambridge,ComputerLaboratory,UniversityofCambridge,[12]AT89C51In-CircuitProgramming[R]RobertW.Sparks,AtmelCorporation[13]AT89C51DATASHEEPPhilipsSemiconductors1999.dec[14]Yang.Y,Yi.J,Woo,Y.YandKim.B:‘OptimumdesignforlinearityandefficiencyofmicrowaveDohertyamplifierusinganewloadmatchingtechnique’,Microw.J,2001[15]Vizimuller,P:‘RFdesignguide-systems,circuits,andequations’(ArtechHouse,Boston,MA,1995)R.Dye,“VisualObject-OrientatedProgramming,”Dr.DobbsMacintoshJournal,1991.9
附录A硬件电路原理图
附录B系统程序源代码 //头文件名:60SX1-16X16光电笔书写汉字点阵显示屏//功能:通电后控制光电笔在点阵显示模块上面测试及点亮划亮显示汉字内容按键1清屏//需要注意第一行划亮速度不够,可以采用点亮方式点亮。//硬件连接:带高速单片机控制器模块的点阵显示模块//晶振:22.1184MHZ//************************************************************************#include"reg52.h"//单片机头文件#include"intrins.h"#defineucharunsignedchar#defineuintunsignedint#defineulintunsignedlongintsbitDAT=P2^5; //模拟数据发送端口sbitCLK=P2^6;//模拟时钟控制端口sbitSUO=P2^7; //模拟锁存信号端口sbita=P2^0; //行数据扫描信号sbitb=P2^1; //行数据扫描信号sbitc=P2^2; //行数据扫描信号sbitd=P2^3; //行数据扫描信号sbiten=P2^4; //行数据扫描信号sbitk1_led=P1^0;//K1按键和指示灯sbitk2=P1^1; //sbitk3=P1^2; //sbitk4=P1^3; sbitDAT=P1^5; //模拟数据发送端口sbitCLK=P1^6;//模拟时钟控制端口sbitSUO=P1^7; //模拟锁存信号端口sbita=P3^4; //行数据扫描信号sbitb=P3^5; //行数据扫描信号sbitc=P3^6; //行数据扫描信号sbitd=P3^7; //行数据扫描信号sbiten=P2^0; //行数据扫描信号sbitk1_led=P1^0;//K1按键和指示灯sbitk2=P1^1; //K2按键sbitk3=P1^2; //K3按键sbitk4=P1^3; //K4按键/////*与编译器无关的数据类型定义*//********************************************************************************************/typedefunsignedcharuint8;//无符号8位整型变量typedefsignedcharint8;//有符号8位整型变量typedefunsignedshortuint16;//无符号16位整型变量typedefsignedshortint16;//有符号16位整型变量typedefunsignedintuint32;//无符号32位整型变量typedefsignedintint32;//有符号32位整型变量typedeffloatfp32;//单精度浮点数(32位长度)typedefdoublefp64;//双精度浮点数(64位长度)/********************************************************************************************///sfrAUXR=0x8e;//Auxiliaryregister unsignedchardk=0,dm=99,dl=0,k=0,m=0,kkk=0; //定义控制显示一个汉字时间,显示一屏数据时间,亮度控制参数,显示几个字kkk正显暗数据unsignedcharh_sel=0;//此变量取值0~15uchardatahuancun[16][2]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};//二维数组显示缓存。ucharcunfangadr=0;//存储位置,用于用户存放汉字的地址,起始为第0个存储位置,共5个(hanzi_0-hanzi_4)。ucharhuancun_hang_adr;//扫描到的点所在字节的行坐标。ucharhuancun_lie_adr; //扫描到的点所在字节的列坐标。ucharhuancun_bit;//扫描到的点在其所在字节的位地址,排列从低到高0-7;bitguangbi=0;bitzhuangtai=1;uchari=0;//行扫描动态坐标。ucharj=0;//列扫描动态坐标。bithangyouxiao=0;//行扫描有效标志。bitlieyouxiao=0;//列扫描有效标志。ucharadr_i=12;//中断记录行缓存坐标。ucharadr_j=23;//中断记录列缓存坐标。ucharadr_k=56;//中断记录列缓存坐标。uchari,dd=7,gongne=0,huncun32=0,huncun2=0;//dd为移动显示变量gongne为功能选择显示变量0-8控制正显反显点亮划亮ucharyid,h,o=0,ts=0; //YID为移动计数器,H为行段计数器。uintzimuo; //字模计数器ucharcodehanzi[]; //汉字字模ucharBUFF[48]; //缓存voidin_data(void); //调整数据voidrxd_data(void); //发送数据voidsbuf_out(); //16段扫描unsignedintcodetab[]=//定义显示数据,根据取字模软件进行提取{0xFE,0xFF,0xFD,0xFF,0xFB,0xFF,0xF7,0xFF,0xEF,0xFF,0xDF,0xFF,0xBF,0xFF,0x7F,0xFF,0xFF,0xFE,0xFF,0xFD,0xFF,0xFB,0xFF,0xF7,0xFF,0xEF,0xFF,0xDF,0xFF,0xBF,0xFF,0x7F,//扫描0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//全灭0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//全亮};unsignedcharzuhehou[64]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//全灭0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//全亮};//************************************************************************//函数名称:voiddelay(unsignedintyanshi);//功能:根据yanshi值的大小进行延时等待操作,1默认为2uS//入口参数:yanshi的值,范围0-65535//出口参数:无//修改历史:V1.0//************************************************************************voiddelay(unsignedintyanshi){ unsignedintl; //定义延时循环控制变量 for(l=0;l<=yanshi;l++); //根据延时参数进行空循环操作,达到延时功能}//************************************************************************//函数名称:voidhansao(unsignedcharhs);//功能:根据入口参数hs的值,进行判断选择哪一行,选通1-16行的选通//入口参数:hs的值,范围0-15//出口参数:无//************************************************************************voidhansao(unsignedcharhs){ if(hs<16) //判断hs的值是否在行扫描的值范围内,不在范围内不执行任何操作 { if(hs==0) //选通第1行 { a=0;b=0;c=0;d=0;return; } if(hs==1) //选通第2行 { a=1;b=0;c=0;d=0;return; } if(hs==2) //选通第3行 { a=0;b=1;c=0;d=0;return; } if(hs==3) //选通第4行 { a=1;b=1;c=0;d=0;return; } if(hs==4) //选通第5行 { a=0;b=0;c=1;d=0;return; } if(hs==5) //选通第6行 { a=1;b=0;c=1;d=0;return; } if(hs==6) //选通第7行 { a=0;b=1;c=1;d=0;return; } if(hs==7) //选通第8行 { a=1;b=1;c=1;d=0;return; } if(hs==8) //选通第9行 { a=0;b=0;c=0;d=1;return; } if(hs==9) //选通第10行 { a=1;b=0;c=0;d=1;return; } if(hs==10) //选通第11行 { a=0;b=1;c=0;d=1;return; } if(hs==11) //选通第12行 { a=1;b=1;c=0;d=1;return; } if(hs==12) //选通第13行 { a=0;b=0;c=1;d=1;return; } if(hs==13) //选通第14行 { a=1;b=0;c=1;d=1;return; } if(hs==14) //选通第15行 { a=0;b=1;c=1;d=1;return; } if(hs==15) //选通第16行 { a=1;b=1;c=1;d=1;return; } }}/*#######################################################################//函数名称:voidsendbyte(unsignedintbyte);//功能:根据byte值的大小,取出对应tab数组中的值,模拟SPI发送出去一个字节//入口参数:byte值,范围0-65535//出口参数:无voidsendbyte(unsignedintbyte){unsignedcharnum; //定义需要发送的数据unsignedcharc; //定义发送一个字节的变量num=tab[byte]; //根据byte值取出tab数组中的数据,存入发送数据变量中for(c=0;c<8;c++) //循环发送一个字节{CLK=0; //时钟置低电平启动DAT=num&0x80; //取出需要发送数据的最高位CLK=1; //时钟置高电平结束数据发送num<<=1; //将需要发送的数据左移一位}}voidsendbyte1(unsignedintbyte){unsignedcharnum; //定义需要发送的数据unsignedcharc; //定义发送一个字节的变量num=zuhehou[byte]; //根据byte值取出tab数组中的数据,存入发送数据变量中for(c=0;c<8;c++) //循环发送一个字节{CLK=0; //时钟置低电平启动DAT=num&0x80; //取出需要发送数据的最高位CLK=1; //时钟置高电平结束数据发送num<<=1; //将需要发送的数据左移一位}}voiddelay2us(void)//误差-0.010706018519us{unsignedchara;for(a=30;a>0;a--);}/*****光笔中断程序(选择外中断1,下降沿触发)记录光笔的行列坐标*********/voidexint1()interrupt2{ EX1=0; //进入中断之后马上关闭中断会造成识别不了列1-16的数据guangbi=1; if(dm<16) { lieyouxiao=1; adr_j=dm; }}voidshuju_chuli(){if(hangyouxiao&&lieyouxiao){hangyouxiao=0;lieyouxiao=0;//显示坐标huancun_hang_adr=adr_i;//存放0-15行的数值huancun_lie_adr=adr_j+3;//存放列的左边8位还是和右边8位的数值0-1 huancun_bit=(adr_j)%8;//存放列的0-8个位。if(huancun_lie_adr<=10) //这个变量一定要根据实际情况定 { //实际上要根据变量进行调试 adr_k=0; }else{if(huancun_lie_adr>10||huancun_lie_adr<=18) { adr_k=1; }} //判断左右屏的变化 huancun[huancun_hang_adr][adr_k]=0x01<<huancun_bit; for(huncun32=0;huncun32<16;huncun32++) { zuhehou[huncun32*2+1]&=~hua
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医药产品物流合作协议
- 2024三菱电梯采购合同范本
- 混凝土工程分包合同的进度安排
- 采购合同标准模版
- 架子工劳务分包合同的工程验收标准
- 2024年度电影制作与发行独家授权合同
- 股权质押借款合同示范
- 专业安全监理咨询服务合同
- 微盟代理商的合同签订流程详解与建议
- 马铃薯购销合同模板
- 苏科版八年级物理上册全册教案(完整版)教学设计(含教学反思)
- 二年级上册数学广角《搭配一》
- 劳动第二单元《带着家人去秋游》教学设计教案
- 半导体器件第二章pn结第1节
- 华电集团公司电力安全生产工作规定
- 小学四年级下册科学-1.2点亮小灯泡-教科版(20张)(1)(1)ppt课件
- 心理健康教育和家校协同育人工作汇报
- 动土作业安全技术交底
- 项目负责人B证继续教育在线试题(共8套带答案)
- 家长学校教研活动记录表
- 高效课堂合作学习小组
评论
0/150
提交评论