为什么在单片机的电子时钟设计中基本上都用的DS1302时钟芯片? 在基于51-52的单片机电子时钟设计中,我查阅到的资料基本上都是DS1302时钟芯片,我想问问为什么都用的这个,它有其他的替代品吗,比起其他的它的优势在哪? DS1302:没什么特别的优点,或者说充满了缺点。比如:比较有趣的地方在于它用的协议非主流,不好用。但这对做题家而言,不是缺点。非主流?题来啦!总之,DS1302适合拿来给做题家练习写协议用。 DS1307:标准iic协议,非常方便。 DS3231: 集成了32KHZ晶体振荡器,不用外加了,更适合商用。 谢邀 现在流行物联网,做个电子时钟,不需要什么时钟芯片,直接从互联网上时间,既简单,又能保证时间是完全正确的分秒不差。DS1302等各种时钟芯片跑久了都会有较大时间误差的。 咱们用国产ESP32S3 32位单片机(带WiFi)+2.8寸电容触摸屏,做一个网络时钟。 实现目标:通过HTTP请求从网上时间戳,制作一个带UI界面的电子时钟APP。 这是ESP32单片机网络时钟的源代码,代码是JavaScript+CSS实现,相对于C语言简单很多: 这是单片机上的执行效果:
esp32 JavaScript 网络 时钟https://www.zhihu.com/video/ 单片机本地的时间对象底层依靠单片机本身的定时器实现,运行久了也是有误差的,,,不过可以利用互联网,你可以每隔1个小时请求一下网站,更新一下时间戳,这样可以保证你的时钟永远都是分秒不差的。 基于51单片机的闹钟【DS1302,数码管,独立按键,暂停】(仿真) 带闹钟功能的电子钟 (1)实现数码管显示电子钟 (2)实现闹钟功能,用按键设定闹钟时间 (3)实现一键暂停闹钟,1分钟后再响。 资料包括:
原理图:
仿真:
程序运行图:
#include”ds1302.h” //—DS1302写入和读取时分秒的地址命令—// //—秒分时日月周年 最低位读写位;——-// uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; //—DS1302时钟初始化2016年5月7日星期六12点00分00秒。—// //—存储顺序是秒分时日月周年,存储格式是用BCD码—// uchar ds1302_time[7] = {0, 0, 12, 7, 5, 6, 16}; /* * 函 数 名 : Ds1302Write * 函数功能 : 向DS1302命令(地址+数据) * 输 入 : addr,dat * 输 出 : 无 */ void Ds1302Write(uchar addr, uchar dat) { uchar n; RST = 0; _nop_(); SCLK = 0;//先将SCLK置低电平。 _nop_(); RST = 1; //然后将RST(CE)置高电平。 _nop_(); for (n=0; n<8; n++)//开始传送八位地址命令 { DSIO = addr & 0x01;//数据从低位开始传送 addr >>= 1; SCLK = 1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK = 0; _nop_(); } for (n=0; n<8; n++)//写入8位数据 { DSIO = dat & 0x01; dat >>= 1; SCLK = 1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK = 0; _nop_(); } RST = 0;//传送数据结束 _nop_(); } /* * 函 数 名 : Ds1302Read * 函数功能 : 读取一个地址的数据 * 输 入 : addr * 输 出 : dat */ uchar Ds1302Read(uchar addr) { uchar n,dat,dat1; RST = 0; _nop_(); SCLK = 0;//先将SCLK置低电平。 _nop_(); RST = 1;//然后将RST(CE)置高电平。 _nop_(); for(n=0; n<8; n++)//开始传送八位地址命令 { DSIO = addr & 0x01;//数据从低位开始传送 addr >>= 1; SCLK = 1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK = 0;//DS1302下降沿时,放置数据 _nop_(); } _nop_(); for(n=0; n<8; n++)//读取8位数据 { dat1 = DSIO;//从最低位开始接收 dat = (dat>>1) | (dat1<<7); SCLK = 1; _nop_(); SCLK = 0;//DS1302下降沿时,放置数据 _nop_(); } RST = 0; _nop_(); //以下为DS1302复位的稳定时间,必须的。 SCLK = 1; _nop_(); DSIO = 0; _nop_(); DSIO = 1; _nop_(); return dat; } /* * 函 数 名 : Ds1302Init * 函数功能 : 初始化DS1302. * 输 入 : 无 * 输 出 : 无 */ void Ds1302Init() { uchar n; TR0=0; Ds1302Write(0x8E,0X00); //禁止写保护,就是关闭写保护功能 for (n=0; n<7; n++)//写入7个字节的时钟信号:分秒时日月周年 { Ds1302Write(WRITE_RTC_ADDR[n],(ds1302_time[n]/10<<4)+ds1302_time[n]%10); } Ds1302Write(0x8E,0x80); //打开写保护功能 TR0=1; } /* * 函 数 名 : Ds1302ReadTime * 函数功能 : 读取时钟信息 * 输 入 : 无 * 输 出 : 无 */ void Ds1302ReadTime() { uchar n,i; for (n=0; n<7; n++)//读取7个字节的时钟信号:分秒时日月周年 { i= Ds1302Read(READ_RTC_ADDR[n]); if(n==0) i=i & 0x7f; ds1302_time[n] =(i>>4)*10+(i & 0x0f); } } DS1302时钟芯片在单片机的电子时钟设计中如此受欢迎,主要是因为它的高性能和丰富的功能特性。这款芯片具有高精度的时间计数能力,同时功耗极低,非常适合需要长时间稳定运行且对功耗有严格要求的电子时钟设计。 而且,DS1302的接口设计非常简洁,容易与单片机等微控制器集成,降低了设计的复杂度。此外,它还具备掉电保护功能,在主电源断电时能够继续保持时钟运行,这对于需要连续计时的应用来说至关重要。 总的来说,DS1302时钟芯片以其高精度、低功耗、简洁接口和掉电保护等特性,在单片机的电子时钟设计中占据了重要地位。 老黑 2024.3.23 DS1302时钟芯片,学习过51单片机的同学,基本都认识。很多人都是通过这颗芯片认识时钟芯片的,但这颗芯片用完了大家都骂。
DS1302 1.DS1302是啥 说它是时钟神器绝不为过,尤其是和51单片机搭配。在wifi授时还不发达的年代,想要保持时间的同步,只能搭载时钟芯片。或许是因为价格的原因,也或许是因为资料比较多的缘故,只要谈起时钟,必然是DS1302这颗芯片。
原理图 DS1302与单片机通过三个引脚连接,分别是使能端CE、始终SCLK、以及数据口I/O。需要外接32.768k的时钟晶振。 有两个电源端,方便电池的接入。 走时不准,是大家对这颗芯片的统一评价,或许是因为初学的原因,或许是因为便宜的原因。总之,大家都愿意用这颗芯片入门,而不愿意用这颗芯片去商业化产品。 2.其他可以替代的时钟芯片 同厂家的芯片,除了DS1302外,还有DS1307和DS3231,其中前者使用了标准的IIC通讯协议,而后者则集成了32.768k的晶振。 这几年因为wifi芯片的大力发展,大家都用wifi时间了,上电就能读取到精确的时间,很大程度上忽略了时钟芯片。还集成了MCU,所以很多DIY都直接用wifi模组,比如ESP8266的各种模组。
ESP32 纵然DS1302一直被骂,但是它确实是大部分人的时钟入门芯片。 以上就是这个问题的回答,如果有任何疑问都可以留言讨论。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/89829.html