DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别【严泽远作品】

水晶城堡在设计之初,采用全直插设计理念,保证玩家在自行DIY的过程中,不会因为焊接贴片元器件而烦恼。所以水晶城堡电路板上使用的所有原器件都是直插封装,所有IC都是DIP封装。 其中RTC模块采用的是达拉斯DS1302,配合5PPM的石英晶体。 虽然水晶城堡的走时精度已经能满足一般需要,但对于追求高精度的用户来讲,DS3231SN才是最佳选择。 DS3231SN最大的特点是: 1. 内部集成温度补偿晶体(TCXO); 2. 采用高速(400KHz)IIC通讯总线; 3. 工业级标准,工作温度-40℃至85摄氏度; 并且在0℃至+40℃的温度范围内,能够提供最大1分钟每年的计时精度。 所以DIY了一块使用了DS3231SN作为主要器件的高精度RTC模块。

[...]

突然发现格林尼治时间换算为北京时间不是简单的+8的问题

从GPS里读出了一条命令: $GPRMC,105404.739,A,2307.5573,N,11323.3638,E,2.65,348.60,040411,,,A*65 提取出来格林尼治时间是: 2011-04-04 10:54:04.739 换算成北京时间+8是18:54:04.739 很简单,没啥问题。 但是晚上又读到一条命令: $GPRMC,213201.236,A,2307.5573,N,11323.3638,E,2.65,348.60,040411,,,A*65 换算成北京时间就不是简单的+8的问题了,差点儿疏忽,不然会差很远啊。

刚刚写好了一个算法 用于计算各个时区对应的格林尼治时间,自己还没发现大的BUG,欢迎同学们拍砖!

  /******************************************************************************************************** ** 函数名称: bit IsLeapYear(uchar iYear) ** 功能描述: 判断闰年(仅针对于2000以后的年份) ** 入口参数: iYear 两位年数 ** 出口参数: bit 1:为闰年 0:为平年 ** 创 建 者: 严泽远 ** 创建时间: 2011-04-05 14:29 ** 版 本: v1.0.0 ********************************************************************************************************/ bit IsLeapYear(uchar iYear) { uint Year; Year = 2000+iYear; if((Year&3)==0) [...]