proteus设计教程-DS1302时钟芯片驱动程序

2023-11-17

 时钟芯片DS1302电路图如下,晶振X1的频率为32.768khz

 读写时间只需要调用void read_time(),void write_time()两个函数进行操作。

直接读取出来的数据是BCD码的形式,需要进行转换,最后提供的两个函数to_BCD和datadeal进行操作

sbit clk = P3^6;	  //ds1302时钟线定义
sbit io =  P3^4;	  //数据线
sbit rst = P3^5;	  //复位线
						//秒  分   时   日   月  年   星期 	
uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};   //写地址
uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};   //读地址
uchar miao,fen,shi,ri,yue,week,nian;
uchar i;

/*************写一个数据到对应的地址里***************/
void write_ds1302(uchar add,uchar dat)
{		
	rst = 1;			 //把复位线拿高
	for(i=0;i<8;i++)
	{				     //低位在前
		clk = 0;		 //时钟线拿低开始写数据
		io = add & 0x01;    	
		add >>= 1;		 //把地址右移一位
		clk = 1;		 //时钟线拿高
	}	
	for(i=0;i<8;i++)
	{
		clk = 0;		 //时钟线拿低开始写数据
		io = dat & 0x01;
		dat >>= 1;		 //把数据右移一位
		clk = 1;		 //时钟线拿高
	}
	rst = 0;			 //复位线合低
	clk = 0;
	io = 0;
}

/*************从对应的地址读一个数据出来***************/
uchar read_ds1302(uchar add)
{
	uchar value,i;
	rst = 1;			 //把复位线拿高
	for(i=0;i<8;i++)
	{				     //低位在前
		clk = 0;		 //时钟线拿低开始写数据
		io = add & 0x01;    	
		add >>= 1;		 //把地址右移一位
		clk = 1;		 //时钟线拿高
	}		
	for(i=0;i<8;i++)
	{
		clk = 0;		 //时钟线拿低开始读数据
		value >>= 1;
		if(io == 1)
			value |= 0x80;
		clk = 1;		 //时钟线拿高
	}
	rst = 0;			 //复位线合低
	clk = 0;
	io = 0;
	return value;		 //返回读出来的数据
}



/*************把要的时间 年月日 都读出来***************/
void read_time()
{
	miao = read_ds1302(read_add[0]);	//读秒
	fen  = read_ds1302(read_add[1]);	//读分
	shi  = read_ds1302(read_add[2]);	//读时
	ri   = read_ds1302(read_add[3]);	//读日
	yue  = read_ds1302(read_add[4]);	//读月
	nian = read_ds1302(read_add[5]);	//读年
	week = read_ds1302(read_add[6]);	//读星期
}
void read_time_fs()
{
	miao = read_ds1302(read_add[0]);	//读秒
	fen  = read_ds1302(read_add[1]);	//读分
	shi  = read_ds1302(read_add[2]);	//读时
}
/*************把要写的时间 年月日 都写入ds1302里***************/
void write_time()
{
	write_ds1302(0x8e,0x00);			//打开写保护
	write_ds1302(write_add[0],miao);	//写秒
	write_ds1302(write_add[1],fen);		//写分
	write_ds1302(write_add[2],shi);		//写时
	write_ds1302(write_add[3],ri);		//写日
	write_ds1302(write_add[4],yue);		//写月
	write_ds1302(write_add[5],nian);	//写星期
	write_ds1302(write_add[6],week);	//写年
	write_ds1302(0x8e,0x80);			//关闭写保护
}
 
/**********************设置ds1302时间函数**********************/
void set_ds1302time(uchar num,uchar *shi,uchar dat)	 //调时
{
  	if(num == 1)
    {
    	*shi+=0x01;
		if((*shi & 0x0f) >= 0x0a)
			*shi = (*shi & 0xf0) + 0x10;
		if(*shi >= dat)
			*shi = 0;
    }
    else
    {
		if(*shi == 0x00)
			*shi = dat;
		if((*shi & 0x0f) == 0x00)
			*shi = (*shi | 0x0a) - 0x10;
		*shi -=0x01 ; 
    }  
}
 
void set_ds1302week(uchar num,uchar *shi,uchar dat)	 //调时
{
  	if(num == 1)
    {
    	*shi+=0x01;
		if((*shi & 0x0f) >= 0x0a)
			*shi = (*shi & 0xf0) + 0x10;
		if(*shi >= dat)
			*shi = 1;
    }
    else
    {
		if(*shi == 0x01)
			*shi = dat;
		if((*shi & 0x0f) == 0x01)
			*shi = (*shi | 0x0a) - 0x10;
		*shi -=0x01 ; 
    }  
}

