基于单片机的光立方课程设计

合集下载

基于单片机的光立方课程设计报告

基于单片机的光立方课程设计报告

单片机课程设计报告题目基于单片机的4*4*4光立方设计系别计算机科学系专业计算机科学与技术班级学号姓名指导教师日期【摘要】当今社会,随着电子行业的不断开展,单片机的应用从根本上改变了传统的控制系统设计思想和设计方法,已广泛的应用在工业自动化、通信、自动检测、信息家电、电力电子航空航天等各个方面。

成为现代生产和生活中不可缺少的一局部。

我们学习单片机也一个学期了,此次单片机课程设计,我采用的是STC12C5A60S2系列的单片机,设计一个4*4*4模式的"光立方〞。

将LED灯分成4层,利用程序来编写各种不同的效果来控制LED的亮灭,最终使得整个立方体展现不同的变换,美轮美奂,绚丽多彩。

【关键词】单片机课程设计光立方1绪论1.1课题研究的背景"光立方〞一词正逐渐引起了全国人民的关注,并得到了全球的高度肯定。

所谓"光立方〞:就是在平面LED根底上开展起来的新的显示技术,通过复杂的程序控制,在三维空间能够显示具有立体感的图形、动画等。

由此,也掀起了光立方的设计与学习热潮,在原有的根底上不断增加难度,增加变换把戏,吸引电子爱好者对其研究、创新。

光立方是由LED灯组成,由于发光二级管质量比较稳定,使用寿命长,不用频繁地去更换,能减少本钱,更节能。

光立方作为一种特殊的显示资源,已用于一些广告行业、家庭、娱乐厅、会议室、大型演唱会、城市地标广场等场所的布置和装饰,还可以用于更广泛方面,具有广阔的应用前景。

1.2课题研究的意义本次毕业设计一改传统的平面流水灯的风格,而是从平面向立体开展,通过更宽广的三维空间呈现出更加绚丽的效果,直接冲击着人们审美视觉,不在停留在乏味的平面成像。

光立方主体局部由64个LED灯组成,在制作过程中锻炼学习动手焊接能力,并以低本钱,智能化产品对实现经济利益、商业价值的形成具有积极的推动作用。

光立方的研究极具创意和启发,而且可以低本钱、高效益的研究未来的3D技术。

基于单片机的光立方设计方案

基于单片机的光立方设计方案

基于单片机的光立方设计方案摘要本设计制作出一个三维立体显示图案的LED光立方。

本产品不仅可以像发光二极管点阵一样显示平面的静态或动态画面,还可以显示立体的静态或动态画面,打破了传统的平面显示方案。

同锁存器/8*8*8/LED显示时又增加了显示的花样和立体图案显示效果,可以广泛用于传媒信息显示和各种装饰显示,为将来显示技术的进步和发展指导了方向,光立方显示比发光二极管点阵更具有视觉效果,而且画面图案更加非富多彩。

本设计是采用AT89S52单片机为核心控制器,八D边沿触发器(三态)74LS574扩展I/O口,完成硬件电路设计。

通过软件编程控制数据下载到单片机完成设计图案的显示。

软件采用自上而下的模块化设计思想,使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。

关键词51单片机/74LS574目录摘要 (I)1 绪论 (1)1.1国内外LED显示屏的发展概况 (1)1.2我国LED显示屏研究现状及发展趋势 (1)1.3设计的总体要求及方案选择 (2)1.4设计说明书的结构安排 (2)2 系统总体方案设计 (4)2.1系统总体硬件方案选择 (4)2.1.1 3D显示屏核心控制器 (4)2.1.2 电源电路 (5)2.1.3 I\O口扩展芯片 (5)2.1.4 层面控制驱动电路 (6)2.1.5 串口通讯芯片的选择 (6)2.1.6 LED发光显示二级管 (6)2.1.7 硬件电路绘图软件 (7)2.2系统总体软件方案选择 (8)2.2.1 单片机编程语言 (8)2.2.2 系统软件编译器WA VE介绍 (9)3 系统硬件方案设计 (10)3.1硬件整体设计概述及功能分析 (10)3.2电源供电系统设计 (10)3.351系列单片机简介 (11)3.3.1 时钟电路设计 (11)3.3.2 复位电路设计 (13)3.4驱动电路设计 (13)3.4.1 层驱动电路设计 (13)3.4.2 列驱动电路设计 (15)3.5通信系统硬件设计 (16)3.6光立方的制作及工作原理介绍 (17)3.6.1 3D LED光立方搭接 (17)3.6.2 3D LED光立方工作原理 (19)4 系统软件方案设计 (21)4.1概述 (21)4.2主程序设计 (21)4.3显示程序的设计 (22)4.3.1 LED显示屏的数据传送 (22)4.3.2 显示程序的设计 (22)4.4软件中防止程序出错ERR处理 (23)4.5ISP软件程序下载 (24)5 光立方PCB版制作 (25)5.1 PROTUES制作PCB版图 (25)5.1.1 绘制电路原理图并仿真测试 (25)5.1.2 加载网络表及元件封装 (26)5.1.3 规划电路板并设置相关参数 (27)5.1.4 元件布局及调整 (28)5.1.5 元件布线及调整 (29)5.1.6 输出及制作PCB (30)5.2PCB版的制作过程 (30)5.2.1 热转印版图 (31)5.2.2 蚀刻去铜 (31)5.2.3 去墨打孔 (31)6 系统测试及仿真 (32)6.1硬件系统测试 (32)6.2软件系统测试 (33)6.3系统总体测试 (33)6.4系统测试结果与结论 (34)6.4.1 测试结果分析 (34)6.4.2 测试结论 (34)总结 (35)参考文献 (37)附录1 总体电路原理图 (38)附录2 电路PCB版图 (39)附录3 电路3D仿真图 (40)附录4 元器件清单 (41)附录5 电路实物图 (43)附录6 源程序 (44)1 绪论1.1 国内外LED显示屏的发展概况在当今信息化社会的高速发展过程中,大屏幕显示已经从公共信息展示等商业应用向消费类多媒体应用渗透。

基于STC12C5A60S2单片机的LED光立方设计

基于STC12C5A60S2单片机的LED光立方设计

【摘要】本次设计使用512个LED灯制作8*8*8的LED立方体,命名为光立方。

采用STC12C5A60S2芯片作为主控,8个74HC573锁存器和一个ULN2803芯片扩展I/O口,作为外围控制。

通过编程控制I/O口,点亮指定的LED灯,使得显示不同的画面。

8*8*8光立方因点亮LED灯将会形成各种图形,如爱心、数字、雨滴、正方体等十几种画面。

整个立体呈现不同的造型和图案,动画衔接完美,使其变得美轮美奂、绚丽多彩,立体感十足。

此外,我们还可以外接音频输入,通过AD采样,快速傅里叶变换FFT,可以让光立方显示音频频谱。

经过系统测试,最终达到设计要求。

【关键词】光立方 STC12C5A60S2 74HC573 ULN2803Based on STC12C5A60S2 of the Light Cube Design【Abstract】:The 8*8*8 LED cube is made of 512 LED lights,named Light Cube which used STC12C5A60S2 as main control chip,it has 8 74HC573 latches extended I/O ports,and a ULN2803 chip as out control. Through programming control I/O port, the LED light. 8 * 8 * 8 cubic light for light leds will form a variety of graphics, such as love heart,numbers,rain,cube and so on. animation, cohesion is perfect, stereo sense is dye-in-the-wood. In addition, we also can external audio input, through the AD sampling, fast Fourier transform FFT, can let light cube display audio spectrum. After the system test, finally to meet the design requirements.【Keywords】: The Light Cube STC12C5A60S2 74HC573 ULN2803目录【摘要】 (2)【Abstract】 (3)目录 (3)第一章引言 (1)1.1光立方的研究意义 (1)1.2发展历程和现状 (1)1.3 光立方的功能和特点 (1)1.4 光立体的优越性以及主要应用 (2)第二章控制模块设计 (3)2.1 系统总框图 (3)2.2 总体方案的选择 (3)2.2.1主控芯片 (3)2.2 总体方案的选择 (3)2.2.1主控芯片 (3)2.2.2 电源选择 (4)2.2.3 元件选择 (4)第三章光立方显示部分概述 (7)3.1 光立方的制作 (7)3.1.1 光立方的原理 (7)3.1.2 LED灯的选用 (7)3.1.3 LED灯的焊接 (9)3.2显示部分检测 (10)第四章硬件设计 (13)4.1最小系统 (13)4.2 按键模块 (13)4.3功放模块 (14)4.3.1 功放原理图 (14)4.4呼吸指示灯 (15)4.5 竖排控制电路 (15)4.6 光立方层控制电路 (16)4.7 硬件电路焊接 (17)4.8 元件清单 .......................................................................................................... 错误!未定义书签。

基于单片机的光立方设计含程序+原理图+实物图)

基于单片机的光立方设计含程序+原理图+实物图)
第三章 系统硬件电路设计与实现 ............................................ 3 3.1 硬件电路设计 ..................................................... 3 3.2 单片机最小系统..................................................... 3 3.2.1 时钟电路 .................................................... 3 3.2.2 P0 口外接上拉电阻 ............................................ 3 3.3 驱动模块的设计..................................................... 3 3.4 光立方整体设计思路 ................................................. 9 3.4.1 LED 灯排序方式设计 ............................................ 2 3.4.2 LED 灯接法方式设计 ............................................ 2 3.5 光立方搭建方法 .................................................. 2 3.5.1 将 LED 从点到线的搭建 .......................................... 2 3.5.2 将 LED 从线到面的搭建 .......................................... 2 3.5.3 将 LED 从面到体的搭建 .......................................... 2

基于单片机的光立方设计

基于单片机的光立方设计

基于单片机的光立方设计摘要:随着电子行业的不断发展,单片机凭借着其极高的性能价格比应用越来越广泛。

本文阐述的是用STC89C52RC系列的单片机来控制一个“光立方”,利用程序来编写各种不同的效果来控制LED的亮灭,使得整个立方体展现不同的造型和图案,使其变得美轮美奂,绚丽多彩。

关键词:光立方;74HC573;单片机随着科技的发展LED灯经过不断的改进已经深入的进入到了人们的生活中,如今LED灯制作的各种创意灯具和作品随处可见,为生活增添了一抹亮丽的色彩。

本文阐述的光立方采用4*4*4的模式,将LED灯分成四层,再通过STC89C52单片机的核心编程来达到预设的色彩变换效果。

1.系统硬件设计图1电路框图本系统主要由单片机、复位电路、时钟电路、三极管驱动电路、LED光立方组成。

其中,单片机为中央控制模块,主要用于编写控制程序;时钟控制电路为单片机各个功能部件的运行提供基准频率,只需在单片机内部的震荡电路芯片引脚上接一个石英晶体振荡器和两个微调电容就可以构成一个完整的震荡信号发生器。

复位电路是用来实现单片机复位的,复位引脚RET通过一个施密特触发器与复位电路相连接,施密特触发器用作噪声抑制,采用上电复位方式。

通过三极管驱动电路驱动芯片运行来控制LED光立方的不同闪烁模式。

2.系统软件设计图2程序流程图图3光立方代码花样系统程序流程图如图2所示,完成控制模式编程以后可以产生如图3所示的不同花样。

3.小结本次设计过程为:1)根据系统原理及工艺,提出了光立方的设计方案和思路;2)确定光立方的控制方案;3)选择所需的硬件进行研究设计,硬件设备选型,绘制系统硬件连接图;4)PLC 选型、估算所需I/O点数,进行I/O模块选型;列出I/O分配表;5)对控制系统的主程序进行设计,讨论PLC程序设计方法及程序执行特点。

6)设计梯形图控制程序,对程序进行调试和修改并设计系统。

本次设计进一步提升了本人的电路编程和制作能力,相信基于单片机的产品将会一片光明的市场前景!参考文献[1]廖常初.PLC编程及应用[M].北京机械工业出版社.2015[2]陈中,朱代忠.基于STC89C52单片机的控制系统设计[M].清华大学出版社,2015.11[3]王静霞.单片机应用技术[M].电子工业出版社,2015.7[4]程国钢.51单片机常用模块设计查询手册[M].清华大学出版社,2016[5]张占,张德虎.基于PLC和MCGS的串行通信实现[J].科技创新导报.2016(8).。

