starli 发表于 2009-11-3 09:05:25

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

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499087.jpg
(原文件名:00.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499088.jpg
(原文件名:01.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499089.jpg
(原文件名:02.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499090.jpg
(原文件名:03.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499091.jpg
(原文件名:04.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499092.jpg
(原文件名:05.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499093.jpg
(原文件名:06.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499094.jpg
(原文件名:11.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499095.jpg
(原文件名:12.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499096.jpg
(原文件名:13.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499097.jpg
(原文件名:14.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499098.jpg
(原文件名:15.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499099.jpg
(原文件名:16.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499100.jpg
(原文件名:17.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499101.jpg
(原文件名:18.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499102.jpg
(原文件名:19.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499103.jpg
(原文件名:20.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499104.jpg
(原文件名:21.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499105.jpg
(原文件名:22.jpg)

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_499106.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;
        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;

/*
//////////////////////////////////////////////////////////////////////////
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();
        }
}
//////////////////////////////////////////////////////////////////////////
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        = addr%10;
                        addr        /= 10;
                }
                disp_buff        = dbyte&0x0f;
                disp_buff        = dbyte>>4;
                Display_Update(disp_buff);
                */
        }

        if(Key_GetCode()==KEY_CODE_ENTER)
        {
                SystemFlag        = SYS_CLOCK_SET;
                ClockSet.Flash        = 0;
                ClockSet.dp                = 0;
                ClockSet.buff        = ptimer->sec;
                ClockSet.buff        = ptimer->min;
                ClockSet.buff        = ptimer->hour;
                Display_SetFlash(FlashTbl);
        }
}
//////////////////////////////////////////////////////////////////////////
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>TimerTbl)
                                {
                                        ClockSet.buff        = TimerTbl;
                                }
                                disp_buff                = ClockSet.buff%10;
                                disp_buff        = ClockSet.buff/10;
                                break;
                        case KEY_CODE_ADD:
                                if(++ClockSet.buff>TimerTbl)
                                {
                                        ClockSet.buff        = 0;
                                }
                                disp_buff                = ClockSet.buff%10;
                                disp_buff        = ClockSet.buff/10;
                                break;
                        case KEY_CODE_SWITCH:
                                if(++ClockSet.Flash>=3)
                                {
                                        ClockSet.Flash        = 0;
                                }
                                ClockSet.dp        = ClockSet.Flash<<1;
                                Display_SetFlash(FlashTbl);
                                break;
                        default:
                                ;
                }

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

abuzhu 发表于 2009-11-3 09:25:33

很猛!

hanlin 发表于 2009-11-3 09:27:29

<。)#)))≦挺漂亮

dx4700775 发表于 2009-11-3 09:30:27

够大!

laoxizi 发表于 2009-11-3 09:37:36

哈哈,真大啊。。。楼主做这东东是要卖?还是玩儿?

starli 发表于 2009-11-3 09:42:13

玩玩而己,呵呵。

firegl99 发表于 2009-11-3 09:43:01

mark

feixue 发表于 2009-11-3 09:50:03

动态扫描,亮度不会很高,驱动这么大的数码管最好还是静态的

erxun 发表于 2009-11-3 09:55:23

6片4543也行,带锁存

hanlin 发表于 2009-11-3 10:11:15

要静态的.那是疯了.耗电多大啊.

ilikemcu 发表于 2009-11-3 10:13:06

其实把第3,5两位LED倒转180度,就可以省略掉那两个额外的LED了。

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

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

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

cqfeiyu 发表于 2009-11-3 10:17:54

带温度不?用的什么实时时钟?用超级电容取代电池如何?

GreatVen 发表于 2009-11-3 10:27:55

有点强大。!!

durgy 发表于 2009-11-3 10:36:12

请问这种数码管在哪里可以买到?我要买几个回来搞,再用亚克力搞个外壳,呵呵

starli 发表于 2009-11-3 10:38:37

【10楼】 ilikemcu 我爱单片机
-----------------------------------------
非常感谢,做的时候真的没想到。   感谢你的思路。下次做时可以省了好多工做,呵呵

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




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




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





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

durgy 发表于 2009-11-3 10:42:04

如果是我,会用3个DM134,恒流静态驱动

Jmjmjm 发表于 2009-11-3 10:43:31

呵呵,请问下楼主函数带static的作用?
这个我不太清楚,我只知道变量带static的意思。
谢谢,楼主啦!!!!

cqfeiyu 发表于 2009-11-3 10:45:01

为什么是NPN驱动每段,而不是PNP呢?NPN输出4.3V,功耗大了吧

cqfeiyu 发表于 2009-11-3 10:48:08

感觉用TPIC6B595静态驱动更好

starli 发表于 2009-11-3 10:57:06

只在本文件内有效 static

rube 发表于 2009-11-3 11:10:53

【10楼】 ilikemcu 我爱单片机
很聪明啊,但我比划了下,那两个点不在中间,两位LED倒转180度后不好看

chen1986sl 发表于 2009-11-3 11:11:39

做过一套工厂用的记产量的东东。

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

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

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

cinderellah 发表于 2009-11-3 11:13:25

呵呵~我也有不少这样的大数码管,最后当垃圾全扔了,太占地方了~./emotion/em017.gif

STM32_Study 发表于 2009-11-3 11:17:02

三寸的??

不贵了呀~~

chen1986sl 发表于 2009-11-3 11:18:05

5寸还是5.5的,妈的我的翠绿17一个红光14一个。看来是贵了。。。

durgy 发表于 2009-11-3 11:48:01

楼上在哪里买的啊?我在淘宝看了一下,5寸的都很贵哦

eagle2006 发表于 2009-11-3 11:48:12

不知道楼主的数码管是几寸的,我打算用3寸的数码管来做一个,显示方式用静态。

chenwoli 发表于 2009-11-3 11:50:00

有板送吗?想做一个!

starli 发表于 2009-11-4 11:32:00

没板送 呵呵 自力更生吧.

jinkeqi 发表于 2009-11-4 11:45:52

这东西太猛了。

zhiyuan1106 发表于 2009-11-4 11:53:12

数码管比较贵怕怕呵呵

zhaodanhui119 发表于 2009-11-10 23:21:09

请问如何才能驱动三位5寸的数码管呢?

qzzz 发表于 2009-11-11 00:44:45

漂亮

ningsane 发表于 2009-11-11 09:18:40

1段20ma,驱动用的是什么?

deiwgah 发表于 2009-11-11 10:29:08

功耗应该不小吧,楼主很有时间啊,总做这些东西

starli 发表于 2009-11-25 12:44:37

欢迎有时间来参观

pangzitiancai 发表于 2010-1-3 13:28:37

驱动驱动~~~~~~~~~~~~~
最近都快被驱动搞疯了~~~~~~~~~~~
步进电机要驱动,数码管也要驱动,干脆去玩PLC好了~~~~~~~~~
那个220V都直接上的~~~~~~~

bbsniua 发表于 2010-1-3 13:36:04

街机的对打机上有那个大型数码管,
但是那个小数点是逗号的!

yanxinboy 发表于 2010-1-4 11:12:51

学习拉. ULN2003不用加上拉?

ju748 发表于 2010-1-4 14:45:01

看看

taiwentaotwt 发表于 2010-1-5 21:16:22

mark

ycwjl728 发表于 2010-1-5 21:49:52

只能说很强!

shanyan 发表于 2010-1-5 21:57:33

mark!

starli 发表于 2010-4-2 09:59:49

上的原理图有错误, 麻烦版主有时间帮我删了,免得误导其他人.

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

guhenggao 发表于 2010-4-2 10:59:42

mark

csformat 发表于 2010-4-2 11:32:02

这便是传说中的玩大了~~~~~~

xtaens 发表于 2010-10-17 14:44:11

fsclub 发表于 2010-10-17 14:57:20

搞大了啊!

kunpeng032 发表于 2010-10-17 17:19:33

./emotion/em004.gif

gongliangchun 发表于 2011-6-3 16:57:53

嘿嘿 可以做广告用

skynet 发表于 2011-6-3 17:46:32

这个这个,1个数码管要9块钱,这个钟可不便宜呢

n0831 发表于 2011-6-3 18:05:46

这个厉害,哈哈

hotyong 发表于 2011-6-3 18:14:29

改天我也拍几张照片,然后放得这么多,效果跟你这一样

turf456 发表于 2011-6-3 20:16:56

http://cache.amobbs.com/bbs_upload782111/files_40/ourdev_645552ZL3VZF.jpg
(原文件名:QQ截图20110603201612.jpg)

这么大的数码管内部电路

lhjin 发表于 2011-6-4 15:57:36

菜鸟学习中

shenzhoudadi 发表于 2011-12-5 23:57:15

能把相关的资料共享一下吗?想好好学习一下,有点不懂

fj1990826 发表于 2011-12-6 17:47:53

我觉得这个数码管好贵

289457095 发表于 2011-12-8 12:38:07

那个MMBT3904是怎么截止的啊????基极加高电平=5V ,发射极=12V,三极管能截止吗?

starli 发表于 2011-12-8 12:47:13

不能,后来我飞了个电阻,飞到12V上去了。

shenzhoudadi 发表于 2012-1-18 10:32:12

楼主,请问能不能上传一下完整的原理图?课余时间想做一个,能加q向你学习吗?347596604

azhja 发表于 2012-1-19 16:09:08

开眼了!顶!

liaoya00000 发表于 2012-5-26 20:15:16

顶起我也想做一个·······

199003326 发表于 2012-5-27 09:30:54

呃,这大小还行吧,手头有4寸的数码管,就是一直放着,没做成东西,HOHO

eryueniao 发表于 2012-5-28 17:00:59

哈哈哈   这个厉害

srs668@163.com 发表于 2012-9-16 21:10:08

很霸气!!@!!!!
页: [1]
查看完整版本: AVR M8 做的超大数码管时钟 有半米多长了。