搜索
bottom↓
回复: 125

庆贺自已的电子闹钟DIY成功

[复制链接]

出0入0汤圆

发表于 2009-3-21 23:32:02 | 显示全部楼层 |阅读模式
采用m16+ds18b20+ds1302+12864液晶,取本论坛中大虾的程序进行修改。本钟功能有正点报时,奏梁祝十五秒。有两个设置闹钟功能,报警声为蜂鸣声,报警时间十五分钟,可随时关断。自动农历、星期显示。先发上共赏

初始界面 (原文件名:初始界面.jpg)


设定菜单 (原文件名:设定菜单.jpg)


闹钟设定 (原文件名:闹钟设定.jpg)


日期设定 (原文件名:日期设定.jpg)


时间设定 (原文件名:时间设定.jpg)


(原文件名:电路结构1.jpg)


(原文件名:电路结构2.jpg)


(原文件名:电路结构3.jpg)
点击此处下载 ourdev_427013.rar(文件大小:411K) (原文件名:程序.rar)
点击此处下载 ourdev_427014.rar(文件大小:55K) (原文件名:12864lcd_clock.rar)

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

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

出0入0汤圆

 楼主| 发表于 2009-3-21 23:36:56 | 显示全部楼层
不好意思,漏了个主运行界面。现在补上

运行界面 (原文件名:运行界面.jpg)

出0入0汤圆

发表于 2009-3-21 23:40:39 | 显示全部楼层
不错

出0入4汤圆

发表于 2009-3-22 00:01:47 | 显示全部楼层
做得非常好,装到一个外壳里就更完美了 :)

出0入0汤圆

 楼主| 发表于 2009-3-22 00:03:48 | 显示全部楼层
DS1302使用在阿莫网站买的32.768晶振,每天误差是5秒,在程序中作了每天5秒的误差修正,经3天运行,暂时看不出有偏差了。目前正在设计外壳,做好了再上图片。在主运行界面上的一个星是代表一个闹钟功能启动,两个星就是两个闹钟功能启动。

出0入0汤圆

发表于 2009-3-22 07:29:59 | 显示全部楼层
这个晶振的精确度是5ppm,不是每天的误差5秒。
每天误差5秒的晶振还能用呀?晕哦

出0入0汤圆

发表于 2009-3-22 07:32:12 | 显示全部楼层
算下:
5*365=1825秒,30.417分钟了。这是一年的误差,恐怖哦!恐怕,没有人敢用这样的电子表了

出0入0汤圆

 楼主| 发表于 2009-3-22 07:55:07 | 显示全部楼层
楼上,我用的哪种光刻的晶振,以前用别的晶振ds1302都不工作,用了这个能工作,但就是24小时真的有快5秒,你有什么好办法吗?再请大虾们帮忙解决这个误差的问题。再送上一个20年前本人DIY的电钟共赏,至今还在使用。采用的是LM8363,时基是采用电网的50Hz信号,时间挺准的。

(原文件名:LM8363电钟.jpg)


(原文件名:LM8363电钟2.jpg)

出0入0汤圆

发表于 2009-3-22 09:28:56 | 显示全部楼层
^_^!  20年前,厉害呀,电网频率作时基,时间挺准?不敢相信!!

出0入0汤圆

发表于 2009-3-22 10:32:59 | 显示全部楼层
敢问楼主,农历是怎么做出来的

出0入0汤圆

发表于 2009-3-22 10:56:49 | 显示全部楼层
不错

出0入0汤圆

发表于 2009-3-22 10:58:11 | 显示全部楼层
农历用查表就OK了~
目前有150年的表,够用啦
我20年前也有LM8560的LED数字钟,上一年更改为采用32768Hz的晶振,4060和4040组成的数字分频获得60Hz,远比电网的50Hz准确
电网的50Hz是很不准确的

32768Hz是目前绝大部分RTC所用,精度不是很高,每天几秒,其实满足需求的
手表的都是32768咋


20年前的LM8560 LED (原文件名:IMAGE_00069.jpg)


现在的P89V51的LCD (原文件名:IMG_4742.JPG)


现在的P89V51的LCD带SHT15 (原文件名:IMG_4743.JPG)

出0入0汤圆

发表于 2009-3-22 11:41:23 | 显示全部楼层
祝贺

出0入0汤圆

发表于 2009-3-22 13:05:02 | 显示全部楼层
【11楼】 lysoft
能否将你的农历查表数据发上来共享一下

