📄 ds12887.c
字号:
应用范围:
入口参数:
出口参数:
*************************************************************/
void InitDs12c887()
{
StartDs12c887();
write_ds(chRegB,chRegB | MASK_SETB_SET);/* 禁止刷新 */
write_ds(chRegB,chRegB & MASK_CLR_DM | MASK_SETB_2412 & MASK_CLR_DSE);
/* 使用BCD码格式、24小时模式、不使用夏令时 */
write_ds(chCenturyChannel,0x21); /* 设置为21世纪 */
write_ds(chRegB,chRegB & MASK_CLR_SET);
}
/*************************************************************
函数功能:该函数用来从时钟芯片读取秒字节
应用范围:
入口参数:
出口参数:
*************************************************************/
unsigned char GetSeconds(void)
{
return(read_ds(chSecondsChannel));
}
/*************************************************************
函数功能:该函数用来从时钟芯片读取分字节
应用范围:
入口参数:
出口参数:
*************************************************************/
unsigned char GetMinutes(void)
{
return(read_ds(chMinutesChannel));
}
/*************************************************************
函数功能:该函数用来从时钟芯片读取小时字节
应用范围:
入口参数:
出口参数:
*************************************************************/
unsigned char GetHours(void)
{
return(read_ds(chHoursChannel));
}
/*************************************************************
函数功能:该函数用来从时钟芯片读取日字节
应用范围:
入口参数:
出口参数:
*************************************************************/
unsigned char GetDate(void)
{
return(read_ds(chDateChannel));
}
/*************************************************************
函数功能:该函数用来从时钟芯片读取月字节
应用范围:
入口参数:
出口参数:
*************************************************************/
unsigned char GetMonth(void)
{
return(read_ds(chMonthChannel));
}
/*************************************************************
函数功能:该函数用来从时钟芯片读取年字节
应用范围:
入口参数:
出口参数:
*************************************************************/
unsigned char GetYear(void)
{
return(read_ds(chYearChannel));
}
/*************************************************************
函数功能:该函数用来从时钟芯片读取世纪字节
应用范围:
入口参数:
出口参数:
*************************************************************/
unsigned char GetCentury(void)
{
return(read_ds(chCenturyChannel));
}
/*************************************************************
函数功能:该函数用来设置时钟芯片的时间
应用范围:
入口参数:chSeconds、chMinutes、chHours是设定时间的压缩BCD码
出口参数:
*************************************************************/
void SetTime(unsigned char chSeconds,unsigned char chMinutes,unsigned char
chHours)
{
write_ds(chRegB,chRegB | MASK_SETB_SET); /* 禁止刷新 */
write_ds(chSecondsChannel,chSeconds);
write_ds(chMinutesChannel,chMinutes);
write_ds(chHoursChannel,chHours);
write_ds(chRegB,chRegB & MASK_CLR_SET);/* 使能刷新 */
}
/*************************************************************
函数功能:该函数用来设置时钟芯片的日期
应用范围:
入口参数:chDate、chMonth、chYear是设定日期的压缩BCD码
出口参数:
*************************************************************/
void SetDate(unsigned char chDate,unsigned char chMonth,unsigned char chYear)
{
write_ds(chRegB,chRegB | MASK_SETB_SET); /* 禁止刷新 */
write_ds(chDateChannel,chDate);
write_ds(chMonthChannel,chMonth);
write_ds(chYearChannel,chYear);
write_ds(chRegB,chRegB & MASK_CLR_SET); /* 使能刷新 */
}
/*******************************************************************/
/* */
/* 时间 正常显示菜单 */
/* */
/*******************************************************************/
void Natural_Menu ()
{
uchar m;
LCD1602_initial(); //初始化LCD
LCD1602_gotoXY(1,0); //设置显示位置为第一行的第1个字符
LCD1602_sendstr("DATE: 2008-08-08");
// for(m=0;m<16;m++)
// LCD1602_sendbyte(iDat,cdis1[m]);
LCD1602_gotoXY(2,0); //设置显示位置为第二行第1个字符
LCD1602_sendstr("TIME: 08: 08: 08");
// for(m=0;m<16;m++)
// LCD1602_sendbyte(iDat,cdis2[m]); //显示字符
}
/*******************************************************************/
/* */
/* 日期 正常显示数据 */
/* */
/*******************************************************************/
void daydis()
{
display[0]=(temp_data1[0]>>4)+0x30;
display[1]=(temp_data1[0]&0x0F)+0x30;
display[2]=(temp_data1[1]>>4)+0x30;
display[3]=(temp_data1[1]&0x0F)+0x30;
display[4]=(temp_data1[2]>>4)+0x30;
display[5]=(temp_data1[2]&0x0F)+0x30;
LCD1602_gotoXY(1,8);
LCD1602_sendbyte(iDat,display[0]);
LCD1602_sendbyte(iDat,display[1]);
LCD1602_gotoXY(1,11);
LCD1602_sendbyte(iDat,display[2]);
LCD1602_sendbyte(iDat,display[3]);
LCD1602_gotoXY(1,14);
LCD1602_sendbyte(iDat,display[4]);
LCD1602_sendbyte(iDat,display[5]);
}
/*******************************************************************/
/* */
/* 时间 正常显示数据 */
/* */
/*******************************************************************/
void timedis()
{
display[0]=(temp_data2[0]>>4)+0x30;
display[1]=(temp_data2[0]&0x0F)+0x30;
display[2]=(temp_data2[1]>>4)+0x30;
display[3]=(temp_data2[1]&0x0F)+0x30;
display[4]=(temp_data2[2]>>4)+0x30;
display[5]=(temp_data2[2]&0x0F)+0x30;
LCD1602_gotoXY(2,6);
LCD1602_sendbyte(iDat,display[0]);
LCD1602_sendbyte(iDat,display[1]);
LCD1602_gotoXY(2,10);
LCD1602_sendbyte(iDat,display[2]);
LCD1602_sendbyte(iDat,display[3]);
LCD1602_gotoXY(2,14);
LCD1602_sendbyte(iDat,display[4]);
LCD1602_sendbyte(iDat,display[5]);
}
/*************************************************************
函数功能:主函数
应用范围:
入口参数:
出口参数:
*************************************************************/
void main(void)
{
unsigned char sec,sec_bak=sec;
Board_init();
PORTA=0XFF;
PORTC=0X1F;
InitDs12c887();
SetDate(0x15,0x10,0x08);
SetTime(0x10,0x10,0x11);
Natural_Menu ();
PORTD=0xFF;
while(1)
{
PORTC&=0X1F;
sec=GetSeconds();
if(sec!=sec_bak)
{
sec_bak=sec;
temp_data1[0]=GetYear();
temp_data1[1]=GetMonth();
temp_data1[2]=GetDate();
temp_data2[0]=GetHours();
temp_data2[1]=GetMinutes();
temp_data2[2]=GetSeconds();
daydis();
timedis();
if(sec%2)
{
LCD1602_gotoXY(2,12);
LCD1602_sendstr(" ");
PORTC|=BIT(PC3);
}
else
{
LCD1602_gotoXY(2,12);
LCD1602_sendstr(":");
PORTC&=~BIT(PC3);
}
PORTD=0xFF;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -