proteus设计教程-DS1302时钟芯片驱动程序
时钟芯片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));
}
proteus设计教程-DS1302时钟芯片驱动程序相关推荐
- 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》...
引言 本设计以AT89S52单片机为控制核心,时钟芯片DS1302提供时钟源,配合LCD1602液晶显示模块,组成基本硬件系统,同时利用HC-05嵌入式蓝牙串口通讯模块,可在手机端进行日期.时间的校准 ...
- 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》... 1
引言 本设计以AT89S52单片机为控制核心,时钟芯片DS1302提供时钟源,配合LCD1602液晶显示模块,组成基本硬件系统,同时利用HC-05嵌入式蓝牙串口通讯模块,可在手机端进行日期.时间的校准 ...
- 【蓝桥杯单片机】DS1302时钟芯片+DS18B20单总线温度传感器(官方驱动源码改写)
实验开发板为CT107D蓝桥官方板,编译环境为MDK5 采用蓝桥官方驱动改写 目录 一.DS1302时钟芯片 二.DS18B20温度传感器 一.DS1302时钟芯片 CE 复位脚 I/O 数据输入/输 ...
- 51单片机进阶案例(1)——基于MATLAB GUI的单片机串口与PC的通信实现实时时钟和双向可调时钟功能(利用DS1302时钟芯片和LCD1602液晶屏)
目录 一.案例描述 二.实现功能 三.51单片机部分实现 3.1 实时时钟的实现 3.2 串口通信的实现 3.2.1 接收数据 3.2.2 发送数据 四.MATLAB部分实现 4.1 GUI界面 4. ...
- STM32F103操作DS1302时钟芯片串口显示(标准库和HAL库)
目录 DS1302的性能指标 DS1302的寄存器及片内RAM 标准库实现 HAL库实现 源码链接 单片机型号:STM32F103C8T6 在日常生活中,很多情况下会需要使用时间,单片机中虽然也是有定 ...
- 传感器:DS1302时钟芯片及驱动代码
传感器:DS1302时钟芯片及驱动代码 DS1302时钟芯片介绍 DS1302 硬件 引脚定义 应用电路 AD原理图 DS1302 软件 命令字节 寄存器 通信时序与数据读写 驱动程序 DS1302写 ...
- 基于STM32的DS1302时钟芯片驱动
基于STM32的DS1302时钟芯片驱动 /****************************************************************************** ...
- 蓝桥杯单片机DS1302时钟芯片驱动代码注释
蓝桥杯单片机DS1302时钟芯片驱动代码之前的疑惑注释了下 /* DS1302 芯片包含一个 实时时钟/日历和 31 字节的静态 RAM. 与时钟/RAM 通讯只需要三根线: CE,I/O (数据线) ...
- 【C51单片机学习笔记--DS1302时钟芯片蜂鸣器I2C总线AT24C02存储器】
C51单片机学习笔记–DS1302时钟芯片&&蜂鸣器&&I2C总线&&AT24C02存储器 文章目录 一.DS1302时钟芯片介绍 二.DS1302时钟 ...
最新文章
- 网络编程学习笔记--1.socket可读可写条件
- 加白名单_【食品加奖学金】宁波大学张鑫团队:青钱柳黄酮对昼夜节律紊乱小鼠的肠道菌群和肝脏时钟基因的调节作用...
- lettuce--Advanced Redis client
- 从零构建vue+webpack (一)
- 作者:冯是聪(1973-),男,博士,北京明略软件系统有限公司联合创始人兼CTO。...
- $python日期和时间的处理
- 实训41 2018.6.2
- C++与tolua++的完整调用流程,超级详解解决交互疑难
- Tomcat部署记事
- 专为存储设计的LRC编码
- 我的世界启动器java_我的世界最新启动器 无需安装JAVA
- 数据结构 实验1——一元多项式的表示与相加
- STC12C2052AD+TM1640+DS1302闹钟
- 太神了-图片可以转换成Word文档了
- 计算机断电无法启动不了系统,电脑因为强制断电导致系统无法正常启动的解决办法...
- android中涉及的字体修改
- 霍尔逻辑Hoare Logic
- Amit Chadha出任LT Technology Services 首席执行官兼董事总经理
- MySQL数据库的数据更新
- 汇编语言与高级语言的区别
热门文章
- pytorch版本SSD代码分析(2)——数据增强
- 全面解读Group Normbalization-(吴育昕-何凯明)
- 计算机辅助制造的论文,【计算机辅助结课论文】计算机辅助制造.doc
- NOIP模拟赛8.15----C、三角形
- python fileinput_Python fileinput模块使用介绍
- 37互娱现场java一面
- 现在这个社会环境,Python现在还值得学习吗?
- 单片机c语言程序编译出现的警告 different types,warning C235: parameter 1: different types单片机程序编译的时候有警告...
- 华为云云主机评测:最适合企业的的服务器
- 伪代码(Pseudocode)的语法规则