IIC总线设计⑥——时钟模块DS1302
目录
一、模块介绍
(一)基本信息
(二)芯片信息及模块原理图
(1)芯片信息
(2)原理图
(三)指令格式及寄存器介绍
(1)指令格式
(2)寄存器介绍
(四)单字节传输时序(非突发模式)
二、程序控制
(一)ds1302.h
(二)ds1302.c
(1)GPIO初始化及DSIO管脚模式更改
(2)向DS1302指定寄存器写入一个字节数据
(3)从DS1302指定寄存器读一个字节数据
(4)设置时间
(5)读取时间,串口打印
(三)主函数
三、实验结果
(一)24小时制
(二)12小时制
四、开发过程遇到的问题
(一)时序问题
(二)DSIO数据管脚的模式问题
程序下载:
32版本:https://pan.baidu.com/s/1kTgFImQ-TQM65AY-Gfns0w提取码:9534
51版本:
一、模块介绍
(一)基本信息
①DS1302实时时钟能够计算2100年之前的秒、分、日、日期、星期、月、年,还有闰年的调整能力。
②内部含有31个字节静态RAM用于数据存储。
③采用串行数据传输方式,简单的SPI 3线接口。
④工作电压范围:2.0~5.5V。
⑤工作电流:2.0V时,小于300nA。
⑥单字节或多字节(突发模式)读取或写入内存。
⑦采用主电源和备份电源双电源供应。备份电源可用电池供电。
⑧兼容DS1202
DS1302 芯片包含一个实时时钟/日历和 31 字节的静态内存。它通过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分钟、小时、星期、日期、月份和年份信息。自动调整少于 31 天的月份,包括闰年的更正。时钟带 AM/PM 指示器的 24 小时或 12 小时格式。使用同步串行通信简化了 DS1302 与微处理器的连接。与时钟/RAM 通信只需要三根线:(1) RST(复位),(2) I/O(数据线),(3) SCLK(串行时钟)。数据可以一次从RAM传输1个字节或最多 31 个字节,DS1302 旨在以极低功耗运行并保留数据和时钟信息。
(二)芯片信息及模块原理图
(1)芯片信息
引脚 | 功能 |
---|---|
X1,X2 | 接32.768 kHz晶振 |
GND | 电源地 |
RST |
复位引脚,低电平有效 |
I/O | 数据输入或输出 |
SCLK | 串行时钟 |
Vcc1,Vcc2 |
Vcc1:备份电源,Vcc2:主要电源 |
RST管脚功能:
①打开控制逻辑,允许读写寄存器。
②可终止正在传输的数据。
(2)原理图
(三)指令格式及寄存器介绍
(1)指令格式
Bit7:写保护位,为1时,芯片可写入数据;为0时,芯片不可写入数据。
Bit6:为0时,指定对时钟/日历寄存器控制读写操作;为1时,RAM 区数据的控制读写操。
Bit1~ Bit5:指定需要输入或输出的寄存器
Bit0:读写控制,为0时,选择写,数据方向为输入;为1时,选择读,数据方向为输出。
(2)寄存器介绍
寄存器或RAM的地址及功能参考下图:
① 时钟/日历寄存器:上图第0~7个寄存器。
SEC寄存器:秒寄存器的位7被定义为时钟停止标志。当这个位被设置为逻辑1时,时钟振荡器停止,DS1302进入低功率待机模式,电流漏极小于100纳安。当此位被写入逻辑0时,时钟将启动。Bit4~Bit6存放秒数的十位,Bit0~Bit3存放秒数的个位。
HR寄存器:小时寄存器中的第7位被定义为12小时或24小时模式的选择位。当这个位被设置为逻辑1时,将选择12小时模式。在12小时模式下,Bit5是AM/PM位,逻辑高为PM,Bit0~Bit3存放小时数的个位,Bit5存放小时数的十位。在24小时模式下,Bit5是第二个10小时位(20-23小时),Bit0~Bit4存放0~19小时。
②CONTROL寄存器:控制寄存器,用作控制是否写保护。
③TRICKLE CHARGER
该寄存器控制着DS1302的涓流电荷特性。如下图简化原理图显示了滴流充电器的基本组件。
涓流充电器选择(TCS)位(位4-7)控制涓流充电器的选择。为了防止意外启用,只有1010的模式将启用涓流充电器。所有其他模式将禁用涓流充电器。DS1302开机时,禁用滴流充电器。二极管选择(DS)位(位2-3)选择在VCC2和VCC1之间是连接一个二极管还是两个二极管。如果DS为01,则选择一个二极管,或者如果DS为10,则选择两个二极管。如果DS为00或11,则涓流充电器将独立于TCS而被禁用。RS位(位0-1)选择连接在VCC2和VCC1之间的电阻器。电阻器选择(RS)位所选择的电阻器如下:
如果RS为00,则将独立于TCS禁用涓流充电器
④CLOCK BURST或者RAM BURST寄存器
通过上图的CLOCK BURST或者RAM BURST两个寄存器来设置时钟寄存器的突发模式或者RAM寄存器的突发模式,当以突发模式写入时钟寄存器时,必须写入前八个寄存器,以便传输数据。但是,在以突发模式写入RAM时,不需要写入所有31个字节来传输数据。
(四)单字节传输时序(非突发模式)
都是纳秒级的,写程序的时候我们微妙级延时就ok了。
二、程序控制
(一)ds1302.h
#ifndef __DS1302_H
#define __DS1302_H#include "stm32f10x.h"
#include "usart.h"
#include "delay.h"#define DAY_AM 0x80
#define DAY_PM 0xa0 /*
程序修改说明:①若使用12小时制,请开启宏#define HOUR_12,关闭宏#define HOUR_24修改时间:需要注意的 DAY_AM:上午,DAY_PM:下午 0x11:11点#define HOUR DAY_AM|0x11 //时,上午 | 11点#define HOUR DAY_PM|0x11 //时,下午 | 11点若需要设置的时间为上午,请开启宏#define HOUR DAY_AM|0x11,关闭宏#define HOUR DAY_PM|0x11若需要设置的时间为下午,请开启宏#define HOUR DAY_PM|0x11,关闭#define HOUR DAY_AM|0x11②若使用24小时制,请开启宏#define HOUR_24,关闭宏#define HOUR_12程序编写:曾老师的熊同学完成时间:2022年-4月-26日程序功能:默认以24小时制读取时间数据
*///时间模式:12小时制、24小时制
//#define HOUR_12
#define HOUR_24//新时间:2022年-4月-26日-23时-59分-55秒-星期2
//---存储格式是用BCD码---//
#define SEC 0x55 //秒,55秒
#define MIN 0X59 //分,59分#ifdef HOUR_12 //12小时制#define HOUR DAY_AM|0x11 //时,上午 | 11点
// #define HOUR DAY_PM|0x11 //时,下午 | 11点
#endif#ifdef HOUR_24
#define HOUR 0X23 //时,24小时制,23点
#endif#define DATE 0X26 //日,26日
#define MONTH 0X04 //月,4月
#define DAY 0X02 //星期,星期2
#define YEAR 0X22 //年,2022年/* 定义SPI总线连接的GPIO端口*/
#define DS1302_GPIO_PORT GPIOB /* GPIO端口 */
#define DS1302_RCC_PORT RCC_APB2Periph_GPIOB /* GPIO端口时钟 */
#define DS1302_DSIO_PIN GPIO_Pin_5 /* 连接到DSIO时钟线的GPIO */
#define DS1302_RST_PIN GPIO_Pin_6 /* 连接到RST数据线的GPIO */
#define DS1302_SCLK_PIN GPIO_Pin_7 /* 连接到SCLK数据线的GPIO */#define DS1302_DSIO_1() GPIO_SetBits(DS1302_GPIO_PORT, DS1302_DSIO_PIN) /* DSIO = 1 */
#define DS1302_DSIO_0() GPIO_ResetBits(DS1302_GPIO_PORT, DS1302_DSIO_PIN) /* DSIO = 0 */#define DS1302_RST_1() GPIO_SetBits(DS1302_GPIO_PORT, DS1302_RST_PIN) /* RST = 1 */
#define DS1302_RST_0() GPIO_ResetBits(DS1302_GPIO_PORT, DS1302_RST_PIN) /* RST = 0 */#define DS1302_SCLK_1() GPIO_SetBits(DS1302_GPIO_PORT, DS1302_SCLK_PIN) /* SCLK = 1 */
#define DS1302_SCLK_0() GPIO_ResetBits(DS1302_GPIO_PORT, DS1302_SCLK_PIN) /* SCLK = 0 */#define DS1302_DSIO_READ() GPIO_ReadInputDataBit(DS1302_GPIO_PORT, DS1302_DSIO_PIN) /* 读DSIO口线状态 *///时钟寄存器地址
#define SEC_REGISTER_ADDR 0x80
#define MIN_REGISTER_ADDR 0x82
#define HR_REGISTER_ADDR 0x84
#define DATE_REGISTER_ADDR 0x86
#define MONTH_REGISTER_ADDR 0x88
#define DAY_REGISTER_ADDR 0x8a
#define YEAR_REGISTER_ADDR 0x8c
#define CONTROL_REGISTER_ADDR 0x8e//存储时间数据
typedef struct
{uint8_t sec; //秒uint8_t min; //分uint8_t hour; //时uint8_t date; //日uint8_t mouth; //月uint8_t week_day; //星期uint16_t year; //年
}DS1302_Data_TypeDef;
extern DS1302_Data_TypeDef DS1302_Source_Data;//源数据
extern DS1302_Data_TypeDef DS1302_Convert_Data;//转换后的数据void DS1302_GPIO_Config(void);
void DS1302_Set_Time(void);
void DS1302_Read_Time(void);
#endif /* __DS1302_H */
(二)ds1302.c
(1)GPIO初始化及DSIO管脚模式更改
void DS1302_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(DS1302_RCC_PORT,ENABLE);//使能B端口时钟GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出GPIO_InitStruct.GPIO_Pin = DS1302_DSIO_PIN|DS1302_RST_PIN|DS1302_SCLK_PIN;//选择引脚GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHzGPIO_Init(DS1302_GPIO_PORT,&GPIO_InitStruct);GPIO_SetBits(DS1302_GPIO_PORT,DS1302_DSIO_PIN|DS1302_RST_PIN|DS1302_SCLK_PIN);//初始化所有引脚为高电平
}/** 函数名:DS1302_Mode_IPU* 描述 :使DS1302_DSIO_PIN引脚变为上拉输入模式* 输入 :无* 输出 :无*/
static void DS1302_Mode_IPU(void)
{GPIO_InitTypeDef GPIO_InitStructure;/*选择要控制的DS1302_PORT引脚*/ GPIO_InitStructure.GPIO_Pin = DS1302_DSIO_PIN;/*设置引脚模式为上拉输入模式*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; /*调用库函数,初始化DS1302_PORT*/GPIO_Init(DS1302_GPIO_PORT, &GPIO_InitStructure);
}/** 函数名:DS1302_Mode_Out_PP* 描述 :使DS1302_DSIO_PIN引脚变为推挽输出模式* 输入 :无* 输出 :无*/
static void DS1302_Mode_Out_PP(void)
{GPIO_InitTypeDef GPIO_InitStructure;/*选择要控制的DS1302_PORT引脚*/ GPIO_InitStructure.GPIO_Pin = DS1302_DSIO_PIN; /*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*设置引脚速率为50MHz */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/*调用库函数,初始化DS1302_PORT*/GPIO_Init(DS1302_GPIO_PORT, &GPIO_InitStructure);
}
(2)向DS1302指定寄存器写入一个字节数据
/*
*********************************************************************************************************
* 函 数 名: DS1302_Write_Byte
* 功能说明: 向DS1302写入一个字节数据
* 形 参:addr:寄存器地址 dat:写入的数据
* 返 回 值: 无
*********************************************************************************************************
*/
static void DS1302_Write_Byte(uint8_t addr,uint8_t dat)
{uint8_t i;DS1302_RST_0();//复位管脚拉低DS1302_SCLK_0();//SCLK置低电平delay_us(10);DS1302_RST_1(); //然后将RST(CE)置高电平。delay_us(10);for (i=0; i<8; i++){DS1302_SCLK_0();//数据在上升沿时,DS1302写入数据delay_us(10);if(addr & 0x01)DS1302_DSIO_1();//数据从低位开始传送 else DS1302_DSIO_0(); addr >>= 1; DS1302_SCLK_1();//数据在上升沿时,DS1302读取数据delay_us(10);}for (i=0; i<8; i++){DS1302_SCLK_0();//数据在上升沿时,DS1302写入数据delay_us(10);if(dat & 0x01)DS1302_DSIO_1();//数据从低位开始传送 else DS1302_DSIO_0(); dat >>= 1; DS1302_SCLK_1();//数据在上升沿时,DS1302读取数据delay_us(10);}DS1302_SCLK_0();//SCLK置低电平delay_us(10);DS1302_RST_0();//复位管脚拉低,传送数据结束delay_us(10);
}
(3)从DS1302指定寄存器读一个字节数据
/*******************************************************************************
* 函 数 名 : DS1302_Read_Byte
* 函数功能 :读取一个地址的数据
* 输 入 : addr:寄存器地址
* 输 出 : dat:读取的数据
*******************************************************************************/
static uint8_t DS1302_Read_Byte(uint8_t addr)
{uint8_t i=0,dat=0,temp=0;DS1302_RST_0();//复位管脚拉低delay_us(10);DS1302_SCLK_0();//SCLK置低电平delay_us(10);DS1302_RST_1(); //然后将RST(CE)置高电平。delay_us(10);for (i=0; i<8; i++){DS1302_SCLK_0();//数据在上升沿时,DS1302读取数据delay_us(10);if(addr & 0x01)DS1302_DSIO_1();//数据从低位开始传送 else DS1302_DSIO_0(); addr >>= 1; DS1302_SCLK_1();//数据在上升沿时,DS1302写入数据delay_us(10);}DS1302_Mode_IPU();//将DS1302_DSIO管脚设置为上拉输入模式delay_us(10);for (i=0; i<8; i++){ DS1302_SCLK_1();//在下降沿时,DS1302输出的数据delay_us(10); DS1302_SCLK_0();//在下降沿时,DS1302输出的数据delay_us(10);temp = DS1302_DSIO_READ();//读取端口电平,从最低位开始接收 dat = (dat>>1) | (temp<<7); }DS1302_Mode_Out_PP();//将DS1302_DSIO管脚设置为推挽输出模式DS1302_RST_0();//复位管脚拉低,传送数据结束.DS1302_SCLK_0();DS1302_DSIO_0();delay_us(10);return dat;
}
(4)设置时间
/*******************************************************************************
* 函 数 名 : DS1302_Set_Time
* 函数功能 : 设置DS1302时间
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void DS1302_Set_Time(void)
{DS1302_Write_Byte(CONTROL_REGISTER_ADDR,0X00); //禁止写保护,就是关闭写保护功能DS1302_Write_Byte(SEC_REGISTER_ADDR,SEC); //设置秒DS1302_Write_Byte(MIN_REGISTER_ADDR,MIN); //设置分DS1302_Write_Byte(HR_REGISTER_ADDR,HOUR); //设置时DS1302_Write_Byte(DATE_REGISTER_ADDR,DATE); //设置日DS1302_Write_Byte(MONTH_REGISTER_ADDR,MONTH); //设置月DS1302_Write_Byte(DAY_REGISTER_ADDR,DAY); //设置星期DS1302_Write_Byte(YEAR_REGISTER_ADDR,YEAR); //设置年DS1302_Write_Byte(CONTROL_REGISTER_ADDR,0x80); //打开写保护功能printf("DS1302 Set Time Success!");
}
(5)读取时间,串口打印
/*******************************************************************************
* 函 数 名 : DS1302_Read_Time
* 函数功能 : 读取时钟信息
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void DS1302_Read_Time(void)
{DS1302_Source_Data.sec =DS1302_Read_Byte(SEC_REGISTER_ADDR|0x01); //秒DS1302_Source_Data.min =DS1302_Read_Byte(MIN_REGISTER_ADDR|0x01); //分DS1302_Source_Data.hour =DS1302_Read_Byte(HR_REGISTER_ADDR|0x01); //时DS1302_Source_Data.date =DS1302_Read_Byte(DATE_REGISTER_ADDR|0x01); //日DS1302_Source_Data.mouth =DS1302_Read_Byte(MONTH_REGISTER_ADDR|0x01); //月DS1302_Source_Data.week_day =DS1302_Read_Byte(DAY_REGISTER_ADDR|0x01); //星期DS1302_Source_Data.year = (uint16_t)DS1302_Read_Byte(YEAR_REGISTER_ADDR|0x01); //年DS1302_Convert_Data.sec = ((DS1302_Source_Data.sec&0X70)>>4)*10+(DS1302_Source_Data.sec&0x0f); //秒DS1302_Convert_Data.min = ((DS1302_Source_Data.min&0X70)>>4)*10+(DS1302_Source_Data.min&0x0f); //分#ifdef HOUR_24 DS1302_Convert_Data.hour = ((DS1302_Source_Data.hour&0X20)>>5)*20+(DS1302_Source_Data.hour&0x1f); //24小时制
#endif#ifdef HOUR_12 DS1302_Convert_Data.hour = ((DS1302_Source_Data.hour&0X10)>>4)*10+(DS1302_Source_Data.hour&0x0f); //12小时制
#endifDS1302_Convert_Data.date = ((DS1302_Source_Data.date&0X70)>>4)*10+(DS1302_Source_Data.date&0x0f); //日DS1302_Convert_Data.mouth = ((DS1302_Source_Data.mouth&0X70)>>4)*10+(DS1302_Source_Data.mouth&0x0f); //月DS1302_Convert_Data.week_day = (DS1302_Source_Data.week_day&0x0f); //星期DS1302_Convert_Data.year = ((DS1302_Source_Data.year&0X70)>>4)*10+(DS1302_Source_Data.year&0x0f)+2000; //年#ifdef HOUR_24 printf("The time is: %d年 - %d月 - %d日 - %d时 - %d分 - %d秒 ,星期%d \r\n",DS1302_Convert_Data.year,\DS1302_Convert_Data.mouth,\DS1302_Convert_Data.date,\DS1302_Convert_Data.hour,\DS1302_Convert_Data.min,\DS1302_Convert_Data.sec,\DS1302_Convert_Data.week_day);
#endif
#ifdef HOUR_12if(DS1302_Source_Data.hour&0x20)printf("The time is: %d年 - %d月 - %d日 - PM: %d时 - %d分 - %d秒 ,星期%d \r\n", DS1302_Convert_Data.year,\DS1302_Convert_Data.mouth,\DS1302_Convert_Data.date,\DS1302_Convert_Data.hour,\DS1302_Convert_Data.min,\DS1302_Convert_Data.sec,\DS1302_Convert_Data.week_day);elseprintf("The time is: %d年 - %d月 - %d日 - AM: %d时 - %d分 - %d秒 ,星期%d \r\n", DS1302_Convert_Data.year,\DS1302_Convert_Data.mouth,\DS1302_Convert_Data.date,\DS1302_Convert_Data.hour,\DS1302_Convert_Data.min,\DS1302_Convert_Data.sec,\DS1302_Convert_Data.week_day);
#endif}
(三)主函数
void Init(void)
{USART_Config();//串口初始化DS1302_GPIO_Config();
}int main(void)
{Init();//DS1302_Set_Time();//设置时间,当完成时间设置后,请注释掉这一句,否则单片机每次上电或复位都会重新设置一下时间。while(1){DS1302_Read_Time();//读取时间delay_ms(50);}
}
三、实验结果
(一)24小时制
(二)12小时制
四、开发过程遇到的问题
(一)时序问题
读数据时,在时钟的下降沿时DS1302输出数据
写数据时,或者写地址时,在时钟的上升沿时DS1302读取数据
(二)DSIO数据管脚的模式问题
在读取数据时,需要先发送寄存器的地址,发送完成后,此时需要将DSIO的推挽输出模式更改为(上拉输入、下拉输入、浮空输入任何一种,经检测3种模式都可以正常读取数据),数据读取完成后,需要将DSIO更改为原来的推挽输出模式,避免影响下一次写地址。
以上就是DS1302的所有内容了,感谢大家阅读,文中若有错误,麻烦大家指出!
IIC总线设计⑥——时钟模块DS1302相关推荐
- IIC总线的时钟同步和总线仲裁
IIC简介: IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控 ...
- IIC总线设计④——MPU6050
注:文章参考了野火.正点原子资料(书籍.程序),图片部分来自网上,若有侵权,请联系删除. 目录 一.姿态检测 (一)欧拉角 (二)陀螺仪 (三)加速度传感器 (四)磁场检测器 二.MPU6050 (一 ...
- 【mcuclub】时钟模块DS1302
一.实物图 二.原理图 编号 名称 功能 1 VCC2 双供电配置中的主电源供应引脚.DS1302工作于 VCC1和VCC2中较大者.当VCC2比VCC1高0.2V 时,VCC2 给 DS1302供电 ...
- 关于实时时钟模块DS1302使用心得
最近在做万年历,用到实时时钟DS1302模块,花了两天时间看资料和写驱动,想记录一下我的学习经过,顺便做一下总结. 首先就是在图书馆查各种资料,于是查到的大多是这些,主要时硬件方面的资料: 其实能查到 ...
- IIC总线的原理与Verilog实现
IIC总线的原理与Verilog实现 1. 软件平台与硬件平台 2. 原理介绍 2.1 IIC总线的特点: 2.2 IIC总线协议详解: 2.2.1 IIC主机往从机里面写入数据的步骤 2.2.2 I ...
- fpga驱动oled iic显示代码_【接口时序】6、IIC总线的原理与Verilog实现
欢迎FPGA工程师加入官方微信技术群 点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群 一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE ...
- iic总线从机仲裁_IIC 总线
IIC总线简介 I 2C总线是一种用于IC器件之间连接的二线制总线.它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送数据,并根据地址识别每个器件:不管是单片机.存储器. ...
- STM32使用库函数控制时钟芯片DS1302提供时间
DS1302简介 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片.它可以对年.月.日.周.时.分.秒进行计时,并且具有闰年补偿等多种功能: 每天的天数和闰年的天数可 ...
- 基于51单片机、DS1302时钟模块的电子闹钟设计
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.设计原理 1.DS1302介绍 2.闹钟音乐播放原理 二.程序设计 1.DS1302.h 2.ds1302.c 3.mu ...
- DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别
[DIY]DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别 水晶城堡在设计之初,采用全直插设计理念,保证玩家在自行DIY的过程中,不会因为焊接贴片元器件而烦恼.所以水晶 ...
最新文章
- 模板 - LCA最近公共祖先(倍增法、Tarjan、树上差分、LCA优化的次小生成树)
- 基于Service Mesh构建更现代的服务架构
- python long_python long函数是什么?如何使用?
- 缓存 Cache-Control:max-age symfony
- IntelliJ Idea解决Could not autowire. No beans of 'xxxx' type found的错误提示
- 对Javascript 类、原型链、继承的理解
- Linux C :系统调用-fork,wait,subreaper
- boost::phoenix::delete和using boost::phoenix::new_相关的测试程序
- linux -组管理和权限管理
- java AES 加密和linux解密
- [数据结构与算法] 单链表的简单demo
- RecyclerView详细了解
- vuex的命名空间有哪些_Vue 3 带来的 Vuex 的替代方案
- 【OpenCV 例程200篇】49. 图像增强—局部直方图处理
- SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句
- 3640 交换机实验的一些摘要【待进一步更新】
- #ifdef 支持Mac #ifndef 支持Windows #if defined (Q_OS_WIN) 应该可以再两个系统通用
- 自响应式企业网站源码MVC源码
- 什么是类?什么是对象?类与对象之间是什么关系?类的特性有哪些?
- oracle column name as sign,Oracle日常性能查看 - ella的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
热门文章
- DAC、ADC、FFT使用总结
- java ToStringBuilder
- FPGA教程和allegro教程-链接
- 光立方体c语言程序,444光立方程序怎么写 光立方原理图、源代码及制作教程 - 全文...
- 加密与解密工具大礼包 2010年新品
- signature=9293cc4bd6f47e4f2a5f299011c6e89e,02-本地证书配置指导
- Windows,bat批量ping脚本
- 基于51单片机+LCD1602显示
- 大数据经典案例有哪些?
- java security provide_Java SecurityManager類代碼示例