基于51单片机用DS1302和LCD1602设计可调式电子日历与时钟(Proteus仿真)

2023-11-16

【嵌入式工程师成长日记】

 https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484111&idx=1&sn=ce820ea78cf5ff4f00ebb282abc72143&chksm=cf430797f8348e8124936c1bb1b0755f985bc866325824fb2c55c6bc3632a0fecee3b2b1ac6e&token=1795208773&lang=zh_CN#rdhttps://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484111&idx=1&sn=ce820ea78cf5ff4f00ebb282abc72143&chksm=cf430797f8348e8124936c1bb1b0755f985bc866325824fb2c55c6bc3632a0fecee3b2b1ac6e&token=1795208773&lang=zh_CN#rd

具体功能实现:

开机后可以在LCD1602上显示当前的年、月、日、星期、时、分、秒等信息,按下K1键,可以显示实时时钟;按下K2键,选择对年、月、日、时、分、秒的设置;按下K3键,进行加设置;按下K4键,进行减设置;

使用器件:

仿真原理图:

仿真

知识介绍 :

DS1302实时时钟芯片

DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,并且具有闰年补偿等多种功能。工作电压为2.0V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

DS1302时序图

三个引脚:

CE(使能端)、SCLK(时钟)和I/O(数据)

BCD和十进制间的转换

DS1302_SetTime()和DS1302_ReadTime()作为DS1302库文件中的函数需要对码制进行转换。

转化公式如下:

十进制转化为BCD:

DS1302_Time[0]/10*16+DS1302_Time[0]%10

BCD转化为十进制:

DS1302_Time[0]/16*10+DS1302_Time[0]%16

RTC相关寄存器

要注意写保护!!!

数制大小

unsigned char:0-255

unsigned int:0-65535

char:-128-127

int:-2^31-2^31-1

主函数代码(C语言)KEIL5实现:

#include <REGX52.H>

#include "LCD1602.h"

#include "DS1302.h"

#include "key.h"

#include "timer0.h"

unsigned char keynum,mode,TimeSetSelect,TimeFlashFlag;

void TimeShow(){

DS1302_ReadTime();

 LCD_ShowNum(1,1,DS1302_Time[0],2);

LCD_ShowNum(1,4,DS1302_Time[1],2);

LCD_ShowNum(1,7,DS1302_Time[2],2);

LCD_ShowNum(2,1,DS1302_Time[3],2);

LCD_ShowNum(2,4,DS1302_Time[4],2);

LCD_ShowNum(2,7,DS1302_Time[5],2);

}

