目录

一、模块介绍

(一)基本信息

(二)芯片信息及模块原理图

(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相关推荐

  1. IIC总线的时钟同步和总线仲裁

    IIC简介: IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控 ...

  2. IIC总线设计④——MPU6050

    注:文章参考了野火.正点原子资料(书籍.程序),图片部分来自网上,若有侵权,请联系删除. 目录 一.姿态检测 (一)欧拉角 (二)陀螺仪 (三)加速度传感器 (四)磁场检测器 二.MPU6050 (一 ...

  3. 【mcuclub】时钟模块DS1302

    一.实物图 二.原理图 编号 名称 功能 1 VCC2 双供电配置中的主电源供应引脚.DS1302工作于 VCC1和VCC2中较大者.当VCC2比VCC1高0.2V 时,VCC2 给 DS1302供电 ...

  4. 关于实时时钟模块DS1302使用心得

    最近在做万年历,用到实时时钟DS1302模块,花了两天时间看资料和写驱动,想记录一下我的学习经过,顺便做一下总结. 首先就是在图书馆查各种资料,于是查到的大多是这些,主要时硬件方面的资料: 其实能查到 ...

  5. IIC总线的原理与Verilog实现

    IIC总线的原理与Verilog实现 1. 软件平台与硬件平台 2. 原理介绍 2.1 IIC总线的特点: 2.2 IIC总线协议详解: 2.2.1 IIC主机往从机里面写入数据的步骤 2.2.2 I ...

  6. fpga驱动oled iic显示代码_【接口时序】6、IIC总线的原理与Verilog实现

    欢迎FPGA工程师加入官方微信技术群 点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群 一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE ...

  7. iic总线从机仲裁_IIC 总线

    IIC总线简介 I 2C总线是一种用于IC器件之间连接的二线制总线.它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送数据,并根据地址识别每个器件:不管是单片机.存储器. ...

  8. STM32使用库函数控制时钟芯片DS1302提供时间

    DS1302简介 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片.它可以对年.月.日.周.时.分.秒进行计时,并且具有闰年补偿等多种功能: 每天的天数和闰年的天数可 ...

  9. 基于51单片机、DS1302时钟模块的电子闹钟设计

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.设计原理 1.DS1302介绍 2.闹钟音乐播放原理 二.程序设计 1.DS1302.h 2.ds1302.c 3.mu ...

  10. DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别

    [DIY]DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别 水晶城堡在设计之初,采用全直插设计理念,保证玩家在自行DIY的过程中,不会因为焊接贴片元器件而烦恼.所以水晶 ...

最新文章

  1. 模板 - LCA最近公共祖先(倍增法、Tarjan、树上差分、LCA优化的次小生成树)
  2. 基于Service Mesh构建更现代的服务架构
  3. python long_python long函数是什么?如何使用?
  4. 缓存 Cache-Control:max-age symfony
  5. IntelliJ Idea解决Could not autowire. No beans of 'xxxx' type found的错误提示
  6. 对Javascript 类、原型链、继承的理解
  7. Linux C :系统调用-fork,wait,subreaper
  8. boost::phoenix::delete和using boost::phoenix::new_相关的测试程序
  9. linux -组管理和权限管理
  10. java AES 加密和linux解密
  11. [数据结构与算法] 单链表的简单demo
  12. RecyclerView详细了解
  13. vuex的命名空间有哪些_Vue 3 带来的 Vuex 的替代方案
  14. 【OpenCV 例程200篇】49. 图像增强—局部直方图处理
  15. SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句
  16. 3640 交换机实验的一些摘要【待进一步更新】
  17. #ifdef 支持Mac #ifndef 支持Windows #if defined (Q_OS_WIN) 应该可以再两个系统通用
  18. 自响应式企业网站源码MVC源码
  19. 什么是类?什么是对象?类与对象之间是什么关系?类的特性有哪些?
  20. oracle column name as sign,Oracle日常性能查看 - ella的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

热门文章

  1. DAC、ADC、FFT使用总结
  2. java ToStringBuilder
  3. FPGA教程和allegro教程-链接
  4. 光立方体c语言程序,444光立方程序怎么写 光立方原理图、源代码及制作教程 - 全文...
  5. 加密与解密工具大礼包 2010年新品
  6. signature=9293cc4bd6f47e4f2a5f299011c6e89e,02-本地证书配置指导
  7. Windows,bat批量ping脚本
  8. 基于51单片机+LCD1602显示
  9. 大数据经典案例有哪些?
  10. java security provide_Java SecurityManager類代碼示例