最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

当前位置: 主页 > 电子DIY > led显示/灯光 > led显示 >

自制纯手工打造摇摆LED时钟

时间:2013-01-21 12:14来源:网络 作者:网络整理 点击:
看到市场上正在流行的时尚商品——摇摆LED 时钟,感觉非常新颖独特,正在玩单片机的我,激起了自己也想DIY 一个的冲动。不就是一个流水灯吗?有什么难的?! 于

 

  看到市场上正在风行的时尚商品——摇晃LED 时钟,感受很是新奇奇异,正在玩单片机的我,激起了本身也想DIY 一个的激动。不就是一个流水灯吗?有什么难的?! 于是,一个单片机项目就这样开始了。然而下手往后才知道题目并非想象那样简朴,因没有任何现成的资料,机器的、电子的和编程的题目一大堆,一个一个必要本身来办理。经验二十多天的苦战和无数次的修改与调试,作品终于完成,根基到达预先要求。

 

  现将制作资料清算出来,与宽大DIY 喜爱者分享。

 

  一. 整体方案

 

  本制作是按照视觉暂留道理, 让一排8 只LED作来去行为, 在空中泛起八个字符的表现屏,可表现数字或英笔墨符。开机后先表现“Welcome!”接待字符(见图1), 再进入时钟表现状态。表现屏同时表现“时” 、“分” 、“秒”信息,用“:”脱离(见图2)。

自制纯手工打造摇摆LED时钟

  图1 开机画面

  

自制纯手工打造摇摆LED时钟

  图2 运行状态

 

  表现分“正常运行”、“调分”和“调时” 三种状态。当处于调解状态时,调解的项会闪现,以便辨认。为此,配置三个调解按键,一个为“状态键”,一个为“加法键”,一个为“减法键”。(见图3)

自制纯手工打造摇摆LED时钟

  图3 按键的配置

  

自制纯手工打造摇摆LED时钟

  图4 音圈电机组件

 

  摇棒的动力部门回收从废旧硬盘拆下的音圈电机(见图4),驱动回收直流电机驱动方法。

 

  布局方面,将音圈电机直接安装在万用板上,将万用板的附近用四根螺柱与一透明有机板团结成一体,组成支撑摇棒底座。(见图5, 图6)。

自制纯手工打造摇摆LED时钟

  图5 万用板与有机板组成底座

  

自制纯手工打造摇摆LED时钟

  图6 底座侧面

 

 

  二. 实作要点

 

  1. 主板的布局机关见图7。

自制纯手工打造摇摆LED时钟

  图7 主板机关

  

自制纯手工打造摇摆LED时钟

  图8 摇棒上的LED

 

  2.LED 的焊接,将LED 两脚跨接在电路板两头的方法举办焊接。使LED 细密分列在一路。

 

  3.摇棒上的LED 与主板上的信号用柔性排线毗连,音圈电机供电占2 位,LED 信号传输占9 位,以是至少要11 位的排线。(见图9)

  

自制纯手工打造摇摆LED时钟

  图9 排线与拉簧

  

自制纯手工打造摇摆LED时钟

  图10 拉簧

 

  4.为保持摇棒的均衡, 在摇棒靠近旋转轴的两头加装两只拉簧,这两只拉簧的规格只管保持同等,弹性强弱要适中,最好可多找几种规格的试试。(图9,图10)

 

  5.回收驱动直流电机正反转的方法,驱动音圈电机往返摆动。让电机正、反转的要领许多,最典范的是H 桥电路驱动,H 桥电路道理见图11,常见的是用三级管取代图中的开关。

自制纯手工打造摇摆LED时钟

  图11 H 桥驱动道理

 

  为了简化电路,最好回收H 桥成果的集成电路。这种IC 许多,好比象TA7257,TA8429H,L6203 等,这里用的是三菱公司的M54544AL(见图12)。IC 各脚界说见图13。

自制纯手工打造摇摆LED时钟

  图12 电机驱动IC

  

自制纯手工打造摇摆LED时钟

  图13 M56544AL 各脚界说

 

 

  6.电道理图见图14。

  

自制纯手工打造摇摆LED时钟

  图14 电道理图

  7.完成图见图15。

自制纯手工打造摇摆LED时钟

  图15 完成图

  三. 软件计划

 

  1. 摇棒的启动

 

  为了使摇棒从静止状态太过到正常运行状态,在正式表现前加一启动措施。着实质就是逐渐加速驱动的频率,一向到摇棒正常摆动为止。通过下面的代码实现

  do {

  mm++;

  Delay(120+mm);

  put1=~put1; put2=~put2;

  }while(mm<60);

  Delay(20); //按照现实环境确定延时值

 

  2. 秒闪现的实现:数字或字符的闪现是通过变量Ms 和数组w[]实现的,如必要八位字符中的间的第4 位闪现,则w[3]=1。这是通过全局变量Ms 在void timer0(void)函数中每隔一秒改变一次状态(0 或1),打开或封锁表现。

  if(Ms*w[ii-3]==1) P2=0xff; else P2=~ASCIIDOC[v[ii]*6+jj]; //正向表现

  if(Ms*w[10-ii]==1) P2=0xff; else P2=~ASCIIDOC[v[13-ii]*6+5-jj]; //反向表现

 

  3. 调试中发明,表现屏上的字符并不是一样宽的(见图16),细心说明是因为摇棒在行为中,一向受力,并且所受的力是随时变革的。为利便准确调解表现,出格作了一个表现间断表Tr[],改变表现LED 的时刻段,和谐表现结果。

自制纯手工打造摇摆LED时钟

  图16 调解前的表现

  4. 按键去抖措施

  按键的去抖回收软件编程实现,其要领是当检测到按键的接口呈现低电平后,隔一段时刻再检测,如照旧低电平,则确以为有用,不然无效。详细的措施是通过函数unsigned char ChKey(bit Key)完成的。

 

  5. 表现同步

  因没有位置传感器,表现同步完端赖时钟间断来确定。这样就有一个题目,音圈电机的驱动信号在什么时候改变,表现才气保持在中间,并能担保正反表现能很好地重合。经现实调查, 音圈电机的驱动信号在表现中部, 要按照详细环境细调。由措施中的变量Ta 调试确定。

 

  6. 完备C51 措施代码

  /*

  POV 摇晃表现LED 钟C51 措施

  周正华编

  2008.3.19

  */

  #include

  /*硬件端口界说*/

  sbit set0=P0^1;

  sbit set1=P0^0;

  sbit set2=P0^2;

  sbit put1=P3^6;

  sbit put2=P3^7;

  /*时钟用数组*/

  unsigned char BUFFER[]={0,0,0,0};

  unsigned char maxnum[]={59,23};

  /*表现数组*/

  unsigned int v[14];

  unsigned int w[8];

  /*表现间断表*/

  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[] = // ASCII

  {

  0x7C,0x8A,0x92,0xA2,0x7C,0x00, // -0-00

  0x00,0x42,0xFE,0x02,0x00,0x00, // -1-01

  0x46,0x8A,0x92,0x92,0x62,0x00, // -2-02

  0x84,0x82,0x92,0xB2,0xCC,0x00, // -3-03

  0x18,0x28,0x48,0xFE,0x08,0x00, // -4-04

  0xE4,0xA2,0xA2,0xA2,0x9C,0x00, // -5-05

  0x3C,0x52,0x92,0x92,0x8C,0x00, // -6-06

  0x80,0x8E,0x90,0xA0,0xC0,0x00, // -7-07

  0x6C,0x92,0x92,0x92,0x6C,0x00, // -8-08

  0x62,0x92,0x92,0x94,0x78,0x00, // -9-09

  0x00,0x00,0x00,0x00,0x00,0x00, // - -10

  0x00,0x00,0xFA,0x00,0x00,0x00, // -!-11

  0x04,0x08,0x10,0x20,0x40,0x00, // -/-12

  0x00,0x6C,0x6C,0x00,0x00,0x00, // -:-13

  0x3E,0x48,0x88,0x48,0x3E,0x00, // -A-14

  0xFE,0x92,0x92,0x92,0x6C,0x00, // -B-15

  0x7C,0x82,0x82,0x82,0x44,0x00, // -C-16

  0xFE,0x82,0x82,0x82,0x7C,0x00, // -D-17

  0xFE,0x92,0x92,0x92,0x82,0x00, // -E-18

  0xFE,0x90,0x90,0x90,0x80,0x00, // -F-19

  0x7C,0x82,0x8A,0x8A,0x4E,0x00, // -G-20

  0xFE,0x10,0x10,0x10,0xFE,0x00, // -H-21

  0x00,0x82,0xFE,0x82,0x00,0x00, // -I-22

  0x04,0x02,0x82,0xFC,0x80,0x00, // -J-23

  0xFE,0x10,0x28,0x44,0x82,0x00, // -K-24

  0xFE,0x02,0x02,0x02,0x02,0x00, // -L-25

  0xFE,0x40,0x30,0x40,0xFE,0x00, // -M-26

  0xFE,0x20,0x10,0x08,0xFE,0x00, // -N-27

  0x7C,0x82,0x82,0x82,0x7C,0x00, // -O-28

  0xFE,0x90,0x90,0x90,0x60,0x00, // -P-29

  0x7C,0x82,0x8A,0x84,0x7A,0x00, // -Q-30

  0xFE,0x90,0x98,0x94,0x62,0x00, // -R-31

  0x64,0x92,0x92,0x92,0x4C,0x00, // -S-32

  0x80,0x80,0xFE,0x80,0x80,0x00, // -T-33

  0xFC,0x02,0x02,0x02,0xFC,0x00, // -U-34

  0xF8,0x04,0x02,0x04,0xF8,0x00, // -V-35

  0xFE,0x04,0x18,0x04,0xFE,0x00, // -W-36

  0xC6,0x28,0x10,0x28,0xC6,0x00, // -X-37

  0xC0,0x20,0x1E,0x20,0xC0,0x00, // -Y-38

  0x86,0x8A,0x92,0xA2,0xC2,0x00, // -Z-39

  0x24,0x2A,0x2A,0x1C,0x02,0x00, // -a-40

  0xFE,0x14,0x22,0x22,0x1C,0x00, // -b-41

  0x1C,0x22,0x22,0x22,0x10,0x00, // -c-42

  0x1C,0x22,0x22,0x14,0xFE,0x00, // -d-43

  0x1C,0x2A,0x2A,0x2A,0x10,0x00, // -e-44

  0x10,0x7E,0x90,0x90,0x40,0x00, // -f-45

  0x19,0x25,0x25,0x25,0x1E,0x00, // -g-46

  0xFE,0x10,0x20,0x20,0x1E,0x00, // -h-47

  0x00,0x00,0x9E,0x00,0x00,0x00, // -i-48

  0x00,0x01,0x11,0x9E,0x00,0x00, // -j-49

  0xFE,0x08,0x14,0x22,0x02,0x00, // -k-50

  0x00,0x82,0xFE,0x02,0x00,0x00, // -l-51

  0x1E,0x20,0x1E,0x20,0x1E,0x00, // -m-52

  0x20,0x1E,0x20,0x20,0x1E,0x00, // -n-53

  0x1C,0x22,0x22,0x22,0x1C,0x00, // -o-54

  0x3F,0x24,0x24,0x24,0x18,0x00, // -p-55

  0x18,0x24,0x24,0x24,0x3F,0x00, // -q-56

  0x20,0x1E,0x20,0x20,0x10,0x00, // -r-57

  0x12,0x2A,0x2A,0x2A,0x24,0x00, // -s-58

  0x20,0xFC,0x22,0x22,0x24,0x00, // -t-59

  0x3C,0x02,0x02,0x3C,0x02,0x00, // -u-60

  0x38,0x04,0x02,0x04,0x38,0x00, // -v-61

  0x3C,0x02,0x3C,0x02,0x3C,0x00, // -w-62

  0x22,0x14,0x08,0x14,0x22,0x00, // -x-63

  0x39,0x05,0x05,0x09,0x3E,0x00, // -y-64

  0x22,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;y<=110;y++);

  }

  }

  /*键盘去抖处理赏罚函数*/

  unsigned char ChKey(bit Key)

  {

  if(Key==0){

  Delay(100);

  if(Key==0) return(1);

  }

  }

  /*按时刻断1 处理赏罚(时钟)函数*/

  void timer0(void) interrupt 1 using 1

  {

  TH0=-(50000/256);

  TL0=-(50000%256);

  TR0=1;

  BUFFER[0]=BUFFER[0]+1;

  }

  /*按时刻断2 处理赏罚(LED 驱动和音圈驱动)函数*/

  void timer1(void) interrupt 3 using 1

  {

  TH1=Ti/256; TL1=Ti%256;

  if((ii*6+jj)==Ta) {put1=~put1;put2=~put2;}; //音圈电机驱动输出

  if(ff==1){

  if(Ms*w[ii-3]==1) P2=0xff; else P2=~ASCIIDOC[v[ii]*6+jj]; //正向表现

  }

  else {

  if(Ms*w[10-ii]==1) P2=0xff; else P2=~ASCIIDOC[v[13-ii]*6+5-jj]; //反向表现

  }

  jj++;

  if(jj>5) {ii++; jj=0;}

  if(ii>13) {ii=0;ff=!ff;}

  Ti=-Tr[ii*6+jj]; //读表现间断表

  }

  /*主措施*/

  void main(void)

  {

  //变量初始化

  Ms=0;

  ff=0;

  Ta=46; //正反显同等性调解, 取值范畴在42~50 之间, 按照现实确定

  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;

  //十四个字符中前三个和后三个不显(不消)

  v[0]=10;

  v[1]=10;

  v[2]=10;

  v[11]=10;

  v[12]=10;

  v[13]=10;

  /*摇晃棒初始启动*/

  do {

  mm++;

  Delay(120+mm);

  put1=~put1; put2=~put2;

  }while(mm<60);

  Delay(20);

  /*启动表现*/

  ii=0;jj=0;

  EA=1;

  /*正式运行*/

  for(;;){

  v[3]=36;v[4]=44;v[5]=51;v[6]=42;v[7]=54;v[8]=52;v[9]=44;v[10]=11; //表现接待

  Delay(6000);

  v[3]=10;v[4]=10;v[5]=10;v[6]=10;v[7]=10;v[8]=10;v[9]=10;v[10]=10; //封锁表现

  Delay(600);

  v[3]=0;v[4]=0;v[5]=13;v[6]=0;v[7]=0;v[8]=13;v[9]=0;v[10]=0; //表现时钟初始状

  态

  /*进入时钟状态*/

  while(1){

  //时钟处理赏罚

  if (BUFFER[0]>21){ //进位到秒

  BUFFER[0]=0; BUFFER[1]=BUFFER[1]+1;

  Ms=!Ms;

  if (BUFFER[1]==60){ //进位到分

  BUFFER[1]=0;BUFFER[2]=BUFFER[2]+1;

  if (BUFFER[2]==60){

  BUFFER[2]=0;BUFFER[3]=BUFFER[3]+1; //进位到时

  if (BUFFER[3]==24) BUFFER[3]=0;

  }

  }

  }

  //将表现内容送表现缓冲区

  v[9]=BUFFER[1]/10;

  v[10]=BUFFER[1]-v[9]*10;

  v[6]=BUFFER[2]/10;

  v[7]=BUFFER[2]-v[6]*10;

  v[3]=BUFFER[3]/10;

  v[4]=BUFFER[3]-v[3]*10;

  //键盘处理赏罚

  if(ChKey(set0)==1){ //模式键

  Ms=1; //秒让开

  if(TZ<2) TZ++; else TZ=0; //三种状态轮回转换

  switch(TZ){

  case 0:w[0]=0;w[1]=0;w[2]=0;w[3]=0;w[4]=0;w[5]=0;w[6]=0;w[7]=0;break;

  case 1:w[0]=0;w[1]=0;w[2]=0;w[3]=1;w[4]=1;w[5]=0;w[6]=0;w[7]=0;break;

  case 2:w[0]=1;w[1]=1;w[2]=0;w[3]=0;w[4]=0;w[5]=0;w[6]=0;w[7]=0;break;

  }

  Ms=0; //秒闪关

  };

  Delay(80);

  if(ChKey(set1)==1){ if(BUFFER[TZ+1] BUFFER[TZ+1]=0;Delay(300);};

  //键盘"+"

  if(ChKey(set2)==1){ if(BUFFER[TZ+1]>0) BUFFER[TZ+1]--; else

  BUFFER[TZ+1]=maxnum[TZ-1];Delay(300);};

  //键盘"-"

  Delay(80);

  }

  }

  }

 

  四.调试要领

 

  虽说是个机电一体的制作,但调试进程并不伟大。

  1. 机器部门的调解首要是两只拉簧, 要只管担保双方受力同等,让摇棒静态时保持在竖直状态。

(责任编辑:admin)
织梦二维码生成器
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容