📄 00c.c
字号:
int length=0,TimeCount=0,key_value=100;
unsigned Tran=0x0000,Reset=0x0000;
int sec=0,minu=0,hour=0,day=1,month=1,year=2001;
int sec1=0,sec2=0,minu1=0,minu2=0,hour1=0,hour2=0,day1=0,day2=0,month1=0,month2=0,year1=0,year2=0,year3=0,year4=0;
int num[11]={0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f,0x0000};
int single[8]={0x0000,0x0100,0x0200,0x0300,0x0400,0x0500,0x0600,0x0700};
int timeout[8]={10,10},dateout[8];
//============================================================
//????
//============================================================
void Timer() //计时器计数进位原理
{
int maxday=0;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
maxday=31;
break;
case 4:
case 6:
case 9:
case 11:
maxday=30;
break;
case 2:
if(year%400==0 || year%4==0 && year%100!=0) maxday=29;
else maxday=28;
break;
}
if(sec1>=10) {sec2+=1;sec1=0;}
if(sec2>=6) {minu1+=1;sec2=0;}
if(minu1>=10) {minu2+=1;minu1=0;}
if(minu2>=6) {hour+=1;minu2=0;}
if(hour>=24)
{
hour=0;
if(day<maxday) day+=1;
else {day=1;month+=1;}
if(month>=13) {year==1;month=1;}
if(year>=10000) year=2001;
}
}
///////////////////////////////////
//////?????
void Timer0() //显示数字转换计算, 根据hour,minu,sec,等计算输出数组
{ int k;
k=0x0001;
asm("[0x7012]=%0" //清看门狗
:
:"r"(k)
);
hour1=hour%10;
hour2=hour/10;
day1=day%10;
k=0x0001;
asm("[0x7012]=%0" //清看门狗
:
:"r"(k)
);
day2=day/10;
month1=month%10;
month2=month/10;
year1=year%10;
k=0x0001;
asm("[0x7012]=%0" //清看门狗
:
:"r"(k)
);
year2=year%100-year1;
year4=year/1000;
year3=year/100-year4*10;
k=0x0001;
asm("[0x7012]=%0" //清看门狗
:
:"r"(k)
);
timeout[2]=hour2; timeout[3]=hour1; timeout[4]=minu2; ///送入显示数组
timeout[5]=minu1; timeout[6]=sec2; timeout[7]=sec1;
dateout[0]=year4; dateout[1]=year3; dateout[2]=year2; dateout[3]=year1;
dateout[4]=month2; dateout[5]=month1; dateout[6]=day2; dateout[7]=day1;
}
//==============================================================
//??led??
//==============================================================
void Output() //根据输出显示数组
{
int i,j,k;
int n1=0,n2=0,n3=0,m=0;
for(i=0;i<=7;i++)
{
if(Tran==0) n1=timeout[i]; //??
else n1=dateout[i]; //??
n2=single[i];
n3=num[n1];
m=n3 | n2;
asm(".include hardware.inc");
asm("[P_IOB_Data]=%0" //IOB???????
:
:"r"(m)
);
for(j=0;j<=80;j++)
{
k=0x0001;
asm("[0x7012]=%0" //清看门狗
:
:"r"(k)
);
}
}
}
//==============================================================
//????
//==============================================================
void Reset0()
{
int i,j,k;
//OffIRQ5(); //??? ??????????????
length=0;
if(Tran==0) //??
for(i=0;i<=7;i++)
timeout[i]=10; //只改变输出显示数组的值
else //??
for(i=0;i<=7;i++)
dateout[i]=10;
Reset=0xffff;
//for(j=0;j<=1000;j++);
// key_value=100;
}
void Tran0()
{
int k;
Tran^=0xffff;
k=0x0001;
asm("[0x7012]=%0" //清看门狗
:
:"r"(k)
);
key_value=100;
}
void Adjust()
{
int i;
if(Tran==0)
{ //??
switch(length)
{
case 0:
hour2=key_value;
break;
case 1:
hour1=key_value;
break;
case 2:
minu2=key_value;
break;
case 3:
minu1=key_value;
break;
case 4:
sec2=key_value;
break;
case 5:
sec1=key_value;
break;
default:
break;
}
timeout[length+2]=key_value;
for(i=length+3;i<=7;i++) {timeout[i]=10;}
length++;
if(length>5)
{
length=0;
Reset=0x0000;
key_value=100;
sec=sec2*10+sec1;
minu=minu2*10+minu1;
hour=hour2*10+hour1;
}
}
//
// length++;
//for(i=0;i<=1000;i++);
//key_value=100;
//}
if(Tran!=0)
{ //??
switch(length)
{
case 0:
year4=key_value;
break;
case 1:
year3=key_value;
break;
case 2:
year2=key_value;
break;
case 3:
year1=key_value;
break;
case 4:
month2=key_value;
break;
case 5:
month1=key_value;
break;
case 6:
day2=key_value;
break;
case 7:
day1=key_value;
break;
default:
break;
}
dateout[length]=key_value;
for(i=length+1;i<=7;i++) {dateout[i]=10;}
length++;
if(length>7)
{
length=0;
Reset=0x0000;
key_value=100;
day=day2*10+day1;
month=month2*10+month1;
year=year4*1000+year3*100+year2*10+year1;
}
}
//for(i=0;i<=1000;i++);
//key_value=100;
///if(length>=7)
// {
//length=0;
//Initsystem(); //?????
// return;
//}
}
int main(void)
{
// int k;
//int i,k,p,q;
InitIO();
Initsystem();
while(1)
{
int k;
if(Reset==0x0000)
{
Timer();
Timer0();
// k=0x0001;
// asm("[0x7012]=%0" //清看门狗
// :
// :"r"(k)
// );
}
scankeys();
// p=key_value0;
//for(i=0;i<=100;i++)
//{
// k=0x0001;
//asm("[0x7012]=%0" //清看门狗
// :
// :"r"(k)
// );
// }
//scankeys();
//q=key_value0;
//if(p==q)
//key_value=key_value0;
//else key_value=100;
if(key_value==99 && Reset==0x0000) Tran0(); //Transer
if(key_value==98 && Reset==0x0000) Reset0(); //Reset
if((key_value!=98)&&(key_value!=99)&&(key_value!=100)&&( Reset!=0x0000)) Adjust();
Output();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -