#include "compiler_defs.h"
#include "C8051F500_defs.h"            // SFR declarations
//*****************************************//实时时钟全局常量定义
#define WRITE_SECOND    0x80
#define WRITE_MINUTE    0x82
#define WRITE_HOUR      0x84
#define WRITE_DATE      0x86
#define WRITE_DAY      0x8A
#define WRITE_MONTH    0x88
#define WRITE_YEAR      0x8C
#define READ_SECOND    0x81
#define READ_MINUTE    0x83
#define READ_HOUR      0x85
#define READ_DATE      0x87
#define READ_DAY        0x8B
#define READ_MONTH      0x89
#define READ_YEAR      0x8D
#define WRITE_PROTECT  0x8E
#define uchar unsigned char
noah
sbit ACC7 = ACC^7;
sbit ACC0 = ACC^0;
static unsigned char day = 0;
static unsigned char month = 0;
static unsigned char second = 0;
static unsigned char minute = 0;
static unsigned char hour = 0;
static unsigned char y = 0;
//*****************************************//实时时钟函数声明
void DS1302writeByte(unsigned char data1);
uchar DS1302readByte(void);
void Write1302(uchar ucAddr,uchar ucDa);
uchar Read1302(uchar ucAddr);
void Initial(void);
void OSCILLATOR_Init (void);
void PORT_Init (void);
void delay(unsigned int m);
//*****************************************//实时时钟位定义
SBIT (SCLK, SFR_P3, 7);                // DS1302串行时钟信号
SBIT (DIO, SFR_P3, 6);                // 双向串行数据
SBIT (RST, SFR_P3, 5);                // DS1302使能端,传输数据时必须为高
void main()
{   
SFRPAGE = ACTIVE_PAGE;              // Set for PCA0MD
PCA0MD &= ~0x40;                    // Disable Watchdog Timer
OSCILLATOR_Init();
PORT_Init();
Initial();
while(1)
{
day=  Read1302(READ_DAY);
month=  Read1302(READ_MONTH);
second = Read1302(READ_SECOND);
minute = Read1302(READ_MINUTE);
}
}
void OSCILLATOR_Init (void)
{
U8 SFRPAGE_save = SFRPAGE;
SFRPAGE = CONFIG_PAGE;
RSTSRC = 0x04;                      // enable missing clock detector
OSCICN = 0x87;                      // Set internal oscillator divider to 1
CLKSEL = 0x00;                      // Select the internal osc. as科帕奇改装
// the SYSCLK source
SFRPAGE = SFRPAGE_save;
}
void PORT_Init (void)
{
U8 SFRPAGE_save = SFRPAGE;
SFRPAGE = CONFIG_PAGE;
P3MDOUT = 0xD0;                    // Make P3.7、P3.6、P3.5 push-pull
XBR2 = 0x40;                        // Enable the XBAR and weak pull-ups
SFRPAGE = SFRPAGE_save;
}
void delay(unsigned int m)
{
unsigned int k,j;
for(k=0;k<1;k++)
{
for(j=0;j<m;j++)
_nop_();
}
}
void DS1302writeByte(uchar data1)//向DS1302写入一个字节
{
uchar i;
ACC = data1;
for(i=8;i>0;i--)
{
DIO = ACC0;  //写一位数据
SCLK = 1;    //时钟信号
SCLK = 0;
ACC = ACC >>1;
}
}
uchar DS1302readByte(void)//从DS1302
读出一个字节
{
unsigned char i;
for(i=8;i>0;i--)
{
ACC = ACC >>1;
ACC7 = DIO;  //读一位数据
SCLK = 1;    //时钟信号
SCLK = 0;
}大黄蜂v8
return(ACC);      //返回读到的数据
}
void Write1302(uchar ucAddr,uchar ucDa)//写DS1302寄存器
{
RST = 0;
SCLK = 0;
RST = 1;
DS1302writeByte(ucAddr); //地址,命令
DS1302writeByte(ucDa);  //写1 Byte数据
SCLK = 1;
RST = 0;
}
uchar Read1302(uchar ucAddr)  //读DS1302的寄存器内容
{
uchar ucData,data1;
RST = 0;
SCLK = 0;
RST = 1;
DS1302writeByte(ucAddr|0x01);  //地址,命令
ucData = DS1302readByte();    //读 1 Byte数据
SCLK = 1;
RST = 0;
data1 = ucData/16;
ucData = ucData%16;
ucData = ucData+data1*10;
return(ucData);
开车起步技巧
}雅阁十代2020款
宝马730li报价
void Initial(void) //初始化DS1302
{
Write1302(WRITE_PROTECT,0x00);      //禁止写保护
Write1302(WRITE_SECOND,0x45);      //秒位初始化
Write1302(WRITE_MINUTE,0x24);      //分钟初始化
Write1302(WRITE_HOUR,0x09);        //小时初始化
Write1302(WRITE_DATE,0x15);        //日期初始化
Write1302(WRITE_DAY,0x06);          //日期初始化
Write1302(WRITE_MONTH,0x05);        //月初始化
Write1302(WRITE_PROTECT,0x80);      //允许写保护
}