搜索
bottom↓
回复: 57

看看我用M48做的万年历!

[复制链接]

出0入0汤圆

发表于 2006-2-14 22:26:51 | 显示全部楼层 |阅读模式
看看我用M48做的万年历!





        能实现功能有:显示年、月、日、星期、时、分、秒、阴历月日、温度,共21位数码管。其中星期和阴历月日能根据公历自动计算改变,到2050年之前有效。温度可以测量从-10到40℃之间的温度。还可以设定两个定时、12/24小时显示、自动亮暗切换的时间等。

        电路只用了两片IC,一片M48,另外一片是74LS145,4-10译码器,来扩充端口。具体电路在下面,是PROTEUS画的,给个图片做参考。

点击此处下载armok01102468.rar



因为PROTEUS里面的元件,只有M8,所以这个电路里面画的是M8,我最早的试验也是在PROTEUS里面用M8仿真成功能显示后,接着改用M48写完整个程序的。把最早的用M8做试验的程序也给出在下面。是用WINAVR20050214+AVRSTUDIO编译的。

点击此处下载armok01102469.rar

有兴趣,可以到这个地方看一下:

http://www.ec66.com/ad_calendar/index.asp






-----此内容被yule于2006-02-14,22:29:01编辑过

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2006-2-14 23:22:39 | 显示全部楼层
頂你沒相量!!

出0入0汤圆

发表于 2006-2-15 00:17:30 | 显示全部楼层
楼主牛人,一般这种项目,我第一时间想到的是MCU+DS1302+DS18B20,阴历还不好解决先,不知楼主用什么测温?

出0入0汤圆

发表于 2006-2-15 01:08:41 | 显示全部楼层
看看图片的右上角

不是有个温敏电阻吗

出0入0汤圆

发表于 2006-2-15 08:20:44 | 显示全部楼层
走时一个星期差多少呢

出0入0汤圆

发表于 2006-2-15 09:09:00 | 显示全部楼层
應該很準的, 樓主用了32k的錶振!
头像被屏蔽

出0入0汤圆

发表于 2006-2-15 09:16:36 | 显示全部楼层
请问能给我阴历算法吗?

出10入210汤圆

发表于 2006-2-15 10:21:36 | 显示全部楼层
自已做一個可以練練手。

出0入0汤圆

 楼主| 发表于 2006-2-15 12:59:54 | 显示全部楼层
测温是用热敏电阻,50K

用AVR的ADC转换。因为测温范围是-10~40,才50个点,内部只用了8位ADC模式,然后查表。

我做的精度好像不高,一个星期下来,能差1~2分钟,不知道原因,还要再提高。

出0入0汤圆

发表于 2006-2-15 13:13:45 | 显示全部楼层
精神可嘉!佩服!

成本应该不是很高吧?有空也玩玩。

“一个星期下来,能差1~2分钟”,这样是要改进一下,我以前做过时钟用32768Hz的晶振,很准的,不会这么大误差的。

出0入0汤圆

发表于 2006-2-15 14:48:17 | 显示全部楼层
"一个星期下来,能差1~2分钟,不知道原因,还要再提高。"

系統中你用了多少個中斷??

出0入0汤圆

发表于 2006-2-15 14:54:54 | 显示全部楼层
用32768Hz的晶振,伪RTC,1秒才中断一次。

其他中断再多都不会影响时钟的长时间精度----难道有的中断要占用MCU超过1秒时间?1S=1000000uS哦!



难道楼主的这个32768Hz的晶振质量不行?还是T2被错误关闭而导致间歇停振?

出0入0汤圆

发表于 2006-2-15 15:17:39 | 显示全部楼层
那要看看樓主的程序了.

出0入0汤圆

发表于 2006-2-15 15:23:11 | 显示全部楼层
形成1秒64次中断?

程序不太合理,太密了,很容易掉失中断。

//timer2配置

TCCR2 = (1<<WGM21)|(1<<CS21);

ASSR  = 1<<AS2; //异步时钟

//TCNT2 = 0xE0; //定时时间1秒

OCR2 = 0x3f;                //计数64次,形成1秒64次中断。

TIMSK = 1<<OCIE2;        //开比较中断



为什么是64次呢?既然不是百分秒,用0.5秒,1秒不是更合理。

出0入0汤圆

发表于 2006-2-15 15:26:31 | 显示全部楼层
阴历其實不用算法的, 簡單做一個表就可以了!

出0入0汤圆

发表于 2006-2-15 15:58:31 | 显示全部楼层
现在的32768晶振质量真不好说,我用在DS1302一天能慢上几乎1分钟~~~

出0入0汤圆

发表于 2006-2-15 17:24:00 | 显示全部楼层
DS1302不是日历芯片吗?这样也慢,那还能用它吗?



HJJourAVR 说的没错,“用0.5秒,1秒不是更合理”。我以前的就是2Hz中断。很准的。还有就是中断程序的执行时间也要考虑一下。那时还是用台湾的非51的汇编写的程序,每条指令都去算它的时间,很痛苦的。现在好了,都用C了。