出0入0汤圆

 楼主| 发表于 2009-3-22 14:25:40 | 显示全部楼层
在我发的程序里面就有的

出0入0汤圆

发表于 2009-3-22 14:42:27 | 显示全部楼层
顶一个

出0入0汤圆

 楼主| 发表于 2009-3-23 19:49:52 | 显示全部楼层
很想多点人来看!

出0入0汤圆

发表于 2009-3-24 09:54:25 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-4-23 07:49:37 | 显示全部楼层
程序注释就好了

出0入0汤圆

发表于 2009-5-23 22:50:20 | 显示全部楼层
cvcode,build出现下面error
Error: \温度闹钟.c(494): function argument #3 of type 'flash unsigned char [64][16]' is incompatible with required parameter of type 'flash unsigned char *'

这是为什么?

出0入0汤圆

发表于 2009-5-23 23:20:28 | 显示全部楼层
晕倒,原来是盗版软件有问题

出0入0汤圆

发表于 2009-5-23 23:35:22 | 显示全部楼层
不错!

出0入0汤圆

发表于 2009-5-30 16:40:50 | 显示全部楼层
为什么一定要把JTAGEN 关闭掉程序才能跑起来?

出0入0汤圆

发表于 2009-5-30 17:23:32 | 显示全部楼层
不关好像那几个口就不能作为普通I/O用了

出0入0汤圆

发表于 2009-5-30 17:30:09 | 显示全部楼层
有时间也做一个,学习了,

出0入0汤圆

发表于 2009-5-30 18:04:27 | 显示全部楼层
不错!

出0入0汤圆

发表于 2009-5-30 18:04:39 | 显示全部楼层
是这样的啊? 那为什么ISP  使能位为什么不用关断都可以用?

出0入0汤圆

发表于 2009-5-30 23:27:30 | 显示全部楼层
进来学习下...

出0入0汤圆

发表于 2009-5-31 07:03:34 | 显示全部楼层
我也编译了出现了
cvcode,build出现下面error
Error: \温度闹钟.c(494): function argument #3 of type 'flash unsigned char [64][16]' is incompatible with required parameter of type 'flash unsigned char *'
那怎么下步弄好啦

出0入0汤圆

发表于 2009-5-31 07:40:19 | 显示全部楼层
电路板布局简洁漂亮;
每天的0时的时候进行以秒为单位的校准就可以解决走时误差了

出0入0汤圆

发表于 2009-5-31 16:43:45 | 显示全部楼层
20年前的DIY在以前看来很前沿哦!!!

出0入0汤圆

发表于 2009-5-31 19:22:07 | 显示全部楼层
楼主好厉害撒~

出0入0汤圆

发表于 2009-5-31 19:36:43 | 显示全部楼层
时钟过快的话有两种原因造成,一:晶震虽然标称+-5PPM,但还有一个参数是厂家筛选参数,如+5PPM指的是这批晶震都是+5PPM的;二:震荡电容不匹配,一般晶震的匹配电容有6PF,12.5PF等,而原装DS1302的匹配电容是6PF,如果晶震是12.5PF的,外面需并上6PF的电容两个.

还有一个办法是找晶震厂家要-PPM的32.768晶震,也能修正时钟.

出0入0汤圆

发表于 2009-6-9 21:06:51 | 显示全部楼层
这个闹钟功耗太厉害了,而且一直在刷显示器

出0入134汤圆

发表于 2009-6-9 21:15:45 | 显示全部楼层
漂亮啊

出0入0汤圆

发表于 2009-6-10 13:02:23 | 显示全部楼层
学习菜单的做法!

出0入0汤圆

发表于 2009-7-1 21:06:00 | 显示全部楼层
不知怎么回事,这个闹钟的声音部分程序总有问题

出0入0汤圆

发表于 2009-7-1 21:06:28 | 显示全部楼层
看来只能自己改了

出0入0汤圆

发表于 2009-7-1 21:57:17 | 显示全部楼层
好东西

出0入0汤圆

发表于 2009-7-2 08:43:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-2 09:20:56 | 显示全部楼层
漂亮,精美!

出0入0汤圆

发表于 2009-7-2 11:14:00 | 显示全部楼层
那个晶振我也用了,差不多就是一天快5秒。半年就快15分钟了。

出0入0汤圆

发表于 2009-7-2 12:10:28 | 显示全部楼层
不错

出0入0汤圆

发表于 2009-7-2 14:24:30 | 显示全部楼层
为什么不用PCB板呢,那样功能可能更稳定,外观效果也会比较好

出0入0汤圆

发表于 2009-7-2 15:44:05 | 显示全部楼层
不错 很不错

出0入0汤圆

发表于 2009-7-2 16:26:12 | 显示全部楼层
好东西  顶一下

出0入0汤圆

发表于 2009-7-8 06:44:05 | 显示全部楼层
好东东呀,牛气。

出0入0汤圆

发表于 2009-7-10 16:19:16 | 显示全部楼层
学习了

出0入0汤圆

发表于 2009-7-11 11:56:03 | 显示全部楼层
记下.

出0入0汤圆

发表于 2009-7-11 13:27:44 | 显示全部楼层
楼主 这是用什么软件编译的

出0入0汤圆

 楼主| 发表于 2009-7-11 22:28:14 | 显示全部楼层
回楼上,用CVAVR

出0入0汤圆

发表于 2009-7-11 22:43:41 | 显示全部楼层
每天差5S的电子表也差得太快了点。一年是多长时间了。

出0入0汤圆

发表于 2009-7-23 21:41:27 | 显示全部楼层
厉害

出0入0汤圆

发表于 2009-7-29 17:24:19 | 显示全部楼层
很好很强大,MARK。

出0入0汤圆

发表于 2009-8-1 12:38:11 | 显示全部楼层
Mark

出0入0汤圆

发表于 2009-8-1 12:56:01 | 显示全部楼层
用液晶做时钟有点太奢侈了吧,强烈建议用数码管,(金融危机啊!)

出0入0汤圆

发表于 2009-9-24 10:30:19 | 显示全部楼层
很漂亮,我仿制了一下。保留了JTAG功能,将LCD的引脚定义改为:RS(CS)=====>PC7; RW(SID)====>PC6;EN(SCLK)===>PC1
; D0-D7========>PA。可是我联机调试LCD没有任何显示,请问哪儿有问题?LCD没有问题。请解答,谢谢!
电路图和程序的部分引脚定义有出入,如1302的PORTD.2为DS1302使能控制引脚;PORTD.3为DS1302时钟控制引脚;PORTD.4为DS1302数据控制引脚,而在电路图中为PB口的0、1、2。不知是否正确?

出0入0汤圆

发表于 2010-2-1 16:12:07 | 显示全部楼层
mar

出0入0汤圆

发表于 2010-2-1 22:08:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-2 08:42:34 | 显示全部楼层
标记下,以后研究

出0入0汤圆

发表于 2010-2-2 09:23:04 | 显示全部楼层
mark

出0入147汤圆

发表于 2010-2-2 10:55:56 | 显示全部楼层
楼主还可以接着加
还可以添加游戏之类的东西
贪吃蛇
俄罗斯方块
生理期……

出110入26汤圆

发表于 2010-2-2 11:19:06 | 显示全部楼层
偷菜提醒…
时钟误差温度也很大影响。

出0入0汤圆

发表于 2010-2-2 11:21:05 | 显示全部楼层
楼主,我的是彩色的模拟时钟,农历的算法有没有可以自动计算的啊?

(原文件名:clock.JPG)

出0入0汤圆

发表于 2010-2-2 14:42:44 | 显示全部楼层
好啊,标记一下

出0入0汤圆

发表于 2010-2-2 21:27:06 | 显示全部楼层
如果程序没问题,那可能跟晶振匹配电容有关了,还有就是DS1302好像内部有个匹配电容。。。

出0入0汤圆

发表于 2010-3-4 10:09:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-4 11:38:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-4 13:18:28 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-3-4 14:41:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-5 12:24:36 | 显示全部楼层
不错~~~

出0入0汤圆

发表于 2010-3-5 12:54:08 | 显示全部楼层
收下

出0入0汤圆

发表于 2010-3-5 14:20:43 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-3-5 20:43:07 | 显示全部楼层
晶振用 废电脑主板拆下的32768,你会有惊奇的发现.

出0入0汤圆

发表于 2010-3-5 20:47:35 | 显示全部楼层
晶振用 废电脑主板拆下的32768,你会有惊奇的发现.

出0入16汤圆

发表于 2010-3-5 23:36:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-31 15:39:53 | 显示全部楼层
非常强悍