//BCD码转换为数字
//返回值为十进制数字
uchar datadeal(uchar num)
{
		return ((num/16))*10+num%16;
}
//数字转换为BCD码
//返回值为BCD码
uchar to_BCD(uchar num)
{
		return (((num/10)<<4)|(num%10));
}

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

proteus设计教程-DS1302时钟芯片驱动程序 的相关文章

  • 51单片机键盘、矩阵键盘松手检测

    一 对独立按键进行松手检测 当按键按下时 会导致51单片机相应引脚变为低电平 利用这个原理 可以进行按键检测 就像下面这段代码 if KEY1 0 delay ms 10 if KEY1 0 如果想要对按键是否能够连按进行控制 只需改成下面
  • Keil5的仿真调试

    Keil5基本的仿真调试操作 首先点击魔法棒 然后输入你板子上所用的晶振 然后进入debug 然后选择 Use Simulator 然后点击OK 然后点击调试按钮 然后就会出现调试页面 我这里是已经把汇编窗口给挪到右侧了 你第一次打开可能是
  • 12. 直流电机调速(PWM)

    直流电机介绍 直流电机是一种将电能转换为机械能的装置 一般的直流电机有两个电极 当电极正接时 电机正转 当电极反接时 电机反转 直流电机主要由永磁体 定子 线圈 转子 和换向器组成 除直流电机外 常见的电机还有步进电机 舵机 无刷电机 空心
  • 【51单片机实验笔记】声学篇(一) 蜂鸣器基本控制

    目录 前言 硬件介绍 PWM基础 蜂鸣器简介 原理图分析 蜂鸣器驱动电路 软件实现 蜂鸣器短鸣 蜂鸣器功能封装 总结 前言 蜂鸣器在生活中的应用实则相当广泛 通过本章你将学会制造噪声 笑 你将学会驱动它们 并发出响声 硬件介绍 PWM基础
  • 51单片机TI发送中断标志位阻塞程序运行

    在利用51单片机学习嵌入式开发的过程中 通常会利用单片机串口进行字符或字符串的收发操作 博主最近在写一个小程序的过程中遇到了这样一个问题 在主函数内利用串口进行一个字符串的发送操作 并且对发送中断标志位进行置零或置一 此外 在串口中断函数内
  • 51单片机空气质量检测系统 甲醛DHT11温湿度烟雾光照报警器WIFI系统

    采用51单片机 ADC0832芯片 DHT11 按键 LCD12864液晶 蜂鸣器 wifi模块 稳压模块 光敏电阻 烟雾传感器 甲醛传感器设计而成 1 LCD12864液晶实时显示烟雾浓度 当前空气中的温度值 湿度值 光照度 甲醛浓度并且
  • keil5报错:* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 08B5H BYTE (108%) *保姆级教程

    项目场景 keil uVsion5的编译的时代码的字节过大出现 问题描述 RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT 原因分析 原因就是你的keil为2048字节代码限制的版本 而你
  • 基于51单片机 数控恒流源设计 可调电流源

    设计硬件组成 基于51单片机 数控恒流源设计 可调电流源基于单片机可调电流源设计 项目定制觉得选题不错 分享一下 由51单片机 LCD1602液晶 变压器 整流桥 开关电源LM2596 TLC5615 LM358 TIP31C 按键 TL4
  • C51单片机--IO口应用

    流水灯 文章目录 流水灯 前言 一 D1到D8依次点亮 二 读入开关K1 K4的状态 按下对应开关 控制相应D1 D4灯亮 三 流水灯 功能 LED从左边起D1 D3亮 并闪烁3次 然后是D2 D4亮 并闪烁3次 然后D3 D5亮 闪烁3次
  • 基于51单片机的霍尔自行车里程测速仪(含Keil程序和Proteus文件)

    系统概述 系统使用的模块有AT89C51单片机 LCD1602显示屏 霍尔测速模块 本设计采用51单片机为核心控制 使用LCD1602显示采集到的速度 霍尔测速模块进行测速 测速的原理是通过磁感应原理检测开关变化量 通过检测两个开关量的时间
  • 【51单片机】:定时器的详解(包括对单片机定时解释、各类定时方式,以及中断方式)

    学习目标 51定时 计数器的详解 码字不易 如有帮助请收藏 点赞哦 学习内容 背景知识 了解一下对以后学习有帮助 前提 首先我们知道51单片机内部有21 26个特殊功能寄存器 P x口寄存器 P0 P1 P2 P3 数据指针寄存器 DP0H
  • 蓝桥杯单片机零基础到国二经验分享

    我参加的是第十三届蓝桥杯大赛 从最开始的零基础 毫无头绪 到拿下国二 颇有体会 在这里将我的备赛经验分享给大家 希望可以帮到一些正在备赛的蓝桥杯er 目录 一 蓝桥杯 单片机组介绍 二 零基础到国二历程 客观题 程序题 1 从零基础到省三
  • 51单片机AD转换代码原理图参考

    include reg52 h define uchar unsigned char define uint unsigned int sbit ADC RD P3 3 sbit ADC WR P3 4 sbit ADC INT P3 5
  • 51单片机总结【引脚、时钟电路、复位电路、I/O端口、内部结构】

    1 功能简述 STC89C52 是一种低功耗 高性能CMOS8位微控制器 具有8K在系统可编程Flash存储器 ROM STC89C52具有以下标准功能 8k字节Flash 程序存储器ROM 512字节RAM 256字节内部和256字节外部
  • (十六)ADC转换实验

    本节主要是回顾有关于ADC的对应内容 我们这章通过一个AD芯片xpt2046来读取外部电压的变化 将电压的数字量显示在数码管上 关于ADC 我们都知道单片机内部都是数字量 就是1或者0 而我们的电流电压在传递的时候是模拟量 也就是模拟量很可
  • 基于STM32单片机的智能鱼缸的设计

    一 任务简介 本次以STM32F103单片机为核心 设计了一款智能鱼缸 能够实现智能温控 智能换水 智能供氧 智能喂食等功能 利用单片机作为主控制器 使用Keil软件进行程序开发 除STM32F103C8T6最小系统外 系统还包含温度传感
  • Proteus中继电器详解

    目录 一 引言 二 继电器实物 三 Proteus继电器选择 四 继电器工作原理及Proteus中继电器引脚 五 Proteus中继电器正确接法举例及仿真视频记录 一 引言 我们都知道继电器可以利用小信号控制大功率 有四两拨千斤功效 同时还
  • 51单片机(十四)—— 中断功能介绍

    中断是单片机的一个重要功能 本文我们就对51单片机的中断进行介绍 所谓 中断 通俗一点讲 就是单片机停止正在执行的任务 转去执行其它的急需解决的任务 当这个任务完成之后 在回到原来的任务继续执行 中断就是为了使单片机能够对外部或内部随机发生
  • 51单片机按键识别与LED显示(显示0-9的数字)

    实验内容 单片机外接10个按键 编号为0 9 编程实现任意按键则LED显示对应数字 一 硬件电路原理图 1 共阴共阳两种不同的方式 2 数码管显示表 3 矩阵键盘介绍 矩阵键盘是 单片机 外部设备中所使用的排布类似于矩阵的键盘组 矩阵式结构
  • 51单片机多机通信

    视频学习链接 https www bilibili com video BV1pi4y147A6 spm id from 333 880 my history page click vd source b91967c499b23106586

