资源描述
线阵LED图文显示装置设计报告一、任务 设计并制作一个线阵LED图文显示装置。图1 线阵LED图文显示装置示意图二、要求(1)开机时装置完成显示自检,能对点阵中16只LED逐个点亮,每只LED显示 时间约为1秒,此时平台不旋转。(2)通过按键启动,实现16个同心圆图形分别顺序(由大到小)和逆序(由小 到大)显示,每个同心圆图形显示时间为0.2秒左右;运行15秒左右自 动停止。(3)通过按键启动,显示字符“TI杯”,要求字符显示稳定,无明显漂移;运 行20秒左右自动停止。(4)通过按键启动,显示双渐开线;运行15秒左右自动停止。(5)通过按键启动,显示一个指针式秒表,该秒表以标志杆为起始标志,秒针 随时间动态旋转,旋转一周的时长为601秒;运行70秒左右自动停止。(6)改变转速,完成(2)的要求。(7)LED显示亮度能依据环境亮度变化自动调节。设计报告摘要显示装置利用人眼视觉暂留的生理特性,通过LED在旋转运动过程中经过不同位置时,系统点亮相应的LED,实现线阵LED在旋转平面上构成不同的静态或动态图案。1、 系统方案l 方案描述:本系统是利用人眼视觉暂留效应设计出的,该系统主要由电机、标志杆、LED控制电路三部分组成。电机的作用就是带动电路部分进行旋转,这个部分的关键就在于电机的转速要均匀,这样才能保证图像在水平方向不会被局部伸展或者压缩。为了使LED转速保持稳定,我们采用使用匀速的直流电机。LED整列是旋转屏的显示主体,为LED显示控制电路的作用是将存储在芯片内图像或符号,在旋转位置感应信号的同步下,根据旋转的位置按列扫描显示在LED阵列上。这部分是整个系统的核心。l 装置整体结构图光照强度感应模块按键检测模块MCU发光二极管显示模块红外线接收模块电源模块电机驱动模块(可调转速)(独立的模块)红外线发射模块(标志杆)(独立的模块)l 原件的比较和选择1.电源的选择方案一:使用质量较轻的纽扣电池,位置可以随便放置,但是成本较高,使用时间短方案二:使用废弃手机的手机电池,这种锂电池容量大,使用时间长,缺点是质量较重,在平衡系统时存在困难方案三:使用三节5号电池,该电池容易购买,但是容量低于手机锂电池,同时质量较重,在平衡系统中存在着困难,在考虑成本和供电时间时,选择了方案二。在开始焊接电路到调试成功的工程中,该电池依然电力充足,证明我们的选择是正确的2.标志杆的选择方案一:选择干簧管作为接收装置,在标志杆处固定一块永久磁铁,缺点是干簧管感应距离有些短方案二:选择红外发射管和红外接收管作为感应开关,红外线发射管与接收管可以相距较远的距离在装置旋转时,两者的相对距离可能会发生小幅的变化,在硬件焊接时,由于电机驱动的电路板过小,没有把标志杆和电机电路板固定,因此两者的相对位移会发生改变,两者相离太近,会出现两者碰撞的情况,选择可以相距较远的红外发射接收管可以避免两者的碰撞3.驱动电机模块 方案一:采用步进电机。步进电机能够准确的定向,但是图像或者文字的分辨率受到步进电机的步进角度的限制。并且步进电机以及控制电路成本较高,并且需要单片机控制,占用CPU的资源。 方案二:采用普通的直流电机。此方案,使用方便,成本较低,通过简单的改装,可以给系统供电。综合各方面考虑,为了节省成本,简单系统电路,以及更方便的为系统供电,使系统能够长期工作,故采用方案二。4. Led的选择方案一:采用3mm的led,此方案运用方便、焊接简单、成本较低,但缺点是较重、体积较大不利于后期的系统平衡。方案二:采用贴片的led,此方案质量较轻、体积小。但对焊接技术要求较高。考虑本人的焊接技术,最终采用方案二。2、 理论分析与计算l 线状点阵LED驱动参数分析与计算考虑到本系统才用手机电池供电最高电压4.2v,系统显示原理为逐列扫描,并且有调节led亮度的装置,最终采用470的贴片电阻和led串联。I=V/RI=8mAl 线阵LED运动参数分析与计算本系统运用人眼视觉暂留的原理进行逐列扫描,且考虑到后期有秒表这个题目,最终决定每次扫描时的延时时间用软件进行延迟,具体的延时时间用keil 4 内部的程序调试进行计算l 指针式秒表分析与计算本题目要求在可以改变转速的情况下显示一个指针是秒表,考虑到电机转速可能随时变化,所以在每次开始扫描前通过测定转过上一圈所需要的时间然后分成60份,每一份的时间就是本次扫描每一秒所需的延时时间,同时用单片机的定时器来定时本次扫描应该扫描那一秒。提取上次扫描所需的时间t1=t2;/把上次的t2值赋给t1t=n;/把定时器中断次数赋给tn=0;/定时器中断次数清零t2_1=TH0;/提取定时器中的值t2_2=TL0;t2=t2_1*256+t2_2;/计算定时器中的值得大小s1=(long)(50000*t)+t2-t1)*0.0004166667);/计算本次扫描每秒需要的时间数据说明:/ n 当转速过高时一次扫描可能小于25ms,因此要分定时器发生中断和不发生中断两种情况/(50000*t+t2-t1)*0.0004166667=(50000*t+t2-t1)*0.0000005/0.00002/60/0.0000005计数器加一个数所需要的时间(24MHZ晶振)/0.00002 x=1时高精度延时函数的延时时间(通过keil 4中的软件调试测量得到)/60 (把一圈的时间平分为60份)l 显示亮度自动调节分析与计算本系统采用光敏电阻驱动一个s8050的三极管来给led供电,发光二极管的亮度可以随着光照强度的变化而变化,在一定范围内发光二极管的亮度随着光照强度的变化而变化,但是这个范围过于狭窄,于是先在光线检测电路中加了一个电位器来调节阻值,通过实验测量其需要的阻值,然后在换成定值电阻。三、电路与程序设计l 电路:单片机模块电机和红外发射模块l 程序:#include#include#define uint unsigned int#define uchar unsigned charsbit KEY=P37;/按键位定义uchar xxx=0,num,pic=0,x123,z1=0,n=0,n1=0;uint t1_1=0,t1_2=0,t2_1=0,t2_2=0,t=0;unsigned long s2=0,t1=0,t2=0,s1=0,a=0;void delay(uint x)uint x1,x2;for(x1=x;x10;x1-)for(x2=415;x20;x2-);void yanshi(uint x)uint x1;for(x1=x;x10;x1-);void uyanshi(uint x) /高精度延时函数 当x=1时,时间为0.000 0027(S)【40MHZ晶振】 while(x-);void jiance()/检测uint a1=1000;uchar a2=0xfe;/1111 1110doP1=a2;delay(a1);a2=_crol_(a2,1);while(a2!=0xfe);P1=0xff;doP2=a2;delay(a1);a2=_crol_(a2,1);while(a2!=0xfe);P2=0xff;void txy()/同心圆uchar b1=4,b2=0xfe,b3=200;/1111 1110while(b1)doP1=b2;delay(b3);b2=_crol_(b2,1);while(b2!=0xfe);P1=0xff;doP2=b2;delay(b3);b2=_crol_(b2,1);while(b2!=0xfe); b2=0xbf;if(b1=1)P2=0xff;break;doP2=b2;delay(b3);b2=_cror_(b2,1);while(b2!=0x7f);P2=0xff;doP1=b2;delay(b3);b2=_cror_(b2,1);while(b2!=0xfe);P1=0xff;b1-;uchar code sjjx1=0xff,0x7f,0xff,0x3f,0xff,0x1f,0xff,0x0f,0xff,0x07,0xff,0x03,0xff,0x01,0xff,0x00,0x7f,0x00,0x3f,0x00,0x1f,0x00,0x0f,0x00,0x07,0x00,0x03,0x00,0x01,0x00,0x00,0x00;void sjjx()/双渐近线 if(num=100)num=0;x123=x123+2;if(x123=32)TR0=0;TH0=(65536-33333)/256;TL0=(65536-33333)%256;num=0;n=0;x123=0;pic+;yanshi(2400);P1=sjjx1x123;P2=sjjx1x123+1;yanshi(8);P1=0xff;P2=0xff;yanshi(4800);P1=sjjx1x123;P2=sjjx1x123+1;yanshi(8);P1=0xff;P2=0xff; uchar code TIbei1=0xE7,0xFF,0xF7,0xFF,0xF7,0xDF,0x07,0xC0,0xF7,0xDF,0xF7,0xFF,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xDF,0xF7,0xDF,0x07,0xC0,0xF7,0xDF,0xF7,0xDF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFB,0xEF,0xFC,0x2F,0xFF,0x00,0x00,0xAF,0xFF,0x6F,0xFB,0xFB,0xFD,0xFB,0xFE,0x7B,0xFF,0x1B,0x00,0xE3,0xFF,0x7B,0xFF,0xFB,0xFE,0xFB,0xF9,0xFB,0xFF,0xFF,0xFF,;void TIbei() /TI杯uint a; if(num=100)num=0;x123+;if(x123=20) TR0=0;x123=0;num=0;n=0;TH0=(65536-33333)/256;TL0=(65536-33333)%256;pic+; for(a=0;a=100)num=0;x123=x123+2;t1=t2; /把上次的t2值赋给t1t=n; /把定时器中断次数赋给tn=0; /定时器中断次数清零t2_1=TH0; /提取定时器中的值t2_2=TL0; /计算定时器中的值得大小t2=t2_1*256+t2_2; s1=(uint)(33333*t+t2-t1)*0.00184)*(x123/2); /计算本次扫描的延迟时间 /(33333*t+t2-t1)*0.001851852=(33333*t+t2-t1)*0.0000003/0.0000027/60 /0.0000003(计数器加一个数所需要的时间) /0.0000027(x=1时高精度延时函数的延时时间) /60 (把一圈的时间平分为60份)uyanshi(s1); /延时P1=0x00;P2=0x00;yanshi(10);P1=0xff;P2=0xff;if(x123=120)x123=0;n1+;if(n1=1&x123=20) TR0=0;x123=0;num=0;n=0;TH0=(65536-33333)/256;TL0=(65536-33333)%256;n1=0;pic+;void main()/主函数/uyanshi(1000);/uyanshi(1000);/delay(1000);/delay(1000);jiance();/开机检测TMOD=0x01;/设置定时器的工作方式TH0=(65536-33333)/256;/定时器赋初值TL0=(65536-33333)%256;EA=1;/开总中断ET0=1;/开定时器0EX0=1;/开外部中断0IT0=1; /设置外部中断为下降沿触发PT0=1;/设置定时器为高优先级P0=0xff;while(1)if(KEY=0)delay(20); /按键去抖 if(KEY=0) pic+; while(!KEY);delay(40);while(!KEY);if(pic10) /画面切换置1pic=1; if(pic=1) /同心圆画面判断txy(); /同心圆pic+; void X0_duan() interrupt 0 /外部中断0程序 switch(pic) /选择画面 case 0:break;/空 case 1:break; /同心圆 case 2:break;/空 case 3:TR0=1;TIbei();break; /TI杯case 4:TR0=0;break;/空case 5:TR0=1;sjjx();break; /双渐近线 case 6:TR0=0;break;/空case 7:TR0=1;miao();break; /秒表case 8:TR0=0;break;/空case 9:TR0=1;miao();break; /秒表(改变转速后)case 10:TR0=0;break;/空default:break;void T0_time() interrupt 1 /定时0器程序 TH0=(65536-33333)/256;TL0=(65536-33333)%256;num+;n+;4、 测试方案与测试结果1.程序延时时间的测试高精度延时函数void uyanshi(long x) while(x-);u 测试方法(1) 设计测试程序为:#includevoid uyanshi(long x) while(x-);void mainuyanshi(10000);/此处设置断点uyanshi(10000);/此处设置断点(2)用keil 4 中的程序调试设置断点,先测x=10000时的延时时间,在除 以10000就是x=1时的延时时间。u 测试结果当x=1时,时间为0.000 02(S)【24MHZ晶振】2. led亮度的测试u 测试方法(1)按右图连接电路。(2) 在较亮的灯光下,调节电位器R,使led刚好不发光。(3) 拆下电位器,用万用表的欧姆档测量电位器被接入电路的阻值。u 测试结果 通过实验测得,在较强光下,恰好使led不发光R阻值为560。3. 双渐近线平行的测试u 测试方法yanshi(x);P1=sjjx1x123;P2=sjjx1x123+1;yanshi(8);P1=0xff;P2=0xff;yanshi(2x);P1=sjjx1x123;P2=sjjx1x123+1;yanshi(8);P1=0xff;P2=0xff;给x赋值然后下载到单片机来看实际的显示效果,如果太靠前那么加大x的值,靠后缩小X,直到两条线平行为止。u 测试结果通过测量得到x的值为1500。4. 程序最终的测试u 测试方法此时采用画面模块化测试,这样能够快速的找出程序的那一个画面模块出了问题。5、 结论与心得在这次设计的过程中,我们组遇到了很多问题,在我们组三个人的共同努力下,问题才得以解决,此时此刻,我感到了团队合作的重要性。俗话说的好“三个臭皮匠,顶个诸葛亮”,或许就是这个道理。另外,在做此类设计中,团队中的各个成员之间应该多交流,更应该分工明确,但另一方面,我们也应该加强合作,也就是说,在分工的基础上再合作。在今后的学习中,我们应该加强自身品格的修养、以及自身素质的提升,向一个德才兼备的复合型人才靠拢。
展开阅读全文