搜索
bottom↓
回复: 65

AVR M8 做的超大数码管时钟 有半米多长了。

[复制链接]

出0入0汤圆

发表于 2009-11-3 09:05:25 | 显示全部楼层 |阅读模式

(原文件名:00.jpg)


(原文件名:01.jpg)


(原文件名:02.jpg)


(原文件名:03.jpg)


(原文件名:04.jpg)


(原文件名:05.jpg)


(原文件名:06.jpg)


(原文件名:11.jpg)


(原文件名:12.jpg)


(原文件名:13.jpg)


(原文件名:14.jpg)


(原文件名:15.jpg)


(原文件名:16.jpg)


(原文件名:17.jpg)


(原文件名:18.jpg)


(原文件名:19.jpg)


(原文件名:20.jpg)


(原文件名:21.jpg)


(原文件名:22.jpg)


(原文件名:23.jpg)














--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
原理图
点击此处下载 ourdev_499107.pdf(文件大小:50K) (原文件名:Clock-System.pdf)

关键代码

#include "includes.h"

typedef        enum
{
        SYS_CLOCK_RUN,
        SYS_CLOCK_SET,
}SYSTEM_STATE;

static        SYSTEM_STATE        SystemFlag;

static        void        SysTem_ClockRun(void);
static        void        System_ClockSet(void);


static        void        (*pFunc_Sys[])(void)=
{
        SysTem_ClockRun,
        System_ClockSet,
};


typedef        struct
{
        unsigned char        buff[DISP_NUM>>1];
        unsigned char        Flash;
        unsigned char        dp;
}CLOCK_SET_STRUCT;


static        __flash unsigned char const        FlashTbl[]={DISP_1|DISP_2, DISP_3|DISP_4, DISP_5|DISP_6};



static        CLOCK_SET_STRUCT        ClockSet;


//static        void        Download(void);
static        void        SystemInitialize(void);


static        void        TimerToDisplayBuff(unsigned char *pbuff, TIMER_STRUCT *ptimer);


static        unsigned char        disp_buff[DISP_NUM];

/*
//////////////////////////////////////////////////////////////////////////
static        void        Download(void)
{
        unsigned char        i;
        unsigned char        cnt;
        unsigned int        j;

        PORTB        &= 0xc7;
        DDRB        &= 0xc7;
        PORTD        &= 0xbf;
        DDRD        &= 0xbf;
        cnt                = 0;

        for(i=0; i<200; i++)
        {
                for(j=0; j<1000; j++)
                {
                        if(GETB(PIND, PD6))
                        {
                                cnt++;
                                break;
                        }
                }

                if(cnt>10)
                {
                        cnt        = 100;
                        break;
                }
        }

        // 要进行下载
        if(cnt==100)
        {
                cnt        = 1;

                while(cnt)
                {
                        i        = PINB&(1<<PB5);
                        __delay_cycles(3000);
                }
        }
}
*/
//////////////////////////////////////////////////////////////////////////
static        void        SystemInitialize(void)
{
        unsigned char        i;

        __disable_interrupt();

#if        CPU_TYPE==0x48
        CLKPR        = (1<<CLKPCE);
        CLKPR        = (1<<CLKPS1);        // 4分频.系统时钟2MHz
#endif
        //Download();

        SPI_Init();
        ExFlash_Init();
        Timer_Init();
        Key_Init();
        Display_Init();
        __enable_interrupt();

        for(i=0; i<DISP_NUM; i++)
        {
                disp_buff        = 0;
        }

        SystemFlag        = SYS_CLOCK_RUN;
}


static        void        TimerToDisplayBuff(unsigned char *pbuff, TIMER_STRUCT *ptimer)
{
        *pbuff++        = ptimer->sec%10;
        *pbuff++        = ptimer->sec/10;
        *pbuff++        = ptimer->min%10;
        *pbuff++        = ptimer->min/10;
        *pbuff++        = ptimer->hour%10;
        *pbuff                = ptimer->hour/10;
}

