|
楼主 |
发表于 2011-3-30 20:42:27
|
显示全部楼层
共用体、结构体应用举例:
首先定义如下结构体
union
{
unsigned char strTime[7];
struct Time
{
unsigned char Sec;
unsigned char Minu;
unsigned char Hour;
unsigned char Day;
unsigned char Date;
unsigned char Month;
unsigned char Year;
} NYRTime;
} SystemTime;
填充上面这个共用体的函数为:
void GettimeAndTemperature(void)
{
unsigned int i;
unsigned char h[7] = {0};
for(i=0;i<7;i++)
{
I2c_Rd_Data(0x00+i,&h,1);
SystemTime.strTime = 10*(((h&0xf0)>>4)&0x07) + (h&0x0f);
}
for(i=0;i<2;i++)
{
I2c_Rd_Data(0x11+i,&strTemperature,1);
}
}
显示函数如下:
void ShowAlamTime(void)
{
GettimeAndTemperature();
ShowDtypeWORD(0,16,2000+SystemTime.NYRTime.Year); //年
ShowDtypeBYTE(8,16,SystemTime.NYRTime.Month); //月
ShowDtypeBYTE(14,16,SystemTime.NYRTime.Date); //日
ShowDtypeBYTE(2,32,SystemTime.NYRTime.Hour); //时
ShowDtypeBYTE(8,32,SystemTime.NYRTime.Minu); //分
ShowDtypeBYTE(14,32,SystemTime.NYRTime.Sec); //秒
}
上面的三段代码是用在DS3231时钟芯片上的,一般的时钟芯片中的几个常用的时间寄存器地址是连续的,所以在GettimeAndTemperature中可以连续的读出各个时间,然后可以采取ShowAlamTime方式进行显示,使程序看起来更加通俗易懂! |
|