随机推荐

  • 设计模式之简单工厂模式(Simply Factory)摘录

    从设计模式的类型上来说 简单工厂模式是属于创建型模式 又叫静态工厂方法 Static Factory Method 模式 但不属于23种GOF设计模式之一 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 简单工厂模式是工厂模式家族
  • 数据库索引

    3 1 概括 索引 Index 是数据库中的一种存储结构 用于快速查找数据 索引通常是在数据库表上创建的 可以用于加速查询 排序和数据的唯一性验证 索引可以理解为图书中的目录 通过目录我们可以很快找到页码对应的内容 当表中有大量数据需要查询
  • 计算机竞赛 基于计算机视觉的身份证识别系统

    0 前言 优质竞赛项目系列 今天要分享的是 基于机器视觉的身份证识别系统 该项目较为新颖 适合作为竞赛课题方向 学长非常推荐 更多资料 项目分享 https gitee com dancheng senior postgraduate 1
  • 封裝:WPF基于Vlc.DotNet.Wpf封装的视频播放器

    一 目的 应用自带的MediaElement播放器播放文件类型有限 有些格式还需要安装插件 由此应用第三方工具包Vlc DotNet Wpf封装支持多格式的视频播放器 二 环境 VS2019 Win10 Vlc DotNet Wpf HeB
  • 校友全剧透CMU :ME + 转CS + 其他主要项

    在CMU待了一个半学期了 对于留学 对于CMU 对于ME 对于转CS 对于CMU其它各种项目都了解的更多了一些 也有不同的体会 我想这篇文章应该会对任何一个申请了CMU 或者想申请CMU 甚至每一个想要出国留学的人都会有一点帮助 写下面这些
  • Easy-Es核心功能深度介绍

    背景 近期随着项目开源后热度的不断上涨 越来越多小伙伴开始对框架核心功能感兴趣 今天就让我带大家深入源码和架构 一起探索Easy Es 简称EE 的核心功能是如何被设计和实现的 和众多ORM框架一样 EE最为核心的功能就是CRUD 增删改查
  • selenium3之selenium-server-standalone-3.8.1.jar启动

    查看安装的selenium版本 下载对应版本的selenium server 下载地址 http selenium release storage googleapis com index html 需要先安装JDK 自行百度安装 启动se
  • Linux的NFS共享目录操作步骤

    首先准备两台Linux 一台服务器 一台客户机 IP地址可自行设置 两台防火墙都要关闭 配置服务器IP地址 172 20 10 11 配置客户机IP地址 172 20 10 12 先关闭防火墙 systemctl stop filewall
  • 【JavaScript】页面加载 解决Uncaught TypeError: Cannot set property of undefined at

    在初学js的时候 有同学会遇到 Uncaught TypeError Cannot set property onmouseover of undefined at html 的问题 这个问题牵扯到页面加载顺序的问题 我们知道 页面的加载顺
  • 使用Prometheus+Grafana+Spring Boot Actuator监控应用

    在企业级的应用中 监控往往至关重要 监控可以帮助我们预防故障 预测变化趋势 在达到阈值的时候报警 为排查生产问题提供更多的信息 如果我们不知道我们程序的运行情况 当线上系统出现了事故再去排查就需要花费更多的时间 如果能提前监控 就能早做准备
  • VScode的PHP远程调试模式Xdebug

    目录 第一步 安装VScode中相应插件 remote ssh的原理 ssh插件 PHP相关插件 第二步 安装对应PHP版本的xdebug 查看PHP具体配置信息的phpinfo页面 1 首先 打开php编辑器 新建一个php文件 例如 i
  • CentOS7下rsync实现服务器之间实时同步

    rsync简介 rsync是类unix系统下的数据镜像备份工具 使用快速增量备份工具Remote Sync可以远程同步 支持本地复制 或者与其他SSH rsync主机同步 文章主讲实际操作 不再进行详细叙述 想要了解更多可以查看百度百科 一
  • QT 编译报错“QWidget: Must construct a QApplication before a QWidget”

    一 错误原因 1 在构造QApplication之前创建了部件 某个类或者其子类中采用了静态的qWidget或者其子类 由于静态或者全局对象在 main 之前就产生了 所以 早于main 里的QApplication对象 2 混用 debu
  • Python实现敏感词过滤

    在我们生活中的一些场合经常会有一些不该出现的敏感词 我们通常会使用 去屏蔽它 例如 尼玛 gt 一些骂人的敏感词和一些政治敏感词都不应该出现在一些公共场合中 这个时候我们就需要一定的手段去屏蔽这些敏感词 下面我来介绍一些简单版本的敏感词屏蔽
  • 【面试真题】今日头条大数据面试100题,收藏备用

    1 简述WordCount 的实现过程 2 简述MapReduce与 Spark 的区别与联系 3 Spark 在客户端与集群运行的区别 4 相同的 SQL 在 HiveSql 与 SparkSQL 的实现中 为什么 Spark 比 Had
  • Android MVC、MVP、MVVM、MVI架构对比及示例

    随着Android应用开发技术的不断成熟 应用功能越来越丰富 迭代速度要求的越来越高 应用的开发架构也在不断演进 优化 从MVC MVP到MVVM 到如今的MVI 谷歌官方也在不断推广 优化适合Android平台的开发架构 并推出了一系列的
  • centos7部署openwhisk

    实验环境 Openwhisk 192 168 1 36 make lean部署 Fn project 192 168 1 35 Openwhisk核心提炼 环境准备 nodejs12 curl sL https rpm nodesource
  • RateLimiter 的底层实现是啥?

    点击上方 Java基基 选择 设为星标 做积极的人 而不是积极废人 源码精品专栏 原创 Java 2020 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 Rock
  • 本地docker搭建jupyter运行环境

    1 容器操作 1 拉取镜像 docker pull ubuntu 2 创建容器 创建容器时要先考虑好自己要开设几个端口 要提前指定好映射关系 docker run dit name LocalDocker p 3303 8888 p 330
  • proteus设计教程-DS1302时钟芯片驱动程序

    时钟芯片DS1302电路图如下 晶振X1的频率为32 768khz 读写时间只需要调用void read time void write time 两个函数进行操作 直接读取出来的数据是BCD码的形式 需要进行转换 最后提供的两个函数to