标题: 带闹钟单片机电子时钟制作:DS3231+MAX7219+TM1637+24C32+89c52 [打印本页]

作者: tzfox    时间: 2021-2-10 13:19
标题: 带闹钟单片机电子时钟制作:DS3231+MAX7219+TM1637+24C32+89c52
本帖最后由 tzfox 于 2021-2-17 13:33 编辑

    最近对单片机产生了兴趣,感觉好玩就试做了一个闹钟。
    由于刚接触单片机(入门小白),制作过程中碰到了不少问题,秉着边学习边制做的态度,一边上网查资料(借鉴某些模块的读写程序),一边修改。
经过多次改进,成品相对完善满意。现分享给 51hei论坛的朋友们,忘大家学习交流,指点改进!
功能:
    年月日显示
    时间显示
    温度显示
    闹钟*2(可关闭。模拟器中无法中断闹铃2响铃,实物正常)
    短按功能键:显示温度、星期/亮屏/关闭闹铃声
    长按功能键:熄屏进入节能模式(模拟器无法唤醒掉电模式,实物正常)
    长按设置键:打开/关闭按键音

耗电:
    亮屏:65~75ma
    熄屏:3~4ma


正面



背面



温度、星期



闹钟设置



按键音设置



MAX7219+TM1637


由于买来的模块上的数码管有几个段位是坏的,干脆换个大的!又买了个0.8寸(原0.36寸)的数码管给焊上,TM1637有2个IO口是闲置的,正好飞线出来做时钟闪烁点显示和℃显示


DS3231

这个在这我要吐槽下:
由于想保存下按键音状态,于是想用模块的24C32芯片储存。24C32本身的默认地址为0xa0、0xa1(模拟器存取OK),但模块上就不行了。网上找了一圈都说模块的默认地址为0x57(和芯片的设备地址规则不一样), 试了下还是不行试了各种方法,弄了几天最终还是放弃了最后选择用52单片机自身的EEPROM存放。不过就在昨晚,一时突发灵感,去看了下模块的原理图,我*,**************。原来24C32的A0、A1、A2都接了高电平,那正确地址因该是0xAE、0xAF才对。见证奇迹的时刻到了,编译、刷机~~~OK成了!!困扰几天的问题终于解决了,今晚可以睡个好觉了真不知道网上传的0x57这个地址是哪来的。

单片机源程序如下:(本来想插入的,但是源码框死活到不了最下面)


再分享一个本人自己做的数码管取码,进制转换软件





2021/2/17更新温度显示

  1. //读取温度
  2. void DS3231_ReadTemp(){
  3.                 uchar Temp8;       
  4.                 uint Temp16;
  5.     Temp8=DS3231_Read(DS3231_TEMPERATUREH);        
  6.     if((Temp8&0x80)==0)                //判断首字节为1即为        零下温度
  7.     {   
  8.                                 DS3231_TEMP[0]=0;
  9.                                 DS3231_TEMP[1]=Temp8;
  10.         Temp8=DS3231_Read(DS3231_TEMPERATUREL);    //温度低字节—小数位
  11.         Temp8=(Temp8>>6)*25;  //由于分辨率为0.25        所以扩大25倍便于显示
  12.                                 DS3231_TEMP[2]=Temp8;
  13.     }else{         //零下温度转换—零下是以2的补码形式存储的
  14.                         DS3231_TEMP[0]=1;
  15.       Temp16=Temp8;                 //单字节转换双字节
  16.       Temp16=Temp16<<2;         //移出两位放温度的低位
  17.       Temp8=DS3231_Read(DS3231_TEMPERATUREL);    //读温度低字节
  18.       Temp8=Temp8>>6;                 //由于2位放在头两位上,移到低位
  19.       Temp16=Temp16+Temp8;         //组成10位的2进制的温度编码
  20.       Temp16=(~Temp16)+1;         //负数是以2的补码形式存储的,转为原码
  21.       Temp16=Temp16&0x03ff;//10位的2进制的温度编码,截去无用位
  22.       Temp8=Temp16&0x0003;//分离低两位,作为小数位
  23.       Temp8=Temp8*25;          //由于分辨率为0.25        所以扩大25倍便于显示
  24.       DS3231_TEMP[2]=Temp8;
  25.       Temp16=Temp16>>2;         //整数位处理
  26.       DS3231_TEMP[1]=Temp16;      
  27.     }                       
  28. }
复制代码

电子钟_DS3231.rar

222.23 KB, 下载次数: 189, 下载积分: 黑币 -5

数码管、进制转换.rar

34.54 KB, 下载次数: 106, 下载积分: 黑币 -5


作者: shuma520    时间: 2021-2-25 08:41
难得,还有人对这个感兴趣,下来看看
作者: fancunwu    时间: 2021-9-25 10:54
有闹钟功能很实用 可以放在床头 上班提醒。
作者: 234134519    时间: 2021-9-27 22:52
程序很工整啊 很棒




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1