//------------------------------------------------------typedefstruct{unsignedcharByte0;//秒unsignedcharByte1;//分unsignedcharByte2;//时unsignedcharByte3;//日unsignedcharByte4;//月unsignedcharByte5;//星期unsignedcharByte6;//年}ICTimerTab_t;ICTimerTab_tICTimerTab;#defineTimerSecICTimerTab.Byte0//秒#defineTimerMinICTimerTab.Byte1//分#defineTimerHourICTimerTab.Byte2//时#defineTimerDayICTimerTab.Byte3//日#defineTimerMonthICTimerTab.Byte4//月#defineTimerWeekICTimerTab.Byte5//星期#defineTimerYearICTimerTab.Byte6//年/********************************************************************往HT1381写入1Byte数据********************************************************************/voidSend_HT1380_1Byte(unsignedchartData){unsignedchari;M_SDA=1;for(i=0;i8;i++){if((tData&0x01)!=0){_SDA=1;}else{_SDA=0;}tData=1;Delay_us(8);_SCLK=1;Delay_us(5);_SCLK=0;Delay_us(5);}}/********************************************************************往HT1381读取1Byte数据********************************************************************/unsignedcharRead_HT1380_1Byte(void){unsignedchari,tData;M_SDA=0;for(i=0;i8;i++){_SCLK=1;Delay_us(8);tData=1;if(_SDAIn==0){tData&=0x7f;}else{tData|=0x80;}_SCLK=0;Delay_us(5);}M_SDA=1;returntData;}/*********************************************************************名称:往HT1381写入数据*说明:先写地址,后写命令/数据*调用:Send_HT1380_1Byte*输入:sAddr:HT1381地址,sData:要写的数据********************************************************************/voidWrite_HT1381Addr_1Byte(unsignedcharsAddr,unsignedcharsData){_RST=0;Delay_us(5);_SCLK=0;Delay_us(5);_RST=1;Send_HT1380_1Byte(sAddr);//写地址,命令Send_HT1380_1Byte(sData);//写1Byte数据_SCLK=1;Delay_us(5);_RST=0;}/*********************************************************************名称:读取HT1381某地址的数据*说明:先写地址,后写命令/数据*调用:Send_HT1380_1Byte,Read_HT1380_1Byte*输入:sAddr:HT1381地址*返回值:sData:读取的数据********************************************************************/unsignedcharRead_HT1381Addr_1Byte(unsignedcharsAddr){unsignedchartData;_RST=0;Delay_us(5);_SCLK=0;Delay_us(5);_RST=1;Send_HT1380_1Byte(sAddr);//写地址,命令tData=Read_HT1380_1Byte();//写1Byte数据_SCLK=1;Delay_us(5);_RST=0;returntData;}/*********************************************************************名称:读取HT1381当前时间*调用:Read_HT1381Addr_1Byte*输入:保存当前时间地址+当前时间格式为:秒分时日月星期年*7Byte(BCD码)1B1B1B1B1B1B1B********************************************************************/voidRead_HT1381_NowTimer(void){unsignedchari;unsignedcharsAddr;unsignedchar*p;sAddr=0x81;p=(unsignedchar*)&ICTimerTab;for(i=0;i7;i++){*p=Read_HT1381Addr_1Byte(sAddr);p++;sAddr+=2;}}/*********************************************************************名称:初始化HT1381*调用:Write_HT1381Addr_1Byte*输入:初始时间地址+初始时间格式为:秒分时日月星期年*7Byte(BCD码)1B1B1B1B1B1B1B********************************************************************/voidInt_HT1381(void){unsignedchari;unsignedcharsAddr;unsignedchar*p;sAddr=0x80;p=(unsignedchar*)&ICTimerTab;Write_HT1381Addr_1Byte(0x8e,0x00);//控制命令,WP=0,写操作?for(i=0;i7;i++){Write_HT1381Addr_1Byte(sAddr,*p);//秒,分,时,日,月,星期,年p++;sAddr+=2;}Write_HT1381Addr_1Byte(0x8e,0x80);//控制命令,WP=1,写保护?}/********************************************************************上电初始化日期时间********************************************************************/voidInt_Timer(void){//上电读取时钟芯片是否掉电Read_HT1381_NowTimer();if((TimerSec&0x80)!=0){Read_HT1381_NowTimer();if((TimerSec&0x80)!=0){TimerSec=0x00;TimerMin=0x00;TimerHour=0x12;TimerDay=0x01;TimerMonth=0x01;TimerWeek=0x01;TimerYear=0x12;Int_HT1381();//初始化HT1381}}}