出0入0汤圆

发表于 2010-3-31 16:07:18 | 显示全部楼层
樓主的液晶模塊漂亮,在哪買的?

出0入0汤圆

发表于 2010-3-31 16:16:29 | 显示全部楼层
首次发帖,学习楼主中......

出0入0汤圆

发表于 2010-3-31 16:58:06 | 显示全部楼层
楼主可否把20年前的那个时钟电路公布一下,想研究一下vfd的驱动电路,手里有几个vfd,但总是漏光

出0入0汤圆

发表于 2010-4-1 01:09:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-1 15:13:19 | 显示全部楼层
回复【63楼】lzllong
-----------------------------------------------------------------------
这个好!

出0入0汤圆

发表于 2010-4-1 15:16:44 | 显示全部楼层
回复【8楼】xiejun 业余程序员
^_^!  20年前,厉害呀,电网频率作时基,时间挺准?不敢相信!!
-----------------------------------------------------------------------

现在电网频率很准的,误差在1赫兹以内,而且不会累积

出0入0汤圆

发表于 2010-4-1 15:55:13 | 显示全部楼层
用gps时钟

出0入0汤圆

发表于 2010-8-16 09:22:05 | 显示全部楼层
楼主的文件太复杂,我学习后再研究

出0入0汤圆

发表于 2010-8-16 09:45:37 | 显示全部楼层
太强了,手里没有元器件,要不非要玩玩

出0入0汤圆

发表于 2010-8-16 16:27:41 | 显示全部楼层
好啊

出0入0汤圆

发表于 2010-8-16 17:07:34 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-9-9 21:24:22 | 显示全部楼层
mark,不错

出0入0汤圆

发表于 2010-9-9 22:11:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-29 15:40:45 | 显示全部楼层
楼主是不是缺了一个bcd.h?

出0入0汤圆

发表于 2010-10-29 15:52:01 | 显示全部楼层
回复【6楼】zx962032  都市狗尾草
算下:
5*365=1825秒,30.417分钟了。这是一年的误差,恐怖哦!恐怕,没有人敢用这样的电子表了
-----------------------------------------------------------------------

看来你对误差修正是毫无办法呢。

出0入0汤圆

发表于 2010-10-31 00:12:33 | 显示全部楼层
我用M16做的,一晚上就差了半个多小时呢。

出0入0汤圆

发表于 2010-10-31 01:09:21 | 显示全部楼层
送谁谁翻脸

出0入0汤圆

发表于 2010-10-31 16:16:13 | 显示全部楼层
挺好值得鼓励

出0入0汤圆

发表于 2010-11-5 15:44:54 | 显示全部楼层
楼上的各位都能成功运行吗?...请问rtc_set_time、rtc_get_time...还有关于set_run值的写入在哪里定义了

出0入0汤圆

发表于 2010-11-7 08:43:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-7 09:58:19 | 显示全部楼层
回复【楼主位】lin638
-----------------------------------------------------------------------

也来凑个热闹,DIY的闹钟,自己一直用着。
核心板是感光板做的,用的是LPC2103,红外接收,RTC芯片PCF8563。

(原文件名:IMGP2224.JPG)


(原文件名:IMGP2250.JPG)


(原文件名:IMGP2244.JPG)


(原文件名:IMGP2257.JPG)

//************************************************************************************************
//                                     红外解码程序
//************************************************************************************************

#define No_Edge      0x00
#define Rising_Edge  0x01
#define Falling_Edge 0x02
#define Both_Edge    0x03


u8  Capture_State = 0;  // 捕获状态
u8  Count=0;            // 捕获码个数
u8  Capture_Data[50];   // 捕获数值缓存区

u8  User_Code = 0;      // 厂商自定义代码
u8  Key_Value_Last;     // 上一次的键值

volatile u8 Key_Value = 0xFF;  // 键值 0xFF 没有按键

