程序贴下来. 头文件: #define PCPORT (GPIOC) #define DS7_SCLK (GPIO_PIN_3) //DS1302时钟 #define DS6_IO (GPIO_PIN_7) // DS1302 数据 #define PGPORT (GPIOG) #define DS5_RST (GPIO_PIN_0) //DS1302片选/复位
MAIN文件:
#include "stm8_lib.h" #include "mycommon.h" u8 Settimebuf[7],Gettimebuf[7]; void Delay (u16 nCount); void Delay(u16 nCount) { while (nCount != 0) { nCount--; } }
void init(void) { GPIO_Init_TypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT_PP_LOW_SLOW; GPIO_InitStructure.GPIO_Pin = (DS7_SCLK); GPIO_Init(PCPORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode=GPIO_MODE_OUT_OD_LOW_FAST;//GPI O_MODE_OUT_OD_HIZ_FAST ; GPIO_InitStructure.GPIO_Pin = (DS6_IO); GPIO_Init(PCPORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT_PP_LOW_SLOW; GPIO_InitStructure.GPIO_Pin = (DS5_RST); GPIO_Init(PGPORT, &GPIO_InitStructure); //---------------------------------------------------------------- //HT1381 //----------------------------------------------------------------
void W8bit_HT1381(u8 wrdata) { u8 i; for(i=0; i<8; i++) { if(wrdata&0x01){GPIO_WriteHigh(PCPORT,DS6_IO );} else{GPIO_WriteLow(PCPORT,DS6_IO );} Delay(5); GPIO_WriteHigh(PCPORT,DS7_SCLK); Delay(5); GPIO_WriteLow(PCPORT,DS7_SCLK); Delay(5); wrdata >> 1; } } u8 R8bit_HT1381(void) { u8 i,rddata; GPIO_WriteHigh(PCPORT,DS6_IO ); for(i=0; i<8; i++) { rddata >>=1; Delay(5); if ((GPIO_ReadInputData(PCPORT) & DS6_IO) != (u8)0x00) { rddata |=0x80; } GPIO_WriteHigh(PCPORT,DS7_SCLK); Delay(5); GPIO_WriteLow(PCPORT,DS7_SCLK); Delay(5); } return(rddata); } void Write1381(u8 Addr, u8 Wdata) { GPIO_WriteLow(PGPORT,DS5_RST); Delay(5); GPIO_WriteLow(PCPORT,DS7_SCLK); Delay(5); GPIO_WriteHigh(PGPORT,DS5_RST); W8bit_HT1381(Addr); W8bit_HT1381(Wdata); GPIO_WriteHigh(PCPORT,DS7_SCLK); Delay(5); GPIO_WriteLow(PCPORT,DS7_SCLK); Delay(5); GPIO_WriteLow(PGPORT,DS5_RST); } u8 Read1381(u8 Addr) { u8 rddata; GPIO_WriteLow(PGPORT,DS5_RST); Delay(5); GPIO_WriteLow(PCPORT,DS7_SCLK); Delay(5); GPIO_WriteHigh(PGPORT,DS5_RST); Delay(5); W8bit_HT1381(Addr); rddata = R8bit_HT1381(); Delay(5); GPIO_WriteHigh(PCPORT,DS7_SCLK); Delay(5); GPIO_WriteLow(PCPORT,DS7_SCLK); Delay(5); GPIO_WriteLow(PGPORT,DS5_RST); return(rddata); }
void Set1381(u8 *pSecDa) { u8 i; u8 Addr = 0x80; Write1381(0x8e,0x00); /* 控制命令,WP=0,写操作?*/ for(i =7;i>0;i--) { Write1381(Addr,*pSecDa); /* 秒 分 时 日 月 星期 年 */
pSecDa++; Addr +=2; } Write1381(0x8e,0x80); /* 控制命令,WP=1,写保护?*/ } /******************************************************************** * * 名称: v_Get1381 * 说明: * 功能: 读取HT1381当前时间 * 调用: uc_R1381() * 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B * 返回值: 无 ***********************************************************************/ void Get1381(void) { u8 i; u8 Addr = 0x81; for (i=0;i<7;i++) { Gettimebuf = Read1381(Addr);/*格式为: 秒 分 时 日 月 星期 年 */ Addr += 2; } }
//---------------------------------------------------------------- void main(void) { u8 i; u8 *pText; init(); Delay(0xFFFF); Delay(0xFFFF); Gettimebuf[6] = 0x0; //年 Gettimebuf[5] = 0x0; //周 Gettimebuf[4] = 0x0; //月 Gettimebuf[3] = 0x0; //日 Gettimebuf[2] = 0x0; //时 Gettimebuf[1] = 0x0; //分 Gettimebuf[0] = 0x30;//秒 Settimebuf[6] = 0x08; //年 Settimebuf[5] = 0x01; //周 Settimebuf[4] = 0x12; //月 Settimebuf[3] = 0x08; //日 Settimebuf[2] = 0x21; //时 Settimebuf[1] = 0x29; //分 Settimebuf[0] = 0x30;//秒 Set1381(Settimebuf); while (1) { Get1381(); } }
/** * @brief Reports the name of the source file and the source line number where * the assert error has occurred. * User can add his own implementation to report the file name and line number. * ex: printf("Wrong parameters value: file %s on line %d
", file, line) * @retval void None * @par Required preconditions: * None * @par Called functions: * None */ #ifdef FULL_ASSERT void assert_failed(u8 *file, u16 line) #else void assert_failed(void) #endif { /* Put enter your own code to manage an assert error */ }
/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
|