出0入0汤圆

 楼主| 发表于 2006-2-15 17:46:10 | 显示全部楼层
多谢大家提了这么多意见。

一秒64次中断,是为了刷新LED显示用的,就是1S刷新64次。

回到家再仔细研究一下程序,现在不在手里。



阴历是查表的,网上能搜索到C51的查表程序。

出0入0汤圆

发表于 2006-2-15 17:55:48 | 显示全部楼层
而且程序有点不解?

if(++click>=63)

{

        click=0;

        time_change=1;  //这里是1秒才更新一次?

         。。。。。

}

另外,用LED显示那么耗电,这个休眠就没什么必要了,呵呵。



估计扫描耗时过长,然后休眠,偶尔会导致RTC中断丢失。

/*函数Uchar put_on_leds(void),功能:将当前显示缓冲区的字符输出到LED。*/

void put_on_leds(void)

{

        uint8_t count;

        for(count=0;count<10;count++)

        {

                PORTC|=0X0F;

                PORTD=led_buf[count]&0x7f;        //PD7为0。

                PORTB=led_buf[count+10];

                if(led_buf[count+10]&0x40)PORTD |= _BV(PD7);        //提取第6位到PD7。

                PORTC&=0xf0;

                PORTC|=count;

                _delay_loop_2(250);------------------------比较耗时

        }

        PORTC|=0x0f;

}

最好改成每次只点亮一个数字,用其他定时器定时,1mS时基。



程序你不是已经发在顶楼了么?

出0入0汤圆

发表于 2006-2-15 18:06:03 | 显示全部楼层
我也是喜欢使用74ls145作为位驱动,这样的电路比较简单。lz的段驱动是靠AVR的IO来驱动的,不知驱动大的LED时能否有足够的亮度?

出0入0汤圆

 楼主| 发表于 2006-2-15 21:13:27 | 显示全部楼层
斑竹,那个程序只是为了用M8在proteus里仿真的程序。在仿真的会显示和走动后,我就做板转用M48来做了,那个程序以后就没有再改和优化了。



我现在的程序用M48是这样的,开了两个中断,TIMER0做定时LED刷新,TIMER2做0.5S中断。

还有TIMER1只有在蜂鸣器叫时才启动。我怀疑原因是晶振频率不准,但我没法测。



//初始化函数。

void Avr_Init (void)

{       

        //timer0 initialized

        TCNT0=T0_0;        //定时时长18mS,则1/4拍为 2*5*18ms~~187ms。1M

        TCCR0A=0x00;

        TCCR0B=_BV(CS02)|_BV(CS00);        //timer0 run,f/1024.

        TIMSK0=0x01;//开溢出中断。



        //timer1 initialized

        TCCR1A=0x00;

        TCCR1B=0x00;

        TCNT1H=0x00;

        TCNT1L=0x00;

        OCR1AH=0xFF;

        OCR1AL=0xFF;

        TIMSK1=0X02;        //开A比较中断。



        //timer2配置

        TCCR2A = 0;         //normale 模式。

        TCCR2B = _BV(CS22);        //分频64,64*256=0.5s

        ASSR  =_BV(AS2); //异步时钟

        TIMSK2=_BV(TOIE2);        //开定时器2溢出中断。0.5s一次溢出中断

       

        //ADC配置

       

        //模拟比较器配置。

       

        //        set_sleep_mode(SLEEP_MODE_IDLE);        //POWER SAVE.       

}



INTERRUPT(SIG_OVERFLOW0)

{

        TCNT0=T0_0;

        t0_over=1;

}



INTERRUPT(SIG_OUTPUT_COMPARE1A)

{

// t1_over=1;

PORTC^=_BV(beep_out);

}





SIGNAL(SIG_OVERFLOW2)     /* signal handler for Time2 interrupt */

{

        t2_over=!t2_over;

        time_change=1;

}

出0入0汤圆

发表于 2006-2-16 13:14:58 | 显示全部楼层
支持一下

出0入0汤圆

发表于 2006-2-16 13:21:28 | 显示全部楼层
14楼:

简单,你自己做个试试!

出0入0汤圆

发表于 2006-2-16 14:49:07 | 显示全部楼层
【17楼】 yule  樓主都說自己用查表做出來的啦!!

出0入0汤圆

发表于 2006-2-16 18:21:06 | 显示全部楼层
阴历的算法是在难找,但查表的方法是有的,只要你找一个带有农历的日历本就可以自己归纳出一张表.

出0入0汤圆

发表于 2006-4-23 19:24:36 | 显示全部楼层
我做了一下 温度没有显示呀

出0入0汤圆

发表于 2006-4-30 09:10:35 | 显示全部楼层
因本人是菜鸟,跪求一个mega16,用1602b显示的万年历程序,赶着做毕业设计,请各位高手帮帮忙,万分感激。本人邮箱185212756@qq.com

出0入0汤圆

发表于 2006-4-30 09:17:05 | 显示全部楼层
qiang709394:你不是吧,把所有的万年历帖子都翻出来了,还不能找到合适的吗?

