haoDIY创好电子音响电脑科技DIY小制作发明移动版

主页 > 最新DIY >

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)


    {   if(mask & dr)   LEDDATA=1;   
        else            LEDDATA=0;   
        LEDCLOCK=1;LEDCLOCK=0;   
        mask>>=1;       
}          
    mask=0x10;   
    for(k=0;k<5;k++)      //输出5位兰色数据   
    {   if(mask & db)   LEDDATA=1;   
        else            LEDDATA=0;   
        LEDCLOCK=1;LEDCLOCK=0;   
        mask>>=1;       
}   
LEDDATA=1;LEDCLOCK=1;LEDCLOCK=0;    //首先输出1个'1'起始位 


 接下来调整代表时钟冒号的两点的LED色彩。 
    因为VFD的那种光介于蓝色和绿色之间,没有单颗的LED能够与它的色彩相对应一致,所以没办法,只能用两颗草帽的RGB LED来调配颜色。后来经过对比,调整好了两颗对应G和对应B的电阻,使其颜色与VFD荧光的颜色一致。 
    并且这两颗LED是要伸出来的,所以专门买了一些14mm高的支撑柱来支撑这个LED,这样就不会来回摇晃,保证了位置的固定。 
    SHOW一下效果(相机曝光时间较长,与实际有些色差): 
『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)


    幻彩背景灯搞定了以后,下面就要上荧光管了。 
    因为荧光管与所有直插的原器件在一面,所以要将荧光管支撑起来。但是这个荧光数码电子管又没有管座,只能直插焊接,所以用CAD画好图纸,用激光切割了一些支撑座,这样荧光管就能垫高起10mm,而且还能正好坐在RGB LED的上面。 
    支承座是用透明的亚克力板切割的,正好能将所有的管脚传过去,将管子固定在电路板上,不会摇晃,而且能突出出来。 
    SHOW一下效果: 
『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

    将所有的荧光管加上底座以后,焊在电路板上,开始调试驱动部分程序。 
    静态驱动采用了串行译码器74HC595配合ULN2003来做,一组这样的IC正好驱动一颗荧光管。 
    74HC595我在QS30-1的辉光钟上就用过,虽然这次采用了STC的MCU,但是原理大致相同,用示波器校正一下时序,完美驱动荧光管。 
    下面是点亮背景灯和数码管调试时的效果和74HC595的部分通讯源代码: 
  
『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

******************************************************************************************************** 
**  函数名称:   void  Send595(uchar count,uint dat) 
** 功能描述:   向74HC595发送数据  
** 入口参数:   count: 发送数据的位数 
**      dat: 发送的数据(MAX 16Bit) 
** 创建者:   严泽远 
** 创建时间:   2011-02-04 22:32 
** 版    本:   v1.0.0 
******************************************************************************************************** 
void  Send595(uchar count,uint dat) 

for(;count>0;count--) 

  DATA = dat&0x0001;//_nop_(); 
  SHCP  = 1;//_nop_(); 
  SHCP  = 0;//_nop_(); 
  dat>>=1; 

}
 

    红外线遥控部分以前就做过,但是第一次做是在QS30-1的辉光钟上进行应用,那个时候采用的MCU是C8051F310,这款MCU没有外部中断功能,其实用定时器来做也可以做得很稳定很完美。 
    这次同样,在STC上调试很快就将红外线译码完成。虽然无法在线调试跟踪红外线数据,但是荧光管既然能够驱动并显示数字了,编程调试的时候就用它来显示跟踪过程中的结果,大大提高了效率。 
    看一下红外接收部分的源代码: 

******************************************************************************************************** 
**  函数名称:   void IR_RX() 
** 功能描述:   红外线中断接收处理 
** 创建者:   严泽远 
** 创建时间:   2011-02-04 16:07 
** 版    本:   v1.0.0 
******************************************************************************************************** 
void IR_RX() 

uchar SampleTime;
 
IR_SampleCnt++;       //Sample + 1 
F0 = P_IR_RX_temp;      //Save Last sample status 
P_IR_RX_temp = IR;      //Read current status 
if(F0 && !P_IR_RX_temp)     //Last sample is high,and current sample is low, so is fall edge 

  SampleTime = IR_SampleCnt;   //get the sample time 
  IR_SampleCnt = 0;     //Clear the sample counter
 
if(SampleTime > D_IR_SYNC_MAX)  B_IR_Sync = 0; //large the Maxim SYNC time, then error 
  else if(SampleTime >= D_IR_SYNC_MIN)     //SYNC 
  { 
   if(SampleTime >= D_IR_SYNC_DIVIDE) 
   { 
    B_IR_Sync = 1;     //has received SYNC 
    IR_BitCnt = D_IR_BIT_NUMBER; //Load bit number 
   } 
  } 
  else if(B_IR_Sync)      //has received SYNC 
  { 
   if(SampleTime > D_IR_DATA_MAX)  B_IR_Sync=0; //data samlpe time to large 
   else 
   { 
    IR_DataShit >>= 1;     //data shift right 1 bit 
    if(SampleTime >= D_IR_DATA_DIVIDE) IR_DataShit |= 0x80; //devide data 0 or 1 
    if(--IR_BitCnt == 0)    //bit number is over? 
    { 
     B_IR_Sync = 0;     //Clear SYNC 
     if(~IR_DataShit == IR_data)  //判断数据正反码 
     {    
      if((IR_UserH == (D_IR_usercode / 256)) && 
       IR_UserL == (D_IR_usercode % 256))  //系统码正确 
      { 
       IR_code      = IR_data; 
       B_IR_Press   = 1;  //数据有效 
      } 
     } 
    } 
    else if((IR_BitCnt & 7)== 0)  //one byte receive 
    { 
     IR_UserL = IR_UserH;   //Save the User code high byte 
     IR_UserH = IR_data;    //Save the User code low byte 
     IR_data  = IR_DataShit;   //Save the IR data byte 
    } 
   } 
  } 


    剩下的部分程序稍微有点难度,主要在实现逻辑控制和闹钟等通讯上,DS3231的程序也很简单,懂得IIC通讯的朋友想必一次都能调通,无非就是对某个地址的写操作和读操作。 
    闹钟的设置和一些参数的保存,都是保存在了STC的内部EEPROM上,其实STC内部的EEPROM不能称之为真正的EEPROM,它需要页擦除,跟FLASH有点像。不过还是挺好用的,省了外置的EEPROM芯片,还能存储一些有用的数据。 
  
    完成之后的图片SHOW一下: 
『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)  


  
    临近春节放假之前,早早就把亚克力的外衣用激光切好了,终于要给他穿外衣了,底座先安装好。 
    SHOW一下底座的样子: 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 
  
    只有底座不完美,继续采用实木中框,外加不锈钢内六角螺丝,上下光面黑色亚克力板,还有数字的倒影在里面。 
    拍了一些图片,这里面有些客厅的道具在做辉光钟的时候已经见过了,呵呵 :) 
    请朋友们敬请欣赏吧 :) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3) 

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)  

『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)


『DIY新做.二十四小时感动之三』饱含了我所有期待的电子管时钟((3)
(责任编辑:admin)
haoDIY创好电子 版权所有,电话微信13977534587