📄 rw1302.c
字号:
//*************************************************************//
//片选信号使能
//*************************************************************//
void CE_Enable(void)
{
P6OUT |= CE;
return;
}
//*************************************************************//
//片选信号低电平的产生
//*************************************************************//
void CE_Disable(void)
{
P6OUT &= ~(CE);
return;
}
//*************************************************************//
//SCLK高电平的产生
//*************************************************************//
void SCLK_HI(void)
{
P6OUT |= SCLK;
return;
}
//*************************************************************//
//SCLK低电平的产生
//*************************************************************//
void SCLK_LO(void)
{
P6OUT &= ~(SCLK);
return;
}
//*************************************************************//
//数据发送,发送顺序是从最低位到最高位
//*************************************************************//
void WriteByte(uchar nVal)
{
char i,j;
char nTemp = nVal;
char nSend;
//设置DATA为输出管脚
P6DIR |= DATA;
_NOP();
_NOP();
_NOP();
_NOP();
for(i = 0; i < 8; i++)
{
nSend = (nTemp & 0x01);
if(nSend == 1)
{
P6OUT |= DATA;
}
else
{
P6OUT &= ~(DATA);
}
SCLK_HI();
for(j = 20; j > 0; j--) ;
SCLK_LO();
for(j = 20; j > 0; j--) ;
nTemp >>= 1;
}
}
//*************************************************************//
//数据接收,接收顺序为从最低位到最高位。
//*************************************************************//
uchar ReadByte(void)
{
uchar nTemp = 0;
uchar i;
uchar j;
//设置DATA为输入管脚
P6DIR &=~DATA;
_NOP();
_NOP();
_NOP();
_NOP();
for(i = 0; i < 8; i++)
{
SCLK_HI();
if(P6IN&DATA)
{
nTemp |= (0x01 << i);
}
for(j = 10; j > 0; j--);
SCLK_LO();
}
return nTemp;
}
//*************************************************************//
//DS1302的写操作。
//*************************************************************//
void WriteTo1302(uchar nAddr, uchar nVal)
{
CE_Disable();
SCLK_LO();
CE_Enable();
//地址,命令
WriteByte(nAddr);
//写1Byte数据
WriteByte(nVal);
SCLK_HI();
CE_Disable();
return;
}
//*************************************************************//
//采用BURST方式设置时间信息。
//*************************************************************//
void BurstWriteTime()
{
if(FLAG & gb_wr1302)
{
FLAG &=~gb_wr1302;
uchar i;
clock[0] =RX_DATA[32];
clock[0] |=RX_DATA[31]<<4; //秒
clock[1] =RX_DATA[30];
clock[1] |=RX_DATA[29]<<4; //分
clock[2] =RX_DATA[28];
clock[2] |=RX_DATA[27]<<4; //时
clock[3] =RX_DATA[24];
clock[3] |=RX_DATA[23]<<4; //日
clock[4] =RX_DATA[22];
clock[4] |=RX_DATA[21]<<4; //月
clock[5] =RX_DATA[26];
clock[5] |=RX_DATA[25]<<4; //星期
clock[6] =RX_DATA[20];
clock[6] |=RX_DATA[19]<<4; //月
clock[7] =0;
WriteTo1302(0x8e,0x00); //控制命令,WP=0,写操作
CE_Disable();
SCLK_LO();
CE_Enable();
WriteByte(0xbe); //8Byte = 7Byte 时钟数据 + 1Byte 控制
for (i = 0; i < 8; i++)
{
WriteByte(clock[i]); //写1Byte数据
}
SCLK_HI();
CE_Disable();
set_par_re();
}
return;
}
//*************************************************************//
//采用BURST方式读取时间信息。
//*************************************************************//
void BurstReadTime()
{
if(FLAG & gb_re1302)
{
FLAG &=~gb_re1302;
uchar i;
CE_Disable();
SCLK_LO();
CE_Enable();
WriteByte(0xbf); //0xbf:时钟多字节读命令
for (i=0; i<8; i++)
{
clock[i] = ReadByte(); //读1Byte数据
}
SCLK_HI();
CE_Disable();
if(FLAG & gb_time_re)
{
FLAG &=~gb_time_re;
set_tx();
TX_DATA[7] =0x30;
TX_DATA[8] =0x30;
TX_DATA[9] =0x46;
TX_DATA[10] =0x30;
TX_DATA[11] =0x31;
TX_DATA[12] =0x30;
TX_DATA[13] =0x32;
TX_DATA[14] =0x30;
TX_DATA[15]=c_hex((clock[6]>>4)&0x0f); //年
TX_DATA[16]=c_hex(clock[6]&0x0f);
TX_DATA[17]=c_hex((clock[4]>>4)&0x0f);
TX_DATA[18]=c_hex(clock[4]&0x0f); //月
TX_DATA[19]=c_hex((clock[3]>>4)&0x0f);
TX_DATA[20]=c_hex(clock[3]&0x0f); //日
TX_DATA[21]=c_hex((clock[5]>>4)&0x0f);
TX_DATA[22]=c_hex(clock[5]&0x0f); //星期
TX_DATA[23]=c_hex((clock[2]>>4)&0x0f);
TX_DATA[24]=c_hex(clock[2]&0x0f); //时
TX_DATA[25]=c_hex((clock[1]>>4)&0x0f);
TX_DATA[26]=c_hex(clock[1]&0x0f); //分
TX_DATA[27]=c_hex((clock[0]>>4)&0x0f);
TX_DATA[28]=c_hex(clock[0]&0x0f); //秒
jisuanhe(29);
}
}
return ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -