找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4690|回复: 3
收起左侧

带闹钟单片机电子时钟制作:DS3231+MAX7219+TM1637+24C32+89c52

  [复制链接]
ID:687791 发表于 2021-2-10 13:19 | 显示全部楼层 |阅读模式
本帖最后由 tzfox 于 2021-2-17 13:33 编辑

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

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


正面

正面

正面



背面

背面

背面



温度、星期

温度、星期显示

温度、星期显示



闹钟设置

闹钟设置

闹钟设置



按键音设置

按键音设置

按键音设置



MAX7219+TM1637

TM1637+MAX7219

TM1637+MAX7219

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


DS3231

DS3231

DS3231

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

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

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

Snap1.jpg
Snap2.jpg
Snap3.jpg

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, 下载次数: 168, 下载积分: 黑币 -5

数码管、进制转换.rar

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

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:69536 发表于 2021-2-25 08:41 | 显示全部楼层
难得,还有人对这个感兴趣,下来看看
回复

使用道具 举报

ID:34298 发表于 2021-9-25 10:54 | 显示全部楼层
有闹钟功能很实用 可以放在床头 上班提醒。
回复

使用道具 举报

ID:479134 发表于 2021-9-27 22:52 | 显示全部楼层
程序很工整啊 很棒
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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