使用51单片机和DS1302时钟芯片做一个简易的电子时钟

原创 嵌入式悦翔园 2023-02-23 11:40

关注星标公众号,第一时间获取信息

一、前言

今天给大家推荐一个51单片机小实验,带你使用51单片机做一款简易的电子时钟,其中计时模块采用DS1302硬件模块,显示采用LCD显示屏,具体怎么实现开来一起看看吧!

二、DS1302模块介绍

DS1302 是 DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟和31字节静态 RAM,通过简单的串行接口与单片机进行通信。实时时钟、日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年自动补偿等多种功能。时钟操作可通过 AM/PM 指示,DS1302 与单片机之间能简单地采用同步串行的方式进行通信,简易三线SPI通信模式:

  • RES 复位
  • I/O 数据线
  • SCLK 串行时钟

SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如MSP430单片机系列处理器。

DS1302时钟芯片的工作原理如下:

  • DS1302芯片内部有一组定时器和寄存器,通过这些寄存器可以实现时钟的读写操作。
  • DS1302通过三根引脚与外部设备连接,分别是RST、DAT和CLK。RST引脚用于复位
  • DS1302,DAT引脚用于数据传输,CLK引脚用于时钟信号。
  • DS1302芯片使用BCD码表示时间信息,即用4位二进制数表示一个十进制数。例如,分的BCD码为00H到59H。

三、驱动DS1302的代码

以下是使用51单片机驱动DS1302时钟芯片的代码,具体实现步骤如下:

3.1 初始化DS1302时钟芯片

void DS1302Init() {
    // 初始化DS1302时钟芯片
    DS1302WriteByte(0x8E0x00);
    // 关闭写保护
    DS1302WriteByte(0x900x00);
}

3.2 读取DS1302时钟芯片的时间

void DS1302ReadTime(unsigned char *p) {
    // 读取DS1302时钟芯片的时间
    unsigned char i;
    DS1302WriteByte(0xBF0x00);
    for (i = 0; i < 7; i++) {
        p[i] = DS1302ReadByte();
    }
}

3.3 设置DS1302时钟芯片的时间

void DS1302WriteTime(unsigned char *p) {
    // 设置DS1302时钟芯片的时间
    unsigned char i;
    DS1302WriteByte(0xBE0x00);
    for (i = 0; i < 7; i++) {
        DS1302WriteByte(p[i], 0x00);
    }
}

3.4 读取DS1302时钟芯片的RAM

// 从DS1302读取一个字节的数据
void DS1302ReadByte(uchar *dat) {
    uchar i;

    for (i = 0; i < 8; i++) {
        SCLK = 0;
        _nop_();
        *dat |= IO << i;
        SCLK = 1;
        _nop_();
    }
}

四、读取DS1302时钟芯片的RAM

DS1302时钟芯片有31个字节的RAM空间,可以用来存储一些数据。在实际应用中,我们可能需要读取这些存储的数据。读取DS1302的RAM和读取寄存器类似,也需要先向DS1302发送读取RAM的命令,然后再读取RAM的内容。

读取DS1302的RAM需要使用到DS1302的另一个引脚——CE(片选使能)引脚,该引脚在读写DS1302的RAM时需要保持为低电平。读取RAM的过程如下:

4.1 发送读取RAM的命令

向DS1302写入读取RAM的命令:0x61。DS1302会自动切换到RAM读取模式,准备将RAM中的数据传输给单片机。

DS1302Write(0x61); // 发送读取RAM命令

4.2 读取RAM的内容

发送读取RAM命令后,就可以读取RAM中的数据了。读取RAM的数据需要先读取DS1302的数据引脚(IO引脚)上的高电平脉冲,然后再读取8个位的数据。具体的读取过程可以使用DS1302ReadByte函数实现,该函数会读取一个字节的数据。

for (i = 0; i < 31; i++) {
    DS1302ReadByte(&byte); // 读取一个字节的数据
    ram[i] = byte; // 存储到数组中
}

读取完RAM后,我们可以将其存储到一个数组中,方便后续的使用。

4.3 读取部分单独代码实现(注重逻辑)

#include 
#include 

#define uchar unsigned char
#define uint unsigned int

sbit SCLK = P2^0;
sbit IO = P2^1;
sbit CE = P2^2;

uchar ds1302_read_ram(uchar address)
{
    uchar i, dat;
    
    CE = 0;
    _nop_();
    SCLK = 0;
    _nop_();
    CE = 1;
    _nop_();
    
    IO = 0// 写指令
    SCLK = 0;
    _nop_();
    SCLK = 1;
    _nop_();
    IO = address | 0xc0// 选择地址并读取 RAM
    for (i = 0; i < 8; i++) {
        SCLK = 0;
        _nop_();
        SCLK = 1;
        _nop_();
    }
    IO = 0// 接收数据
    for (i = 0; i < 8; i++) {
        dat >>= 1;
        if (IO) dat |= 0x80;
        SCLK = 0;
        _nop_();
        SCLK = 1;
        _nop_();
    }
    CE = 0;
    
    return dat;
}

在上述代码中,ds1302_read_ram 函数接收一个参数 address,用于指定要读取的 RAM 地址,返回一个字节表示该地址处的 RAM 数据。

该函数的具体实现过程如下:

  • 置 CE 为低电平,并延迟一段时间。
  • 置 SCLK 为低电平,并延迟一段时间。
  • 置 CE 为高电平,并延迟一段时间。
  • 置 IO 为低电平,表示写指令。
  • 置 SCLK 为低电平,并延迟一段时间。
  • 置 SCLK 为高电平,并延迟一段时间。
  • 置 IO 为 address | 0xc0,即选择地址并读取 RAM。
  • 依次进行 8 次时钟上升沿,在每个上升沿时读取数据位。
  • 置 CE 为低电平。
  • 返回读取到的数据。

需要注意的是,读取 RAM 数据时需要将地址的最高位(即 bit7)置为 1,以表示要读取 RAM。另外,在读取数据位时需要依次进行 8 次时钟上升沿,且每次读取时需要先右移数据,再将新数据左移并或上读到的数据位。

五、整体代码实现

下面是使用51单片机和DS1302时钟芯片实现的简易电子时钟的代码实现。代码中包含了DS1302的初始化、时钟读取、RAM读写等基本功能。

#include 
#include "LCD1602.h"
#include "DS1302.h"

#define uchar unsigned char
#define uint unsigned int

sbit beep=P3^6;     //定义蜂鸣器接口

void main()
{
    uchar year, month, day, hour, minute, second;  //年月日时分秒
    uchar str_data[11], str_time[11];              //用于存放LCD上显示的日期和时间

    LCD_Init();  //初始化LCD显示屏
    DS1302_Init();  //初始化DS1302时钟芯片

    //将时间初始化为2023年2月21日0时0分0秒
    DS1302_Write(0x8e,0);   //关闭写保护
    DS1302_Write(0x80,0x23);   //年份
    DS1302_Write(0x82,0x02);   //月份
    DS1302_Write(0x84,0x21);   //日期
    DS1302_Write(0x86,0x00);   //时钟
    DS1302_Write(0x88,0x00);   //分钟
    DS1302_Write(0x8a,0x00);   //秒钟
    DS1302_Write(0x8e,0x80);   //开启写保护

    while(1)
    {
        //读取DS1302时钟芯片中的年月日时分秒
        year = DS1302_Read(0x80);
        month = DS1302_Read(0x82);
        day = DS1302_Read(0x84);
        hour = DS1302_Read(0x86);
        minute = DS1302_Read(0x88);
        second = DS1302_Read(0x8a);

        //将年月日时分秒转换成字符串
        sprintf(str_data, "Data: 20%02x-%02x-%02x", year, month, day);
        sprintf(str_time, "Time: %02x:%02x:%02x", hour, minute, second);

        //在LCD上显示日期和时间
        LCD_Write_String(0,0,str_data);
        LCD_Write_String(0,1,str_time);

        Delay_Ms(1000);  //延时1秒
    }
}

六、显示效果

推荐阅读



01

加入嵌入式交流群


02

嵌入式资源获取


03

STM32中断优先级详解


04

STM32下载程序新思路--使用串口下载程序


嵌入式悦翔园 专注于嵌入式技术,包括但不限于STM32、Arduino、51单片机、物联网、Linux等编程学习笔记,同时包含大量的学习资源。欢迎关注,一同交流学习,共同进步!
评论
  • 案例1 2008款保时捷卡宴车行驶中发动机偶发熄火故障现象 一辆2008款保时捷卡宴车,搭载4.8 L 自然吸气发动机,累计行驶里程约为21万km。车主反映,该车行驶中发动机偶发熄火;重新起动,发动机能够起动着机,只是起动时间延长,且组合仪表上的发动机故障灯异常点亮。 故障诊断接车后试车,发动机起动及怠速运转正常。用故障检测仪检测,发动机控制单元(DME)中存储有故障代码“P0335 曲轴位置传感器A电路”,由此怀疑曲轴位置传感器信号偶尔异常,导致发动机熄火。用虹科Pico汽车示波器测
    虹科Pico汽车示波器 2025-03-05 11:00 62浏览
  • 文/Leon编辑/侯煜‍2008至2021年间,创维以高举高打的凌厉之势,果断进行投资,一度成为中国市场大屏OLED产业的旗手,引领着显示技术的发展方向。但近年来,创维在 OLED 领域的发展轨迹却逐渐模糊,态度陷入暧昧不明的混沌状态。究其根源,一方面,创维对过往的押注难以割舍,在技术革新与市场变化的浪潮中,不愿轻易推翻曾经的战略布局;另一方面,早期在大屏OLED 技术研发、市场推广等环节投入的巨额资金,已然形成沉没成本,极大地限制了创维在显示技术路线上的重新抉择。但市场瞬息万变,为适应激烈的行
    华尔街科技眼 2025-03-05 20:03 147浏览
  • 产品质量合格率偏低会引起质量成本(也称“劣质成本”)的大幅增加。质量成本通常分为内部损失成本和外部损失成本两部分。内部损失成本是指产品交付前因质量不合格造成的损失,包括返工、报废等;外部损失成本是指产品交付后因质量问题导致的损失,如退货、召回等。此外,质量问题还会影响生产效率,带来额外人工和停工损失。下面分别介绍各类损失的具体计算方法和公式。直接成本损失(内部故障成本)直接成本是由于产品在出厂前质量不合格所造成的看得见的损失。常见的直接损失包括返工、报废以及由此产生的额外原材料消耗等。返工成本:
    优思学院 2025-03-05 15:25 77浏览
  • 随着自动驾驶技术的迅猛发展,构建高保真、动态的仿真场景成为了行业的迫切需求。传统的三维重建方法在处理复杂场景时常常面临效率和精度的挑战。在此背景下,3D高斯点阵渲染(3DGS)技术应运而生,成为自动驾驶仿真场景重建的关键突破。一、3DGS技术概述与原理1、3DGS的技术概述3DGS是一种基于3D高斯分布的三维场景表示方法。通过将场景中的对象转化为多个3D高斯点,每个点包含位置、协方差矩阵和不透明度等信息,3DGS能够精确地表达复杂场景的几何形状和光照特性。与传统的神经辐射场(NeRF)方法相比,
    康谋 2025-03-06 13:17 120浏览
  • 在六西格玛项目中,团队的选择往往决定了最终的成败。合适的团队成员不仅能推动项目顺利进行,更能确保最终成果符合预期。因此,组建六西格玛团队时,必须挑选最合适的人才,确保他们具备必要的能力和特质。团队主管的关键特质每个精益六西格玛项目都需要一位主管来带领团队。他们不仅需要具备领导力,还要能够分析数据、制定策略,并与管理层和团队成员高效沟通。团队主管的核心职责包括:领导团队行动:能够激励成员,确保团队朝着既定目标前进。数据分析能力:精通数据处理和分析,能基于数据做出决策。沟通协调:能够在管理层和团队之
    优思学院 2025-03-06 12:51 98浏览
  • 配电自动化终端DTU(数据终端单元)在智能电网的建设中扮演着至关重要的角色,它通过信息采集与控制,实现配电线路的遥测、故障检测及远程操作,极大提升了供电可靠性和效率。在国网新规的推动下,采用多核异构处理器设计的DTU方案日益成为主流,其中实时核与控制核的协同工作,为配电系统的实时监控与高效管理提供了有力保障。在此背景下,飞凌嵌入式基于FET536-C核心板的RISC-V核DTU解决方案应运而生,凭借卓越的性能和灵活的多核架构,引领配电自动化进入全新时代。1. T536核心板的优势飞凌嵌入式FET
    飞凌嵌入式 2025-03-05 10:42 78浏览
  • 文/Leon编辑/cc孙聪颖2025年全国两会进行时,作为“十四五”规划收官之年,本届两会释放出坚定目标、稳中求进、以进促稳等信号。其中,企业家们的建议备受关注,关系到民营经济在2025年的走向。作为国内科技制造业的“老兵”,全国人大代表、TCL集团创始人及董事长李东生在本届两会中提出三份代表建议,包括《关于优化中国科技制造业融资环境的建议》、《关于加强AI深度伪造欺诈管理的建议》和《关于降低灵活就业人员社会保险参保门槛的建议》,表现出对科技制造、AI发展和劳动者保障方面的关注。会后,李东生接受
    华尔街科技眼 2025-03-06 19:41 44浏览
  • 服务器应用环境与客户需求PCIe 5.0高速接口技术的成熟驱动着生成式AI与高效能运算等相关应用蓬勃发展。在随着企业对服务器性能的要求日益严苛,服务器更新换代的周期也持续加快。在此背景下,白牌与DIY(Do It Yourself)服务器市场迎来了新的发展契机,但同时也面临着更趋复杂的技术挑战。传统上,白牌与DIY服务器以其高度客制化与成本效益优势受到市场青睐。然而,随着PCIe 5.0等高速技术的导入,服务器系统的复杂度大幅提升,对组装技术与组件兼容性也就提出更高的要求。举个简单的例子来说,P
    百佳泰测试实验室 2025-03-06 17:00 44浏览
  • ASL6328芯片支持高达 6.0 Gbps 运行速率的交流和直流耦合输入T-MDS 信号,具备可编程均衡和抖动清理功能。ASL6328 是一款单端口 HDMI/DVI 电平转换 / 中继器,具有重新定时功能。它包含 TypeC双模式 DP 线缆适配器寄存器,可用于识别线缆适配器的性能。抖动清理 PLL(锁相环)能够消除输入抖动,并完全重置系统抖动容限,因此能更好地满足更高数据速率下 HDMI 抖动合规性要求。设备的运行和配置可通过引脚设置或 I2C 总线实现。自动断电和静噪功能提供了灵活的电
    QQ1540182856 2025-03-06 14:26 86浏览
  • 在当今竞争激烈的市场环境中,企业不仅需要优化成本,还需积极响应国家的能源政策,减少对环境的影响。提升工业能源效率正是实现这一双重目标的关键。中国近年来大力推进“双碳”目标(碳达峰、碳中和),并出台了一系列政策鼓励企业节能减排。通过宏集CODRA的Panorama解决方案,企业可以获得专为这一目标设计的SCADA工具,实时监控和调整所有工业设备的能耗。特别是其中的能源管理模块,能够有效分析数据,预防故障,避免能源浪费。Panorama的优化技术宏集CODRA提供的解决方案,尤其是Panorama
    宏集科技 2025-03-06 11:25 115浏览
  • 多人同时共享相同无线网络,以下场景是否是您熟悉的日常?姐姐:「妈~我在房间在线上课,影音一直断断续续的怎么上课啊!」奶奶:「媳妇啊~我在在线追剧,影片一直卡卡的,实在让人生气!」除此之外,同时间有老公在跟客户开在线会议,还有弟弟在玩在线游戏,而妈妈自己其实也在客厅追剧,同时间加总起来,共有五个人同时使用这个网络!我们不论是在家里、咖啡厅、餐厅、商场或是公司,都会面临到周遭充斥着非常多的无线路由器(AP),若同时间每位使用者透过手机、平板或是笔电连接到相同的一个网络,可想而知网络上的壅塞及相互干扰
    百佳泰测试实验室 2025-03-06 16:50 38浏览
  • 概述随着工业4.0的深入推进,制造业对自动化和智能化的需求日益增长。传统生产线面临空间不足、效率低下、灵活性差等问题,尤其在现有工厂改造项目中,如何在有限空间内实现高效自动化成为一大挑战。此次项目的客户需要在现有工厂基础上进行改造,空间有限。为此,客户选择了SCARA型线性轴机器人作为执行设备。然而,SCARA机器人的高效运行离不开强大的控制系统支持。宏集凭借其先进的智能控制系统,为客户提供了高效、灵活的自动化解决方案,确保SCARA机器人在有限空间内发挥最大效能。一、客户需求在此次改造项目中,
    宏集科技 2025-03-06 11:27 120浏览
  • 1. 背景在汽车电子系统测试中,CANoe作为主流的仿真测试工具,常需与云端服务器、第三方软件或物联网设备进行交互。随着CANoe与外部软件、服务器或设备交互越来越多,直接使用Socket进行通信往往不能满足使用需求,依托于CANoe 的连接功能集(Connectivity Feature Set),以及Distributed Object(DO)功能,可以仿真HTTP节点,实现设备与服务器等之间的通信,保证数据处理的可靠性和便捷性。本文详细解析如何利用CANoe搭建HTTP测试环境,并提供典型
    北汇信息 2025-03-05 11:56 86浏览
  • 引言嘿,各位电动汽车的爱好者们!咱们今儿个就来聊聊电动汽车里那些“看不见,摸不着”,但又至关重要的零部件。要说电动汽车这玩意儿,那可真是科技含量满满,各种高精尖的技术都往里堆。但要让这些高科技玩意儿协同工作,稳定可靠地运转,那就得靠一些幕后英雄,比如说——电容器。你可能会想,电容器?这不就是电子电路里常见的元件嘛,能有多重要? 哎,你可别小瞧了这小小的电容器。在电动汽车的心脏地带——高压直流转换器(DC-DC转换器)里,车规级的电容器那可是扮演着举足轻重的角色。 今天,咱们就聚焦分析三星电机车规
    贞光科技 2025-03-05 17:02 90浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