LED点阵书写显示屏设计方案
LED点阵书写显示屏25页

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语言。
一、技术指标1.1设计意义LED显示屏是一种通过控制半导体发光二极管的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。
图文显示屏可与计算机同步显示汉字、英文文本和图形;视频显示屏采用微型计算机进行控制,图文、图像并茂,以实时、同步、清晰的信息传播方式播放各种信息,还可显示二维、三维动画、录像、电视、VCD节目以及现场实况。
LED显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。
本设计基于LED点阵的普通显示效果加上光笔检测模块,实现自由书写显示功能。
它的优点:亮度高、工作电压低、功耗小、微型化、易与集成电路匹配、驱动简单、寿命长、耐冲击、性能稳定。
基于单片机的LED点阵显示屏的设计

基于单片机的LED点阵显示屏的设计LED点阵显示屏是一种常见的显示设备,它通过控制各个LED的亮灭来显示文字、图形或动画。
在这篇文章中,我们将介绍基于单片机的LED 点阵显示屏的设计。
一、设计目标设计一个基于单片机的LED点阵显示屏,使其能够显示各种文字、图形和动画。
同时,要求显示屏的显示效果清晰、稳定,能够满足日常使用的需求。
二、设计方案1.硬件设计(1)点阵屏:选择合适的点阵屏作为显示屏的输出设备。
点阵屏的种类有很多,常见的有8x8、16x16和32x32等不同尺寸的点阵屏。
根据实际需求选择合适的尺寸。
(2)单片机:选择一块适合的单片机作为控制器。
单片机的选择需要考虑其计算能力、扩展性和易用性等因素。
(3)扩展模块:根据需要,可以选择添加一些额外的扩展模块,如按键模块、声音模块等,以增加显示屏的功能。
(4)电源模块:为显示屏提供稳定的电源,以保证其正常工作。
2.软件设计(1)驱动程序:编写驱动程序,通过单片机控制各个LED的亮灭。
根据点阵屏的不同类型,编写相应的驱动程序。
(2)显示程序:编写显示程序,将要显示的文字、图形或动画转换成相应的点阵数据,然后通过驱动程序显示在点阵屏上。
(3)用户界面:设计一个用户界面,使用户能够方便地输入要显示的文字、选择图形或动画等,然后通过单片机控制显示屏显示出来。
三、实施步骤1.硬件部分(1)按照设计方案选择合适的点阵屏、单片机和扩展模块,并连接它们。
(2)根据点阵屏的引脚定义,设计相应的电路板,并进行制作。
(3)将单片机和扩展模块焊接到电路板上,并连接好相应的引脚。
(4)连接电源模块,为整个系统提供电源。
2.软件部分(1)根据点阵屏的类型,编写相应的驱动程序。
(2)编写显示程序,将要显示的文字、图形或动画转换成点阵数据。
(3)设计用户界面,编写相应的程序,将用户输入的内容转换成可显示的数据。
(4)将驱动程序、显示程序和用户界面程序上传到单片机。
四、测试与调试完成硬件和软件的设计后,进行测试与调试。
点阵式汉字LED显示屏电路原理与制作(精)

点阵式汉字LED显示屏电路原理与制作汉字显示屏广泛应用与汽车报站器,广告屏等。
本文介绍一种实用的汉字显示屏的制作,考虑到电路元件的易购性,没有使用8*8的点阵发光管模块,而是直接使用了256个高量度发光管,组成了16行16列的发光点阵。
同时为了降低制作难度,仅作了一个字的轮流显示,实际使用时可根据这个原理自行扩充显示的字数。
1汉字显示的原理:我们以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。
即国标汉字库中的每一个字均由256点阵来表示。
我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。
事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素范围内的任何图形。
用8位的AT89C51单片机控制,由于单片机的总线为8位,一个字需要拆分为2个部分。
一般我们把它拆分为上部和下部,上部由8*16点阵组成,下部也由8*16点阵组成。
在本例中单片机首先显示的是左上角的第一列的上半部分,即第0列的p00---p07口。
方向为p 00到p07 ,显示汉字“大”时,p05点亮,由上往下排列,为p0.0 灭,p0.1 灭, p0.2 灭p0.3 灭, p0.4 灭, p0.5 亮,p0.6 灭,p0.7 灭。
即二进制00000100,转换为16进制为 04h.。
上半部第一列完成后,继续扫描下半部的第一列,为了接线的方便,我们仍设计成由上往下扫描,即从p27向p20方向扫描,从上图可以看到,这一列全部为不亮,即为00000000,16进制则为00h。
然后单片机转向上半部第二列,仍为p05点亮,为00000100,即16进制04h.这一列完成后继续进行下半部分的扫描,p21点亮,为二进制00000010,即16进制02h.依照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字“大”的扫描代码为:04H,00H,04H,02H,04H,02H,04H,04H04H,08H,04H,30H,05H,0C0H,0FEH,00H05H,80H,04H,60H,04H,10H,04H,08H04H,04H,0CH,06H,04H,04H,00H,00H由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出它的扫描代码从而显示在屏幕上。
LED16×16点阵汉字显示屏设计

XX科技职业学院毕业论文LED16×16点阵汉字显示屏LED 16 x 16 bitmap characters display screen院系:电子科技学院专业班级:08电信(1)班学生姓名:学号:指导教师姓名:指导教师职称:二O一O 年十一月目录第一章绪论 (1)第二章任务设计………………………………………………………2.1 设计依据 (40)2.2 要求及主要内容………………………………………………………2.3 途径和方法.....................................................................第三章AT89C51单片机概述 (52)3.1 AT89C51单片机的结构……………………………………………3.2 管脚说明 (60)3.3 振荡器特性……………………………………………………………第四章方案设计 (66)4.1 总体设计………………………………………………………………4.2 系统硬件选择…………………………………………………………4.3 硬件电路实现…………………………………………………………4.4 软件的程序实现………………………………………………………结论 (71)致谢 (74)参考文献 (75)LED16×16点阵汉字显示屏摘要 :LED点阵显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。
它具有发光效率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。
并广泛的应用于公交汽车,码头,商店,学校和银行等公共场合的信息发布和广告宣传。
LED显示屏经历了从单色,双色图文显示屏到现在的全彩色视频显示屏的发展过程,自20世纪八十年代开始,LED显示屏的应用领域已经遍布交通、电信、教育、证券、广告宣传等各方面。
LED点阵显示屏可以显示数字或符号,通常用来显示时间、速度、系统状态等。
LED点阵手写显示屏

LED点阵书写显示屏所在院系:电气与控制工程学院作者:李向杰、刘赟超、符祝辉日期:2015年07月25日摘要本系统以MSP40F149为核心,设计并制作了一个基于32×32LED点阵显示模块书写显示屏。
该点阵可以实现扫描微亮及显示点亮两种工作方式,在扫描微亮的状态下,通过自制光电笔扫描和按键切换可实现“点亮、划亮、擦除、反显”等书写功能和“显示点亮坐标”等显示功能。
硬件设计方案使用74H595来驱动LED点阵显示,通过1602液晶来显示坐标。
作品技术要求不高但对扫描速度和硬件系统的搭建有较高的要求。
关键词:MSP430F149;74H595;光电三极管;LED点阵1 系统方案设计1.1 系统总方案设计整个系统由MSP430F149微控制器作为系统的核心控制芯片,32*32LED点阵起到了各种形式显示的作用,通过光电三极管和LM293比较器构成光电检测电路,1602液晶显示在进行点扫描时对点坐标的显示、光敏电阻感光电路的模块组成。
系统结构如图1-1所示。
图 1-1 系统结构图2 系统方案论证2.1主控制器选择论证方案一:STC89C51单片机是8位单片机。
其指令是采用的称为“cisc”的复杂指令集,共具有111条指令。
其电源电压为5伏,有两种低功耗模式,待机方式和掉电方式。
正常情况下消耗的电流为24mA,在待机状态下其耗电电流仍为3mA,为了保存RAM中的数据,还需提供约50mA的电流。
再者,虽然其具有不少开发工具,但如何在线编程还是一很大问题。
方案二:CPLD(EPM240T100C5):具有丰富的I/O口、内部逻辑和连线资源、运行速度快、能够显示大量的信息,但CPLD实现运算功能复杂,在该系统中,需要显示的信息量较少,但是控制和运算功能较多,用CPLD实现一些运算功能复杂。
方案三:MSP430系列的单片机电源电压采用1,8-3.6V低电压,RAM数据保持方式下耗电仅0.1uA,IO口漏电流最大仅为50nA。
LED点阵显示屏设计说明书

目录摘要 (1)前言 (2)1 概述 (2)1.1 LED电子显示屏的分类 (2)1。
2 LED显示屏的应用示例 (2)1。
3 设计任务 (2)2 显示原理及控制方式分析 (3)2.1 LED点阵模块结构 (3)2。
2 LED 动态显示原理 (3)2.3 LED常见的控制方式 (5)3 总体方案设计与分析 (6)3.1显示单元的考虑 (6)3。
2 滚屏的实现 (6)3。
3 关于可扩展性 (6)3。
4 微控制器的考虑 (6)3.5 总体电路结构及工作原理 (6)3.5。
1 硬件电路框图 (6)3.5。
2 工作原理 (7)4 硬件电路设计 (7)4。
1 显示单元电路设计 (7)4。
1。
1 LED点阵模块的选择 (8)4.1.2 列驱动电路设计 (8)4。
1。
3 行驱动电路设计 (9)4.2 单片机控制系统电路设计 (10)4.2.1单片机的选型 (10)4。
3对于系统电源及通信电缆的选择 (11)4。
4 其它元件的选择 (11)5 单片机软件设计与仿真 (12)5.1 开发工具及语言 (12)5。
2 单片机软件流程 (13)5。
3 单片机软件中算法的实现 (14)5.4 调试及仿真结果 (15)6 PCB设计及硬件调试 (16)6。
1 PCB设计平台 (16)6.2元件布局及PCB整体结构工艺 (16)6。
3 布线工艺与准则 (16)7 总结 (17)谢辞............................................................................................ 错误!未定义书签。
参考文献. (18)附录 (19)LED点阵电子显示屏系统的设计xxx摘要:本设计使用STC系列高速单片机作为主控制模块,利用简单的外围电路来驱动16×64的点阵LED显示屏。
本LED显示屏能够以动态扫描的方式同时显示特定的四个16×16点阵汉字。
单片机课程设计--+16x16点阵LED电子显示屏的设计

单片机课程设计-- 16x16点阵LED电子显示屏的设计第一章系统总体方案设计LED驱动显示采用动态扫描方法, 动态扫描方式是逐行轮流点亮, 这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。
以16×16点阵为例, 把所有同一行的发光管的阳极连在一起, 把所有同一列的发光管的阴极连在一起(共阳的接法), 先送出对应第1行发光管亮灭的数据并锁存, 然后选通第1行使其燃亮一定的时间, 然后熄灭;再送出第2行的数据并锁存, 然后选通第2行使其燃亮相同的时间, 然后熄灭;…第16行之后, 又重新燃亮第1行, 反复轮回。
当这样轮回的速度足够快(每秒24次以上), 由于人眼的视觉暂留现象, 就能看到显示屏上稳定的图形。
该方法能驱动较多的LED, 控制方式较灵活, 而且节省单片机的资源。
显示数据传输采用串行传输的方法, 控制电路可以只用一根信号线, 将列数据一位一位传往列驱动器, 在硬件方面无疑是十分经济的。
但串行传输过程较长, 数据按顺序一位一位地输出给列驱动器, 只有当一行的各列数据都已传输到位之后, 这一行的各列才能并行地进行显示。
对于串行传输方式来说, 列数据准备时间可能相当长, 在行扫描周期确定的情况下, 留给行显示的时间就太少了, 以致影响到LED的亮度。
采用串行传输中列数据准备和列数据显示的时间矛盾, 可以采用重叠处理的方法。
即在显示本行各列数据的同时, 传送下一行的列数据。
为了达到重叠处理的目的, 列数据的显示就需要有锁存功能。
对于列数据准备来说, 它应能实现串入并出的移位功能。
这样, 本行已准备好的数据打入并行锁存器进行显示时, 串行移位寄存器就可以准备下一行的列数据, 而不会影响本行的显示。
系统框图如图一图一点阵显示器硬件系统框图第二章系统硬件电路的设计硬件电路大致上可以分为单片机系统及外围电路、列驱动电路和行驱动电路三部分。
一. 单片机系统及外围电路单片机采用89C51或更高频率的晶振, 以获得较高的刷新频率, 使得显示更稳定。
LED点阵书写显示屏的设计