void TimeSet(){

if(keynum==2)

{

TimeSetSelect++;

TimeSetSelect%=6;

}

if(keynum==3)

{

DS1302_Time[TimeSetSelect]++;

if(DS1302_Time[0]>99) {DS1302_Time[0]=0;}

if(DS1302_Time[1]>12) {DS1302_Time[1]=1;}

if(DS1302_Time[1]==1 || DS1302_Time[1]==3 || DS1302_Time[1]==5 || DS1302_Time[1]==7||

DS1302_Time[1]==8 || DS1302_Time[1]==10 || DS1302_Time[1]==12)

{

if(DS1302_Time[2]>31) {DS1302_Time[2]=1;}

}else if(DS1302_Time[1]==4 || DS1302_Time[1]==6 || DS1302_Time[1]==9 || DS1302_Time[1]==11)

{

if(DS1302_Time[2]>30) {DS1302_Time[2]=1;}

}else if(DS1302_Time[1]==2)

{

if(DS1302_Time[0]%4==0)

{

if(DS1302_Time[2]>29){DS1302_Time[2]=1;}

}else

{

if(DS1302_Time[2]>28){DS1302_Time[2]=1;}

}

}

if(DS1302_Time[3]>23) {DS1302_Time[3]=0;}

if(DS1302_Time[4]>59) {DS1302_Time[4]=0;}

if(DS1302_Time[5]>59) {DS1302_Time[5]=0;}

}

if(keynum==4)

{

DS1302_Time[TimeSetSelect]--;

if(DS1302_Time[0]<0) {DS1302_Time[0]=99;}

if(DS1302_Time[1]<1) {DS1302_Time[1]=12;}

if(DS1302_Time[1]==1 || DS1302_Time[1]==3 || DS1302_Time[1]==5 || DS1302_Time[1]==7||

DS1302_Time[1]==8 || DS1302_Time[1]==10 || DS1302_Time[1]==12)

{

if(DS1302_Time[2]<1) {DS1302_Time[2]=31;}

}else if(DS1302_Time[1]==4 || DS1302_Time[1]==6 || DS1302_Time[1]==9 || DS1302_Time[1]==11)

{

if(DS1302_Time[2]<1) {DS1302_Time[2]=30;}

}else if(DS1302_Time[1]==2)

{

if(DS1302_Time[0]%4==0)

{

if(DS1302_Time[2]<1){DS1302_Time[2]=29;}

}else

{

if(DS1302_Time[2]<1){DS1302_Time[2]=28;}

}

}

if(DS1302_Time[3]<0) {DS1302_Time[3]=23;}

if(DS1302_Time[4]<0) {DS1302_Time[4]=59;}

if(DS1302_Time[5]<0) {DS1302_Time[5]=59;}

}

if(TimeSetSelect==0 && TimeFlashFlag==1){LCD_ShowString(1,1,"  ");}

else{LCD_ShowNum(1,1,DS1302_Time[0],2);}

if(TimeSetSelect==1 && TimeFlashFlag==1){LCD_ShowString(1,4,"  ");}

else{LCD_ShowNum(1,4,DS1302_Time[1],2);}

if(TimeSetSelect==2 && TimeFlashFlag==1){LCD_ShowString(1,7,"  ");}

else{LCD_ShowNum(1,7,DS1302_Time[2],2);}

if(TimeSetSelect==3 && TimeFlashFlag==1){LCD_ShowString(2,1,"  ");}

else{LCD_ShowNum(2,1,DS1302_Time[3],2);}

if(TimeSetSelect==4 && TimeFlashFlag==1){LCD_ShowString(2,4,"  ");}

else{LCD_ShowNum(2,4,DS1302_Time[4],2);}

if(TimeSetSelect==5 && TimeFlashFlag==1){LCD_ShowString(2,7,"  ");}

else{LCD_ShowNum(2,7,DS1302_Time[5],2);}

LCD_ShowNum(2,10,TimeSetSelect,2);

}

void main(){

LCD_Init();

DS1302_Init();

Timer0Init();

LCD_ShowString(1,1,"  -  - ");

LCD_ShowString(2,1,"  :  : ");

DS1302_SetTime();

while(1){

keynum = key();

if(keynum==1)

{

if(mode==0)

{

mode=1;

}else if(mode){

mode=0;

}

}

switch(mode){

case 0:TimeShow();break;

case 1:TimeSet();break;

}

}

}

unsigned int T0Count;

void Timer0_Routine() interrupt 1

{

TL0 = 0x18;

TH0 = 0xFC;

T0Count++;

if(T0Count>=5000)

{

T0Count=0;

TimeFlashFlag=!TimeFlashFlag;

}

}

问题解答 :

Q:代码超出版本限制如何解决?如图:

A:用注册机对KEIL5软件进行重新破解

Q:延时函数如何快速自动生成?

A:在STC-ISP中根据红色方框进行设计

【嵌入式工程师成长日记】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于51单片机用DS1302和LCD1602设计可调式电子日历与时钟(Proteus仿真) 的相关文章

  • 【ESP32】反复重启

    ESP32开发 反复重启 串口输出如下所示 rst 0xc SW CPU RESET boot 0x13 SPI FAST FLASH BOOT configsip 188777542 SPIWP 0xee clk drv 0x00 q d
  • MN316 OpenCPU丨HTTP使用介绍

    HTTP Hyper Text Transfer Protocol 即超文本传输协议 是一个简单的请求 响应协议 通常运行在 TCP 之上 它指定了客户端可能发送给服务器消息类型以及得到什么类型响应 HTTPS Hyper Text Tra
  • 134-基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真+源程序...

    资料编号 134 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 ds1302时钟 DHT11温湿度 电机 蜂鸣器 制作一个基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真 2 通过DH
  • 140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

    资料编号 140 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 光敏传感器 蜂鸣器 LED灯 制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真 2 通过光敏传感器
  • 138-基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真+源程序

    资料编号 138 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 LED灯 蜂鸣器 电位器 制作一个基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真 2 通过DHT1
  • UART设备

    UART简介 UART Universal Asynchronous Receiver Transmitter 通用异步收发传输器 UART作为异步串口通信协议的一种 工作原理是将传输数据的每个字符一位接一位地传输 是在应用程序开发过程中使
  • linux使用文件描述符0、1和2来处理输入和输出

    文件描述符012 在Linux中 文件描述符0 1和2分别代表标准输入 stdin 标准输出 stdout 和标准错误 stderr 它们用于处理进程的输入和输出 文件描述符0 stdin 文件描述符0是进程的标准输入 通常用于读取用户的输
  • MAX31865硬件和程序攻坚

    MAX31865硬件和程序攻坚 中文数据手册 STM32H库与工程文件创建 模块硬件部分 温度数据准确性 中文数据手册 MAX31865中文手册可以看这个博主挂上的文章 总结 STM32F103C8T6通过MAX31865读取PT100电阻
  • STM32F103概要

    The STM32F103x4 STM32F103x6 STM32F103xC STM32F103xD and STM32F103xE are a drop in replacement for STM32F103x8 B medium d
  • 请问想要在嵌入式行业扎根成长的人何种学历更为合适?

    今日话题 想要在嵌入式行业扎根成长的人何种学历更为合适 嵌入式行业容纳了来自不同学历背景的人 包括专科 本科和研究生 甚至那些来自非相关领域的人 在这个领域 学历并非唯一的关键 分享一份由一位oppo sp offer的学长制作的学习资料包
  • Java18都在路上了,你还在用Java8吗?

    Java18都在路上了 你还在用Java8吗 在开始前我有一些资料 是我根据自己从业十年经验 熬夜搞了几个通宵 精心整理了一份 Java的资料从专业入门到高级教程 工具包 点个关注 全部无偿共享给大家 在评论区回复 888 之后私信回复 8
  • 刚入行的嵌入式新人是否值得坚持嵌入式方向?

    今日话题 刚入行的嵌入式新人是否值得坚持嵌入式方向 如果你正在学习C语言或者嵌入式方向 坚持下去是一个明智的选择 嵌入式行业涉及硬件 技术更新相对较慢 但这为你积累宝贵的经验提供了机会 与纯软件相比 具有独特的优势 我提供了一套全面的嵌入式
  • SH367309芯片

    博主 主要纪录自己常用的几种模式 以及自己觉得需要注意的点 具体的请看数据手册 且大部分都是从数据手册中截取 1 烧写模式 VPRO管脚外接EEPROM烧写电压V PRO 且延时10mS SH367309进入烧写模式 关闭充放电MOSFET
  • 高速风筒方案中的共膜电感--【其利天下技术】

    我们知道 高速吹风筒的电源采用的是日常我们用的市电 市电是高压交流电源 所以高压电路的噪声是比较大的 为了使产品符合安规要求 我们的电路设计必须要符合安规设计 所以这也是高速吹风筒为什么要加安规电容和共模电感的主要原因 那么什么是共膜电感呢
  • 【雕爷学编程】Arduino智慧农业之养殖水质监测与控制

    Arduino是一个开放源码的电子原型平台 它可以让你用简单的硬件和软件来创建各种互动的项目 Arduino的核心是一个微控制器板 它可以通过一系列的引脚来连接各种传感器 执行器 显示器等外部设备 Arduino的编程是基于C C 语言的
  • 【Proteus仿真】【Arduino单片机】视力保护仪

    文章目录 一 功能简介 二 软件设计 三 实验现象 联系作者 一 功能简介 本项目使用Proteus8仿真Arduino单片机控制器 使LCD1602液晶 DS18B20温度传感器 按键 蜂鸣器 继电器开关 HC05蓝牙模块等 主要功能 系
  • 串口流控(CTS/RTS)使用详解

    1 流控概念 在两个设备正常通信时 由于处理速度不同 就存在这样一个问题 有的快 有的慢 在某些情况下 就可能导致丢失数据的情况 如台式机与单片机之间的通讯 接收端数据缓冲区已满 则此时继续发送来的数据就会丢失 流控制能解决这个问题 当接收
  • 太阳诱电 | 电容器为什么会发热?什么是纹波电流

    电容器中存在寄生于电极和电介质的电阻成分 当纹波电流等交流电流通过电容器时 电阻的成分会产生热量 为了抑制发热 选择ESR较低的电容器非常重要 陶瓷电容器在电容器中ESR较低 非常适合抑制发热 电容器中的纹波电流主要是指电源电路中由于IC的
  • 太阳诱电 | 陶瓷电容器的静电容量相关

    陶瓷电容器的静电容量会因温度而变化吗 电容器的静电容量的温度特性是什么 陶瓷电容器的静电容量随周围的温度而变化 静电容量因温度而变化的现象 称为静电容量的温度特性 这是由于陶瓷电容器使用的材料造成的 也是所有陶瓷电容的常有现象 以下是本公司
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作

随机推荐

  • linux的PAM认证和shadow文件中密码的加密方式

    它是一种统一的认证方案 PAM 让您能随时改变您的认证方法以及需求 并且不需要重新编译任何代码就封装了所有本地认证方法 具体见 PAM 网站 对于 PAM 您只需要做 对您的密码采用不同于 DES 的加密方式 让它们面对暴力解码 brute
  • “自顶向下,逐步求精“的方法简介

    自顶向下 逐步求精 的方法思路代表了生活中大多数事情的处理方法 它的奥妙之处在于将繁杂棘手的事务进行分解 逐部列条 化为最简易单调的子任务然后进行求解 如图即是一个很典型的逐步分解的问题模型 对于一件既定的事务 先进行总体性的了解即定出整个
  • halcon 中 select_shape 算子 相关特征参数

    求Region指定特征值 region features Regions Features Value 根据特征值选择区域 select shape Regions SelectedRegions Features Operation Mi
  • 安卓初学——界面按钮响应

    安卓学习 采用onClickListener监听器 界面按钮响应 一 定义监听 绑定组件 二 通过匿名内部类 把组件和事件绑定 三 采用view 对象调用onClick 四 在当前Activity实现监听接口 一 定义监听 绑定组件 自定义
  • VMware安装后打开就蓝屏

    VMware虚拟机开机蓝屏 追风 80 人赞同了该文章 目录 收起 一 查看主板上的虚拟化技术支持是否开启 二 开启虚拟机平台 如果在新建的虚拟机安装好后一点开机出现蓝屏 反复重装并且确定了新建虚拟机没有出错的情况下考虑是否是虚拟化没有开启
  • MobaXterm的下载安装

    下载地址 MobaXterm Xserver with SSH telnet RDP VNC and X11 Home Edition 进入页面后 点击绿色的方框下载 下载后得到一个压缩包 解压后可以看到有两个文件 点击 msi进行安装 选
  • Json Object转Model, Model、DataTable转Json Object (Jayrock技巧)

    本文假定读者有一定的Ext 控件的使用经验 看过Ext EditGridPanel实现效果的朋友会很惊讶 一个Grid就能实现所有增删改查功能 在展示给客户看时 让你的表现得很风骚 而他们又怎么知道 我们在调试js时 是多么痛苦 如何在js
  • PyTorch基础练习-task5(PyTorch实现L1,L2正则化以及Dropout)

    PyTorch基础练习 task5 一 Dropout原理 二 用代码实现正则化 L1和L2 2 1 L1实现 2 2 L2实现 三 PyTorch中实现dropout 一 Dropout原理 在前向传播的时候 让某个神经元的激活值以一定的
  • android edittext 输入完成监听,EditText输入监听

    EditText输入监听 原创 6710766562015 05 13 13 34 38著作权 文章分类 android开发 阅读数 548 著作权归作者所有 来自51CTO博客作者671076656的原创作品 如需转载 请注明出处 否则将
  • 关于idea 生成war 包放入tomcat的路径访问问题

    目录 1 打包成war 2 关于war 和war exploded 3 在idea中使用tomcat启动 4 把war包放在指定的tomcat下启动 1 打包成war 点击右上角project structure或者左上角File proj
  • leetcode刷题(不邻接植花、电话号码的字母组合、统计共同度过的日子数、节点与其祖先之间的最大差值、分隔数组以得到最大和、二进制求和、x的平方根、最小偶倍数)

    目录 1 不邻接植花 2 电话号码的字母组合 3 统计共同度过的日子数 4 节点与其祖先之间的最大差值 5 分隔数组以得到最大和 6 二进制求和 7 x的平方根 8 最小偶倍数 1 不邻接植花 2 电话号码的字母组合 class Solut
  • LeetCode——二叉树

    二叉树 二叉树概念和性质 104 二叉树的的最大深度 递归 98 验证二叉搜索树 中序遍历 101 对称二叉树 代码比较精巧 不好理解 102 二叉树的层序遍历 中等 参考题解 自己码的代码 108 将有序数组转换为二叉搜索树 递归 剑指
  • 如何写好Java程序呢

    如何写出更好的Java代码 05 22 2014 Java是最流行的编程语言之一 但似乎并没有人喜欢使用它 好吧 实际上Java是一门还不错的编程语言 由于最近Java 8发布了 我决定来编辑一个如何能更好地使用Java的列表 这里面包括一
  • windows基本命令 --快速打开文件夹

    通过 cmd 命令行进入指定目录后如果想查看该目录下的文件需要输入 dir 命令 很不方便 我们可以在 cmd 下打开文件夹图形界面 explorer path 例子 1 打开当前目录 explorer 2 打开上级目录 explorer
  • RocketMQ占用内存过大的解决方法

    目录 一 问题描述 二 解决方法 1 runserver sh 修改 2 runbroker sh 修改 一 问题描述 RocketMQ 启动后 一下子把内存撑爆了 二 解决方法 修改启动参数 分别对 bin 目录下的 runserver
  • jenkins拉取项目提示 ‘parent.relativePath‘ points at wrong local POM

    环境说明 为一台无法连接外网的linux服务器 问题描述 安装了jenkins拉取项目 提示ERROR Failed to parse POMs org apache maven project ProjectBuildingExcepti
  • 【C++】卡常技巧

    1 若乘上一个2的倍数的数值 可改用左移运算符 例1 x x 2 或 x 2 改成 x x lt lt 1 或 x lt lt 1 log22 1 例2 x x 32 或 x 32 改成 x x lt lt 5 或 x lt lt 5 lo
  • 3DMAX渲染完卡住不动该怎么办?

    有很多种原因都可能会导致3DMAX卡死 需要一个一个排查 1 3DMAX和系统语言不兼容 可以把电脑语音设置兼容点上 2 3dmax内存分配不足 把动态内存限制设置到1W以上或是直接设置为0 无限制 3 软件运行错误 可以尝试重置下vray
  • 通信中间件 Fast DDS 基础概念简述与通信示例

    从事汽车软件开发 通信中间件绕不开 当前最火热的无非有 2 种 Some IP 和 DDS DDS 是一种分布式通信标准 有很多商业和开源的实现 Fast DDS 是其中的一种 它在 ROS2 中被应用 而 Apollo 中的 CyberR
  • 基于51单片机用DS1302和LCD1602设计可调式电子日历与时钟(Proteus仿真)

    嵌入式工程师成长日记 https mp weixin qq com s biz Mzg4Mzc3NDUxOQ mid 2247484111 idx 1 sn ce820ea78cf5ff4f00ebb282abc72143 chksm cf