📄 mian.c
字号:
asm(".include hardware.inc");
int sheding(int t,int n);
int Tabel[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//
int Month[12]={31,28,31,30,31,30,31,31,30,31,30,31};//
int table[14];//={0x0000,0x0100,0x0200,0x0300,0x0400,0x0500,0x0600,0x0700,0x0200,0x0300,0x0400,0x0500,0x0600,0x0700};
int Sec=0,Hour=0,Min=0,Day=0,Mon=0,Year=0;
//int Worked=1; //键值处理标志
int State=1; //显示状态标志
int Funcflag=1; //进位判断标志
int Keycode=0x0000; //键值保存变量
int stopflag=0; //暂听继续标志,1表示已暂停
int Flag=0; //半秒标志位,1表示已经有一次半秒响应
int Runyear=0; //闰年标志
int Keydown=1; //按键标志
int temp2 = -1;
int temp3;
void Keywork (void);
void Leap_year (int);
void display_1 (void);
void display_2 (void);
//void delay(void);
void main (void)
{
SystemInit();
while(1)
{
if (State==1)
display_1();
else if (State==2)
display_2();
if (Keydown==1&&Funcflag==1)
{
Key_scan();
if(Keydown==0)
Keywork();
}
}
}
void Function (void)
{
if (Sec==60)
{
Sec=0;
Min++;
}
if (Min==60)
{
Min=0;
Hour++;
}
if (Hour>=24)
{
Hour=0;
Day++;
}
if (Day>=Maxday(Mon)+1)
{
Day=1;
Mon++;
}
if (Mon>=13)
{
Mon=1;
Year++;
Leap_year (Year);
}
Funcflag=1;
}
void Leap_year (int Year)
{
if (Year%100==0)
{
if (Year&400==0)
Runyear=1;
else
Runyear=0;
}
else
{
if (Year%4==0)
Runyear=1;
else
Runyear=0;
}
}
void Delay(void)
{
int i=0;
for(;i<190;i++);
}
void display_1 (void)
{
int temp,i;
asm("[P_Watchdog_Clear]=%0"::"r"(0x0001));
temp=Sec%10;
temp=Tabel[temp];
temp|=0x0700;
table[0]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
temp=Sec/10;
temp=Tabel[temp];
temp|=0x0600;table[1]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
temp=Min%10;
temp=Tabel[temp];
temp|=0x0500;
temp|=0x0080;table[2]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
temp=Min/10;
temp=Tabel[temp];
temp|=0x0400;table[3]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
temp=Hour%10;
temp=Tabel[temp];
temp|=0x0300;
temp|=0x0080;table[4]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
temp=Hour/10;
temp=Tabel[temp];
temp|=0x0200;table[5]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
asm("[P_IOB_Data]=%0"::"r"(0x0100));
Delay();
asm("[P_IOB_Data]=%0"::"r"(0x0000));
Delay();
if(temp2>=0&&temp2<=5)
{
table[temp2]&=0x0f00;
for(i=0;i<=5;i++)
{
asm("[P_IOB_Data]=%0"::"r"(table[i]));
Delay();
}
asm("[P_IOB_Data]=%0"::"r"(0x0100));
Delay();
asm("[P_IOB_Data]=%0"::"r"(0x0000));
Delay();
}
}
void display_2 (void)
{
int temp,i;
int a,b,c,d,a1,b1,a2,b2;
asm("[P_Watchdog_Clear]=%0"::"r"(0x0001));
d = Year;a=0;b=0;c=0;
while(d>=1000)
{
d-=1000;
a+=1;
}
while(d>=100)
{
d-=100;
b+=1;
}
while(d>=10)
{
d-=10;
c+=1;
}
a1 = Day;b1=0;
while(a1>=10)
{
a1-=10;
b1+=1;
}
a2 = Mon;b2=0;
while(a2>=10)
{
a2-=10;
b2+=1;
}
temp=a1;
temp=Tabel[temp];
temp|=0x0700;table[6]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
temp=b1;
temp=Tabel[temp];
temp|=0x0600;table[7]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
temp=a2;
temp=Tabel[temp];
temp|=0x0500;
temp|=0x0080;table[8]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
temp=b2;
temp=Tabel[temp];
temp|=0x0400;table[9]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
temp=d;
temp=Tabel[temp];
temp|=0x0300;
temp|=0x0080;table[10]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
temp=c;
temp=Tabel[temp];
temp|=0x0200;table[11]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
temp=b;
temp=Tabel[temp];
temp|=0x0100;table[12]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
temp=a;
temp=Tabel[temp];
temp|=0x0000;table[13]=temp;
asm("[P_IOB_Data]=%0"::"r"(temp));
Delay();
if(temp2>=6&&temp2<=13)
{
table[temp2]&=0x0f00;
for(i=6;i<=13;i++)
{
asm("[P_IOB_Data]=%0"::"r"(table[i]));
Delay();
}
}
}
void delay()
{
int i = 0;
for(;i<500;i++);
}
int Maxday (int Mon)
{
if (Mon!=2)
return Month[Mon-1];
else
return Month[1]+Runyear;
}
void Keywork (void)
{
switch (Keycode)
{
case 0x00bb:{
if(State == 1)
State = 2;
else State = 1;
break;
}
case 0x00ee:
sheding(temp2,1);
break;
case 0x00de:sheding(temp2,2);
break;
case 0x00be:{sheding(temp2,3);
break;}
case 0x007e:{sheding(temp2,4);
break;}
case 0x00ed:{sheding(temp2,5);
break;}
case 0x00dd:{sheding(temp2,6);
break;}
case 0x00bd:{sheding(temp2,7);
break;}
case 0x007d:{sheding(temp2,8);
break;}
case 0x00eb:{sheding(temp2,9);
break;}
case 0x00db:{sheding(temp2,0);
break; }
case 0x007b:{
if(stopflag==0)
{
asm("[P_INT_Ctrl]=%0"::"r"(0x0080));
stopflag=1;Keycode=0;
break;
}
else
{
asm("[P_INT_Ctrl]=%0"::"r"(0x0088));
stopflag=0;Keycode=0;
break;
}
}
case 0x00e7:
if(temp2==13)temp2=-1;
else temp2++;
break;
case 0x00d7:
if(temp2==-1)temp2=13;
else temp2--;
break;
case 0x00b7:
temp2 = -1;
break;
default: break;
}
Keycode = 0x0000;
} // 0x0077
int sheding(int t,int n)
{
int a;
if(t < 0)
return 0;
if((t == 1||t == 3)&&n>5)
return 0;
if(t == 5&&n>2)
return 0;
if(t == 7&&n>3)
return 0;
if(t == 9&&n>1)
return 0;
switch(t)
{
case 0:a=Sec/10;
Sec=a*10+n;
break;
case 1:a=Sec%10;
Sec=a+10*n;
break;
case 2:a=Min/10;
Min=a*10+n;
break;
case 3:a=Min%10;
Min=a+10*n;
break;
case 4:a=Hour/10;
Hour=a*10+n;
break;
case 5:a=Hour%10;
Hour=a+10*n;
break;
case 6:a=Day/10;
Day=a*10+n;
break;
case 7:a=Day%10;
Day=a+10*n;
break;
case 8:a=Mon/10;
Mon=a*10+n;
break;
case 9:a=Mon%10;
Mon=a+10*n;
break;
case 10:a=Year/10;
Year=a*10+n;
break;
case 11:a=Year/100*100+Year%10;
Year=a+10*n;
break;
case 12:a=Year/10*10+Year%100;
Year=a+n*100;
break;
case 13:a=Year%1000;
Year=a+1000*n;
break;
default: break;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -