📄 ds12c887._c
字号:
#include <iom128v.h>
#include <macros.h>
#include"DS12C887.H"
#include"char.h"
#include"lcd.h"
#include"chinese.h"
#define uchar unsigned char
uchar second,second10,second01,minute,minute10,minute01,hour,hour10,hour01;
uchar weekday,weekday10,weekday01,monthday,monthday10,monthday01,month,month10,month01,year,year10,year01;
//**********************************延时函数**************************************/
void delayds12887(uchar i)
{
while(--i)
{;}
}
//*****************************写DS12887时间寄存器函数****************************/
void Write_Regtime(uchar Second,uchar Minute,uchar Hour,uchar Weekday,uchar Monthday,uchar Month,uchar Year)
{
SECOND=Second; //写秒初值
MINUTE=Minute; //写分初值
HOUR=Hour; //写小时初值
WEEKDAY=Weekday; //写星期天数初值
MONTHDAY=Monthday; //写月天数初值
MONTH=Month; //写月初值
YEAR=Year; //写年初值
}
//*************************写DS12887特殊寄存器A,B,C,D函数**********************/
void Write_Regspecial(uchar regA,uchar regB,uchar regC,uchar regD)
{
REG_A=regA;
REG_B=regB;
REG_C=regC;
REG_C=regD;
}
//******************************读DS12887时间寄存器函数*****************************/
Read_RegSec(void)
{
return SECOND;
}
Read_RegMin(void)
{
return MINUTE;
}
Read_RegHour(void)
{
return HOUR;
}
Read_RegWeekday(void)
{
return WEEKDAY;
}
Read_RegMonthday(void)
{
return MONTHDAY;
}
Read_RegMonth(void)
{
return MONTH;
}
Read_RegYear(void)
{
return YEAR;
}
/**********************************************************************************/
void juddisplay(uchar number,uchar y,uchar x) //(要显示的字符,X位置,Y位置)
{
switch(number) //判断数字是几,并显示在指定位置上
{
case 0x00:display_char(n01,n02,y,x);break;
case 0x01:display_char(n11,n12,y,x);break;
case 0x02:display_char(n21,n22,y,x);break;
case 0x03:display_char(n31,n32,y,x);break;
case 0x04:display_char(n41,n42,y,x);break;
case 0x05:display_char(n51,n52,y,x);break;
case 0x06:display_char(n61,n62,y,x);break;
case 0x07:display_char(n71,n72,y,x);break;
case 0x08:display_char(n81,n82,y,x);break;
case 0x09:display_char(n91,n92,y,x);break;
}
}
void readtime(void)
{
second=Read_RegSec();
second10=(second&0xf0)>>4; //取得秒的十位数字
second01=second&0x0f; //取得秒的个位数字
minute=Read_RegMin();
minute10=(minute&0xf0)>>4; //取得分的十位数字
minute01=minute&0x0f; //取得分的个位数字
hour=Read_RegHour();
hour10=(hour&0xf0)>>4; //取得时的十位数字
hour01=hour&0x0f; //取得时的个位数字
weekday=Read_RegWeekday();
weekday10=(weekday&0xf0)>>4; //取得星期的十位数字
weekday01=weekday&0x0f;
monthday=Read_RegMonthday();
monthday10=(monthday&0xf0)>>4;
monthday01=monthday&0x0f;
month=Read_RegMonth();
month10=(month&0xf0)>>4;
month01=month&0x0f;
year=Read_RegYear();
year10=(year&0xf0)>>4;
year01=year&0x0f;
}
void displaytime(void)
{
juddisplay(year10,0,0);
juddisplay(year01,0,1);
juddisplay(month10,0,4);
juddisplay(month01,0,5);
juddisplay(monthday10,0,8);
juddisplay(monthday01,0,9);
juddisplay(weekday10,2,5);
juddisplay(weekday01,2,6);
juddisplay(hour10,4,3);
juddisplay(hour01,4,4);
juddisplay(minute10,4,6);
juddisplay(minute01,4,7);
juddisplay(second10,4,9);
juddisplay(second01,4,10);
}
void main(void)
{
init_devices();
LCD_Clean();
LCD_Init();
delayds12887(20000);
Write_Regtime(0x00,0x41,0x21,0x06,0x07,0x07,0x07);
Write_Regspecial(0x20,0x00,0x00,0x00); //寄存器A写入0X20
display_char(maohao1,maohao2,4,8); //显示冒号
display_char(maohao1,maohao2,4,5); //显示冒号
display_chinese(nian1,nian2,0,1);
display_chinese(yue1,yue2,0,3);
display_chinese(ri1,ri2,0,5);
display_chinese(xing1,xing2,1,0);
display_chinese(qi1,qi2,1,1);
display_char(maohao1,maohao2,2,4);
while(1)
{
readtime();
displaytime();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -