纯手工打造摇摆LED 时钟.doc_第1页
纯手工打造摇摆LED 时钟.doc_第2页
纯手工打造摇摆LED 时钟.doc_第3页
纯手工打造摇摆LED 时钟.doc_第4页
纯手工打造摇摆LED 时钟.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

纯手工打造摇摆LED 时钟时间:2009-05-11 来源: 作者:周正华 点击:4693 字体大小:【大 中 小】 看到市场上正在流行的时尚商品摇摆LED 时钟,感觉非常新颖独特,正在玩单片机的我,激起了自己也想DIY 一个的冲动。不就是一个流水灯吗?有什么难的?! 于是,一个单片机项目就这样开始了。然而动手以后才知道问题并非想象那样简单,因没有任何现成的资料,机械的、电子的和编程的问题一大堆,一个一个需要自己来解决。经历二十多天的苦战和无数次的修改与调试,作品终于完成,基本达到预先要求。 现将制作资料整理出来,与广大DIY 爱好者分享。一. 整体方案 本制作是根据视觉暂留原理, 让一排8 只LED作往复运动, 在空中呈现八个字符的显示屏,可显示数字或英文字符。开机后先显示“Welcome!”欢迎字符(见图1), 再进入时钟显示状态。显示屏同时显示“时” 、“分” 、“秒”信息,用“:”分隔(见图2)。 图1 开机画面 图2 运行状态 显示分“正常运行”、“调分”和“调时” 三种状态。当处于调整状态时,调整的项会闪现,以便识别。为此,设置三个调整按键,一个为“状态键”,一个为“加法键”,一个为“减法键”。(见图3) 图3 按键的设置 图4 音圈电机组件 摇棒的动力部分采用从废旧硬盘拆下的音圈电机(见图4),驱动采用直流电机驱动方式。 结构方面,将音圈电机直接安装在万用板上,将万用板的四周用四根螺柱与一透明有机板结合成一体,构成支撑摇棒底座。(见图5, 图6)。 图5 万用板与有机板构成底座 图6 底座侧面二. 实作要点1 主板的结构布局见图7。 图7 主板布局 图8 摇棒上的LED2LED 的焊接,将LED 两脚跨接在电路板两端的方式进行焊接。使LED 紧密排列在一起。3摇棒上的LED 与主板上的信号用柔性排线连接,音圈电机供电占2 位,LED 信号传输占9 位,所以至少要11 位的排线。(见图9) 图9 排线与拉簧 图10 拉簧4为保持摇棒的平衡, 在摇棒接近旋转轴的两端加装两只拉簧,这两只拉簧的规格尽量保持一致,弹性强弱要适中,最好可多找几种规格的试试。(图9,图10)5采用驱动直流电机正反转的方式,驱动音圈电机来回摆动。让电机正、反转的方法很多,最典型的是H 桥电路驱动,H 桥电路原理见图11,常见的是用三级管代替图中的开关。图11 H 桥驱动原理 为了简化电路,最好采用H 桥功能的集成电路。这种IC 很多,比如象TA7257,TA8429H,L6203 等,这里用的是三菱公司的M54544AL(见图12)。IC 各脚定义见图13。图12 电机驱动IC图13 M56544AL 各脚定义6电原理图见图14。图14 电原理图7完成图见图15。图15 完成图三. 软件设计1 摇棒的启动 为了使摇棒从静止状态过度到正常运行状态,在正式显示前加一启动程序。其实质就是逐渐加快驱动的频率,一直到摇棒正常摆动为止。通过下面的代码实现do mm+;Delay(120+mm);put1=put1; put2=put2;while(mm60);Delay(20); /根据实际情况确定延时值2 秒闪现的实现:数字或字符的闪现是通过变量Ms 和数组w实现的,如需要八位字符中的间的第4 位闪现,则w3=1。这是通过全局变量Ms 在void timer0(void)函数中每隔一秒改变一次状态(0 或1),打开或关闭显示。if(Ms*wii-3=1) P2=0xff; else P2=ASCIIDOCvii*6+jj; /正向显示if(Ms*w10-ii=1) P2=0xff; else P2=ASCIIDOCv13-ii*6+5-jj; /反向显示3 调试中发现,显示屏上的字符并不是一样宽的(见图16),仔细分析是由于摇棒在运动中,一直受力,而且所受的力是随时变化的。为方便精确调整显示,特别作了一个显示中断表Tr,改变显示LED 的时间段,协调显示效果。图16 调整前的显示4 按键去抖程序 按键的去抖采用软件编程实现,其方法是当检测到按键的接口出现低电平后,隔一段时间再检测,如还是低电平,则确认为有效,否则无效。具体的程序是通过函数unsigned char ChKey(bit Key)完成的。5 显示同步 因没有位置传感器,显示同步完全靠时钟中断来确定。这样就有一个问题,音圈电机的驱动信号在什么时刻改变,显示才能保持在中间,并能保证正反显示能很好地重合。经实际观察, 音圈电机的驱动信号在显示中部, 要根据具体情况细调。由程序中的变量Ta 调试确定。6 完整C51 程序代码/*POV 摇摆显示LED 钟C51 程序周正华编2008.3.19*/#include /*硬件端口定义*/sbit set0=P01;sbit set1=P00;sbit set2=P02;sbit put1=P36;sbit put2=P37;/*时钟用数组*/unsigned char BUFFER=0,0,0,0;unsigned char maxnum=59,23;/*显示数组*/unsigned int v14;unsigned int w8;/*显示中断表*/int code Tr=2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2550,2500,2450,2400,2350,2300,2250,2200,2150,2100,2050,2000,1950,1900,1850,1800,1750,1700,1650,1600,1550,1500,1450,1400,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900,1950,2000,2050,2100,2150,2200,2250,2300,2350,2400,2450,2500,2550,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,;/*字符字模*/unsigned char code ASCIIDOC = / ASCII0x7C,0x8A,0x92,0xA2,0x7C,0x00, / -0-000x00,0x42,0xFE,0x02,0x00,0x00, / -1-010x46,0x8A,0x92,0x92,0x62,0x00, / -2-020x84,0x82,0x92,0xB2,0xCC,0x00, / -3-030x18,0x28,0x48,0xFE,0x08,0x00, / -4-040xE4,0xA2,0xA2,0xA2,0x9C,0x00, / -5-050x3C,0x52,0x92,0x92,0x8C,0x00, / -6-060x80,0x8E,0x90,0xA0,0xC0,0x00, / -7-070x6C,0x92,0x92,0x92,0x6C,0x00, / -8-080x62,0x92,0x92,0x94,0x78,0x00, / -9-090x00,0x00,0x00,0x00,0x00,0x00, / - -100x00,0x00,0xFA,0x00,0x00,0x00, / -!-110x04,0x08,0x10,0x20,0x40,0x00, / -/-120x00,0x6C,0x6C,0x00,0x00,0x00, / -:-130x3E,0x48,0x88,0x48,0x3E,0x00, / -A-140xFE,0x92,0x92,0x92,0x6C,0x00, / -B-150x7C,0x82,0x82,0x82,0x44,0x00, / -C-160xFE,0x82,0x82,0x82,0x7C,0x00, / -D-170xFE,0x92,0x92,0x92,0x82,0x00, / -E-180xFE,0x90,0x90,0x90,0x80,0x00, / -F-190x7C,0x82,0x8A,0x8A,0x4E,0x00, / -G-200xFE,0x10,0x10,0x10,0xFE,0x00, / -H-210x00,0x82,0xFE,0x82,0x00,0x00, / -I-220x04,0x02,0x82,0xFC,0x80,0x00, / -J-230xFE,0x10,0x28,0x44,0x82,0x00, / -K-240xFE,0x02,0x02,0x02,0x02,0x00, / -L-250xFE,0x40,0x30,0x40,0xFE,0x00, / -M-260xFE,0x20,0x10,0x08,0xFE,0x00, / -N-270x7C,0x82,0x82,0x82,0x7C,0x00, / -O-280xFE,0x90,0x90,0x90,0x60,0x00, / -P-290x7C,0x82,0x8A,0x84,0x7A,0x00, / -Q-300xFE,0x90,0x98,0x94,0x62,0x00, / -R-310x64,0x92,0x92,0x92,0x4C,0x00, / -S-320x80,0x80,0xFE,0x80,0x80,0x00, / -T-330xFC,0x02,0x02,0x02,0xFC,0x00, / -U-340xF8,0x04,0x02,0x04,0xF8,0x00, / -V-350xFE,0x04,0x18,0x04,0xFE,0x00, / -W-360xC6,0x28,0x10,0x28,0xC6,0x00, / -X-370xC0,0x20,0x1E,0x20,0xC0,0x00, / -Y-380x86,0x8A,0x92,0xA2,0xC2,0x00, / -Z-390x24,0x2A,0x2A,0x1C,0x02,0x00, / -a-400xFE,0x14,0x22,0x22,0x1C,0x00, / -b-410x1C,0x22,0x22,0x22,0x10,0x00, / -c-420x1C,0x22,0x22,0x14,0xFE,0x00, / -d-430x1C,0x2A,0x2A,0x2A,0x10,0x00, / -e-440x10,0x7E,0x90,0x90,0x40,0x00, / -f-450x19,0x25,0x25,0x25,0x1E,0x00, / -g-460xFE,0x10,0x20,0x20,0x1E,0x00, / -h-470x00,0x00,0x9E,0x00,0x00,0x00, / -i-480x00,0x01,0x11,0x9E,0x00,0x00, / -j-490xFE,0x08,0x14,0x22,0x02,0x00, / -k-500x00,0x82,0xFE,0x02,0x00,0x00, / -l-510x1E,0x20,0x1E,0x20,0x1E,0x00, / -m-520x20,0x1E,0x20,0x20,0x1E,0x00, / -n-530x1C,0x22,0x22,0x22,0x1C,0x00, / -o-540x3F,0x24,0x24,0x24,0x18,0x00, / -p-550x18,0x24,0x24,0x24,0x3F,0x00, / -q-560x20,0x1E,0x20,0x20,0x10,0x00, / -r-570x12,0x2A,0x2A,0x2A,0x24,0x00, / -s-580x20,0xFC,0x22,0x22,0x24,0x00, / -t-590x3C,0x02,0x02,0x3C,0x02,0x00, / -u-600x38,0x04,0x02,0x04,0x38,0x00, / -v-610x3C,0x02,0x3C,0x02,0x3C,0x00, / -w-620x22,0x14,0x08,0x14,0x22,0x00, / -x-630x39,0x05,0x05,0x09,0x3E,0x00, / -y-640x22,0x26,0x2A,0x32,0x22,0x00, / -z-65;unsigned int Ti;unsigned char ii,jj,mm, ff ,TZ ,Ms ,Ta;/*延时程序*/void Delay(unsigned int msec)unsigned int x,y;for(x=0; x=msec;x+)for(y=0;y5) ii+; jj=0;if(ii13) ii=0;ff=!ff;Ti=-Trii*6+jj; /读显示中断表/*主程序*/void main(void)/变量初始化Ms=0;ff=0;Ta=46; /正反显一致性调整, 取值范围在4250 之间, 根据实际确定put1=0;put2=1;/中断初始化TMOD=0x11;TH0=-5000/256; TL0=-5000%256;TR0=1;ET0=1;TH1=-2000/256; TL1=-2000%256;TR1=1;ET1=1;/十四个字符中前三个和后三个不显(不用)v0=10;v1=10;v2=10;v11=10;v12=10;v13=10;/*摇摆棒初始启动*/do mm+;Delay(120+mm);put1=put1; put2=put2;while(mm21) /进位到秒BUFFER0=0; BUFFER1=BUFFER1+1;Ms=!Ms;if (BUFFER1=60) /进位到分BUFFER1=0;BUFFER2=BUFFER2+1;if (BUFFER2=60)BUFFER2=0;BUFFER3=BUFFER3+1; /进位到时if (BUFFER3=24) BUFFER3=0;/将显示内容送显示缓冲区v9=BUFFER1/10;v10=BUFFER1-v9*10;v6=BUFFER2/10;v7=BUFFER2-v6*10;v3=BUFFER3/10;v4=BUFFER3-v3*10;/键盘处理if(ChKey(set0)=1) /模式键Ms=1; /秒闪开if(TZ2) TZ+; else TZ=0; /三种状态循环转换switch(TZ)case 0:w0=0;w1=0;w2=0;w3=0;w4=0;w5=0;w6=0;w7=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论