出0入0汤圆

发表于 2006-4-30 16:57:13 | 显示全部楼层
是啊,我真是菜鸟中的菜鸟来的,我不喜欢搞电子的,我看不明白程序.做完毕业设计后我以后都不想碰电子了,麻烦那位高手有空的话,发一个现成的用m16做,用1602b显示的万年历程序给我,谢谢各位了.185212756@qq.com
-----此内容被qiang709394于2006-04-30,17:03:31编辑过

出0入0汤圆

发表于 2006-5-4 13:01:25 | 显示全部楼层
我好几年前就做了一样的pcb,用8515和maxim的时钟芯片搭建,一天慢几秒,软件设定校正,这样1个月误差不到一分,还可以控制灯泡一闪一闪,模拟半夜人起床等,让外边的小偷以为我家人经常醒来看时间,上卫生间,哈哈

使用12个led,左边轮流显示公历农历温度,右边显示时间

出0入0汤圆

发表于 2007-2-20 23:06:30 | 显示全部楼层
奇怪,我用7.3728m的晶震做万年历,1个星期下来,一秒不差.

出0入0汤圆

发表于 2007-2-20 23:32:19 | 显示全部楼层
这样会不会一掉电就要重新设定时间呢?



我回家看到有人在用这种产品...断电不需要重新设定时间...

出280入168汤圆

发表于 2007-2-21 15:59:10 | 显示全部楼层
晶振的误差理论上是20ppm左右,实际上受到加工、运输、环境温度等影响,最后组装到产品上、会有个别的晶振误差会变得很大或损坏。工厂中会有仪器专门监测,碰到这种次品就直接换掉。



晶振在使用中要小心,我原来工作过的工厂规定,生产线上从工作台上跌落到地面上的钟表晶振全部报废。



从仓库到生产线上,收发晶振这种材料都有专门的规章制度要遵守,不然生产出的产品有隐患,出厂之后损坏比率会很高。



我到晶振厂参观过,他们切割的晶振片非常薄,环境要求很严格。49U和49S这种座式的晶振是薄片两头电镀焊接,可靠性很好。但是柱状的钟表晶振只有单端是固定的,另外一端是悬空的,所以遇到碰摔很容易就产生裂纹或歪斜,导致报废。





49系列的封装方法

________

|O*OOOO*O|

--+----+--

  |    |





钟表晶振的封装方法

    ___

   | O |

   | O |

   | O |

   | O |

   |*O*|

   -+-+-

    | |

出0入0汤圆

发表于 2007-6-6 10:39:20 | 显示全部楼层
可不可以用汇编语言来写程序呀?谢谢哦

出0入0汤圆

发表于 2007-7-13 14:46:02 | 显示全部楼层
本人正在做个倒计时牌,可以借鉴下楼主的程序了。。。

出0入0汤圆

发表于 2009-3-1 16:19:49 | 显示全部楼层
因本人是菜鸟,跪求一个mega16做的万年历。数码管显示。邮箱wangzibochina@yahoo.cn.敬请指教!

出0入0汤圆

发表于 2009-3-1 17:11:50 | 显示全部楼层
这个东东 还不错

出0入0汤圆

发表于 2009-3-1 17:12:32 | 显示全部楼层
这个东东 还不错

出0入0汤圆

发表于 2009-8-23 21:55:08 | 显示全部楼层
很强

出0入0汤圆

发表于 2009-10-30 15:54:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-26 12:54:48 | 显示全部楼层
mark~~~

出0入0汤圆

发表于 2009-11-26 17:12:48 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-12-16 14:15:46 | 显示全部楼层
马克

出0入0汤圆

发表于 2009-12-30 16:09:40 | 显示全部楼层
楼上的,不知道怎么没有完整的原理图?也发上来参考靠咯

出0入0汤圆

发表于 2009-12-30 16:33:06 | 显示全部楼层
因为我也想坐一个这样的万年历锻炼锻炼自己的动手能力,但是由于本人是刚开始接触AVR,所以有很多的东东希望能得到各位高手的指点,在下将感激不尽。我很喝望能有上面楼主的这个原理图,希望楼主慷慨。谢谢。我的邮箱是:huajinuestc@163.com。谢谢了!

出0入0汤圆

发表于 2009-12-30 22:10:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-12-31 13:29:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-3 13:21:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-4 16:46:50 | 显示全部楼层
做个记号  也来试试看看

出0入0汤圆

发表于 2010-2-11 11:17:44 | 显示全部楼层
mark 准备做一个

出0入0汤圆

发表于 2010-2-24 14:25:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-13 17:30:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-26 20:43:54 | 显示全部楼层
回复【楼主位】yule
-----------------------------------------------------------------------

实在是高啊,顶!

出0入0汤圆

发表于 2010-10-18 20:04:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-21 18:42:39 | 显示全部楼层
牛人啊

出0入0汤圆

发表于 2011-2-23 09:15:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-24 19:57:14 | 显示全部楼层
楼主牛人

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-6-2 21:41

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

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