点阵大屏语音感应时计——DS3231高精度时钟模块

  DS3231高精度时钟模块倒是又便宜又好用,SDA/SCL两个IO口就能搞定基本功能,不过在使用闹铃中断输出的时候遇到了问题,那就是闹铃中断只会输出一次,之后始终保持低电平。

  这个问题数据手册上没有明说,在网上搜索了很久,一点信息都没有找到,只好自己折腾。

  经过反复尝试,最终确认DS3231的闹铃中断输出正确使用方式如下:

  • 首先是初始化,设定闹铃时间和允许中断输出

void DS3231_Init_Alarm2()    {    
    I2C_Start();    
    I2C_PutByte(DS3231_Write);    
       I2C_PutByte(DS3231_CONTROL);    
    I2C_PutByte(0x0);  // INTCN=1,A2IE=1,enable interrupts, alarm 2 output    
    I2C_PutByte(0x0);    
    I2C_Stop();

I2C_Start();    
    I2C_PutByte(DS3231_Write);    
       I2C_PutByte(DS3231_ALARM2MINUTE);    
    I2C_PutByte(0x0);        // 分,A2M2=0    
    I2C_PutByte(0x80);        // 时,A2M3=1    
    I2C_PutByte(0x80);        // A2M4=1,DY=0    
    I2C_Stop();

I2C_Start();    
    I2C_PutByte(DS3231_Write);    
       I2C_PutByte(DS3231_CONTROL);    
    I2C_PutByte(0x06);  // INTCN=1,A2IE=1,enable interrupts, alarm 2 output    
    I2C_PutByte(0x0);    
    I2C_Stop();    
}

  我这里使用的是闹铃2,每小时整点时输出中断

  • 在触发中断后,要关闭相应的闹铃中断输出(A2IE=0)

void Perhour_ExtInt1() interrupt 2 using 1 {    
    EX1 = 0;    
    DS3231_Disable_Alarm2();

……    
}

void DS3231_Disable_Alarm2()   
{    
    I2C_Start();    
    I2C_PutByte(DS3231_Write);    
       I2C_PutByte(DS3231_CONTROL);    
    I2C_PutByte(0x4);  // INTCN=1,A2IE=0,    
    I2C_PutByte(0x0);    
    I2C_Stop();    
}

  • 在合适的时候,重新初始化闹铃

  这里合适的时候很重要,如果立即重新初始化,中断条件仍满足,继续触发中断,将导致下一次闹铃失效。也就是说至少要在1秒之后,我是在单片机进入掉电模式前重新初始化。

时间: 2024-10-12 14:45:46

点阵大屏语音感应时计——DS3231高精度时钟模块的相关文章

点阵大屏语音感应时计——MAX7219点阵

MAX7219点阵模块可以用三根数据线实现8*8的LED点阵控制,而且不需要单片机参与扫描,使用非常方便.更为重要的是,它支持模块级联使用,在不增加IO数量的条件下,实现多模块的控制.因此在大屏时计中采用了3个MAX7219点阵模块组合成8*24的点阵屏. 点阵的使用遇到一点小麻烦,是关于级联使用的,网络上查询到的代码每一块点阵的写入需要采用单独的函数,如: //向第二片MAX7219写数据    void MAX7219_Write_1(uchar add2,uchar dat2) {    

第一件实用作品,点阵大屏语音感应时计——作品展示

单片机玩了几年,各种模块也买了不少,不过都没有做出什么像样的咚咚.反思之下,决定从简单实用的入手,做一款时计,方便掌握时间. 主要特点: 使用3片MAX7219点阵模块,组成8*24点阵屏,动态显示日期或时间: 人体感应,有人的时候才点亮点阵屏,超时后系统进入掉点模式,减少电源消耗,从而使电池供电成为可能: 使用语音播报模块SC5B10,实现整点报时: 不设置按键,通过串口控制,将来可以根据需要安装蓝牙或其他无线:(所需的操作主要是对时,不过走时很准,第一次设置之后不需要人工干预) 电池供电和无

点阵大屏语音感应时计——人体感应

点阵屏还是比较耗电的,和显示的内容有关,在最小亮度的条件下,实测平均约130mA.为了节电,延长电池供电下的使用时间,引入了人体感应开关模块,在没有检测到人员活动的情况下关闭屏幕显示,单片机进入掉电模式.理论上是比较简单的,但是在实施的过程中遇到了不少的问题,记录下来与大家共享. 问题1.供电电压 为了便于使用锂电池,系统使用3.3V电压,但是网购的人体感应开关模块是5V供电的.好在仔细看了模块资料,模块上的电路都是3.3V的,板上带了AMS1117稳压芯片将外接5V转换为3.3V使用,这样就容

DS3231高精度时钟模块,IIC,C51 8051单片机I2C 测试程序 【开源】

实物图 原理图 效果图 程序烧录: /*****************************************************************************  *文件名称:main.c *版    本:Keil uVision4 *控 制 器:STC89C52RC/12M 功能:显示时间到串口 *说    明: 1,DS3231实时时钟模块测试程序  2,1T的单片机用不了 3,晶振12M 4,串口波特率2400 编译结果: Rebuild target 'D

基于STM8的IIC协议--实例篇--时钟模块(DS3231)读取

1. 综述 由上篇博客可知道IIC协议如何用代码实现,本篇博客就不涉及协议内容,只讲解如何使用. 本次的实验传感为:DS3231(时钟模块),对于时钟模块的具体信息我也就不多介绍大家可以自行度娘,具体功能无非就是在单片机中起到一个获取时间的作用.然后该模块是可以由IIC协议去驱动的,再加上所要的操作也是比较简单,适合部分刚接触IIC协议而找不但传感练手的一个模块. 2. 明确任务顺序 个人习惯,在每驱动一个新传感的时候,我会将我要完成的传感分为几个任务点.接下来我就展示以下我在写DS3231模块

高端硬件+大屏运营,乐视超级电视如何成为终端流量入口?

近期,中国电子视像行业协会与奥维云网(AVC)联合发布2017年一季度中国彩电市场总结报告,报告显示,2017年彩电需求已从数量增长阶段进入质量提升阶段,市场呈现尺寸升级.功能升级.高端需求三大趋势,其中,智能化大尺寸超轻薄电视更受消费者追捧. 据奥维云网(AVC)数据显示,一季度中小尺寸(50英寸以下)产品的市场占有率较去年同期下降了8.7个百分点:大尺寸(55英寸以上)产品的市场占有率高达36.4%,较去年同期上升了9.7个百分点,其中55寸上升了6.8个百分点,且2017年第一季度智能电视

S6 edge+的多米诺骨牌效应:大屏的趋势

日前,为庆祝三星S6 edge+国行版的顺利发售,三星盖乐世社区的一些粉丝自发组织了三星疯狂"盖星人"第一期活动--活动现场除了可以对S6 edge+进行全方面体验之外,还将演示著名的多米诺骨牌游戏.作为一个对手机产品有着持续关注和体验热情的"用户"来说,这样的活动自然不能错过,于是在通过三星盖乐世社区的规则报名之后,笔者顺利通过审核,之后终于迎来了到现场体验的日期. 这次的疯狂"盖星人"线下活动主要有两个内容环节,分别是三星S6 edge+的产

电视市场将以大屏曲面点燃金秋

智能时代正在不断的改变着人们的消费习惯和生活方式,智能手机的普及让更多人的目光转向那几英寸的屏幕,而随着电视智能化的渗透,以视频为主的更多内容把人们从小小的屏幕中剥离,从而对内容的体验有了更多的要求.互联网行业的硬件免费曾一度重创传统的电视行业,而智能时代内容价值的不断改变,给濒死的传统电视行业带来了新曙光. 以乐视为首的互联网电视品牌以眨眼的速度满足了消费者对于大屏互联网体验的需求,虽然快速的蚕食了一定的市场份额,但对于整个电视市场而言,乐视缺乏了传统电视厂商的技术与渠道积淀.笔者曾在前文中分

大屏设计系列之五——大屏设计语言分析

如果您想订阅本博客内容,每天自动发到您的邮箱中,请点这里 作者:蓝蓝 蓝蓝设计经常会接到大屏设计的项目,比如中国移动互联网监控大屏可视化设计及开发.太极集团承接的中央台应急指挥中心大屏可视化设计.交大思源承接的北京地铁轨道批挥中心大屏可视化设计.数码视讯展厅大屏可视化设计,在积累了一定经验的同时,也在不断的学习和丰富关于大屏设计的特点及数据可视化的表达方式. 数据可视化过滤了非常多的冗余信息,浓缩了最重要的信息,它的魅力就在于将枯燥的数据组织在一起,把最需要的那些编辑成一个故事.目前大数据那么流