ImageVerifierCode 换一换
格式:DOCX , 页数:97 ,大小:1.25MB ,
资源ID:2025242      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2025242.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机的光立方课程设计.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

1、基于单片机的光立方课程设计单片机课程设计报告题 目 基于单片机的4*4*4光立方设计 系 别 计 算 机 科 学 系 专 业 计算机科学与技术 班 级 学 号 姓 名 指导教师 日 期 【摘要】当今社会,随着电子行业的不断发展,单片机的应用从根本上改变了传统的控制系统设计思想和设计方法,已广泛的应用在工业自动化、通信、自动检测、信息家电、电力电子航空航天等各个方面。成为现代生产和生活中不可缺少的一部分。我们学习单片机也一个学期了,此次单片机课程设计,我采用的是STC12C5A60S2系列的单片机,设计一个4*4*4模式的“光立方”。将LED灯分成4层,利用程序来编写各种不同的效果来控制LED的

2、亮灭,最终使得整个立方体展现不同的变换,美轮美奂,绚丽多彩。【关键词】单片机 课程设计 光立方1 绪论1.1 课题研究的背景“光立方”一词正逐渐引起了全国人民的关注,并得到了全球的高度肯定。所谓“光立方”:就是在平面LED基础上发展起来的新的显示技术,通过复杂的程序控制,在三维空间能够显示具有立体感的图形、动画等。由此,也掀起了光立方的设计与学习热潮,在原有的基础上不断增加难度,增加变换花样,吸引电子爱好者对其研究、创新。光立方是由LED灯组成,由于发光二级管质量比较稳定,使用寿命长,不用频繁地去更换,能减少成本,更节能。光立方作为一种特殊的显示资源,已用于一些广告行业、家庭、娱乐厅、会议室、

3、大型演唱会、城市地标广场等场所的布置和装饰,还可以用于更广泛方面,具有广阔的应用前景。1.2 课题研究的意义本次毕业设计一改传统的平面流水灯的风格,而是从平面向立体发展,通过更宽广的三维空间呈现出更加绚丽的效果,直接冲击着人们审美视觉,不在停留在乏味的平面成像。光立方主体部分由64个LED灯组成,在制作过程中锻炼学习动手焊接能力,并以低成本,智能化产品对实现经济利益、商业价值的形成具有积极的推动作用。光立方的研究极具创意和启发,而且可以低成本、高效益的研究未来的3D技术。2 总体设计2.1 设计目的1进一步掌握单片机的原理及其功能。学会利用单片机做一些课外电子设计与制作。2.熟悉LED点亮条件

4、及其工作原理。3.熟悉光立方显示的原理及其相关的线路连接。4.通过此次的电路焊接和调试提高自己的动手及其分析问题的能力。2.2 工作原理光立方其功能相当于三维显示器,只不过光立方是由LED灯组成的三维的立方体。光立方显示的原理简单的说就是用单片机控制64个LED灯,在不同时刻点亮要显示图案位置所在的灯,利用人眼余辉效应,可以看到比较完整的显示图案或动画了。其原理如下:光立方从下到上共4层,每一层16个LED的负极接到一起,第一层16个蓝色正极和16个红色正极分别单独引出,第二层的每个正极分别接到它对应第一层正极,第三层的正极接第二层的正极。就是竖着看是8个接到一个正极上。连在一起的是阴极,这样

5、焊接起来。光立方引出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工艺的,具有串口烧写编程功能,低功耗;时钟源电路有很多种,比如阻容低速时钟源

6、、普通晶体时钟源、带缓冲放大的晶体时钟源等等,考虑到电路稳定及材料选购等方面,决定采用普通晶体时钟源,其中晶体用11.0592M的石英晶振。显示部份由显示部份由64个LED灯组成来进行显示。3.3 单片机最小系统单片机的最小系统就是让单片机能正常工作并发挥其功能时所必须的组成部分,也可理解为是用最少的元件组成的单片机可以工作的系统。对89C51单片机来说, 最小系统一般应该包括: 单片机、时钟电路、复位电路、输入/ 输出设备等。单片机的最小系统如下图所示:3.3 电路图设计通过电路图设计,方便搭建起光立方的架构。1. 电源设计电路图2. 时钟电路图3. 整体电路图3.4 光立方搭建方法3.4.

7、1 将LED从点到线的搭建首先接线下灯座的制作方法: 把40P圆排母用水口钳或者斜口钳剪成单针如下图所示 把其余元器件焊接好后图:3.4.2 将LED从线到面的搭建进行八次上诉焊接后接下来就是将4束的LED焊接起来。在从点到线时是将所有LED的阴极连在一起,而这次则是将所有LED阳极弯折并依次连接,如图所示。注意:由于焊接过程中将产生静电容易将LED烧坏,因此本项工作完成后请认真检查每个灯的好坏,可以用万用笔等工具检测。同时检测灯与灯之间有没虚焊情况。3.4.3 将LED从面到体的搭建最后一个步骤是将已焊好的4个面进行焊接,其方法是将之前8个面上的阴极对应位置依次焊接,最后留出的4个阴极与输出

8、端进行连接。实物图如下图所示。 4. 系统软件设计4.1 主程序设计程序主函数运行流程框图如下图所示。4.2 软件测试光立方主要是通过程序来控制光立方体从而达到多种动画变化的效果。由于要形成多样的3D动画,在变成过程中也出现了不少的问题。最后经过多次的细心修改,顺利的完成了编程工作。4.3 结果分析本设计通过硬件设备和软件完美配合,总共呈现十一个连续的动画效果。经过多次的反复测试与分析,所呈现的动画与程序中预期的效果吻合,符合设计要求。在软硬件测试过程中让我们对原先设计的电路的原理及功能进一步熟悉,并对各电路模块和相关的芯片联合工作更加了解。在这个调试的过程中虽然挺枯燥无味,但锻炼我们发现问题

9、并解决问题的能力,对我们的专业知识起到了温故知新的作用。5 课程设计心得体会此次为期两个礼拜的课程设计,让我感受颇深。最终看到了绚丽多姿,变化多端的LED光立方的图案。在中,在很大程度上培养了自己的独立思考及其动手能力。学会了自己独立的发现问题、分析问题。老师在实验室指导我们的设计,在查阅资料仍找不到但答案的还可以请教老师。尽管此次设计过程中遇到些问题,但最终还是一步一个脚印过来了。此次设计在丁老师的指导下完成的,老师扎实的专业知识,让我觉得自己还有好多的知识需要去学习。在这大学的时间,要好好的提升自己的相关技能。程序代码#include #include #define uint unsig

10、ned 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(

11、 -a != 0)/ for(i = 0; i 600; i+);/ uchar x,j; for(j=0;ji;j+) for(x=0;x=148;x+); void Adc_Delay (uint a) uint i; while( -a != 0) for(i = 0; i 0;x-) for(y=z;y0;y-); void timer1_init() TMOD |= 0x10; TH1 = 0; TL1 = 0; ET1 = 1; TR1 = 1; EA = 1;/* AD转换函数 */*/unsigned char Read (unsigned char CHA) unsigned

12、 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

13、_(); _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;i1

14、0;i+) /一次采集数据的数量 Adc_Delay(3); R=Read(1); /读对应的口,触发对应的触摸按键 if(R1 & j1) mm+; else mm=0; if(mm0) 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;i10;i+) /一次采集数据的数量 Adc_Delay(3); R=Read(2); if(R1 & j1) mm+; else mm=0; if(mm0) aa =1; else aa=0; r

15、eturn(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

16、,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,149,150,;void PwmUp(uint a, uchar c) uchar i; if(c = 1) P3 = 0X00; else P0 =

17、 0X00; P2 = 0X00; i = tablea; Delay(i); if(c = 1) P3 = 0XFF; else P0 = 0XFF; P2 = 0X00; Delay(150-i); void PwmDown(uint a,uchar c) uchar i; if(c = 1) P3 = 0XFF; else P0 = 0XFF; P2 = 0X00; i = tablea; Delay(i); if(c = 1) P3 = 0X00; else P0 = 0X00; P2 = 0X00; Delay(150-i); void PwmAllon(uchar c) int i

18、; for(i = 0; i 150 ;i+) PwmDown(i,c); if(c = 1) P3 = 0X00; else P0 = 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 tabP058= 0xFF,0xFF,0xFF,0xFF,0xFF,0

19、xFF,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;j5;j+) for(k=0;k15;k+) for(i=0

20、;i8;i+) / P0=0; P2=tabP2i; if(c = 1) P0=tabP0ji; else if(c = 2) P3 = tabP0ji; else P0=tabP0ji; DELAY_MS(time); void Randomlight(uchar c,uchar time) /随机亮完unsigned char code tabP0388=0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x00,0x02,0x10,0x00

21、,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

22、,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

23、,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

24、,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

25、,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;j38;j+) for(k=0;k10;k+) for(i=0;i8;i+) / P0=0; P2=tabP2i; if(c = 1) P0=tabP0ji; else if(c = 2) P3 = tabP0ji; else P3 = tabP0ji; P0=tabP0ji; DELAY_MS(time); void Randomoff(uchar c,uch

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2