打印
[活动]

【21ic改装大赛】+旋转型数字时钟

[复制链接]
2562|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2017-3-24 17:02 编辑

    先打个小广告,我做的是一个旋转型数字时钟本想把电水壶拆了,无奈老婆不让,说天天还要那。没办法,只能向手头找得到的东西下手。先找到一个生日蛋糕的硬纸板,做了个表盘底板,然后用圆规画上圆并等分出放置发光二极管的位置,再将发光二极管装在硬纸板上并连好线形成了表盘。为在能在夜间也了识别出时间状态,又按5LED的间隔加上了红色的LED进行标识。为了让作品能上些档次,又找到一个装巧克力的有机玻璃糖盒做外壳。线路是搭建在一块万能板上,并以软导线进行连接,部分导线是从旧鼠标的导线上分离出来的。之所以叫它旋转型数字时钟是由于秒信号被接到了围成圆环型的LED上,每过一秒LED灯就向前移动一个位置,故能产生一种旋转效果。为了节省LED的数量和连线的复杂度,时钟的数字显示采用数码管来承担。
1 特点介绍

2 核心电路

3 运行效果

4 中间调试

一、制作背景
1.意义
数字式时钟在日常生活中已屡见不鲜了,制作样式新颖的具有旋转指示效果的数字时钟,可以为我们的生活增添色彩和情趣。
2.计时方式选择
在计时方式可分为两类,一类是使用计时芯片,另一类是使用CPU自带的内部的定时器。
在该制作中,是以为DS1302为计时核心,以单片机来提供秒信号来实现走秒效果的处理。
二、总体规划
1.总体结构
总体设计包括硬件的构建和软件的编程设计,在硬件上由单片机、键显模块、计时器模块、走秒旋转模块及蜂鸣提示模块等组成,软件上包括数码管显示函数、时钟芯片读写函数、键入分析函数、延时函数、闹钟处理函数及中断处理函数等。系统的硬件构成如图5所示。

2.开发工具
    开发中以Keil软件进行程序编译、用C51编写单片机程序,用STC_ISP_V486软件向单片机写入程序。

三、计时功能的实现
1.计时电路
    使用DS1302 作为系统的计时核心,辅以3V纽扣电池作断电后的维持计时电源,具体电路如图6所示。

2.时间值的读写
为了调整计时时间和显示计时值,为DS1302配置了写入程序和读取程序,其程序代码如下:
// DS1302写入函数, 向DS1302的指定地址写入一个字节的数据 。
void write_ds1302(uchar cmd,uchar indata)
{
   sclk=0;
   reset=1;
   write_byte(cmd);        
   write_byte(indata);
   sclk=0;
   reset=0;
}

// DS1302读取函数, 从DS1302的指定地址读取一个字节的数据。
uchar read_ds1302(uchar addr)
{
   uchar backdata;
   sclk=0;
   reset=1;
   write_byte(addr);                      //先写地址
   backdata=read_byte();                  //然后读数据
   sclk=0;
   reset=0;
   return (backdata);
}
//读取时间函数,负责读取当前时间,并将读取的时间转换为10进制数
void get_time()
{
        uchar sec,min,hour;                                        //定义秒、分和小时变量
        write_ds1302(0x8e,0x00);           //控制命令,WP=0,允许写操作   
    write_ds1302(0x90,0xa0);           //涓流充电控制
         sec=read_ds1302(0x81);              //读取秒
    min=read_ds1302(0x83);              //读取分
    hour=read_ds1302(0x85);             //读取时
    time_buf[0]=sec/16*10+sec%16;   //将读取到的16进制数转化为10进制
    time_buf[1]=min/16*10+min%16;   //将读取到的16进制数转化为10进制
    time_buf[2]=hour/16*10+hour%16; //将读取到的16进制数转化为10进制
}
四、显示功能的设计与实现
    显示功能是实现人机交互的桥梁,在该制作中用了两种显示形式。
时间值显示
采用四联数码管来作显示器件,并配以三极管9012来驱动显示。为了减少连线的数量,采用动态扫描的方式来显示,其电路如图7所示。

显示函数如下:
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90,0xff};      //0~9、熄灭符和字符"-"的显示码(字形码)
uchar disp_buf[6] ={0x00};         //定义显示缓冲区
void Display()
{
        P0=tab[disp_buf[0]];
        LED1=0;
        Delay_ms(2);
        LED1=1;        
        P0=tab[disp_buf[1]];
        LED2=0;
        Delay_ms(2);
        LED2=1;        
        P0=tab[disp_buf[2]];
        LED3=0;
        Delay_ms(2);
        LED3=1;        
        P0=tab[disp_buf[3]];
        LED4=0;
        Delay_ms(2);
        LED4=1;        
}
走秒旋转效果实现
走秒效果是建立在60个LED发光二极管和CD4017电路的基础上,通过秒信号来驱动LED指示灯向前移动以产生旋转效果。通过同步信号,可保证系统的有效运行,其电路如图8所示。
走秒旋转效果程序如下:
sbit QQ=P1^4;
sbit ledd=P1^5;
//定时器T0初始化函数
void  timer0_init()
{
        TMOD = 0x11;                // 定时器0工作模式1, 16位定时方式
        TH0 = 0xf6;
        TL0 = 0x50;        
        TH1=0X3C;
        TL1=0XB0;
        EA=1;ET0=1;ET1=1;                //开总中断和定时器T0中断
        TR0 = 1;TR1=1;                //启动定时器T0
}

//T0中断处理函数,实现走秒显示效果。
void timer0() interrupt 1
{
        uchar count;        
        TH0 = 0xf6;                   //ec78           2.48ms  f6 50
        TL0 = 0x50;                //重装计数初值,定时时间为50ms  2.5MS -f6 3c
        gaos++;
        count++;
        if(gaos==2)
        {
                gaos=0;
                if(flag7==1)ledd=~ledd;         //高速LED灯
                else ledd=1;        
         }
        if(count==200)
        {
                wss=~wss;
                count=0;
        if(flag7==0)QQ=~QQ;        //旋转LDE灯
        else QQ=1;               
        }
        if(flag1!=0)
        {
                flag9++;
                if(flag9==2000)
                flag1=0;
        }                                                                        
}
五、功能验证
当制作完成后,应对制作功能进行检验。检验的步骤是,首先上电启动系统,然后使用K1键来激活时钟设置功能,再按K2键(+1)或K3键(-1)来调整时间值。再次触动K1键,可对分钟值进行设置。完成设置后,等待一段时间会自动结束设置。
当时钟运行一段时间后,可核对一下时间是否出现偏差,若未出现偏差则说明运行正常,否则说明存在异常,应进行修改。
经实际运行,证明计时无明显偏差符合制作目标。
由于该制作,拆的成分少,做的成分多,不知是否合要求,就权当积极参与吧。

       在旋转型数字时钟的制作中,相应的工具是不可或缺的,如图9所示。其中有些大家可能不会用到,如输液用的小针头,它是为固定LED来穿孔的,如果没有也可用大号的缝衣针来代替。而圆规、半圆仪和直角尺则是为制作表盘而准备的;透明粘带或双面胶是为了固定走线和线路板的;钳子和螺丝刀则是为了拆解鼠标和**导线的;当然其他还要用到焊接工具等,这是大家都会遇到的。
9 制作工具

除了制作工具外,制作材料也是必不可少的,不算电路及元器件,还需一下材料。
1)蛋糕盒中的硬纸板,原来制作表盘;
巧克力有机玻璃盒,为了不影响视觉效果,使用盒子的底面做前脸,而将盒子的正面放到底部来使用。其实如果不是表盘的话,还是盒子的正面跟漂亮。
10 有机玻璃盒与硬纸板

3)鼠标,如今很少有人再用机械式鼠标,扔了可惜到不如拆成材料用,这里主要用的是连接电脑与鼠标的导线。其实鼠标中的微动开关也是可已使用的,由于没凑齐3个,故只好用了3个小按键来进行设置操作。
11 机械式鼠标

在拆解鼠标时,本以为4个小白点是固定螺丝,去除后才知道是晃人的。真正的固定螺丝只有一个,却是在小的合格证下且很小。只好换个更小的螺丝刀来解决它。
12  去除固定螺丝和鼠标球将其分为两部分

将连接线从插座上拔下,然后用钳子剪开缺口使内部导线与外皮保护层分离,则可做多股细导线来使用。在别的制作中,单线可能不是关键材料,这里它的使用量却很大,因为表盘没有制作在电路板上,故导线的用量很大。
14 剥离出导线

在准备好基本材料后,就可以进行制作了,下面主要介绍一下表盘的制作过程:
1)按有机玻璃盒的尺寸对硬纸板进行裁剪,以充当面板,如图15所示。
2)为保证表盘的质量,这里尺寸的设置较为关键。这里是选取纸板的中心做一个半径为8厘米的圆,因为如果尺寸过小的话,最终将无法摆放下64LED
3)6度为间隔画过圆心的线段来定位LED的摆放位置,如图16所示。
4)沿线段方向在直线与圆的焦点左右对称扎孔以放置LED,如图17所示。
5)为固定LED和简化线路连接,可按图18 所示。
15 裁剪面板

16 确定摆放位置

17扎孔放置LED

18 背面的连线方式

相关帖子

沙发
21ic大掌柜| | 2017-3-23 14:08 | 只看该作者
,可以多发一些产品制作过程图片吗,带21ic**哦。

使用特权

评论回复
板凳
jinglixixi|  楼主 | 2017-3-23 17:48 | 只看该作者
21ic大掌柜 发表于 2017-3-23 14:08
,可以多发一些产品制作过程图片吗,带21ic**哦。

好再补充补充!

使用特权

评论回复
地板
jinglixixi|  楼主 | 2017-3-24 16:27 | 只看该作者
本帖最后由 jinglixixi 于 2017-3-24 17:01 编辑

已进行补充.

使用特权

评论回复
5
tanm| | 2017-3-26 22:08 | 只看该作者

使用特权

评论回复
6
whay| | 2017-3-28 11:35 | 只看该作者
真厉害

使用特权

评论回复
7
bob521| | 2017-3-28 15:10 | 只看该作者
厉害

使用特权

评论回复
8
jinglixixi|  楼主 | 2017-3-29 10:09 | 只看该作者
多谢支持!

使用特权

评论回复
9
whay| | 2017-3-30 09:58 | 只看该作者
您好,我对你这个项目很感兴趣呢,我看到你使用了ST Micro for uC和Maxim timer,所以我想知道你在这个设计中使用了什么TI设备?你能告诉我吗?

使用特权

评论回复
10
jinglixixi|  楼主 | 2017-3-30 10:43 | 只看该作者
whay 发表于 2017-3-30 09:58
您好,我对你这个项目很感兴趣呢,我看到你使用了ST Micro for uC和Maxim timer,所以我想知道你在这个设计 ...

只使用的STC89C52、DS1302和CD4017等,别的没有涉及。

使用特权

评论回复
11
jinglixixi|  楼主 | 2017-3-30 10:48 | 只看该作者
whay 发表于 2017-3-30 09:58
您好,我对你这个项目很感兴趣呢,我看到你使用了ST Micro for uC和Maxim timer,所以我想知道你在这个设计 ...

T0则是STC89C52内部的定时/计数器,主要用于生产秒信号以驱动60个LED产生旋转效果。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

2675

帖子

37

粉丝