c51中定義聯(lián)合體和結(jié)構(gòu)體
聯(lián)合體
union {
unsigned char Ch; //"無符號數(shù)
unsigned char CHR[4]; //"無符號數(shù)組
unsigned long I; //"無符號整型數(shù)
long L; //"有符號長整型數(shù)
float F; //"浮點數(shù)
}EEP;
float shu;
EEP.F =shu; //
結(jié)構(gòu)體
struct realti
{
uchar Second;
uchar Minute;
uchar Hour;
uchar Day;
uchar Month;
uchar Week;
uchar Year;
uchar kzz; //連續(xù)寫必須8個字節(jié),否則寫不進(jìn)去
};
struct realti RealTime; //struct realti RealTime[3];
或:
struct realti
{
uchar Second;
uchar Minute;
uchar Hour;
uchar Day;
uchar Month;
uchar Week;
uchar Year;
uchar kzz; //連續(xù)寫必須8個字節(jié),否則寫不進(jìn)去
}RealTime; //RealTime[3];
或:
struct{
uchar Second;
uchar Minute;
uchar Hour;
uchar Day;
uchar Month;
uchar Week;
uchar Year;
uchar kzz; //連續(xù)寫必須8個字節(jié),否則寫不進(jìn)去
}RealTime; // RealTime[3];
用法:
RealTime.Second =0X30;
RealTime.Minute =0X11;
RealTime.Hour =0X15;
RealTime.Day =0X06;
RealTime.Month =0X03;
RealTime.Week =0X05;
RealTime.Year =0X09;
RealTime.kzz =0X00;
DS1302Write_Time(&RealTime.Second); //向DS1302寫入時鐘數(shù)據(jù)(多字節(jié)方式)
DS1302Read_Time(&RealTime.Second); //讀取DS1302時鐘數(shù)據(jù)RealTime.Second首地址
void DS1302Read_Time(uchar *pSecDa) //讀取DS1302時鐘數(shù)據(jù)
{
uchar i;
DS1302_Open();//打開DS1302
DS1302_Write(0xbf); /* 0xbf:時鐘多字節(jié)讀命令 */
for (i=0; i<8; i++) //連續(xù)寫必須8個字節(jié),否則寫不進(jìn)去
{
*pSecDa = DS1302_Read(); /* 讀1Byte數(shù)據(jù) */
pSecDa++;
}
DS1302_Close();//關(guān)閉DS1302
}
void DS1302Write_Time(uchar *pSecDa) //向DS1302寫入時鐘數(shù)據(jù)(多字節(jié)方式)
{
uchar i;
DS1302Byte_Write(0x8e,0x00); /* 控制命令,WP=0,寫 允許*/
DS1302_Open();//打開DS1302
DS1302_Write(0xbe); /* 0xbe:時鐘多字節(jié)寫命令 */
for (i=0; i<8; i++) /*8Byte = 7Byte 時鐘數(shù)據(jù) + 1Byte 控制*/
{
DS1302_Write(*pSecDa);/* 寫1Byte數(shù)據(jù)*/
pSecDa++;
}
DS1302_Close();//關(guān)閉DS1302
}