LED点阵书写显示屏的设计摘要:LED 显示屏的设计硬件主要由STC89C58 单片机最小系统、32 乘以32 的双色点阵显示阵列、光笔、按键、液晶显示屏等组成。
双色点阵中的红色LED 始终工作在微亮的扫描状态,STC89C58 单片机利用自制的光笔中红外光电三极管检测光笔触及位置处红色LED 灯的点亮,计算出光笔位置的行列坐标,并根据按键设置的不同工作模式控制LED 显示,从而实现点亮、划亮、反显、清屏、笔画拖动、轮流显示等功能。
显示屏能根据环境光强自动调节显示屏的显示亮度,当在设定时间内光笔未接触显示屏或按键未按下时关闭所有显示,并使系统进入休眠状态,减少电能消耗,当有按键按下时系统恢复运行。
关键词:STC89C58;LED 双色点阵;红外光电三板管光笔0 引言近年来,点阵LED 显示屏利用发光二极管构成的点阵模块或像素单元组成可变面积的显示屏幕,以可靠性高、使用寿命长、环境适应能力强、性能价格比高、使用成本低等特点,已成为众多显示媒体以及户外作业显示的电子工具,广泛地应用于车站、宾馆、金融、证券、邮电、体育等广告发布或交通运输等行业。
目前LED 显示屏的设计已经有多种方法可以实现,本设计是基于STC89C58 单片机利用自制的光笔中红外光电三极管检测光笔触及位置处红色LED 灯的点亮,计算出光笔位置的行列坐标,并根据按键设置的不同工作模式控制LED 显示,从而实现点亮、划亮、反显、清屏、笔画拖动、轮流显示等功能。
1 系统设计方案用双色LED 点阵(红色和绿色)模块组合成32 乘以32 的LED 点阵屏。
其中红色LED 作微亮扫描检测用,绿色LED 作显示用,用红外光电三极管自制光笔。
在检测时依次点亮红色LED,当点亮到某个LED 时,如果此时光笔放在该LED 时,这时红外光电三极管的阻值会发生变化,通过相应的检测电路可以得出一个高低电平的变化,单片机检测到信号变化时就可以判断光。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LED点阵书写显示屏设计方案第一章设计任务及要求1.1、任务设计并制作一个基于32x32点阵LED模块的书写显示屏,其系统结构如图1所示。
在控制器的管理下,LED点阵模块显示屏工作在人眼不易觉察的扫描微亮和人眼可见的显示点亮模式下;当光笔触及LED点阵模块表面时,先由光笔检测触及位置处LED点的扫描微亮以获取其行列坐标,再依据功能需求决定该坐标处的LED是否点亮至人眼可见的显示状态(如下图中光笔接触处的深色LED点已被点亮),从而在屏上实现“点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移”等书写显示功能。
图1.1 LED点阵书写显示屏系统结构示意图1.2、要求(1)在“点亮”功能下,当光笔接触屏上某点LED时,能即时点亮该点LED,并在控制器上同步显示该点LED的行列坐标值(左上角定为行列坐标原点)。
(2)在“划亮”功能下,当光笔在屏上快速划过时,能同步点亮划过的各点LED,其速度要求2s能划过并点亮40点LED。
(3)在“反显”功能下,能对屏上显示的信息实现反相显示(即:字体笔画处不亮,无笔画处高亮)。
(4)在“整屏擦除”功能下,能实现对屏上所显示信息的整屏擦除。
第二章系统整体框架系统整体框架图如图一所示,分为控制模块、显示模块、光笔模块、LED点阵模块和辅助模块(包括键盘、数据存储等)。
图2.1 系统整体框架图第三章方案论证与比较3.1、控制模块在数字信号处理中,常用的控制器有FPGA、DSP及嵌入式51单片机。
FPGA可以直接用硬件扫描、编码、解码、纠错,速度快、稳定性高,但其价格昂贵,很多的功能在本设计难以使用到。
DSP都有较快的数据处理速度,能实时地、快速地监测信号量的变化,但其受采样频率的限制,处理频率围有限。
AT89S52 是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案,具有硬件的设计十分简单,软件开发周期短等特点。
考虑到价格、功耗及系统的要求,最终选用AT89S52单片机为控制系统。
3.2、光笔模块光笔设计的关键是选择合适的传感器件,只有具有很高的灵敏度和一定的响应时间的传感器才能完成系统的要求及功能。
方案一:采用核心部件为光敏电阻制成的光笔检测系统。
光敏电阻是将光能转换为电能的一种传感器件,它是构成光电式传感器的主要部件。
光敏电阻结构简单、使用方便、价格便宜,但其响应时间长,不易检测。
方案二:采用光敏二极管,与光敏电阻相比有较好的高频特性,具有较好的可靠性,功耗低,且同样价格低廉,使用方便。
比较两种器件,系统设计中选用光敏二极管制作光笔模块。
3.3、LED点阵模块LED点阵的显示方式有以下几种:1)在LED点阵上贴上一层触摸屏,形成压膜式LED点阵。
把触摸屏的信息通过微处理器处理来控制LED点阵显示。
这种显示方式准确,反应速度快,光笔制作简单,但造价高。
2)用普通的LED点阵,在LED点阵的边上加上红外线传感接收器,构成32×32的红外线网,同样光笔制作简单,但硬件复杂,造价也比较高。
3)用普通的LED点阵,通过自制的光笔传递信息送入89S52单片机,由AT89S52单片机编程确定LED点阵坐标。
虽然编程复杂,但硬件简单,而且造价最低。
综合各方面的因素,选择了第三个方案。
第四章系统硬件设计4.1、系统的总体设计本设计以AT89S52为核心部件结合按键、数码管显示、光笔检测及LED点阵驱动显示等部分组成。
系统框图如图4.1所示:4.2图4.2 光电笔电路图采用C语言2分法查寻需要10次,每查寻一次的时间为5ms。
普通的光敏二极管反应时间在30μs左右,完全可以满足设计要求。
电路见图4.2。
4.3、点阵屏驱动参数设计本系统采用共阳极型低态扫描高态显示信号驱动电路和74LS373锁存器。
系统的锁存器低态输出,其I可达24mA,足以驱动一个LED。
我们把32×32LED点阵,等分为OL四个16×16的LED点阵来驱动,设定驱动每列LED的电流为15mA,则流过驱动三极管的总电流为240mA,8550三极管最大的工作电流可达500mA,因此选择8550三极管驱动。
电路图见图4.3和4.4。
图4.3 由74LS373锁存器组成的驱动电路图4.4 驱动原理图4.5、电源电路图4.5 电源部分滤波电路电源输入电源部分采用采用体积小,效率高的开关电源,为系统提供稳定的5V直流电压。
其电路图如图4.5所示。
4.6、单片机人机界面电路图4.6.1、键盘电路键盘是使用比较简单的独立式键盘,而且具有发光二极管指示功能模块。
在程序中采用中断扫描的方式,在没有键操作时CPU执行正常程序,只在有键操作时才处理键盘程序。
其电路如图4.6所示:图4.6 键盘输入4.6.2、LED显示电路为了满足系统在工作时能准确显示光笔对应亮点所处的行列坐标值,本设计中采用型号为LCM103的液晶显示器显示。
LCM103为10位多功能通用型8段式液晶显示模块,含看门狗时钟发生器2种频率的蜂鸣驱动电路置显示RAM,可显示任意字段笔画划3-4线串行接口可与任何单片机接口。
其电路图如图4.7所示。
图4.7 LED显示电路第五章程序设计5.1、系统程序流程图本设计中,要实现的功能基本都要通过单片机程序来实现。
由于采用的是普通的光敏二极管,在一定程度上限制了反应速度,因此编程采用了多路信号同时输入和数学中的二分法思想编程,提高了系统的执行效率。
系统的程序流程图如图5.1所示:图5.1 系统的程序流程图5.2、程序源码//x轴显示#include "reg51.h"#define uc unsigned char#define ui unsigned int#define uli unsigned long int//T0定时时间设定#define T0_time_init 1124 //1.25ms#define d_ray 2#define time0_H ((65535-T0_time_init)/256)#define time0_L ((65535-T0_time_init)%256)#define address_h P2#define data_io P0#define code_add P1#define y_one 0x8f#define y_ten 0xaf#define y_hun 0xcf#define y_kilo 0xef#define y_5 0xbf#define y_4 0x9f#define y_6key 0xdf#define y_7key 0xff#define y_no 0x0fuc code show_code[]={0xc0,0xcf,0x64,0x46,0x4b,0x52,0x50,0xc7,0x40,0x42,0x41,0x58,0xf0,0x4c,0x70, 0x71,0xff,};/*uc xdata data_q[0x7fff] _at_ 0x0000;//uc xdata y_6key _at_ 0xdf00;//uc xdata y_7key _at_ 0xff00;data_q[]={0xc0,0xcf,0x64,0x46,0x4b,0x52,0x50,0xc7,0x40,0x42,0x41,0x58,0xf0,0x4c,0x70, 0x71,0xff,} ; */uc xdata data_x1[8][128] _at_ 0x0000;uli xdata data_xt[32] _at_ 0x0800;uli xdata data_xn[32] _at_ 0x0a00;uli xdata data_xm[32] _at_ 0x0c00;//uli data_xt[32]={0};sbit black_ray=P3^5;sbit black_louch=P3^4; sbit await_con=P3^2;sbit clssed_screen=P3^3; bit flag_key_read=0;bit flag_time_manage=0; bit flag_screen_out=0; bit flag_bf_clr=0;bit flag_open_await=0; bit flag_fast_xy=1;bit flag_fast_move=1; bit flag_count_fre=0; bit flag_fre_first=0; uc key_reg;uc indata;uc coo_x=32;uc coo_y=32;uc await=5;uc show_page=0;ui await_count=0;uc move_jraw=0;uc x0;uc x1;uc x2;uc y0;uc y1;uc y2;uc move_y;uc move_x;uc move_x0;uc move_x1;uc move_x2;uc move_y0;uc move_y1;uc move_y2;init(); //初始化工作//key_read(); //键盘读入//data_out_manage(); //数据输出处理//time_manage(); //定时处理//number_show(ui,bit); //数码显示//key_code(uc,uc); //按键译码//led_scon(); //LED扫描//led_scon_y(uc); //扫描Y轴//number_show_two(uc,uc); //二个单字节delay_1ms(uc);delay_10us(uc);screen_out(); //屏幕输出coo_manage(); //坐标处理//choose_draw();move_draw_mamage();restore_mamage();//*************************************************************// //主程序////*************************************************************// main(){data_xt[32]=11;init(); //初始化工作//while(1){if(flag_key_read==1){ flag_key_read=0;key_read(); //键盘读入//if(key_reg!=0){ data_out_manage(); //数据输出处理//}if(black_louch==0){ led_scon(); //LED扫描if(coo_y<32){ if(flag_count_fre==0){number_show_two(coo_x,coo_y);coo_manage(); //坐标处理//await_count=0;coo_y=99; //防止多次进入}}}}if(flag_time_manage==1){ flag_time_manage=0;time_manage();}if(flag_screen_out==1){ flag_screen_out=0;screen_out(); //屏幕输出}}}//*************************************************************// //主程序_end////*************************************************************////*************************************************************// //初始化工作 ////*************************************************************//init(){ uc c;//定时器设置(5点)TMOD=0x51; //T0计时器设置//TMOD: GATE C/!T M1 M0 GATE C/!T M1 M0 // T1 外双控 =1计数工作方式01:16位|| T0EA=1;ET0=1;TH0=time0_H;TL0=time0_L;TR0=1;//id口处理address_h=y_no;data_io=0xff;//存数据处理//调试口number_show_two(0,0); /* key_reg=11;delay_1ms(250);data_out_manage();move_jraw=1;coo_x=8;coo_y=8;delay_1ms(250);coo_manage();coo_x=16;coo_y=16;coo_manage();delay_1ms(250);move_jraw=2;coo_x=16;coo_y=16;delay_1ms(250);coo_manage();coo_x=16;coo_y=16;delay_1ms(250);coo_manage();coo_x=20;coo_y=20;delay_1ms(250);coo_manage();*/}//***********************************/**************************/ //初始化工作 _end////*************************************************************////*************************************************************// //键盘读入////*************************************************************//key_read(){ static n=0; //0一直无按键 1上次进入按键 2一直有按键 3上次退出按键uc a,b;bit point;data_io=0xff;address_h=y_6key;a=data_io;address_h=y_7key;b=data_io;address_h=y_no;// number_show(a*0x100+b,1);if(a==0xff&b==0xff)point=0; //无按键else{point=1; //有按键// number_show(6666,0);}switch (n){case 0:if(point==1)n=1;elsen=0;break;case 1:if(point==1){ n=2;key_code(a,b);}elsen=0;break;case 2:if(point==1)n=2;elsen=3;break;case 3:if(point==1)n=2;elsen=0;break;default:break;}}key_code(uc a,uc b) //按键译码// { //number_show(5555,0);switch (b){case 0xfe:key_reg=1;break;case 0xfd:key_reg=2;break;case 0xfb:key_reg=3;break;case 0xf7:key_reg=4;break;default:key_reg=0xff; //错误信号break;}}//*************************************************************// //键盘读入_end////*************************************************************// //*************************************************************// //输出处理 ////*************************************************************// data_out_manage(){ uc c,n;uli data_long,t;// number_show(key_reg,0);switch (key_reg){case 1: //反选for(c=0;c<128;c++){ t=data_x1[show_page][c];t=~t;data_x1[show_page][c]=t;}break;case 2: //整屏清除for(c=0;c<128;c++){data_x1[show_page][c]=0xff;}break;case 3:flag_bf_clr=1;number_show(10,0);break;case 4:flag_bf_clr=0;number_show(0,0);break;}key_reg=0;}//*************************************************************// //输出处理_end////*************************************************************// //*************************************************************// //数码显示////*************************************************************// number_show(ui datas,bit point){ uc a;if(point==0){a=datas%10; //个位address_h=y_one;data_io=show_code[a];a=datas/10%10; //十位address_h=y_ten;data_io=show_code[a];a=datas/100%10; //百位address_h=y_hun;data_io=show_code[a];a=datas/1000; //千位address_h=y_kilo;data_io=show_code[a];}else{ a=datas%0x10; //个位address_h=y_one;data_io=show_code[a];a=datas/0x10%0x10; //十位address_h=y_ten;data_io=show_code[a];a=datas/0x100%0x10; //百位address_h=y_hun;data_io=show_code[a];a=datas/0x1000; //千位address_h=y_kilo;data_io=show_code[a];}address_h=y_no;data_io=0xff;}//二个单字节 <100number_show_two(uc c,uc b){ uc a;a=b%10;address_h=y_one;data_io=show_code[a];a=b/10;address_h=y_ten;data_io=show_code[a];a=c%10;address_h=y_hun;data_io=show_code[a];a=c/10;address_h=y_kilo;data_io=show_code[a];address_h=y_no;data_io=0xff;}//*************************************************************// //数码显示_end////*************************************************************// //*************************************************************// //LED扫描////*************************************************************// led_scon(){ uc i;data_io=0; //扫描0-15//code_add=8;code_add=10;code_add=12;code_add=14;code_add=6; //关闭373// while(1);data_io=0xff;code_add=9;code_add=11;code_add=13;code_add=15;code_add=7; //关闭373for(i=0;i<16;i++){code_add=i<<4;clssed_screen=0; //开扫描delay_10us(d_ray);if(black_ray==0) //有光返回{coo_x=i;i=i<<4;coo_y=led_scon_y(i); //扫描Y轴clssed_screen=1; //关扫描return;}clssed_screen=1; //关扫描}data_io=0xff; //扫描16-31//code_add=8;code_add=10;code_add=12;code_add=14;code_add=6; //关闭373data_io=0;code_add=9;code_add=11;code_add=13;code_add=15;code_add=7; //关闭373for(i=0;i<16;i++){code_add=i<<4;clssed_screen=0; //开扫描delay_10us(d_ray);if(black_ray==0){coo_x=i+16;i=i<<4;coo_y=led_scon_y(i); //扫描Y轴clssed_screen=1; //关扫描return;}clssed_screen=1; //关扫描}coo_x=32;coo_y=32;}//扫描Y轴led_scon_y(uc scon_x){ uc i;data_io=0; //第一排373code_add=8;code_add=9;code_add=1; //关闭373data_io=0xff;code_add=10;code_add=11;code_add=12;code_add=13;code_add=14;code_add=15;code_add=7; //关闭373code_add=scon_x;data_io=0xff;clssed_screen=0; //开扫描delay_10us(d_ray);if(black_ray==0) //有光返回{ clssed_screen=1; //关扫描for(i=0;i<8;i++){ data_io=~1<<i; //第一排373code_add=8;code_add=9;code_add=1; //关闭373code_add=scon_x;clssed_screen=0; //开扫描delay_10us(d_ray);if(black_ray==0) //有光返回{ clssed_screen=1; //关扫描return i;} clssed_screen=1; //关扫描}}clssed_screen=1; //关扫描data_io=0; //第二排373code_add=10;code_add=11;code_add=3; //关闭373data_io=0xff;code_add=8;code_add=9;code_add=12;code_add=13;code_add=14;code_add=15;code_add=7; //关闭373code_add=scon_x;clssed_screen=0; //开扫描delay_10us(d_ray);if(black_ray==0) //有光返回{ clssed_screen=1; //关扫描for(i=0;i<8;i++){ data_io=~1<<i;code_add=10;code_add=11;code_add=3; //关闭373code_add=scon_x;clssed_screen=0; //开扫描delay_10us(d_ray);if(black_ray==0) //有光返回{ clssed_screen=1; //关扫描return (i+8);}clssed_screen=1; //关扫描}}clssed_screen=1; //关扫描data_io=0; //第三排373code_add=12;code_add=13;code_add=5; //关闭373data_io=0xff;code_add=8;code_add=9;code_add=10;code_add=11;code_add=14;code_add=15;code_add=7; //关闭373code_add=scon_x;clssed_screen=0; //开扫描delay_10us(d_ray);if(black_ray==0) //有光返回{ clssed_screen=1; //关扫描for(i=0;i<8;i++){ data_io=~1<<i;code_add=12;code_add=13;code_add=5; //关闭373code_add=scon_x;clssed_screen=0; //开扫描delay_10us(d_ray);if(black_ray==0) //有光返回{ clssed_screen=1; //关扫描return (i+16);}}}clssed_screen=1; //关扫描data_io=0; //第四排373code_add=14;code_add=15;code_add=7; //关闭373data_io=0xff;code_add=8;code_add=9;code_add=10;code_add=11;code_add=12;code_add=13;code_add=5; //关闭373code_add=scon_x;clssed_screen=0; //开扫描delay_10us(d_ray);if(black_ray==0) //有光返回{ clssed_screen=1; //关扫描for(i=0;i<8;i++){ data_io=~1<<i;code_add=14;code_add=15;code_add=7; //关闭373code_add=scon_x;clssed_screen=1; //关扫描delay_10us(d_ray);clssed_screen=0; //开扫描delay_10us(d_ray);if(black_ray==0) //有光返回{ clssed_screen=1; //关扫描return (i+24);}clssed_screen=1; //关扫描}clssed_screen=1; //关扫描}return 24;}//*************************************************************// //LED扫描_end////*************************************************************// //*************************************************************// //坐标处理////*************************************************************// coo_manage(){ uc xt,yt,a;clssed_screen=1; //关if(move_jraw==0){if(coo_y<8){ yt=coo_x;xt=coo_y%8;}else if(coo_y<16){ yt=coo_x+32;xt=coo_y%8;}else if(coo_y<24){ yt=coo_x+64;xt=coo_y%8;}else if(coo_y<32){ yt=coo_x+96;xt=coo_y%8;}a=data_x1[show_page][yt]; //第一位亮起11111110xt=1<<xt;if(flag_bf_clr==0){ a=~a; //00000001a=a|xt;a=~a;}else{ a=a|xt;}data_x1[show_page][yt]=a;}else{switch (move_jraw){case 1:choose_draw();break;case 2:move_draw_mamage();break;default:break;}restore_mamage();clssed_screen=1;}}//*************************************************************// //坐标处理_end////*************************************************************// //*************************************************************// //屏幕输出////*************************************************************// screen_out(){ static uc a=0;uc c,t;clssed_screen=1;for(c=0;c<8;c++) //8次{ t=c<<4;code_add=c+8; //选址data_io=data_x1[show_page][a+t];}code_add=--c; //关选址code_add=a<<4;clssed_screen=0;if(a++==15){ a=0;}}//*************************************************************// //屏幕输出_end////*************************************************************//第六章测试方案与测试结果基本功能测试:对系统的基本功能进行测试,主要测试了系统的稳定性及基本功能的完成情况,具体的测试结果见表一和表二,从测试结果来看,该系统完全实现了设计要求的“点亮、划亮、反显、整屏擦除”等基本功能,并在“划亮”功能上进行了创新,实现了比设计要求更快的速度。