基于STM32单片机的3维LED光立方的设计与实现

基于STM32单片机的3维LED光立方的设计与实现

基于STM32单片机的3维LED光立方的设计与实现3DLED光立方是一种由多个LED灯组成的立方体结构,可以在三个坐标轴上显示三维图形和动画。

在本文中,我们将研究基于STM32单片机的3DLED光立方的设计和实现。

首先,我们需要选择合适的STM32单片机来控制LED灯的亮灭。

在选择单片机时,我们需要考虑到处理速度、存储容量和GPIO数量等因素。

常用的STM32单片机有STM32F103和STM32F407等型号,它们都具有较快的处理速度和足够的GPIO数量来控制3DLED光立方。

接下来,我们需要设计和制作LED光立方的硬件部分。

LED光立方的主要部件包括LED灯、驱动电路和控制电路。

LED灯是光立方显示的核心部件,常用的LED灯有RGB三色LED和WS2812等类型的LED灯。

驱动电路主要用于控制LED灯的亮灭,常用的驱动电路有锁相环驱动电路和电平转换电路。

控制电路用于接收来自STM32单片机的指令,然后将相应的指令发送给驱动电路。

在设计控制电路时,我们可以选择使用UART或SPI等串行通信接口来与STM32单片机进行通信。

串行通信接口可以有效地减少GPIO的使用量,并且具有较高的通信速度。

在通信协议的选择上,我们可以使用自定义协议或者使用现有的协议,如DMX512等。

在软件设计方面,我们需要编写控制程序来控制LED光立方的显示。

首先,我们需要编写驱动程序来与控制电路进行通信,并控制LED灯的亮灭。

其次,我们需要编写图形和动画的显示程序,以实现3D效果的显示。

常用的图形算法有线段绘制算法和三角形填充算法等。

最后,我们还可以添加交互功能,使得用户可以通过按键或触摸屏来控制LED光立方的显示。

在实现的过程中,我们需要注意几个关键的问题。

首先,我们需要合理安排LED灯的布局,以确保LED光立方能够显示出清晰的图形和动画。

其次,我们需要注意LED灯的电流和电压的控制,以避免对单片机和LED 灯的损坏。

最后,我们还需要进行适当的测试和调试,以确保LED光立方的正常工作。

基于51单片机光立方设计_陈聪

基于51单片机光立方设计_陈聪

参数
数值
集电极直流最大工作电压
50
输入电压
5
最大工作温度
+ 85
最小工作温度
- 20
集电极连续电流
500
输入电流
25
单位 V V ℃ ℃
mA mA
2.3 控制器 STC89C52RC
STC89C52 是宏晶公司 MCS-51 系列单片机中基本的产品,它采用宏晶公司可靠的 CMOS 工艺技
术制造的高性能 8 位单片机,属于标准的 MCS-51 的 HCMOS 产品。它结合了 CMOS 的高速和高密度
L1 10
L2 9
L3 8
L4 7
L5 6
L6 5
L7 4
L8 3
2
1
RN1
10k
H4.8
H4.7
H4.6
H4.5
H4.4
H4.3
H4.2
H4.1
H3.8
H3.7
H3.6
H3.5
H3.4
H3.3
H3.2
H3.1
H2.8
H2.7
H2.6
H2.5
H2.4
H2.3
H2.2
H2.1
H1.8
H1.7
H1.6
H1.5
3-4 控制电路焊接图
3.3 单片机工作电路原理及制作 1、单片机工作电路原理
2、单片机工作电路
C2
30p
U1
19 XTAL1
C1
30p
18 XTAL2
9 RST
C3
R1 10uF
10k
29 30 31
PSEN ALE EA
P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8

基于单片机的光立方设计(课程设计)

基于单片机的光立方设计(课程设计)

综合实践项目名称基于单片机的光立方设计专业班级学生姓名指导教师年月日摘要本课程设计制作出一个三维立体显示图案的LED光立方。

主要采用8*8*8 led组成的模式。

距离是14cm*14cm*20cm(长.宽.高),主要分为三个模块:主控模块、驱动模块、显示模块;我们所做的光立方驱动电路,主控电路等都是纯手工焊接。

采用的主控芯片32K STC89C58芯片,驱动电路是采用我们常用的74HC574数字芯片。

光立方工作过程中,通过程序对电路的控制,可以在LED组成的立方体上显示出各种图形。

软件采用自上而下的模块化设计思想,使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。

关键词:LED光立方; 74HC574; 51单片机ABSTRACTThis design produced a three-dimensional pattern of the LED light cube. This product can not only like a light-emitting diode dot matrix display plane static or dynamic screen can also display three-dimensional static or dynamic images,and to break the traditional program.While increasing the display patterns and three-dimensional effect can be widely used to display and decorative display for future progress and development to guide the direction,light cube display more visual effects than the light-emitting diode dot matrix,and the picture is more rich colorful. With a combination of graphics and characters more perfect display characteristics.The design is STC89C58 MCU core controller,eight D edge flip-flop 74HC574 (tri-state) expansion I/O port completion of the hardware circuit design. Programmed by software to control the data is downloaded to the MCU to complete the designs of the show. This design software is a top-down modular design,the system moving in the direction of distributed,small development,enhance the stability of the system's scalability and running.Keywords:52single-chip;74HC573latch;8*8*8 LED;目录摘要 (I)ABSTRACT (II)第1章绪论 (1)1.1 目的与要求 (1)1.2 电路的设计与元件的选择 (1)1.2.1 电路设计 (1)1.2.2 元件的选择 (2)第2章电路工作原理 (3)2.1 设计原理 (3)2.2 模块与控制器接口 (3)第3章方案选择 (5)3.1 电源的选择 (5)3.2 3D显示核心控制器 (5)3.2.1 单片机 (5)3.2.2 DSP 芯片 (5)3.2.3 EDA (6)3.3 I/O口扩展芯片的选择 (6)3.4 LED发光显示二级管 (6)3.4.1 按颜色分类 (7)3.4.2 按使用场合分类 (7)3.4.3 按发光点直径分类 (7)第4章焊接 (8)4.1 焊接前准备工作 (8)4.2 焊接 (8)第5章程序设计的选择与分析 (10)5.1 单片机C语言主要特点 (10)5.2 单片机C语言与标准C语言的区别 (10)5.3 数据类型的选用 (11)5.4 算法设计问题 (11)5.5 数据存储器的分配 (12)5.6 单片机C语言与汇编语言的混合编程 (12)5.7 程序分析选择 (14)第6章电路调试与总结 (15)参考文献 (16)附录程序代码 (17)致谢 (23)第1章绪论1.1 目的与要求(1)目的:转眼间我们学习单片机已经有大半学期了,也是到了期末的考试时间了,感到安慰的是不用考试,但是要做一个实物,做这个实物的目的是主要回顾我们学习的单片机知识和提高我们的焊接和其他的动手实操能力(包括了数字电路和模拟电路的知识)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计报告题目基于单片机的4*4*4光立方设计系别计算机科学系专业计算机科学与技术班级学号姓名指导教师日期【摘要】当今社会,随着电子行业的不断发展,单片机的应用从根本上改变了传统的控制系统设计思想和设计方法,已广泛的应用在工业自动化、通信、自动检测、信息家电、电力电子航空航天等各个方面。