void        main(void)
{
        SystemInitialize();

        while(TRUE)
        {
                pFunc_Sys[SystemFlag]();
        }
}
//////////////////////////////////////////////////////////////////////////
static        void        SysTem_ClockRun(void)
{
        TIMER_STRUCT        *ptimer;
        unsigned long        time;
        unsigned int        addr;
        unsigned char        mask;
        unsigned char        dbyte;
        CRITICAL_DEF;

        ptimer        = Timer_GetTimer();

        if(Timer_IsUpdate())
        {
                time        = ptimer->hour;
                time        *= 3600;
                addr        = ptimer->min;
                addr        *= 60;
                time        += addr+ptimer->sec;

                addr        = time>>3;
                mask        = 7-(time&0x07);
                ENTER_CRITICAL();
                dbyte        = ExFlash_ReadByte(addr);
                EXIT_CRITICAL();

                if(GETB(dbyte, mask))
                {
                        TimerToDisplayBuff(disp_buff, Timer_GetTimer());
                        Display_Update(disp_buff);
                }
               

                /*
                ENTER_CRITICAL();
                dbyte        = ExFlash_ReadByte(ad);
                EXIT_CRITICAL();

                ad++;
                if(ad>=10800)
                {
                        ad        = 0;
                }
                addr        = ad;
                for(mask=0; mask<4; mask++)
                {
                        disp_buff[mask+2]        = addr%10;
                        addr        /= 10;
                }
                disp_buff[0]        = dbyte&0x0f;
                disp_buff[1]        = dbyte>>4;
                Display_Update(disp_buff);
                */
        }

        if(Key_GetCode()==KEY_CODE_ENTER)
        {
                SystemFlag        = SYS_CLOCK_SET;
                ClockSet.Flash        = 0;
                ClockSet.dp                = 0;
                ClockSet.buff[0]        = ptimer->sec;
                ClockSet.buff[1]        = ptimer->min;
                ClockSet.buff[2]        = ptimer->hour;
                Display_SetFlash(FlashTbl[ClockSet.Flash]);
        }
}
//////////////////////////////////////////////////////////////////////////
static        __flash unsigned char const        TimerTbl[]={59, 59, 23};
static        void        System_ClockSet(void)
{
        unsigned char        key;

        key        = Key_GetCode();

        if(key^KEY_CODE_NULL)
        {
                switch(key)
                {
                        case KEY_CODE_ENTER:
                                SystemFlag        = SYS_CLOCK_RUN;
                               
                                Timer_SetTimer((TIMER_STRUCT*)ClockSet.buff);
                                Display_SetFlash(DISP_NULL);
                                break;
                        case KEY_CODE_SUB:
                                if(--ClockSet.buff[ClockSet.Flash]>TimerTbl[ClockSet.Flash])
                                {
                                        ClockSet.buff[ClockSet.Flash]        = TimerTbl[ClockSet.Flash];
                                }
                                disp_buff[ClockSet.dp]                = ClockSet.buff[ClockSet.Flash]%10;
                                disp_buff[ClockSet.dp+1]        = ClockSet.buff[ClockSet.Flash]/10;
                                break;
                        case KEY_CODE_ADD:
                                if(++ClockSet.buff[ClockSet.Flash]>TimerTbl[ClockSet.Flash])
                                {
                                        ClockSet.buff[ClockSet.Flash]        = 0;
                                }
                                disp_buff[ClockSet.dp]                = ClockSet.buff[ClockSet.Flash]%10;
                                disp_buff[ClockSet.dp+1]        = ClockSet.buff[ClockSet.Flash]/10;
                                break;
                        case KEY_CODE_SWITCH:
                                if(++ClockSet.Flash>=3)
                                {
                                        ClockSet.Flash        = 0;
                                }
                                ClockSet.dp        = ClockSet.Flash<<1;
                                Display_SetFlash(FlashTbl[ClockSet.Flash]);
                                break;
                        default:
                                ;
                }

                Display_Update(disp_buff);
        }
}
//////////////////////////////////////////////////////////////////////////
// END

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-11-3 09:25:33 | 显示全部楼层
很猛!

出0入0汤圆

发表于 2009-11-3 09:27:29 | 显示全部楼层
<。)#)))≦挺漂亮

出0入0汤圆

发表于 2009-11-3 09:30:27 | 显示全部楼层
够大!

出0入0汤圆

发表于 2009-11-3 09:37:36 | 显示全部楼层
哈哈,真大啊。。。楼主做这东东是要卖?还是玩儿?

出0入0汤圆

 楼主| 发表于 2009-11-3 09:42:13 | 显示全部楼层
玩玩而己,呵呵。

出0入0汤圆

发表于 2009-11-3 09:43:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-3 09:50:03 | 显示全部楼层
动态扫描,亮度不会很高,驱动这么大的数码管最好还是静态的

出0入0汤圆

发表于 2009-11-3 09:55:23 | 显示全部楼层
6片4543也行,带锁存

出0入0汤圆

发表于 2009-11-3 10:11:15 | 显示全部楼层
要静态的.那是疯了.耗电多大啊.

出0入50汤圆

发表于 2009-11-3 10:13:06 | 显示全部楼层
其实把第3,5两位LED倒转180度,就可以省略掉那两个额外的LED了。

再道地点,做单面PCB,把6个数码管的引脚焊接在PCB上,PCB做上下两排各一条,这样连带固定的也省略了,焊接那些连线可是非常吃人工的。

楼主这个,亮度动态扫描也可以做到很亮的,室外不在阳光直射的地方都可以看得很清晰。

当然生产是一回事,楼主是玩儿,就无所谓了,哈哈。

出0入0汤圆

发表于 2009-11-3 10:17:54 | 显示全部楼层
带温度不?用的什么实时时钟?用超级电容取代电池如何?

出0入0汤圆

发表于 2009-11-3 10:27:55 | 显示全部楼层
有点强大。!!

出0入0汤圆

发表于 2009-11-3 10:36:12 | 显示全部楼层
请问这种数码管在哪里可以买到?我要买几个回来搞,再用亚克力搞个外壳,呵呵

出0入0汤圆

 楼主| 发表于 2009-11-3 10:38:37 | 显示全部楼层
【10楼】 ilikemcu 我爱单片机  
-----------------------------------------
非常感谢,做的时候真的没想到。   感谢你的思路。下次做时可以省了好多工做,呵呵

不过那几个灯,是买数码管时送的,那数码管8.8元一个




【11楼】 cqfeiyu  
----------------------------------------
不带温度,有原理图,你可以看一下,




整个时钟时用 外部32.768Khz的晶振做的,使用内部定时器,产和1s定时





北京中发有卖 我买时8.8一块 是买20个的价格,估计单买要9元钱一个

出0入0汤圆

发表于 2009-11-3 10:42:04 | 显示全部楼层
如果是我,会用3个DM134,恒流静态驱动

出0入0汤圆

发表于 2009-11-3 10:43:31 | 显示全部楼层
呵呵,请问下楼主  函数带static的作用?
这个我不太清楚,我只知道变量带static的意思。
谢谢,楼主啦!!!!

出0入0汤圆

发表于 2009-11-3 10:45:01 | 显示全部楼层
为什么是NPN驱动每段,而不是PNP呢?NPN输出4.3V,功耗大了吧

出0入0汤圆

发表于 2009-11-3 10:48:08 | 显示全部楼层
感觉用TPIC6B595静态驱动更好

出0入0汤圆

 楼主| 发表于 2009-11-3 10:57:06 | 显示全部楼层
只在本文件内有效 static

出0入8汤圆

发表于 2009-11-3 11:10:53 | 显示全部楼层
【10楼】 ilikemcu 我爱单片机
很聪明啊,但我比划了下,那两个点不在中间,两位LED倒转180度后不好看

出0入0汤圆

发表于 2009-11-3 11:11:39 | 显示全部楼层
做过一套工厂用的记产量的东东。

红色和翠绿2路数码管 一共是10个,动态扫秒亮度不够。数码管太多了。。。

换30多V的电源+595+2803 。

静态扫电流也不大,一段也才20MA不到,一个8字全亮也才150MA。

出0入0汤圆

发表于 2009-11-3 11:13:25 | 显示全部楼层
呵呵~我也有不少这样的大数码管,最后当垃圾全扔了,太占地方了~

出0入0汤圆

发表于 2009-11-3 11:17:02 | 显示全部楼层
三寸的??

不贵了呀~~

出0入0汤圆

发表于 2009-11-3 11:18:05 | 显示全部楼层
5寸还是5.5的,妈的我的翠绿17一个  红光14一个。看来是贵了。。。

出0入0汤圆

发表于 2009-11-3 11:48:01 | 显示全部楼层
楼上在哪里买的啊?我在淘宝看了一下,5寸的都很贵哦

出0入0汤圆

发表于 2009-11-3 11:48:12 | 显示全部楼层
不知道楼主的数码管是几寸的,我打算用3寸的数码管来做一个,显示方式用静态。

出0入0汤圆

发表于 2009-11-3 11:50:00 | 显示全部楼层
有板送吗?想做一个!

出0入0汤圆

 楼主| 发表于 2009-11-4 11:32:00 | 显示全部楼层
没板送 呵呵 自力更生吧.

出0入0汤圆

发表于 2009-11-4 11:45:52 | 显示全部楼层
这东西太猛了。

出20入0汤圆

发表于 2009-11-4 11:53:12 | 显示全部楼层
数码管比较贵  怕怕  呵呵

出0入0汤圆

发表于 2009-11-10 23:21:09 | 显示全部楼层
请问如何才能驱动三位5寸的数码管呢?

出0入0汤圆

发表于 2009-11-11 00:44:45 | 显示全部楼层
漂亮

出0入0汤圆

发表于 2009-11-11 09:18:40 | 显示全部楼层
1段20ma,驱动用的是什么?

出0入0汤圆

发表于 2009-11-11 10:29:08 | 显示全部楼层
功耗应该不小吧,楼主很有时间啊,总做这些东西

出0入0汤圆

 楼主| 发表于 2009-11-25 12:44:37 | 显示全部楼层
欢迎有时间来参观

出0入0汤圆

发表于 2010-1-3 13:28:37 | 显示全部楼层
驱动驱动~~~~~~~~~~~~~
最近都快被驱动搞疯了~~~~~~~~~~~
步进电机要驱动,数码管也要驱动,干脆去玩PLC好了~~~~~~~~~
那个220V都直接上的~~~~~~~

出0入0汤圆

发表于 2010-1-3 13:36:04 | 显示全部楼层
街机的对打机上有那个大型数码管,
但是那个小数点是逗号的!

出0入0汤圆

发表于 2010-1-4 11:12:51 | 显示全部楼层
学习拉. ULN2003不用加上拉?

出0入0汤圆

发表于 2010-1-4 14:45:01 | 显示全部楼层
看看

出0入0汤圆

发表于 2010-1-5 21:16:22 | 显示全部楼层
mark

出0入24汤圆

发表于 2010-1-5 21:49:52 | 显示全部楼层
只能说很强!

出0入0汤圆

发表于 2010-1-5 21:57:33 | 显示全部楼层
mark!

出0入0汤圆

 楼主| 发表于 2010-4-2 09:59:49 | 显示全部楼层
上的原理图有错误, 麻烦版主有时间帮我删了,免得误导其他人.  

我会在这几天把正确的原理图上传..

出0入0汤圆

发表于 2010-4-2 10:59:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-2 11:32:02 | 显示全部楼层
这便是传说中的玩大了~~~~~~

出0入0汤圆

发表于 2010-10-17 14:44:11 | 显示全部楼层

出0入0汤圆

发表于 2010-10-17 14:57:20 | 显示全部楼层
搞大了啊!

出0入0汤圆

发表于 2010-10-17 17:19:33 | 显示全部楼层

出0入0汤圆

发表于 2011-6-3 16:57:53 | 显示全部楼层
嘿嘿 可以做广告用

出0入12汤圆

发表于 2011-6-3 17:46:32 | 显示全部楼层
这个这个,1个数码管要9块钱,这个钟可不便宜呢

出0入42汤圆

发表于 2011-6-3 18:05:46 | 显示全部楼层
这个厉害,哈哈

出0入0汤圆

发表于 2011-6-3 18:14:29 | 显示全部楼层
改天我也拍几张照片,然后放得这么多,效果跟你这一样

出0入0汤圆

发表于 2011-6-3 20:16:56 | 显示全部楼层

(原文件名:QQ截图20110603201612.jpg)

这么大的数码管内部电路

出0入0汤圆

发表于 2011-6-4 15:57:36 | 显示全部楼层
菜鸟学习中

出0入0汤圆

发表于 2011-12-5 23:57:15 | 显示全部楼层
能把相关的资料共享一下吗?想好好学习一下,有点不懂

出0入0汤圆

发表于 2011-12-6 17:47:53 | 显示全部楼层
我觉得这个数码管好贵

出0入0汤圆

发表于 2011-12-8 12:38:07 | 显示全部楼层
那个MMBT3904是怎么截止的啊????基极加高电平=5V ,发射极=12V,三极管能截止吗?

出0入0汤圆

 楼主| 发表于 2011-12-8 12:47:13 | 显示全部楼层
不能,后来我飞了个电阻,飞到12V上去了。

出0入0汤圆

发表于 2012-1-18 10:32:12 | 显示全部楼层
楼主,请问能不能上传一下完整的原理图?课余时间想做一个,能加q向你学习吗?347596604

出0入0汤圆

发表于 2012-1-19 16:09:08 | 显示全部楼层
开眼了!顶!

出0入0汤圆

发表于 2012-5-26 20:15:16 | 显示全部楼层
顶起  我也想做一个·······

出0入0汤圆

发表于 2012-5-27 09:30:54 | 显示全部楼层
呃,这大小还行吧,手头有4寸的数码管,就是一直放着,没做成东西,HOHO

出0入0汤圆

发表于 2012-5-28 17:00:59 | 显示全部楼层
哈哈哈   这个厉害

出0入0汤圆

发表于 2012-9-16 21:10:08 | 显示全部楼层
很霸气!!@!!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-11 21:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表