#include"ALL.h"
/********************数据定义区域*********************/
u8 time_buf[8]={0x20,0x17,0x04,0x01,0x12,0x00,0x00,0x06};//初始时间2017年04月01日12点00分00秒星期六
u8 dis_time_buf[16]={0};//LCD显示字符
/********************函数定义区域*********************/
void Init_mcu();
void delay(u16 Count);//延时函数
void DS1302_write_time(void);
void DS1302_read_time();
void DS1302_UpData(void);
void Display(void);
void Init_mcu()
{
PF_DDR_DDR0=1; //配置PF0为输出模式
PF_CR1_C10=1; //配置PF0为推挽输出模式
PF_CR2_C20=0; //配置PF0低速率输出
PF_DDR_DDR3=1; //配置PF3为输出模式
PF_CR1_C13=1; //配置PF3为推挽输出模式
PF_CR2_C23=0; //配置PF3低速率输出
LCDRW=0; //配置LCD1602为写入模式
PF_DDR_DDR4=1; //配置PF4为输出模式
PF_CR1_C14=1; //配置PF4为推挽输出模式
PF_CR2_C24=0; //配置PF4低速率输出
PB_DDR=0xFF; //配置PB端口为输出模式
PB_CR1=0xFF; //配置PB端口为推挽输出模式
PB_CR2=0x00; //配置PB端口低速率输出
PB_ODR=0xFF; //初始化PB端口全部输出高电平
LCDDATA=0xFF; //初始化PB端口全部输出高电平
}
void DS1302_write_time(void)
{
DS1302_write_byte(DS1302_control_add,0x00); //关闭写保护
DS1302_write_byte(DS1302_sec_add,0x80); //暂停时钟
//DS1302_write_byte(DS1302_charger_add,0xa9); //涓流充电
DS1302_write_byte(DS1302_year_add,time_buf[1]); //年
DS1302_write_byte(DS1302_month_add,time_buf[2]); //月
DS1302_write_byte(DS1302_date_add,time_buf[3]); //日
DS1302_write_byte(DS1302_hr_add,time_buf[4]); //时
DS1302_write_byte(DS1302_min_add,time_buf[5]); //分
DS1302_write_byte(DS1302_sec_add,time_buf[6]); //秒
DS1302_write_byte(DS1302_day_add,time_buf[7]); //周
DS1302_write_byte(DS1302_control_add,0x80); //打开写保护
printf("写入成功\n");
}
/****************************************************************/
//从DS302读出时钟数据函数DS1302_read_time(),无形参,无返回值
/****************************************************************/
void DS1302_read_time(void)
{
time_buf[1]=DS1302_read_byte(DS1302_year_add); //年
time_buf[2]=DS1302_read_byte(DS1302_month_add); //月
time_buf[3]=DS1302_read_byte(DS1302_date_add); //日
time_buf[4]=DS1302_read_byte(DS1302_hr_add); //时
time_buf[5]=DS1302_read_byte(DS1302_min_add); //分
time_buf[6]=(DS1302_read_byte(DS1302_sec_add))&0x7f;
//秒,屏蔽秒的第7位,避免超出59
time_buf[7]=DS1302_read_byte(DS1302_day_add); //周
}
void DS1302_UpData(void)
{
DS1302_read_time();//读取时间
dis_time_buf[0]=(time_buf[0]>>4); //年
dis_time_buf[1]=(time_buf[0]&0x0F);
dis_time_buf[2]=(time_buf[1]>>4);
dis_time_buf[3]=(time_buf[1]&0x0F);
dis_time_buf[4]=(time_buf[2]>>4); //月
dis_time_buf[5]=(time_buf[2]&0x0F);
dis_time_buf[6]=(time_buf[3]>>4); //日
dis_time_buf[7]=(time_buf[3]&0x0F);
dis_time_buf[14]=(time_buf[7]&0x07); //星期
dis_time_buf[8]=(time_buf[4]>>4); //时
dis_time_buf[9]=(time_buf[4]&0x0F);
dis_time_buf[10]=(time_buf[5]>>4); //分
dis_time_buf[11]=(time_buf[5]&0x0F);
dis_time_buf[12]=(time_buf[6]>>4); //秒
dis_time_buf[13]=(time_buf[6]&0x0F);
}
/****************************************************************/
//1602液晶显示DS1302时间函数Display(),无形参,无返回值
/****************************************************************/
void Display(void)
{
//LCD1602第1行显示内容
LCD1602_DIS_CHAR(1,0,dis_time_buf[0]+'0');
LCD1602_DIS_CHAR(1,1,dis_time_buf[1]+'0');
LCD1602_DIS_CHAR(1,2,dis_time_buf[2]+'0');
LCD1602_DIS_CHAR(1,3,dis_time_buf[3]+'0');
LCD1602_DIS_CHAR(1,4,'-');
LCD1602_DIS_CHAR(1,5,dis_time_buf[4]+'0');
LCD1602_DIS_CHAR(1,6,dis_time_buf[5]+'0');
LCD1602_DIS_CHAR(1,7,'-');
LCD1602_DIS_CHAR(1,8,dis_time_buf[6]+'0');
LCD1602_DIS_CHAR(1,9,dis_time_buf[7]+'0');
LCD1602_DIS_CHAR(1,10,'W');
LCD1602_DIS_CHAR(1,11,'e');
LCD1602_DIS_CHAR(1,12,'e');
LCD1602_DIS_CHAR(1,13,'k');
LCD1602_DIS_CHAR(1,14,':');
LCD1602_DIS_CHAR(1,15,dis_time_buf[14]+'0');
//LCD1602第2行显示内容
LCD1602_DIS_CHAR(2,0,dis_time_buf[8]+'0');
LCD1602_DIS_CHAR(2,1,dis_time_buf[9]+'0');
LCD1602_DIS_CHAR(2,2,':');
LCD1602_DIS_CHAR(2,3,dis_time_buf[10]+'0');
LCD1602_DIS_CHAR(2,4,dis_time_buf[11]+'0');
LCD1602_DIS_CHAR(2,5,':');
LCD1602_DIS_CHAR(2,6,dis_time_buf[12]+'0');
LCD1602_DIS_CHAR(2,7,dis_time_buf[13]+'0');
LCD1602_DIS_CHAR(2,10,Tem_u16/10+'0');
LCD1602_DIS_CHAR(2,11,Tem_u16%10+'0');
}
void main( void )
{
CLK_CKDIVR=0;//选定HSI时钟源配置频率为16MHz
delay(1000);//延时等待时钟稳定
UART1_Init();//初始化串口3
delay(1000);//延时等待配置稳定
Init_mcu();
LCD1602_init();
DS1302_init(); //DS1302初始化
DS1302_write_time(); //写入初始值
delay(100);//延时等待配置稳定
while(1)
{
DS1302_UpData();
Display();
printf("%d%d年%d月%d日%d时%d分%d秒 \r\n",time_buf[0],time_buf[1],time_buf[2],time_buf[3],time_buf[4],time_buf[5],time_buf[6]);
}
}