成为现代生产和生活中不可缺少的一部分。

我们学习单片机也一个学期了,此次单片机课程设计,我采用的是STC12C5A60S2系列的单片机,设计一个4*4*4模式的“光立方”。

将LED灯分成4层,利用程序来编写各种不同的效果来控制LED的亮灭,最终使得整个立方体展现不同的变换,美轮美奂,绚丽多彩。

【关键词】单片机课程设计光立方1绪论1.1课题研究的背景“光立方”一词正逐渐引起了全国人民的关注,并得到了全球的高度肯定。

所谓“光立方”:就是在平面LED基础上发展起来的新的显示技术,通过复杂的程序控制,在三维空间能够显示具有立体感的图形、动画等。

由此,也掀起了光立方的设计与学习热潮,在原有的基础上不断增加难度,增加变换花样,吸引电子爱好者对其研究、创新。

光立方是由LED灯组成,由于发光二级管质量比较稳定,使用寿命长,不用频繁地去更换,能减少成本,更节能。

光立方作为一种特殊的显示资源,已用于一些广告行业、家庭、娱乐厅、会议室、大型演唱会、城市地标广场等场所的布置和装饰,还可以用于更广泛方面,具有广阔的应用前景。

1.2课题研究的意义本次毕业设计一改传统的平面流水灯的风格,而是从平面向立体发展,通过更宽广的三维空间呈现出更加绚丽的效果,直接冲击着人们审美视觉,不在停留在乏味的平面成像。

光立方主体部分由64个LED灯组成,在制作过程中锻炼学习动手焊接能力,并以低成本,智能化产品对实现经济利益、商业价值的形成具有积极的推动作用。

光立方的研究极具创意和启发,而且可以低成本、高效益的研究未来的3D技术。

2总体设计2.1设计目的1.进一步掌握单片机的原理及其功能。

学会利用单片机做一些课外电子设计与制作。

2.熟悉LED点亮条件及其工作原理。

3.熟悉光立方显示的原理及其相关的线路连接。

4.通过此次的电路焊接和调试提高自己的动手及其分析问题的能力。

2.2工作原理光立方其功能相当于三维显示器,只不过光立方是由LED灯组成的三维的立方体。

光立方显示的原理简单的说就是用单片机控制64个LED灯,在不同时刻点亮要显示图案位置所在的灯,利用人眼余辉效应,可以看到比较完整的显示图案或动画了。

其原理如下:光立方从下到上共4层,每一层16个LED的负极接到一起,第一层16个蓝色正极和16个红色正极分别单独引出,第二层的每个正极分别接到它对应第一层正极,第三层的正极接第二层的正极。

就是竖着看是8个接到一个正极上。

连在一起的是阴极,这样焊接起来。

光立方引出4层引出线加上16个正极引出线。

3系统硬件电路设计与实现3.1元件清单PCB板*1,红蓝双色超高亮长脚LED*70,40P圆排母*4,5MMLED 间隔柱*5,5MM七彩LED*5,15MM铜柱*5,DC005线*1,DC005座*1,25V470UF电解电容*1,1K电阻*4,40P芯片底座*4,22P 瓷片电容*1,STC12C5A60S2芯片*1,11.0592M晶振*1,单芯导线*13.2硬件电路设计本电路是由单片机STC12C5A60S2为控制核心,具有大容量程序存储器且是FLASH工艺的,具有串口烧写编程功能,低功耗;时钟源电路有很多种,比如阻容低速时钟源、普通晶体时钟源、带缓冲放大的晶体时钟源等等,考虑到电路稳定及材料选购等方面,决定采用普通晶体时钟源,其中晶体用11.0592M的石英晶振。

显示部份由显示部份由64个LED灯组成来进行显示。

3.3单片机最小系统单片机的最小系统就是让单片机能正常工作并发挥其功能时所必须的组成部分,也可理解为是用最少的元件组成的单片机可以工作的系统。

对89C51单片机来说,最小系统一般应该包括:单片机、时钟电路、复位电路、输入/ 输出设备等。

单片机的最小系统如下图所示:3.3电路图设计通过电路图设计,方便搭建起光立方的架构。

1.电源设计电路图2.时钟电路图3.整体电路图3.4光立方搭建方法3.4.1将LED从点到线的搭建首先接线下灯座的制作方法:把40P圆排母用水口钳或者斜口钳剪成单针如下图所示把其余元器件焊接好后图:3.4.2将LED从线到面的搭建进行八次上诉焊接后接下来就是将4束的LED焊接起来。

在从点到线时是将所有LED的阴极连在一起,而这次则是将所有LED阳极弯折并依次连接,如图所示。