/******************************************************************************
* 函数名称: void IRKEY_Init( u16 TimeoutMs )
* 函数功能: 初始化。
* 参    数: TimeoutMs
* 返 回 值: 无
* 备    注: 无
******************************************************************************/
void IRKEY_Init(u16 TimeoutMs)
{
  
    PINSEL0 &= ~(BIT20|BIT21); // p10 timer1 cap0  
    PINSEL0 |= BIT21;         
   
    T1TCR = 0x02;   //计数器复位 关闭计数
    T1IR  = 0xFF;    //中断寄存器复位
   
    Set_T1Cap0_Capture_Edge(Falling_Edge); //下降沿捕捉
    T1CCR |= 0x04;                         //打开中断

    T1PR  = Fpclk/1000000 - 1; // 设置预分频寄存器使T1TC每1us加一次
    T1MR0 = TimeoutMs*1000;     // TimeoutMs 毫秒 匹配一次
    T1MCR = 0x00;               // 暂时关闭匹配时产生中断并复位TC 当有事件打开

    VICIntSelect  |= 1 << VIC_TIMER1;  // 设置TIMER1为FIQ中断
    VICIntEnable  |= 1 << VIC_TIMER1;  // 使能TIMER1中断
   
    T1TCR  = 0x01;  //使能timer1
}

/*******************************************************************************
* 函数名称:  void Set_T1Cap0_Capture_Edge(u8 edge)
* 函数功能: 设置Timer0的上升沿、下降沿捕捉功能,并且在捕捉时产生中断。
* 参    数: EdgeMode
* 返 回 值: 无
* 注    意: 只针对于timer1 cap0
*
******************************************************************************/
void Set_T1Cap0_Capture_Edge(u8 EdgeMode)
{
   T1CCR &= ~0x0003;
   if(EdgeMode == Rising_Edge)        T1CCR |= 0x01;
   else if(EdgeMode ==  Falling_Edge) T1CCR |= 0x02;
   else if(EdgeMode ==  Both_Edge)    T1CCR |= 0x03;
   else{}
}

/******************************************************************************
* 函数名称: void IRKEY_ISR_Handler(void)
* 函数功能: 红外定时器中断服务程序。
* 参    数: 无
* 返 回 值: 无
* 备    注:
******************************************************************************/
__fiq __arm void fiq_handler(void)
{
  u32 temp = 0;
  u8  i,Data[4],ITFlage;
  ITFlage = T1IR;
  //-------------- 超时处理 ----------------------------------------------------
  if(ITFlage& BIT0)
  {
     T1MCR = 0x00;                  //关闭匹配中断
     if(Capture_Data[0] == 'W')  {} // 错误舍去
     else if(Capture_Data[0] == 'Q')//前导码
     {
         for(i=1;i<33;i++)          //转化为32数据
         {
             temp <<= 1;
             if(Capture_Data) temp |= 0x01;
         }
         for(i=0;i<4;i++)         
         {
             Data = (u8)temp;
             temp >>= 8;
         }
         if((Data[3]+Data[2] == 0xFF) && (Data[1]+Data[0] == 0xFF))//检验是否争取
         {
             Key_Value = Data[1];
             User_Code = Data[3];
             Key_Value_Last = Key_Value;
         }
         else Key_Value = 0xFF;
     }
     else if((Capture_Data[0] == 'L')&&(Capture_Data[1] == 'L')&&(Capture_Data[2] == 'L'))
     {
          Key_Value = Key_Value_Last; // 连续按键
     }
     else{}                           // 错误舍去
     Capture_State = 0;
  }
  //----------- 捕获代码 -------------------------------------------------------
  if(ITFlage & BIT4)
  {   
      if(Capture_State == 0)
      {
          Capture_State = 1;
          T1MCR = 0x03; //匹配时产生中断并复位TC   
          Count = 0;
          T1TC  = 0;    // 清零计数器
          for(i=0;i<33;i++)
          {
             Capture_Data = 0x00;
          }
      }
      else if(Capture_State == 1)
      {         
          volatile u16 temp = T1CR0;
          if(temp>15000)      Capture_Data[Count++] = 'W'; //错误码
          else if(temp>12000) Capture_Data[Count++] = 'Q'; //前导码
          else if(temp>10000) Capture_Data[Count++] = 'L'; //连续按键
          else if(temp>2000)  Capture_Data[Count++] =  1 ; //码 1
          else if(temp>1000)  Capture_Data[Count++] =  0 ; //码 0
          else                Capture_Data[Count++] = 'W'; //错误码
          if(Count >= 33)     Capture_State = 2;           //码长最大33
          else                T1TC  = 0;                   //清零计数器
      }
      else {}
  }
  T1IR  = 0xff;        //复位中断标记
}

出0入0汤圆

 楼主| 发表于 2010-11-11 17:17:09 | 显示全部楼层
楼上做得比我的好多了,向你学习!

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-8-26 05:14

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

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