高校网站建设要点,雄安建设集团 网站,wordpress主题免刷新,html购物网站怎么做前言
现在流行的串行时钟电路很多#xff0c;如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便#xff0c;被广泛地采用。 本文介绍的实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路主要特点是采用串行数据传输#xff0c;可为掉电… 前言
现在流行的串行时钟电路很多如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便被广泛地采用。 本文介绍的实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路主要特点是采用串行数据传输可为掉电保护电源提供可编程的充电功能并且可以关闭充电功能。采用普通32.768kHz晶振。一、DS18B20芯片介绍 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时且具有闰年补偿等多种功能。 RTC(Real Time Clock):实时时钟是一种集成电路通常称为时钟芯片。 特征 DS1302模块 二、芯片引脚定义与应用电路 晶振给芯片提供一个时钟源
典型工作电路 51单片机DS1302电路图 蓝桥杯15单片机开发板实际电路 注意51单片机与15单片机使用的I/O口是不同的
该开发板中没有接备用电池因此掉电再上电之后是初始化设置的时间。
带电池的DS1302模块可以存储时间
引脚名作用VCC2主电源VCC1备用电池GND电源接地X1,X232.768kHz晶振CE芯片使能IO数据输入/输出SCLK串行时钟三、寄存器定义
DS1302相关寄存器如下 第一行的 CHBIT7表示时钟暂停控制位这一位置1代表时钟暂停置0时钟正常运行倒数第二行的 WPBIT7这一位置1代表芯片写保护写入操作无效置0即可解除芯片写保护就可以写入数据DS1302有12个寄存器其中有7个寄存器与日历、时钟相关存放的数据位为BCD码形式,其日历、时间寄存器如上图所示。
此外DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类一类是单个RAM单元共31个每个单元组态为一个8位的字节其命令控制字为C0HFDH其中奇数为读操作偶数为写操作另一类为突发方式下的RAM寄存器此方式下可一次性读写所有的RAM的31个字节命令控制字为FEH(写)、FFH(读)。 四、命令字 第0位表示读还是写置1表示读置0表示写第1-5位表示地址秒地址为0分钟地址为10…第6位表示操作RAM还是时钟CK置1表示操作RAM置0表示操作CK第7位固定为1举个例子 对时钟操作、秒地址操作、读 100000010x81 对时钟操作、秒地址操作、写 100000000x80这与上面寄存器中的读地址和写地址是对应的。 五、数据流 在控制指令字输入后的下一个SCLK时钟的上升沿时数据被写入DS1302数据输入从低位即位0开始。同样在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据读出数据时从低位0位到高位7。 五、时序图与数据读写 时序代码实现部分
#include DS1302.h//对端口重新定义,位变量只进行逻辑判断非零即真
sbit DS1302_CE P1^3;
sbit DS1302_IO P2^3;
sbit DS1302_SCLK P1^7;#define DS1302_SECOND 0x80 //秒
#define DS1302_MINTUE 0x82 //分钟
#define DS1302_HOUR 0x84 //小时
#define DS1302_DATE 0x86 //日
#define DS1302_MONTH 0x88 //月
#define DS1302_DAY 0x8A //星期
#define DS1302_YEAR 0x8C //年
#define DS1302_WP 0x8E //写保护的unsigned char DS1302_Time[9]{23,2,9,23,59,55,4};//年 月 日 时 分 秒 星期//上电默认1先初始化为0
void DS1302_Init(void)
{ DS1302_CE 0; //DS1302_SCLK 0;
}//单字节写(命令字数据)
void DS1302_WriteByte(unsigned char Command, unsigned char Data)
{unsigned char i;DS1302_CE 1; for (i 0; i 8; i ) //写命令字{DS1302_IO Command (0x01i);DS1302_SCLK 1;DS1302_SCLK 0;}for (i 0; i 8; i ) //写数据{DS1302_IO Data (0x01i);DS1302_SCLK 1;DS1302_SCLK 0;} DS1302_CE 0;
}//单字节读用上面的宏定义即可
unsigned char DS1302_ReadByte(unsigned char Command)
{unsigned char Data 0x00;unsigned char i;Command | 0x01;//变成读的地址DS1302_CE 1; for (i 0; i 8; i ) //写命令字{DS1302_IO Command (0x01i);DS1302_SCLK 0; //先给0后给1因为时序图上少一个脉冲DS1302_SCLK 1;}for (i 0; i 8; i ){DS1302_SCLK 1; //先给1后给0,模拟时序图DS1302_SCLK 0;if(DS1302_IO 1) //读取端口是1{ Data | (0x01i); } //读数据操作}DS1302_CE 0; DS1302_IO 0; //修改的地方return Data;
}void DS1302_SetTime(void)
{DS1302_WriteByte(DS1302_WP, 0x00);//解除芯片写保护DS1302_WriteByte(DS1302_YEAR, DS1302_Time[0]/10*16DS1302_Time[0]%10);//十进制转BCD码DS1302_WriteByte(DS1302_MONTH, DS1302_Time[1]/10*16DS1302_Time[1]%10); DS1302_WriteByte(DS1302_DATE, DS1302_Time[2]/10*16DS1302_Time[2]%10);DS1302_WriteByte(DS1302_HOUR, DS1302_Time[3]/10*16DS1302_Time[3]%10);DS1302_WriteByte(DS1302_MINTUE, DS1302_Time[4]/10*16DS1302_Time[4]%10);DS1302_WriteByte(DS1302_SECOND, DS1302_Time[5]/10*16DS1302_Time[5]%10);DS1302_WriteByte(DS1302_DAY, DS1302_Time[6]/10*16DS1302_Time[6]%10); //星期DS1302_WriteByte(DS1302_WP, 0x80);//此句WP给0x80打开芯片写保护
}void DS1302_ReadTime(void) //此函数读取时钟芯片的数据写到数组DS1302_Time里
{unsigned char Temp;Temp DS1302_ReadByte(DS1302_YEAR);//进去就被 或运算 置1变成读读BCD码DS1302_Time[0] Temp/16*10Temp%16;Temp DS1302_ReadByte(DS1302_MONTH);//月DS1302_Time[1] Temp/16*10Temp%16;Temp DS1302_ReadByte(DS1302_DATE);DS1302_Time[2] Temp/16*10Temp%16;Temp DS1302_ReadByte(DS1302_HOUR);DS1302_Time[3] Temp/16*10Temp%16;Temp DS1302_ReadByte(DS1302_MINTUE);DS1302_Time[4] Temp/16*10Temp%16;Temp DS1302_ReadByte(DS1302_SECOND);DS1302_Time[5] Temp/16*10Temp%16;Temp DS1302_ReadByte(DS1302_DAY);DS1302_Time[6] Temp/16*10Temp%16;
} 效果
9之后变成16了
原因 BCD码 十进制十六进制BCD码90000 100109160001 000010介绍BCD码的文章
【C语言】BCD码、十进制互相转换 这个BIT7 CH 如果给1时钟就会暂停 给0是运行的 12/24第四行 BIT7 0,是24小时模式
如果BIT7 1 是12小时模式 BIT5 0是AM BIT5 1是PM 写的地址弄个宏定义
Command(写) | 0x01 Command(读)
让写的地址 | 0x01就是读数据的地址减少一半的宏定义 参考文章
DS1302详解
51单片机DS1302实时时钟
单片机常用芯片总结二——DS1302时钟芯片
B站视频链接打不开
江科大自化协-51单片机入门教程-2020版 程序全程纯手打 从零开始入门【10-1】【10-2】