注意:由于焊接过程中将产生静电容易将LED烧坏,因此本项工作完成后请认真检查每个灯的好坏,可以用万用笔等工具检测。

同时检测灯与灯之间有没虚焊情况。

3.4.3将LED从面到体的搭建最后一个步骤是将已焊好的4个面进行焊接,其方法是将之前8个面上的阴极对应位置依次焊接,最后留出的4个阴极与输出端进行连接。

实物图如下图所示。

4.系统软件设计4.1主程序设计程序主函数运行流程框图如下图所示。

4.2软件测试光立方主要是通过程序来控制光立方体从而达到多种动画变化的效果。

由于要形成多样的3D动画,在变成过程中也出现了不少的问题。

最后经过多次的细心修改,顺利的完成了编程工作。

4.3结果分析本设计通过硬件设备和软件完美配合,总共呈现十一个连续的动画效果。

经过多次的反复测试与分析,所呈现的动画与程序中预期的效果吻合,符合设计要求。

在软硬件测试过程中让我们对原先设计的电路的原理及功能进一步熟悉,并对各电路模块和相关的芯片联合工作更加了解。

在这个调试的过程中虽然挺枯燥无味,但锻炼我们发现问题并解决问题的能力,对我们的专业知识起到了温故知新的作用。

5课程设计心得体会此次为期两个礼拜的课程设计,让我感受颇深。

最终看到了绚丽多姿,变化多端的LED 光立方的图案。

在中,在很大程度上培养了自己的独立思考及其动手能力。

学会了自己独立的发现问题、分析问题。

老师在实验室指导我们的设计,在查阅资料仍找不到但答案的还可以请教老师。

尽管此次设计过程中遇到些问题,但最终还是一步一个脚印过来了。

此次设计在丁老师的指导下完成的,老师扎实的专业知识,让我觉得自己还有好多的知识需要去学习。

在这大学的时间,要好好的提升自己的相关技能。

