📄 ds1302.h
字号:
/***************************************************
* 标题:DS1302读写 *
* 作者:Wujieflash *
* 日期:2008年1月14日 *
* 说明:日历显示范围:2000年--2099年 *
***************************************************/
#define RST RC0
#define SCLK RC1
#define IO RC2
uch flag=0;
int Naoling_hour=6;
int Naoling_minute=30;
int Naoling_hour_1;
int Naoling_minute_1;
int Naoling_hour_2;
int Naoling_minute_2;
int Naoling_hour_3;
int Naoling_minute_3;
uch kk=0;
uch second=1,minute=1,hour=1,year=1,month=1,date=1,day=1,Naohour=1,Naominute=1,kaiguan=1;
uch clock[]={0};
uch DisCash[]={0x00,0x30,0x09,0x16,0x01,0x03,0x09};
/////往1302写入1Byte数据////////////////////////
void RTInputByte(uch d)
{
uch i;
TRISC=0x00;
for(i=8; i>0; i--)
{
IO = d&0x01; //取最低位
SCLK = 1; //上升沿发送
SCLK = 0; //恢复
d = d >> 1;
}
}
///////从1302读取1Byte数据////////////////////////
uch RTOutputByte(void)
{
uch i,val=0;
TRISC2=1; //设置为输入
for(i=8; i>0; i--)
{
val = val >>1;
if(IO)val=val|0x80;// 从最低位开始接收
SCLK = 1; //下降沿接收
SCLK = 0;
}
return(val);
}
///////先写地址,后写命令/数据//////////////////////////
void W1302(uch ucAddr, uch ucDa)
{
RST = 0;
SCLK = 0;
RST = 1; //打开DS1302
RTInputByte(ucAddr); // /* 地址,命令 */
RTInputByte(ucDa); // /* 写1Byte数据*/
SCLK = 1;
RST = 0; //关闭DS1302
}
///////先写地址,后读命令/数据////////////////////////
uch R1302(uch ucAddr)
{
uch ucData;
RST = 0;
SCLK = 0;
RST = 1;
RTInputByte(ucAddr); // /* 地址,命令 */
ucData = RTOutputByte(); // /* 读1Byte数据 */
SCLK = 1;
RST = 0;
return(ucData);
}
/////////向1302写入 秒 分 时 日 月 星期 年 */////////////
void Set1302(uch *pClock)
{
uch i;
uch ucAddr = 0x80; //起使地址
W1302(0x8e,0x00); ///* 控制命令,WP=0,允许写操作*/
for(i =7; i>0; i--)
{
W1302(ucAddr,*pClock); ///* 秒 分 时 日 月 星期 年 */
pClock++;
ucAddr +=2; //写地址加2
}
W1302(0x8e,0x80); // /* 控制命令,WP=1,写保护*/
}
////////从1302读出 秒 分 时 日 月 星期 年 *//////////////////
void v_Get1302(unsigned char ucCurtime[])
{
unsigned char i;
unsigned char ucAddr = 0x81;
for(i=0;i<7;i++)
{
ucCurtime[i] = R1302(ucAddr);///*格式为: 秒 分 时 日 月 星期 年 */
ucAddr += 2;
}
}
/////////与LCD的显示接口//////////////////////
void display()
{
uch i;
for(i=0;i<7;i++)
{
clock[i]=clock[i]/16*10+clock[i]%16;//转换为十六进制
}
if(second==1)ChangeToLCD(0,111,clock[0],1);//显示秒
if(minute==1)ChangeToLCD(0,88,clock[1],1); //显示分
if(hour==1)ChangeToLCD(0,64,clock[2],1); //显示时
if(year==1)ChangeToLCD(0,24,clock[6],1); //显示年
if(month==1)ChangeToLCD(2,2,clock[4],0); //显示月
if(date==1)ChangeToLCD3(2,24,clock[3]); //显示日
if((Naohour==1)&&(kk==1))ChangeToLCD(4,64,Naoling_hour,1);
if((Naominute==1)&&(kk==1))ChangeToLCD(4,88,Naoling_minute,1);
if(kk==1)Show8X16(4,80,maohao,1);
if(kaiguan==1)
{
if(kk==0)
{
Show16X16(4,111,guan,1);
Show8X16(4,64,noshu,1);
Show8X16(4,72,noshu,1);
Show8X16(4,80,noshu,1);
Show8X16(4,88,noshu,1);
Show8X16(4,96,noshu,1);
}
if(kk==1)Show16X16(4,111,kai,1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -