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

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

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

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

时间:2013-01-21 12:14来源:网络 作者:网络整理 点击:
2. 软件部门,先将void timer1(void)函数中的Ti=-Tr[ii*6+jj];这段措施删除,试着让Ti 取一常数值(约莫-2000 阁下)看表现结果(摇棒摆动的幅度),一向到满足为止,这时正反表现也许没有重合,接着试Ta 的取值,范畴

 

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

 

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

 

  一. 整体方案

 

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

  图1 开机画面

  

  图2 运行状态

 

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

  图3 按键的配置

  

  图4 音圈电机组件

 

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

 

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

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

  

  图6 底座侧面

 

 

  二. 实作要点

 

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

  图7 主板机关

  

  图8 摇棒上的LED

 

  2.LED 的焊接,将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(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 的时刻段,和谐表现结果。

  图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. 机器部门的调解首要是两只拉簧, 要只管担保双方受力同等,让摇棒静态时保持在竖直状态。

#p#分页问题#e#

  2. 软件部门,先将void timer1(void)函数中的“Ti=-Tr[ii*6+jj];”这段措施删除,试着让Ti 取一常数值(约莫-2000 阁下)看表现结果(摇棒摆动的幅度),一向到满足为止,这时正反表现也许没有重合,接着试Ta 的取值,范畴在42 到50 之间,使正反表现重合为止。最后一步就是调解表现的不匀称性,将“Ti=-Tr[ii*6+jj];”这段措施规复返来,试着改变Tr[]表中数组元素的值,并担保表中的元素的均匀值为开始Ti 取得的值,让表现的每个字符宽度同等为止。

 

  五.结语

  本制作电路简朴,其道理实质就是LED 流水灯,而要害的音圈电机也很轻易找到,很得当刚入门的单片机喜爱者制作。制作尚有施展的处所,

  1. 添加时钟IC,使显时更精准,并且不怕掉电;

  2. 加装位置传感器,增进表现的不变性;

  3. 增加摇控成果,使调解更利便。

 

4四位单片机led数字数码电子钟时钟 电子diy制作 pcb套件散件成品
4四位单片机led数字数码电子钟时钟 电子diy制作 pcb套件散件成品
¥2.50

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