程序代码#include <stc12c5a60s2.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define MAX_Delay 8#define MIN_Delay 1sbit S_1 = P1 ^ 1;sbit S_2 = P1 ^ 2;unsigned int pwm;unsigned char TimeDelay = 10;unsigned char Mode = 1;unsigned char code tabP2[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //扫描uchar s=0;void DELAY_MS (uchar i){// unsigned int i;// while( --a != 0){// for(i = 0; i < 600; i++);// }uchar x,j;for(j=0;j<i;j++)for(x=0;x<=148;x++);}void Adc_Delay (uint a){uint i;while( --a != 0){for(i = 0; i < 600; i++);}}void Delay(uint z){uint x,y;for(x=80;x>0;x--)for(y=z;y>0;y--);}void timer1_init(){TMOD |= 0x10;TH1 = 0;TL1 = 0;ET1 = 1;TR1 = 1;EA = 1;}/****************************************************************************** *********************** AD转换函数 **************//****************************************************************************** /unsigned char Read (unsigned char CHA){unsigned char AD_FIN=0; //存储A/D转换标志CHA &= 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位) ADC_CONTR = 0x00; //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)_nop_();ADC_CONTR |= CHA; //选择A/D当前通道_nop_();ADC_CONTR |= 0x80; //启动A/D电源Adc_Delay(1); //使输入电压达到稳定(1ms即可)ADC_CONTR |= 0x08; //启动A/D转换(0000 1000 令ADCS = 1)_nop_();_nop_();_nop_();_nop_();while (AD_FIN ==0){ //等待A/D转换结束AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否}ADC_CONTR &= 0xE7; //1111 0111 清ADC_FLAG位, 关闭A/D转换,return (ADC_RES); //返回A/D转换结果(8位)}/****************************************************************************** ************** AD电容式触摸按键检测程序 ******************//****************************************************************************** ***************///bit 1表示有感应物,0表示没有感应物 S1/****************************************************************************** ****************/bit S1(void){unsigned char R,mm=0,i,j,k;bit aa;j=0;k=0;for(i=0;i<10;i++){ //一次采集数据的数量Adc_Delay(3);R=Read(1); //读对应的口,触发对应的触摸按键if(R<0x2f){ //此参数可调整感应灵敏度值在0x01到0x2Fk++;}if(R == 0xFF){j++;}}if(k>1 && j>1){mm++;}elsemm=0;}if(mm>0){aa =1;}else{aa=0;}return(aa);}/****************************************************************************** ***************/// S2/****************************************************************************** ****************/bit S2(void){unsigned char R,mm=0,i,j,k;bit aa;j=0;k=0;for(i=0;i<10;i++){ //一次采集数据的数量Adc_Delay(3);R=Read(2);if(R<0x2F){ //此参数可调整感应灵敏度值在0x01到0x2Fk++;}if(R == 0xFF){j++;}}if(k>1 && j>1){mm++;}elsemm=0;}if(mm>0){aa =1;}else{aa=0;}return(aa);}//结束呼吸灯专用uchar code table[]={0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129 ,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,14 9,150,};void PwmUp(uint a, uchar c){uchar i;if(c == 1)P3 = 0X00;elseP0 = 0X00;P2 = 0X00;i = table[a];Delay(i);if(c == 1)P3 = 0XFF;elseP0 = 0XFF;P2 = 0X00;Delay(150-i);}void PwmDown(uint a,uchar c) {uchar i;if(c == 1)P3 = 0XFF;elseP0 = 0XFF;P2 = 0X00;i = table[a];Delay(i);if(c == 1)P3 = 0X00;elseP0 = 0X00;P2 = 0X00;Delay(150-i);}void PwmAllon(uchar c){int i;for(i = 0; i < 150 ;i++){PwmDown(i,c);}if(c == 1)P3 = 0X00;elseP0 = 0X00;P2 = 0X00;}void PwmOff(uchar c){int i;// P3 = 0XFF;// P2 = 0X00;// Delay(100);for(i = 0; i < 150; i++){PwmUp(i,c);}//P3 = 0X00;}void Allfalloff(uchar c,uchar time) //由全亮到下落关闭只剩一排{unsigned char code tabP0[5][8]={{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},{0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF},{0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF},{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF},{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<5;j++){for(k=0;k<15;k++){for(i=0;i<8;i++){// P0=0;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Randomlight(uchar c,uchar time) //随机亮完{unsigned char code tabP0[38][8]={{0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00},{0x00,0x20,0x00,0x00,0x00,0x00,0x10,0x00},{0x00,0x20,0x00,0x00,0x00,0x02,0x10,0x00},{0x00,0x20,0x04,0x00,0x00,0x02,0x10,0x00},{0x00,0xA0,0x04,0x00,0x00,0x02,0x10,0x00},{0x00,0xA0,0x24,0x10,0x00,0x02,0x10,0x00},{0x40,0xA0,0x24,0x10,0x00,0x02,0x10,0x00},{0x40,0xA0,0x24,0x10,0x20,0x02,0x10,0x00},{0x40,0xA0,0x24,0x10,0x20,0x22,0x10,0x00},{0x40,0xA0,0x24,0x10,0x20,0x22,0x14,0x42},{0x40,0xA0,0x24,0x10,0x20,0x26,0x14,0x42},{0x40,0xA0,0x25,0x10,0x20,0x26,0x14,0x42},{0x44,0xA0,0x25,0x10,0x20,0x26,0x14,0x42},{0x44,0xA0,0x25,0x50,0x20,0x26,0x14,0x42},{0x44,0xA0,0x25,0x50,0xA0,0x26,0x14,0x42},{0x44,0xA0,0x25,0x50,0xA0,0x27,0x14,0x43},{0x44,0xA0,0x25,0x50,0xA0,0x27,0x14,0x53},{0x44,0xA0,0x65,0x50,0xA0,0x27,0x54,0x53},{0x44,0xA0,0x65,0x50,0xA0,0xA7,0x54,0x53},{0x44,0xA0,0x65,0x50,0xA8,0xA7,0x54,0x53},{0x44,0xA0,0x65,0x50,0xA8,0xA7,0x56,0x5B},{0x46,0xA0,0x67,0x52,0xA8,0xA7,0x56,0x5B},{0x46,0xA1,0x67,0x52,0xA8,0xA7,0x56,0x5B},{0x46,0xB1,0x67,0x52,0xA8,0xA7,0x56,0x5B},{0x46,0xB1,0x67,0x5A,0xA8,0xA7,0x56,0x5B},{0x56,0xB1,0x67,0x5A,0xA8,0xA7,0x56,0x5B},{0x56,0xB1,0x67,0x5A,0xA8,0xE7,0x56,0x5B},{0x56,0xB1,0x67,0x5A,0xAA,0xE7,0x56,0x5F},{0x56,0xB1,0x67,0x5A,0xAA,0xE7,0x56,0x7F},{0x56,0xF9,0x67,0x7A,0xAA,0xE7,0x56,0x7F},{0x56,0xF9,0x67,0x7A,0xAE,0xE7,0x5E,0x7F},{0x5E,0xFD,0x67,0x7B,0xAE,0xE7,0x5E,0x7F},{0x5E,0xFD,0x67,0x7B,0xEE,0xE7,0xDE,0xFF},{0xDE,0xFD,0xE7,0xFB,0xEF,0xE7,0xFF,0xFF},{0xDE,0xFD,0xF7,0xFB,0xFF,0xF7,0xFF,0xFF},{0xDE,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<38;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){// P0=0;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];else{P3 = tabP0[j][i];P0=tabP0[j][i];}DELAY_MS(time);}}}}void Randomoff(uchar c,uchar time) //随机灭完{unsigned char code tabP0[23][8]={{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xDF}, {0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xED,0xDF}, {0xFF,0xF7,0xDD,0xFF,0xFF,0xFF,0xED,0xDF}, {0xFF,0xF7,0xDD,0xEF,0xFF,0xDF,0xED,0xDF}, {0xFF,0xF7,0x5D,0xAF,0xFD,0xDF,0xED,0xDF}, {0xFF,0xF7,0x5C,0xAF,0xDD,0xDF,0xED,0xDF}, {0xFF,0xE7,0x5C,0xAF,0xDD,0xDF,0x6D,0xDD}, {0xFF,0xE7,0x5C,0x2F,0xDD,0xD7,0x6D,0x9D}, {0xFF,0xE5,0x5C,0x2F,0xDD,0xD7,0x69,0x9D}, {0xFF,0xA5,0x5C,0x2B,0xDD,0x57,0x69,0x9D}, {0xFF,0xA5,0x5C,0x29,0xDD,0x57,0x69,0x8D}, {0xBD,0x85,0x5C,0x29,0xDD,0x57,0x69,0x8D}, {0xBD,0x85,0x54,0x29,0xDD,0x53,0x48,0x8D}, {0x9D,0x85,0x54,0x29,0xDD,0x53,0x08,0x8D}, {0x9D,0x81,0x54,0x09,0xDD,0x13,0x08,0x8D}, {0x95,0x81,0x54,0x09,0xDD,0x12,0x08,0x85}, {0x95,0x01,0x54,0x09,0xC9,0x12,0x08,0x85}, {0x95,0x01,0x54,0x01,0x89,0x12,0x08,0x84}, {0x95,0x01,0x40,0x01,0x89,0x02,0x08,0x80}, {0x95,0x00,0x40,0x01,0x88,0x02,0x08,0x00}, {0x94,0x00,0x00,0x00,0x88,0x00,0x08,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<23;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){// P0=0;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Righttoleft(uchar c,uchar time) //右面平移到左面{unsigned char code tabP0[4][8]={{0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F},{0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0},{0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00},{0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00}};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<4;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){// P0=0;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];else{P0=tabP0[j][i];P3 = tabP0[j][i];}DELAY_MS(time);}}}}void Lefttoright(uchar c,uchar time) //左面平移到右面{unsigned char code tabP0[4][8]={{0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00},{0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0},{0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F}};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<4;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){// P0=0;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void turnD(uchar c,uchar time) //从右面到下面{unsigned char code tabP0[6][8]={{0x00,0x00,0x00,0x00,0xF0,0x0F,0x0F,0x0F},{0xF0,0x00,0x00,0x00,0x00,0xF0,0x0F,0x0F},{0x0F,0xF0,0x00,0x00,0x00,0x00,0xF0,0x0F},{0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,0xFF},{0x00,0x00,0x0F,0xF0,0x00,0x00,0x00,0xFF},{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF}};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<6;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){// P0=0;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Toptofollowing(uchar c,uchar time) //上面平移到下面{unsigned char code tabP0[4][8]={{0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},{0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00},{0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00},{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF},};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<4;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){// P0=0;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Followingtotop(uchar c,uchar time) //下面平移到上面{unsigned char code tabP0[4][8]={{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF},{0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00},{0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00},{0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<4;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){// P0=0;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Alllight(uchar c,uchar time) //右到左全亮{unsigned char code tabP0[4][8]={{0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F},{0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF},{0xF0,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}};int j,k,i;P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<4;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){// P0=0;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Evel(uchar c,uchar time) // 斜面亮{unsigned char code tabP0[7][8]={{0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xF7}, {0x00,0x00,0x00,0xEC,0x00,0x00,0x00,0x73}, {0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0x23}, {0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x21}, {0x00,0x00,0x48,0x48,0x00,0x00,0x21,0x21}, {0x00,0x48,0x48,0x48,0x00,0x21,0x21,0x21}, {0x48,0x48,0x48,0x48,0x21,0x21,0x21,0x21}, };int j,k,i;if(c==1)P3 = 0X00;P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<7;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){P0=0;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Followtotop(uchar c,uchar time) //上面转移到后面可以接旋转{unsigned char code tabP0[10][8]={{0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},{0xEE,0x11,0x00,0x00,0xFF,0x00,0x00,0x00},{0xEC,0x12,0x01,0x00,0xFF,0x00,0x00,0x00},{0xC8,0x24,0x12,0x01,0xEF,0x10,0x00,0x00},{0x88,0x48,0x24,0x12,0xCE,0x21,0x10,0x00},{0x88,0x88,0x48,0x24,0x8C,0x42,0x21,0x10},{0x88,0x88,0x88,0x48,0x88,0x84,0x42,0x21},{0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x42},{0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x84},{0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88}};int j,k,i;P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<15;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){// P0=0;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Spin(uchar c,uchar time) // 旋转{unsigned char code tabP0[8][8]={{0x48,0x48,0x48,0x48,0x21,0x21,0x21,0x21}, {0x44,0x44,0x44,0x44,0x22,0x22,0x22,0x22}, {0x22,0x22,0x22,0x22,0x44,0x44,0x44,0x44}, {0x21,0x21,0x21,0x21,0x48,0x48,0x48,0x48}, {0x31,0x31,0x31,0x31,0xC8,0xC8,0xC8,0xC8}, {0x30,0x30,0x30,0x30,0xC0,0xC0,0xC0,0xC0}, {0xC0,0xC0,0xC0,0xC0,0x30,0x30,0x30,0x30}, {0xC8,0xC8,0xC8,0xC8,0x31,0x31,0x31,0x31}, };int j,k,i;P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<8;j++){for(k=0;k<8;k++){for(i=0;i<8;i++){// P0=0;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Thenthelast(uchar c,uchar time) //接旋转下来到第一排{unsigned char code tabP0[3][8]={{0x00,0x48,0x48,0x48,0x00,0x21,0x21,0x21},{0x00,0x00,0x48,0x48,0x00,0x00,0x21,0x21},{0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x21}};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<3;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){// P0=0;if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Thelast(uchar c,uchar time) //接下来一排斜的后4点转到左上1 {unsigned char code tabP0[43][8]={{0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x21},{0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x23},{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27},{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F},{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8E},{0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x8C},{0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x88},{0x00,0x00,0x00,0x8C,0x00,0x00,0x00,0x80},{0x00,0x00,0x00,0x8E,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x10},{0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x30},{0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x70},{0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x70},{0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x60},{0x00,0x00,0x00,0x60,0x00,0x00,0x20,0x40},{0x00,0x00,0x00,0x60,0x00,0x00,0x60,0x00}, {0x00,0x00,0x40,0x20,0x00,0x00,0x60,0x00}, {0x00,0x00,0x60,0x00,0x00,0x00,0x60,0x00}, {0x00,0x00,0x60,0x00,0x00,0x20,0x40,0x00}, {0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00}, {0x00,0x40,0x20,0x00,0x00,0x60,0x00,0x00}, {0x00,0x60,0x00,0x00,0x00,0x60,0x00,0x00}, {0x00,0x60,0x00,0x00,0x20,0x40,0x00,0x00}, {0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x00}, {0x40,0x20,0x00,0x00,0x60,0x00,0x00,0x00}, {0x60,0x00,0x00,0x00,0x60,0x00,0x00,0x00}, {0x70,0x00,0x00,0x00,0x40,0x00,0x00,0x00}, {0x70,0x00,0x00,0x00,0x10,0x00,0x00,0x00}, {0x30,0x00,0x00,0x00,0x11,0x00,0x00,0x00}, {0x10,0x00,0x00,0x00,0x13,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x17,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x8E,0x00,0x00,0x00}, {0x80,0x00,0x00,0x00,0x8C,0x00,0x00,0x00}, {0x88,0x00,0x00,0x00,0x88,0x00,0x00,0x00}, {0x8C,0x00,0x00,0x00,0x80,0x00,0x00,0x00}, {0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<43;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){// P0=0;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Twoidea(uchar c,uchar time) //左上1开始三个走最后底层亮完{unsigned char code tabP0[19][8]={{0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00},{0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00},{0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00},{0x00,0x00,0x01,0x03,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x8F,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0xCF,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0xEF,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x10},{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x30},{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x70},{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xF0},{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xF8},{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFC},{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFE},{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF},};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<19;j++){for(k=0;k<8;k++){for(i=0;i<8;i++){P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Around2(uchar c,uchar time) //从左下第一点贪吃蛇样转到左上第一点{unsigned char code tabP0[27][8]={{0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x10},{0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x11},{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13},{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07},{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E},{0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0C},{0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x08},{0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00},{0x00,0x00,0x8C,0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00},{0x00,0x10,0x03,0x00,0x00,0x00,0x00,0x00},{0x00,0x10,0x01,0x00,0x00,0x10,0x00,0x00},{0x00,0x10,0x00,0x00,0x00,0x11,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x13,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00}, {0x00,0x00,0x00,0x00,0x80,0x0C,0x00,0x00}, {0x80,0x00,0x00,0x00,0x80,0x08,0x00,0x00}, {0x88,0x00,0x00,0x00,0x80,0x00,0x00,0x00}, {0x8C,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00}};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<3;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Spread(uchar c,uchar time) //从左上1扩散全部一次最后回到右上1 {unsigned char code tabP0[42][8]={{0x13,0x01,0x00,0x00,0x00,0x00,0x00,0x00},{0x37,0x33,0x01,0x00,0x10,0x00,0x00,0x00},{0x7F,0x37,0x13,0x01,0x31,0x10,0x00,0x00},{0xFF,0x7F,0x37,0x13,0x73,0x31,0x10,0x00},{0xFF,0xFF,0x7F,0x3F,0xFF,0x77,0x33,0x11},{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x77,0x33},{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFE,0xEC,0xFF,0xFF,0xFF,0xFF},{0xFF,0xFE,0xEC,0xC8,0xFF,0xFF,0xFF,0xEF},{0xFE,0xEC,0xC8,0x80,0xFF,0xFF,0xEF,0xCE},{0xEC,0xC8,0x80,0x00,0xFF,0xEF,0xCE,0x8C},{0xC8,0x80,0x00,0x00,0xEF,0xCE,0x8C,0x08},{0x80,0x00,0x00,0x00,0xCE,0x8C,0x08,0x00},{0x00,0x00,0x00,0x00,0x8C,0x08,0x00,0x00},{0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00},{0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00},{0x00,0x00,0x00,0x00,0x8C,0x08,0x00,0x00},{0x80,0x00,0x00,0x00,0xCE,0x8C,0x08,0x00},{0xC8,0x80,0x00,0x00,0xEF,0xCE,0x8C,0x08},{0xEC,0xC8,0x80,0x00,0xFF,0xEF,0xCE,0x8C},{0xFE,0xEC,0xC8,0x80,0xFF,0xFF,0xEF,0xCE},{0xFF,0xFE,0xEC,0xC8,0xFF,0xFF,0xFF,0xEF},{0xFF,0xFF,0xFE,0xEC,0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xEC},{0xFF,0xFF,0xFF,0xEF,0xFF,0xFE,0xEC,0xC8},{0xFF,0xFF,0xEF,0xCE,0xFE,0xEC,0xC8,0x80},{0xFF,0xEF,0xCE,0x8C,0xEC,0xC8,0x80,0x00},{0xEF,0xCE,0x8C,0x08,0xC8,0x80,0x00,0x00},{0xCE,0x8C,0x08,0x00,0x80,0x00,0x00,0x00},{0x8C,0x08,0x00,0x00,0x00,0x00,0x00,0x00},{0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00},{0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00},};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<42;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){;P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Framework(uchar c,uchar time)//从右上第一点延伸框架{unsigned char code tabP0[8][8]={{0x00,0x00,0x00,0x00,0x13,0x01,0x00,0x00},{0x10,0x00,0x00,0x00,0x17,0x01,0x01,0x00},{0x13,0x01,0x00,0x00,0x9F,0x09,0x01,0x13},{0x97,0x01,0x01,0x10,0x9F,0x09,0x09,0x17},{0x9F,0x01,0x01,0x11,0x9F,0x09,0x09,0x9F},{0x9F,0x09,0x01,0x93,0x9F,0x09,0x09,0x9F},{0x9F,0x09,0x09,0x9F,0x9F,0x09,0x09,0x9F},};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<8;j++){for(k=0;k<10;k++){for(i=0;i<8;i++){P2=tabP2[i];if(c == 1)P0=tabP0[j][i];else if(c == 2)P3 = tabP0[j][i];elseP0=tabP0[j][i];DELAY_MS(time);}}}}void Nextkj1(uchar c,uchar time) //第一种接框架后 4个小正方形转动最后全亮{unsigned char code tabP0[32][8]={{0x9F,0x09,0x09,0x9F,0x9F,0x09,0x09,0x9F},{0x06,0x99,0x99,0x06,0x06,0x99,0x99,0x06},{0x00,0x66,0x66,0x00,0x00,0x66,0x66,0x00},{0x00,0xC0,0xC0,0x00,0x00,0xC0,0xC0,0x00}, {0x00,0x00,0x00,0x00,0x00,0xCC,0xCC,0x00}, {0x00,0x00,0x00,0x00,0xCC,0xCC,0x00,0x00}, {0x00,0x00,0x00,0x00,0x66,0x66,0x00,0x00}, {0x00,0x00,0x00,0x00,0x33,0x33,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x33}, {0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66}, {0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0xCC}, {0x00,0x00,0xC0,0xC0,0x00,0x00,0xC0,0xC0}, {0x00,0x00,0xCC,0xCC,0x00,0x00,0x00,0x00}, {0x00,0xCC,0xCC,0x00,0x00,0x00,0x00,0x00}, {0xCC,0xCC,0x00,0x00,0x00,0x00,0x00,0x00}, {0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00}, {0x33,0x33,0x00,0x00,0x00,0x00,0x00,0x00}, {0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00}, {0x33,0x33,0x33,0x33,0x00,0x00,0x00,0x00}, {0x33,0x33,0x77,0x77,0x00,0x00,0x00,0x00}, {0x33,0x33,0xFF,0xFF,0x00,0x00,0x00,0x00}, {0x33,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00}, {0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00}, {0xFF,0xFF,0xFF,0xFF,0xCC,0xCC,0x00,0x00}, {0xFF,0xFF,0xFF,0xFF,0xEE,0xEE,0x00,0x00}, {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00}, {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x33,0x00}, {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x33,0x33}, {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x77,0x77}, {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},};int j,k,i;if(c==1)P3 = 0X00;else if(c==2)P0 = 0X00;else{P3 = 0XFF;P0 = 0XFF;}for(j=0;j<32;j++){for(k=0;k<10;k++)。

相关文档
最新文档