?? calendar.c
字號:
#include<reg668.h>
#include<calender.h>
#define TIMER 500 //
bit GetBus(void)
{
uchar a;
S1CON=0xc5; /*總線的初始化:設置時鐘為(101)200K,MCU 主頻為12M,ENS1=1,STA=0,和AA=1*/
STA=1; /*申請成為主機,起動總線*/
while(SI==0)
{
a++;
if(a>TIMER)return(0);
} /*等待起始位的發送*/
return(1);
}
bit SendByte(uchar c)
{
uchar a;
S1DAT=c;
S1CON=0XC5; /*清除SI 位等等*/
while(SI==0)
{
a++;
if(a>TIMER)return(0);
} /*等待起始位的發送*/
return(1);
}
bit w_i2c(uchar sla,uchar suba,uchar s)
{
SDA=1;
SCL=1;
if(GetBus())
{
if(SendByte(sla))
{
if(S1STA!=0X18){S1CON=0XD5;return(0);}
if(SendByte(suba))
{
if(S1STA!=0X28){S1CON=0XD5;return(0);}
if(SendByte(s))
{
if(S1STA!=0X28){S1CON=0XD5;return(0);}
S1CON=0XD5; //結束總線
return(1);
}
}
}
}
}
bit r8563(uchar sla,uchar suba,uchar s[],uchar no)
{
uchar i,a;
SDA=1;
SCL=1;
if(GetBus())
{
if(SendByte(sla))
{
if(S1STA!=0X18){S1CON=0XD5;return(0);}
if(SendByte(suba))
{
if(S1STA!=0X28){S1CON=0XD5;return(0);}
S1CON=0XE5; /*重新啟動總線*/ // STA=1;
while(SI==0)
{
a++;
if(a>TIMER)return(0);
}
if(SendByte(sla+1))
{
if(S1STA!=0X40){S1CON=0XD5;return(0);}
for(i=0;i<no-1;i++)
{
S1CON=0XC5; //接收一字節數據并發送應答位,SI=0
while(SI==0)
{
a++;
if(a>TIMER)return(0);
}
if(S1STA!=0X50){S1CON=0XD5;return(0);}
s[i]=S1DAT; //讀取數據
}
S1CON=0XC1; //接收最后一字節數據并發送非應答位,SI=0
while(SI==0)
{
a++;
if(a>TIMER)return(0);
}
s[no-1]=S1DAT;
S1CON=0XD5; /*結束總線*/
return(1);
}
}
}
}
}
//*******************************************************************************
void init_p8563() //
{
w_i2c(0xA2,0x00,0x00);
w_i2c(0xA2,0x01,0x00);
}
///____________________________________________________________________________
void pcf8563()
{
uchar i;
static uchar data dtime_old[5];
uchar data dtime_new[6];
uchar year_high,year_low;
uchar month_high,month_low;
uchar day_high,day_low;
uchar hour_high,hour_low;
uchar minute_high,minute_low;
r8563(0xA2,0X03,dtime_new,6);
dtime_new[0]=dtime_new[0] & 0x7F; //minute
dtime_new[1]=dtime_new[1] & 0x3F; //hour
dtime_new[2]=dtime_new[2] & 0x3F; //day
dtime_new[3]=dtime_new[4] & 0x1F; //month
dtime_new[4]=dtime_new[5] & 0xFF; //year
if(dtime_old[0]!= dtime_new[0]) //minute
{
dtime_old[0]= dtime_new[0];
dtime_old[1]= dtime_new[1];
dtime_old[2]= dtime_new[2];
dtime_old[3]= dtime_new[3];
dtime_old[4]= dtime_new[4];
minute_high=dtime_old[0]>>4;
minute_low=dtime_old[0] & 0x0F;
disp(1,13,3,26,numS[minute_high]);
disp(1,13,3,27,numS[minute_low]);
minute=minute_high*10+minute_low;
hour_high=dtime_old[1]>>4;
hour_low=dtime_old[1] & 0x0F;
disp(1,13,3,23,numS[hour_high]);
disp(1,13,3,24,numS[hour_low]);
hour=hour_high*10+hour_low;
day_high=dtime_old[2]>>4; //day
day_low=dtime_old[2] & 0x0F;
disp(1,13,3,19,numS[day_high]);
disp(1,13,3,20,numS[day_low]);
day=day_high*10+day_low;
month_high=dtime_old[3]>>4;
month_low=dtime_old[3] & 0x0F;
disp(1,13,3,16,numS[month_high]);
disp(1,13,3,17,numS[month_low]);
month=month_high*10+month_low;
year_high=dtime_old[4]>>4;
year_low=dtime_old[4] & 0x0F;
disp(1,13,3,13,numS[year_high]);
disp(1,13,3,14,numS[year_low]);
year=year_high*10+year_low;
S0BUF=30;
while(!TI);
TI=0;
for(i=0;i<5;i++)
{
S0BUF=dtime_old[i];
while(!TI);
TI=0;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -