版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
./论文一第一章绪论1.1课题来源本课题来源于全国大学生电子设计竞赛LED点阵书写显示屏,它是一种控制半导体发光二极管的显示装置,其主要功能是实现"点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移"等书写显示。1.2设计任务及要求设计并制作一个基于32×32点阵LED模块的书写显示屏,其系统结构如图1-1所示。在控制器的管理下,LED点阵模块显示屏工作在人眼不易觉察的扫描微亮和人眼可见的显示点亮模式下;当光笔触及LED点阵模块表面时,先由光笔检测触及位置处LED点的扫描微亮以获取其行列坐标,再依据功能需求决定该坐标处的LED是否点亮至人眼可见的显示状态,从而在屏上实现"点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移"等书写显示功能。控制器控制器32×32LED点阵模块光笔图1-1LED点阵书写显示屏系统结构示意图设计的最终要:在点亮功能下当光笔接触屏上某点LED时,能即时点亮该LED;在划亮功能下当光笔快速划过时,能同步点亮划过的各LED,其速度要求2S能划过并点亮40点LED;在反显功能下能对屏上显示的信息实现反向显示;在屏幕擦除功能下能实现对屏上所显示信息整屏擦除;在笔画擦除功能下,能用光笔擦除屏上所显汉字的笔画;在连写多字功能下,能结合自选的擦除方式,在30S以划亮方式写出四个汉字且存入机;在对象拖移功能下,能用光笔将选定显示容在屏上进行拖移,先用光笔以划亮方式在屏上圈定欲拖移显示对象,再用光笔将该对象拖移到屏上另一位置;当光强改变时,能自动连续调节屏上显示亮度;当光笔连续未接触屏面的时间超过1-5MIN时,自动关闭屏上显示,并使系统进入休眠模式。.第二章系统方案设计2.1.系统的总体设计根据课题要求,LED点阵书写显示屏由主控模块,按键电路、LED点阵模块、光笔电路及LED点阵驱动显示等部分组成。系统框图如图2-1所示:按键按键MCU驱动电路LED点阵光笔检测LCD显示光强检测图2-1系统框图2.2各模块的设计。.核心控制模块的的设计核心控制模块是系统的大脑,控制着系统的所有输入输出、计算、判断与决策。"LED点阵书写显示屏"检测精度要求高且数据存储容量大,选择适合的控制模块,能确保其快速是实现稳定及达到系统要求的基本条件。使用STC系列单片机,该系列单片机是高集成单片机,功能和性能都要比51系列强大很多。比如STC11F32是1T单片机,速度是AT89S51的12倍。而且部集成了置振荡器和复位,EEPROM、ADC、PWM、四态I/O接口。.光笔设计光笔设计的关键是选择合适的传感器件,只有具有很高的灵敏度和一定的响应时间的传感器才能完成系统的要求及功能。方案一:采用核心部件为光敏电阻制成的光笔检测系统。光敏电阻是将光能转换为电能的一种传感器件,它是构成光电式传感器的主要部件。光敏电阻结构简单、使用方.便、价格便宜,但经调试发现其响应时间长,不易检测。方案二:采用光敏二极管,与光敏电阻相比有较好的高频特性,具有一定的可靠性,功耗低.相比于光敏电阻而言灵敏度较差,需要较高倍数的放大器才能实现精准识别的效果。方案三:采用光敏三极管,其工作原理与光敏二极管相似。但光敏三极管除了具有光敏二极管能将光信号转换成电信号的功能外,还有对电信号放大的功能。所以其灵敏度更高,响应时间快。基于以上分析,我们采用光敏三极管作为光笔的检测部件。.显示方案的设计采用LCD液晶显示器。LCD有明显的优点:微功耗、尺寸小,超薄轻巧、显示信息量大、字迹清晰、美观、视觉舒适。使整个控制系统更加人性化。采用LCM301液晶显示器,其是串行口显示,所需I/O口较少,节省了资源,焊接电路时也较为方便。.点阵显示模式设计将点阵的驱动电源分为两路,一路为正常电压,另一路通过硬件电路调节恰好能使点阵处于微亮状态。结合软件实现点阵的显示模式的改变。这样节省了资源的同时,也节约了时间.第三章系统硬件设计3.1光笔的设计光笔用光电三极管3DU33型光敏三极管检测点阵屏发光的强弱变化电压信号,LM393为比较器。由于点阵的光强相对较弱,通过光电三极管的电流很小,通过串接硅二极管来提升光电三极管发射极电压,方便后级比较器作业,便于单片机检测信号。光笔原理图如下图3-1所示:图3-1光笔原理图在一空的笔壳,将光敏三极管放置在笔壳底端,光敏三极管的引脚从一个与其直径等宽的空管引出至空管的顶部,并在其中一引脚中接一弹片,在接近的地方用铜片贯穿空管且正好卡在笔管的部。与此同时,用一弹簧套在空管外部,并将其底不固定,这样,当笔管在点阵屏上上下抖动时,部光敏三极管就能很好的检测了。其结构如图3-2所示:.图3-2光笔的结构图3.232×32LED点阵的连接经分析要想得到32×32的点阵需要用16个共阳型8×8点阵〔其引脚图如图3-3所示来构建。其方法是将点阵对应的行线和列线分别进行连接,使每一条行线引脚接一行32个LED,列线也相同。图3-3LED点阵.3.332×32LED点阵的驱动控制电路32×32LED点阵的行信息控制用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所示。.引脚符号说明输入/输出1VDD正电源,必须接!输入2VLCDLCD屏工作电压调整,可调整视角对比度,必须接!。输入3/INTWDT/定时器输出,集电极开路输出,不用可不接。输出4LED不用输入5BZ压电瓷蜂鸣片驱动+极输出6/BZ压电瓷蜂鸣片驱动-极输出7/CS模块片选,部上拉,必须接!输入8/RD模块数据读出控制线,部上拉输入9/WR模块数据/指令写入控制线,部上拉,必须接!输入10DATA数据输入/输出,部上拉,必须接!输入/输出11VSS负电源,接地线,必须接!图3-5LCD接口应用模块表3-1LED接口引脚排列图注: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-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-10~9显示字符的字段码字符二进制十六进制D0D1D2D3D0D1D2D3D0D1D2D3010000110111086EH1100000100000820H21000110010108CAH31000111000108E2H41000101001008A4H50000111001100e6H60000111011100EEH7100001100000860H81000111011108EEH91000111001108E6H地址低→高在写数据送显示之前,先按照初始化步骤进行初始化,然后写数据,程序见附录。第五章系统测试与结果5.1划亮反显擦除拖移的测试和结果各模块均调通,将调好的模块连在一起,加上5v电压源,启动进行系统初始化。按键进入点亮模式,用光电笔在LED点阵书写显示屏上接触,可以看到接触的点点亮,LCD上显示亮点的精确坐标。用光笔快速的在书写显示屏上划过,发现划过的地方变亮,多次操作都能实现。再次按键,进入反显模式,光笔划过,发现经过的地方没有亮其他的部分高亮,反显测试正常。再次按键进入擦除模式,用光笔在屏幕上划过,显示屏亮的地方变暗了。再按一次键可以看到整屏由亮变暗,实现了擦除这一功能。最后进入多字连写模式和区域拖动模式用光笔在LED点阵显示屏上写四个字,最后在屏上循环显示。最后对写的字用笔圈起来可以用笔移动。实现了对象拖移功能。经过反复的测试,所有的功能都能很好的实现,系统正常。加5v电压启动系统,对系统初始化。设定待机关显示的时间,在测试点接入万用表,不进行任何操作到设定的时间,看显示屏是否自动关闭。结果书写显示屏自动关闭,电路板测试点上的电流小于5mA。表明测试正常,完成系统要求.附录1总电原理图〔单片机系统与点阵驱动电路论文二LED点阵书写显示屏摘要本系统以高速单片机STCF1132为核心,设计并制作了一个基于32×32点阵LED模块显示屏。该点阵可以实现扫描微亮和显示点亮两种工作模式,能够通过自制光笔检测在点阵处于扫描微亮状态时获取其行列坐标信息,并能通过液晶显示出来,同时能依据功能要求控制检测点处LED的亮灭,在屏幕上实现"点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移"等书写显示功能,并且通过按键可以实现不同功能之间的切换。同时还能够根据环境光强的变化,自动连续调节显示屏上显示的亮度。设计方案运用了4-16线译码器74HC154驱动点阵的行和列,通过单片机的控制实现各种显示功能,显示屏亮度的自动调节采用光敏电阻检测环境光强,通过A/D转换、D/A转换实现对显示亮度的自动调节。关键词:LED点阵单片机74HC154一、设计任务及要求1.设计任务控制器32×32控制器32×32LED点阵模块光笔二、方案论证与比较1.核心控制模块的的选择核心控制模块是系统的大脑,控制着系统的所有输入输出、计算、判断与决策。"LED点阵书写显示屏"检测精度要求高且数据存储容量大,选择适合的控制模块,能确保其快速是实现稳定及达到系统要求的基本条件。方案一:使用ATMEL公司的51系列单片机。此系列单片机使用广泛,但运算速度相对较慢、存储容量小,难以存储大容量程序及数据。方案二:使用STC系列单片机,该系列单片机是高集成单片机,功能和性能都要比51系列强大很多。比如STC11F32是1T单片机,速度是AT89S51的12倍。而且部集成了置振荡器和复位,EEPROM、ADC、PWM、四态I/O接口。基于以上分析我们采用高速、高容量的STC11F32单片机。2.光笔设计的方案选择光笔设计的关键是选择合适的传感器件,只有具有很高的灵敏度和一定的响应时间的传感器才能完成系统的要求及功能。方案一:采用核心部件为光敏电阻制成的光笔检测系统。光敏电阻是将光能转换为电能的一种传感器件,它是构成光电式传感器的主要部件。光敏电阻结构简单、使用方便、价格便宜,但经调试发现其响应时间长,不易检测。方案二:采用光敏二极管,与光敏电阻相比有较好的高频特性,具有一定的可靠性,功耗低.相比于光敏电阻而言灵敏度较差,需要较高倍数的放大器才能实现精准识别的效果。方案三:采用光敏三极管,其工作原理与光敏二极管相似。但光敏三极管除了具有光敏二极管能将光信号转换成电信号的功能外,还有对电信号放大的功能。所以其灵敏度更高,响应时间快。基于以上分析,我们采用光敏三极管作为光笔的检测部件。3.显示方案的选择<1>显示种类的选择方案一:采用LED数码管显示器。LED数码管亮度高,醒目,但是其电路复杂,占用资源较多,显示信息量较小。方案二:采用LCD液晶显示器。LCD有明显的优点:微功耗、尺寸小,超薄轻巧、显示信息量大、字迹清晰、美观、视觉舒适。使整个控制系统更加人性化。基于上面的比较分析和现有的LCD器件,选用方案二。<2>液晶显示模块的选择方案一:采用SMCA1602并行口液晶显示器,其功耗低且使用方便。但占用的I/O口线较多,而单片机I/O口资源有限。方案二:采用LCM301液晶显示器,其是串行口显示,所需I/O口较少,节省了资源,焊接电路时也较为方便。本设计使用的I/O口比较多,基于以上分析,我们选择方案二。4.点阵显示模式方案的选择方案一:采用PWM调制方式,用软件来控制点阵的点亮与熄灭。但考虑到实现设计的要求需大的存储空间,为节省资源我们放弃了这种方案。方案二:将点阵的驱动电源分为两路,一路为正常电压,另一路通过硬件电路调节恰好能使点阵处于微亮状态。结合软件实现点阵的显示模式的改变。这样节省了资源的同时,也节约了时间。基于以上分析我们选择了方案二。三、系统硬件设计1.系统的总体设计本设计以STCF1132为核心部件结合按键、LCD显示、光笔检测及LED点阵驱动显示等部分组成。系统框图如图2所示:MCUMCU驱动电路LED点阵光笔检测按键LCD显示光强检测图2系统框图2.单元模块的设计及参数计算〔1光笔的设计及单元参数的设计在一空的笔壳,将光敏三极管放置在笔壳底端,光敏三极管的引脚从一个与其直径等宽的空管引出至空管的顶部,并在其中一引脚中接一弹片,在接近的地方用铜片贯穿空管且正好卡在笔管的部。与此同时,用一弹簧套在空管外部,并将其底不固定,这样,当笔管在点阵屏上上下抖动时,部光敏三极管就能很好的检测了。其结构如图3所示:图3光笔的结构图为了能使设计的光笔更好的检测,我们设计了如图4所示的部电路图。其基本原理是基于光敏三极管,通过电压比较器传输到单片机系统,进而实现光笔的检测。图4光笔电路图〔232×32LED点阵的连接及驱动控制电路经分析要想得到32×32的点阵需要用16个共阳型8×8点阵〔其引脚图如图5所示来构建。其方法是将点阵对应的行线和列线分别进行连接,使每一条行线引脚接一行32个LED,列线也相同。图5分别将两片74HC154四-十六译码器的Y0-Y15端口与32×32LED点阵的列的高低位相连,74HC154的输入端口A、B、C、D、G1、G2与对应的单片机I/O口连接。单片机先通过74HC154的G1、G2片选端口实现信号的选择输出,从而实现列的扫描,电路如图6a所示。与列的驱动相比,行的驱动有所不同。分别将两片74HC154经过反相器后与每行相连接,而每片74HC154的G1、G2片选端由单独的I/O口来控制。用一个+5V电源分成两路对接好的点阵供电,目的是通过单片机控制一路用于点阵的扫描微亮,另一路用于点阵的显示点亮。其电路图如图6b所示:图6aLED点阵列的驱动电路图6bLED点阵行的驱动电路〔3显示电路部分功能及原理为了满足系统在工作时能准确显示光笔对应亮点所处的行列坐标值,我们采用型号为LCM103的液晶显示器显示。LCM103为10位多功能通用型8段式液晶显示模块,含看门狗时钟发生器2种频率的蜂鸣驱动电路置显示RAM,可显示任意字段笔画划3-4线串行接口可与任何单片机接口。其接口应用模块如图7所示:图7LCD驱动电路〔4键盘的使用及设计键盘是使用比较简单的独立式键盘,而且具有发光二极管指示功能模块。在程序中采用中断扫描的方式,在没有键操作时CPU执行正常程序,只在有键操作时才处理键盘程序。其电路如图8所示:图8独立式键盘电路图按键功能:按键一:实现各按键功能的切换;按键二:按键三:按键3.4发挥部分的设计与实现光照的检测与控制经分析,想要实现当环境光强改变时能自动连续调节屏上显示亮度的要求,其关键是对点阵周围环境光照的检测与控制。我们通过硬件电路很好的完成了对光照的检测。基本原理是用LM358与光敏电阻够成一恒流源并于三极管的基极连接,当光敏电阻因光强的变化而改变其自身阻值时,三极管的基极电压也会随着变化。与其集电极连接的发光二极管的亮度也会伴随着改变,以此判断周围光强的变化。电路如图9所示:图9光照检测电路四、系统软件设计软件设计包括单片机和CPLD。4.1程序总体流程图4.2各个功能模块流程图论文三FORMTEXTLED点阵书写显示屏摘要本设计运用了基于NiosII嵌入式处理器的SOPC技术。系统以ALTERA公司的CycloneII系列FPGA为数字平台,将微处理器、Avalon总线、LED点阵扫描控制器、存储器和人机接口控制器等硬件设备集中在一片FPGA上,利用片硬件来实现LED点阵的带地址扫描,降低系统总功耗和简化CPU编程的同时,提高了系统的精确度、稳定性和抗干扰性能。关键词:SOPCFPGA带地址扫描AbstractThisdesignusingtheNiosIIbasedonembeddedprocessorSOPCtechnology.ALTERAsystemtothecompanyfortheCycloneIIFPGAdigitalplatform、series、Willmicroprocessor、AvalonbusofLEDdotmatrixscanningcontroller、memoryandhuman-computerinterfacecontrollerhardwaredevicefocusedonsuchaFPGA,UsingthepieceofhardwaretoachieveinsideofLEDdotmatrixwithaddressscanning,reducethetotalpoweroftheprogrammingandsimplifytheCPU,improvetheprecisionandstabilityofthesystemandtheanti-jammingperformance.Keyword:SOPCFPGAAddressscanning目录1引言32系统方案32.1主控器选择方案论证32.2点阵驱动方案论证33理论分析与计算43.1光笔选取与参数设计53.2LED点阵屏驱动参数设计53.3屏亮自动调节设计63.4超时关显示节电设计64系统电路设计74.1系统工作原理74.2系统工作时序75系统程序设计85.1系统流程概述85.2系统总流程图86系统测试与结果97结论9参考文献10附录:10附1:电路原理图10附2:扫描电路硬件描述11附2:软核NIOSII程序17附4:完整的测试结果471引言LED点阵显示屏被用到很多领域,随着电子技术的发展,LED点阵书写显示屏的广泛应用是一种趋势。传统的LED点阵显示是由微处理器实现的,但是以FPGA做控制器将成为发展趋势。
FPGA的结构灵活,其逻辑单元、可编程部连线和I/O单元都可以由用户编程,可以实现复杂逻辑功能,满足各种设计需求。其速度快,功耗低,通用性强,特别适用于大型系统的设计。使用FPGA还可以实现动态配置、在线系统重构〔可以在系统运行的不同时刻,按需要改变电路的功能,使系统具备多种空间相关或时间相关的任务及硬件软化、软件硬化等功能。用FPGA做为控制器对本系统进行设计,利用它灵活丰富的I/0资源简化了电路,降低了系统的成本。本作品用FPGA做为控制器,来实现LED点阵书写显示屏的功能。2系统方案2.1主控器选择方案论证方案一:以ARM为系统控制器采用32位RISC微处理器ARM实现点阵屏的控制和编码功能,基本上能完成题目的要求,但是ARM不适合多线程操作,如果应用在系统中会使电路和软件设计变得复杂。方案二:用FPGA作为系统控制器FPGA可以直接用硬件扫描、编码、解码、纠错,速度快、稳定性高、扩展性能好、体积小,可以提供丰富的逻辑单元和I/O资源。用SOPC工具可以快速生成片上软核处理器,将所有的控制单元集成在一片FPGA芯片,降低了额外的功耗开支。采用并行的输入/输出方式,可以达到很快的速度。这样合理的分配了FPGA资源,具有很强的实时性和准确性。可以实现各种灵活控制。综合考虑,最后采用方案二。2.2点阵驱动方案论证方案一:串行方式显示这种显示方式由译码器单元74HC138、数据移位寄存器74HC595和列驱动器组成,点阵显示屏可以用少量I/O口接收控制器传输下来的大量数据,此方案为点阵显示屏系统中比较常用的,所用器件也比较常用,容易买到。但是它存在一个致命的缺点,就是刷新速度不够快,高速度的地址编码信息无法发送。方案二:并行方式显示可以通过锁存器芯片来增强FPGA的I/O口的驱动能力,将32位宽的数据同时输入到LED点阵列中,达到并行控制LED点阵的目的。方案中运用4片锁存器74HC573来组成双缓冲寄存器,驱动LED点阵行线,用5片3-8译码器74HC138组合成5-32译码器对LED点阵的32列进行选取。这样就避免了各行数据显示不同步的问题。由于并行数据传输速度非常快,所以高速度的地址编码信息可以同步发出。综上所述,本设计最终选择了第二个方案。3理论分析与计算3.1光笔选取和参数设计光笔用光电三极管3DU33做为的感光元件,LM393为比较器。由于点阵的光强相对较弱,通过光电三极管的电流很小,通过串接硅二极管来提升光电三极管发射极电压,方便后级比较器作业。光笔原理图如下图:图1光笔原理图3.2LED点阵屏驱动设计本电路采用74HC573做电平转换及行驱动,8550三极管做列驱动,用5片74HC138扩展成5-32译码器对列选信号进行译码,显示亮度和器件参数均可达到系统要求的功能设计。系统原理图如下:省略4行………省略4行………图2LED点阵驱动原理图3.3屏亮自动调节设计利用片外A/D转换芯片将当前光强转换成数字信号,将传统的PWM调光技术稍加修改,变换成带编码的PWM调光方式,根据显示的容进行屏亮的自动调节。设计的框图如下:亮度调节亮度调节编码区内容显示区清0调亮区光敏电阻A/D转换图3点阵屏亮度自动调节图3.4超时关显示节电设计基于定时器的数字电路,给定一个时间,当光笔检测到光信号,定时电路自动复位,否则定时电路到给定的时间后数字信号溢出,把溢出信号传送给核心模块,通过功耗管理模块,把系统其余部分模块的时钟切断以达到节电的目的。系统的节电框图如下:全局时钟全局时钟功耗管理核心模块片外器件片选控制片外器件图4超时待机框图4系统电路设计4.1系统工作原理以NIOSII软核为主控,系统包括LED扫描为主的多功能模块、按键管理模块、LCD控制等,通过键盘扫描来确定工作模式以实现点亮、划亮、擦除、区域拖拽等功能,用外围电路的反相功能能实现点阵显示屏的反显,功耗管理模块对各模块时钟的控制可以实现节电的功能。光笔输入LED扫描光笔输入LED扫描地址编码地址解码解码纠错反显控制亮度调节反显点阵数据显示缓存RAM按键管理反显点阵数据显示缓存RAM按键管理点阵列选点阵列选驱动芯片片选控制A/D调光调理驱动芯片片选控制A/D调光调理NIOSII32位软核微处理器功耗管理模块NIOSII32位软核微处理器功耗管理模块LCD控制器LCD控制器图5系统工作原理框图4.2系统工作时序D10~D6送出Y轴坐标的原码,D5为原码的奇校验,D4~D0为原码的反码校检。经过双层编码校验,有效防止了周边点阵对数据的干扰。降低了CPU数据处理的难度,只有确定有效的数据才会通过中断被CPU读入部进行处理。X轴坐标值则为当前所选列的地址。系统工作时序图如下:D10D10D8……D9D0显示区……地址编码区上升沿读入光笔数据5系统程序设计5.1系统流程概述本系统是以软核NIOSII为主控,编程采用模块死循环的方式:按任意模式设置键将会复位CPU,CPU重新启动后将根据复位标志进入相应的管理模式,从而实现点亮、划亮、擦除、拖移等功能,这种编程模式在降低编程难度的同时增强了系统的可靠性。多字连写模式读复位多字连写模式读复位标志读显示缓存RAM等待有效坐标中断更新显示缓存等待有效坐标中断更新显示缓存清除显示缓存数据结束点亮模式笔画擦除模式全屏擦除模式循环检测KEY+/-更新待机时间…………按键存入字1并清屏循环显示字1~4按键存入字4并清屏区域选择选区拖动区域缝合建立辅助选区任意模式键对CPU进行复位待机时间设定区域拖动模式图6系统程序设计流程图6系统测试与结果6.1划亮反显擦除拖移的测试和结果各模块均调通,将调好的模块连在一起,加上5v电压源,启动进行系统初始化。按键进入点亮模式,用光电笔在LED点阵书写显示屏上接触,可以看到接触的点点亮,LCD上显示亮点的精确坐标。用光笔快速的在书写显示屏上划过,发现划过的地方变亮,多次操作都能实现。再次按键,进入反显模式,光笔划过,发现经过的地方没有亮其他的部分高亮,反显测试正常。再次按键进入擦除模式,用光笔在屏幕上划过,显示屏亮的地方变暗了。再按一次键可以看到整屏由亮变暗,实现了擦除这一功能。最后进入多字连写模式和区域拖动模式用光笔在LED点阵显示屏上写四个字,最后在屏上循环显示。最后对写的字用笔圈起来可以用笔移动。实现了对象拖移功能。经过反复的测试,所有的功能都能很好的实现,系统正常。6.2屏亮自动调节测试和结果外部光环境人为地改变后,测试LED点阵书写显示屏的亮度是否发生变化如果发生变化,则表明能够自动调节,结果屏亮随外部环境的变化而改变,系统正常。6.3超时关显示节电测试和结果加5v电压启动系统,对系统初始化。设定待机关显示的时间,在测试点接入万用表,不进行任何操作到设定的时间,看显示屏是否自动关闭。结果书写显示屏自动关闭,电路板测试点上的电流小于5mA。表明测试正常,完成系统要求。7结论本作品完成了题目的基本要求和发挥部分的全部要求,系统性能良好。通过对作品的各项进行了优化,使系统的性能有了提高。FPGA的运用提高了强大的数据处理能力和较高的运行速度,并且使电路简单。同时也提高了系统的集成度和可靠性。参考文献《模拟电子线路基础》,吴运昌著,:华南理工大学,20XX;《数字电子技术基础》,阎石著,:高等教育,1997年;《FPAG系统设计与实践》,黄智伟著,:电子工业,20XX;《EDA技术与应用〔第2版》,江国强著,:电子工业,20XX;《电子系统设计》,金平、明山、余祥著,:电子工业,20XX;附录附1:FPGA部构架图附2扫描电路硬件描述modulesaomiao<ram_data,ram_address, saomiao_clk,saomiao_en_n, leds_data32,leds_select, pen_in, pen_zuobiao_x,pen_zuobiao_y,pen_ok ,pen_du_shunjian,liangdu>; //reg[7:0]liangdu; input[7:0]liangdu; output[3:0]pen_du_shunjian; reg[3:0]pen_du_shunjian; //line91input[31:0]ram_data;output[4:0]ram_address;inputsaomiao_clk,saomiao_en_n;output[31:0]leds_data32;output[4:0]leds_select;inputpen_in;output[4:0]pen_zuobiao_x;output[4:0]pen_zuobiao_y;outputpen_ok;//兩次數據相同,座標值有效,輸出中斷regram_clock;reg[31:0]leds_data32;reg[4:0]leds_select;reg[4:0]pen_zuobiao_x;reg[4:0]pen_zuobiao_y;regpen_ok;reg[4:0]ram_address;reg[11:0]all_shixu;//d'2047.//hang+xiao.//6bits//\5..1\0.reg[5:0]pen_serial;reg[5:0]pen_serial_backup;reg[4:0]pen_serial_fan;always<negedgesaomiao_clk>beginif<!saomiao_en_n> begin leds_select<=5'b11111; all_shixu=9'd0; leds_data32<=32'h00000000; pen_zuobiao_x<=5'b00001; pen_zuobiao_y<=5'b00010; pen_du_shunjian<=0;////////////////////////////////////// endelse begin all_shixu<=all_shixu+1; //////////////////////////////////////////////////////////////// //liangdu='hff; if<all_shixu==<12'd2000+<liangdu*5-1281>>>leds_data32<=32'h00000000;//liangdu if<all_shixu==12'd2000>all_shixu<=12'd0; // case<all_shixu> 12'd0:leds_data32<=32'h00000000; 12'd1: begin leds_select<=leds_select+1; end // 12'd2:leds_data32<=32'hffff0000; 12'd52:pen_serial[5]<=pen_in; //bigwei 12'd53:leds_data32<=32'hff00ff00; 12'd103:pen_serial[4]<=pen_in; //3 12'd104:leds_data32<=32'hf0f0f0f0; 12'd154:pen_serial[3]<=pen_in; //2 12'd155:leds_data32<=32'hcccccccc; 12'd205:pen_serial[2]<=pen_in; //1 12'd206:leds_data32<=32'haaaaaaaa; 12'd256:pen_serial[1]<=pen_in; //smallwei // 12'd257:leds_data32<=32'h69969669;// 12'd307:pen_serial[0]<=pen_in; //反碼 /////////////////////////////////////////////////// 12'd308:leds_data32<=32'h0000ffff; 12'd358:pen_serial_fan[4]<=pen_in; //bigwei 12'd359:leds_data32<=32'h00ff00ff; 12'd409:pen_serial_fan[3]<=pen_in; //3 12'd410:leds_data32<=32'h0f0f0f0f; 12'd460:pen_serial_fan[2]<=pen_in; //2 12'd461:leds_data32<=32'h33333333; 12'd511:pen_serial_fan[1]<=pen_in; //1 12'd512:leds_data32<=32'h55555555; 12'd562:pen_serial_fan[0]<=pen_in; //smallwei ///////////////////////////////////////////////////// 12'd563:leds_data32<=ram_data;//xianshi /* 11'd369: begin pen_zuobiao_x<=pen_serial[5:1]; pen_zuobiao_y<=leds_select; end */ 12'd564:if< <pen_serial[0]!=<pen_serial[5]+pen_serial[4]+pen_serial[3]+pen_serial[2]+pen_serial[1]>> &&<pen_serial_fan==~pen_serial[5:1]> > begin if<pen_serial==pen_serial_backup> begin pen_zuobiao_x<=pen_serial[5:1]; pen_zuobiao_y<=leds_select; pen_ok<=1; end pen_serial_backup<=pen_serial;//getnewdata end //-- 12'd580:pen_ok<=0;//getnewdata endcase // endendEndmodule附3软核NIOSII程序#include"sys/alt_stdio.h"#include"system.h"#include"altera_avalon_pio_regs.h"#include"alt_types.h"#include"lcd12864.h"volatilealt_u8temp_x_old;volatilealt_u8temp_y_old;volatilealt_u8PEN_GET;//markintvolatilealt_u8DiJiGeZi;//第幾個字volatilealt_u32ram_zi_1[32];volatilealt_u32ram_zi_2[32];volatilealt_u32ram_zi_3[32];volatilealt_u32ram_zi_4[32];alt_u8disp_dijigezi[]="-";volatilealt_u8quyu_state;//區域功能volatilealt_u8start_x_point;volatilealt_u8start_y_point;volatilealt_u32ram_back_up[32];volatilealt_u32ram_shixin_xuanqu[32];/*volatilealt_u8quyu_state;//區域功能volatilealt_u8start_x_point;volatilealt_u8start_y_point;volatilealt_u32ram_back_up[32];volatilealt_u32ram_shixin_xuanqu[32];*/volatilealt_u8start_point_biaozhi;volatilealt_u8likai_start_point;//是否离开原点volatilealt_u8huidao_start_point;//是否回到原点volatilealt_u8shixing_xuanqu;//是否已经实心选区//volatilealt_u8temps_x;volatilealt_u8temps_y;alt_u8gillian_x[]="**_twins_y.";//實際上是yalt_u8gillian_y[]="**_twins_x.";//實際上時xalt_u8num_table[]="0123456789ABCDEF";alt_u8twins[]="twins!";alt_u8int_isr[]="--";alt_u8int_isr_cishu;volatilealt_u32ram_main[32];#definepen_ok_intIORD_ALTERA_AVALON_PIO_DATA<PIO_PEN_OK_BASE>&0X01voidmain_delays<alt_u16DELAYS>{for<;DELAYS>0;DELAYS-->;}voiddelays_32bit<alt_u32DELAYS>{for<;DELAYS>0;DELAYS-->;}voidpen_ok_ISR<void*context,alt_u32id>//中斷服務程序。{temps_x=IORD_ALTERA_AVALON_PIO_DATA<PIO_PEN_X_BASE>;//&0X1f;temps_y=IORD_ALTERA_AVALON_PIO_DATA<PIO_PEN_Y_BASE>;//&0X1f;PEN_GET=0x01;IOWR_ALTERA_AVALON_PIO_IRQ_MASK<PIO_PEN_OK_BASE,0X0>;IOWR_ALTERA_AVALON_PIO_EDGE_CAP<PIO_PEN_OK_BASE,0>;IOWR_ALTERA_AVALON_PIO_IRQ_MASK<PIO_PEN_OK_BASE,0X1>;}intmain<>{alt_u8CHOI;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,0>;LCD_Init<>;alt_irq_register<PIO_PEN_OK_IRQ,0,pen_ok_ISR>;//注册外部中断,对应的参数分别为中断优先级,传递//到中断服务函数的参数,和中断服务函数。IOWR_ALTERA_AVALON_PIO_IRQ_MASK<PIO_PEN_OK_BASE,0x1>;//使能按键中断位,这里在定义硬件时只用了1位IOWR_ALTERA_AVALON_PIO_EDGE_CAP<PIO_PEN_OK_BASE,0x0>;//边沿捕获寄存器清零//for<CHOI=0;CHOI<32;CHOI++>{IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_ADDR_BASE,CHOI>;main_delays<3>;ram_main[CHOI]=IORD_ALTERA_AVALON_PIO_DATA<POWER_ON_RAM_READ_BASE>;//&0X1f;}start_point_biaozhi=1;likai_start_point=0;//是否离开原点huidao_start_point=0;//是否回到原点shixing_xuanqu=0;//是否已经实心选区alt_u8yuandianzuobiao[]="X:--Y:--";alt_u8key_mode=IORD_ALTERA_AVALON_PIO_DATA<KEY_STATE_BASE>;//&0X1f;alt_u32temps_set_point;switch<key_mode>{case<0x00>:LCD_String<26,"点亮模式">;while<1>{//if<IORD_ALTERA_AVALON_PIO_DATA<PEN_LINE_BASE>==1>{floatx_yuan,y_yuan;floatx_zhong,y_zhong;alt_u8x_all_temp,y_all_temp;floatxielv_temp;floatxielv_all;x_yuan=temp_x_old;y_yuan=temp_y_old;x_zhong=temps_x;y_zhong=temps_y;xielv_temp=1;//<<x_zhong-x_yuan>/<y_zhong-y_yuan>>;//if<<temps_x>=temp_x_old>&&<temps_y>=temp_y_old>>{for<y_all_temp=0;y_all_temp<33;y_all_temp++>{for<x_all_temp=0;x_all_temp<32;x_all_temp++>{xielv_all=<x_all_temp/*-x_yuan*/>/<y_all_temp/*-y_yuan*/>;if<xielv_all==xielv_temp>{temps_set_point=1;temps_set_point=temps_set_point<<x_all_temp;ram_main[y_all_temp]=ram_main[y_all_temp]|temps_set_point;}}}}for<CHOI=0;CHOI<32;CHOI++>{IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_DATA_BASE,ram_main[CHOI]>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_ADDR_BASE,CHOI>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,1>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,0>;}}}/*case<0x00>:LCD_String<26,"点亮模式">;while<1>{if<0x01==PEN_GET>{PEN_GET=0x00;gillian_x[0]=num_table[temps_x/10];//串行gillian_x[1]=num_table[temps_x%10];gillian_y[0]=num_table[temps_y/10];gillian_y[1]=num_table[temps_y%10];//LCD_String<0,gillian_x>;LCD_String<8,gillian_y>;int_isr_cishu++;int_isr[0]=num_table[int_isr_cishu/16];int_isr[1]=num_table[int_isr_cishu%16];LCD_String<7,int_isr>;temps_set_point=1;temps_set_point=temps_set_point<<temps_x;ram_main[temps_y]=ram_main[temps_y]|temps_set_point;*//*if<IORD_ALTERA_AVALON_PIO_DATA<PEN_LINE_BASE>==1>{alt_u8x_yuan,y_yuan;alt_u8x_zhong,y_zhong;alt_u8x_all_temp,y_all_temp;alt_u8xielv_temp;x_yuan=temp_x_old;y_yuan=temp_y_old;x_zhong=temps_x;y_zhong=temps_y;xielv_temp=<<x_zhong-x_yuan>/<y_zhong-y_yuan>>;if<<temps_x>=temp_x_old>&&<temps_y>=temp_y_old>>{for<y_all_temp=0;y_all_temp<32;y_all_temp++>{for<x_all_temp=0;x_all_temp<32;x_all_temp++>{if<<<x_all_temp-x_yuan>/<y_all_temp-y_yuan>>==xielv_temp>{temps_set_point=1;temps_set_point=temps_set_point<<x_all_temp;ram_main[y_all_temp]=ram_main[y_all_temp]|temps_set_point;}}}}}temp_x_old=temps_x;temp_y_old=temps_y;*//*}for<CHOI=0;CHOI<32;CHOI++>{IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_DATA_BASE,ram_main[CHOI]>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_ADDR_BASE,CHOI>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,1>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,0>;}}break;*/case<0x01>:LCD_String<26,"擦除模式">;while<1>{if<0x01==PEN_GET>{PEN_GET=0x00;gillian_x[0]=num_table[temps_x/10];//串行gillian_x[1]=num_table[temps_x%10];gillian_y[0]=num_table[temps_y/10];gillian_y[1]=num_table[temps_y%10];//LCD_String<0,gillian_x>;LCD_String<8,gillian_y>;int_isr_cishu++;int_isr[0]=num_table[int_isr_cishu/16];int_isr[1]=num_table[int_isr_cishu%16];LCD_String<7,int_isr>;temps_set_point=1;temps_set_point=temps_set_point<<temps_x;ram_main[temps_y]=ram_main[temps_y]&<~temps_set_point>;}for<CHOI=0;CHOI<32;CHOI++>{IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_DATA_BASE,ram_main[CHOI]>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_ADDR_BASE,CHOI>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,1>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,0>;}}break;case<0x02>:LCD_String<26,"多字连写">;DiJiGeZi=1;while<1>{disp_dijigezi[0]=num_table[DiJiGeZi];if<DiJiGeZi!=5>LCD_String<30,disp_dijigezi>;elseLCD_String<26,"循环显示">;if<DiJiGeZi==5>while<1>{for<CHOI=0;CHOI<32;CHOI++>{IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_DATA_BASE,ram_zi_1[CHOI]>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_ADDR_BASE,CHOI>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,1>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,0>;}delays_32bit<0xffffff>;for<CHOI=0;CHOI<32;CHOI++>{IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_DATA_BASE,ram_zi_2[CHOI]>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_ADDR_BASE,CHOI>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,1>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,0>;}delays_32bit<0xffffff>;for<CHOI=0;CHOI<32;CHOI++>{IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_DATA_BASE,ram_zi_3[CHOI]>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_ADDR_BASE,CHOI>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,1>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,0>;}delays_32bit<0xffffff>;for<CHOI=0;CHOI<32;CHOI++>{IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_DATA_BASE,ram_zi_4[CHOI]>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_ADDR_BASE,CHOI>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,1>;IOWR_ALTERA_AVALON_PIO_DATA<PIO_RAM_EN_BASE,0>;}delays_32bit<0xffffff>;}if<<IORD_ALTERA_AVALON_PIO_DATA<KE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年03月日照银行(山东省)2024届(春季)校园招考笔试历年参考题库附带答案详解
- 2025年办公区域安全监控系统采购合同3篇
- 2024年金融借款协议规范格式版B版
- 2024年中国白刚玉球衬市场调查研究报告
- 2024年项目资源分配合同3篇
- 2024年电子商务平台运营与技术服务合同
- 2024年度只分红不占股的股权激励合作协议3篇
- 2025版节能环保型塔吊租赁及维护服务合同3篇
- 2025版家用多联机空调安全操作与保养合同3篇
- 2025版篮球教练员篮球运动赛事策划与运营聘用协议3篇
- 美甲店卫生制度规章范本
- 湘少版三年级下册英语单词默写1(附单元标题句)
- 2023年昆明市重点中学物理高二上期末经典模拟试题含解析
- 试制过程记录表
- 2024届浙江省宁波市镇海区镇海中学高一物理第一学期期末质量检测试题含解析
- 耶鲁博弈论24讲全笔记
- 道路运输安全生产目标责任书
- 高中音乐-《锦鸡出山》教学课件设计
- (20)-土壤侵蚀原理-第六章混合侵蚀
- 国开大学2023年01月11026《经济学(本)》期末考试答案
- 南阳姜营机场
评论
0/150
提交评论