📄 main.c
字号:
#include <reg52.h>
#include <stdio.h>
#include "absacc.h"
#include "math.h"
#define port_a 0x0000
#define port_b 0x0100
#define port_c 0x0210
#define port_con 0x0300
#define key_null 0x00
#define key_set 0x06
#define key_add 0x05
#define key_sub 0x03
char key_num=0;
int scantimer=0; //扫描计数单位
int counter=0; //毫秒计数单位
char hour=5;
char mini=12;
char sec=4;
char state=0;//表示当前的状态,0表示工作,其他态表示设置
char key=key_null; //输入的键盘至
char last_pressed_key=key_null;
char scan=1;
char show_loop=0;
char show_buffer[]={ 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00};
char code char_dot[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void moditimer(void);
void showchar(void);
void int0(void);
void main ()
{
int i=9;
EA=1;
ET0=1;//
TMOD=1;//计数器的工作模式
TH0=0xFC;
TL0=0x17;
TR0=1;//定时器的运行控制位
EX0=1;
IT0=1;//外部中断的触发方式选择位
P1=0xff;
XBYTE[port_con]=0x81;
XBYTE[port_a]=0x81;
XBYTE[port_b]=scan;
XBYTE[port_c]=0x8f;
//设置8255
while (i==9){
}
}
void int0( )interrupt 0
{
key=XBYTE[port_c]&0x07;
if (key==key_set){
state++;
if (state>=4){state=0;}}
if (state!=0)
{
/////////////////////////////
if (state==1)
{
if (key==key_add)
{
if (hour<100) hour++;else hour=0;
//hour++;
}
if (key==key_sub)
{
// if (hour==0) hour=23;else
hour--;
}
}
/////////////////////////////
if (state==2)
{
if (key==key_add)
{
if (mini<12) mini++;else mini=1;
}
if (key==key_sub)
{
if (mini==0) mini=12;else mini--;
}
}
/////////////////////////////
if (state==3)
{
if (key==key_add)
{
if(mini==2)
if(hour%400==0)
{if (sec<29) sec++;else sec=1; }
else
if(hour%100==0)
{if (sec<28) sec++;else sec=1; }
else
if(hour%4==0)
{if (sec<29) sec++;else sec=1; }
else
{if (sec<28) sec++;else sec=1; }
else
if(mini<8&&mini%2==1||mini>=8&&mini%2==0)
{if (sec<31) sec++;else sec=1;}
else
{if (sec<30) sec++;else sec=1;}
}
if (key==key_sub)
{ if(mini==2)
if(hour%400==0)
{if (sec==1) sec=29;else sec--;}
else
if(hour%100==0)
{if (sec==1) sec=28;else sec--;}
else
if(hour%4==0)
{if (sec==1) sec=29;else sec--;}
else
{if (sec==1) sec=28;else sec--;}
else
if(mini<8&&mini%2==1||mini>=8&&mini%2==0)
{if (sec==1) sec=31;else sec--;}
else
{if (sec==1) sec=30;else sec--;}
}
}
}//非零状态结束标志
showchar();
}
void timeron( )interrupt 1
{
TH0=0xFC;
TL0=0x17;
//判断是否需要增加一秒
if (state==0)
{
if(counter<1000){ counter=counter+1;}
else
{
counter=0;
moditimer();
show_buffer[2]=0x40;
show_buffer[5]=0x40;
showchar();
}
if (counter==500)
{
show_buffer[2]=0x00;
show_buffer[5]=0x00;
}
}
if( state!=0)
{
show_buffer[2]=0x00;
show_buffer[5]=0x00;
if(counter<800 )counter=counter+1;else counter=0;
if (counter==0) showchar();
if (counter==500)
{
if (state==1){show_buffer[0]=0;show_buffer[1]=0; };
if (state==2){show_buffer[3]=0;show_buffer[4]=0; };
if (state==3){show_buffer[6]=0;show_buffer[7]=0; };
}
}
// 循环显示并且扫描键盘
if (scantimer<2)
{
scantimer++;
}
else
{
//循环的次数并执行显示
if (show_loop<8){show_loop++;} else{show_loop=0 ;}
XBYTE[port_a]=show_buffer[show_loop];
XBYTE[port_b]=~(scan<<show_loop);
scantimer=0;
}
}
void moditimer(void)
{
//先加上秒
sec++;
if(mini==2)
if(hour%400==0)
{ if (sec==30)
{ sec=1;
mini++;
if (mini==13)
{mini=1;
hour++;
if (hour==100){ hour=0; }
}
}}
else
if(hour%100==0)
{ if (sec==29)
{ sec=1;
mini++;
if (mini==13)
{mini=1;
hour++;
if (hour==100){ hour=0; }
}
} }
else
if(hour%4==0)
{ if (sec==30)
{ sec=1;
mini++;
if (mini==13)
{mini=1;
hour++;
if (hour==100){ hour=0; }
}
} }
else
{if (sec==29||sec>30)
{ sec=1;
mini++;
if (mini==13)
{mini=1;
hour++;
if (hour==100){ hour=0; }
}
} }
else
if(mini<8&&mini%2==1||mini>=8&&mini%2==0)
{ if (sec==32)
{ sec=1;
mini++;
if (mini==13)
{ mini=1;
hour++;
if (hour==100){ hour=0; }
}
}}
else
if (sec==31)
{ sec=1;
mini++;
if (mini==13)
{ mini=1;
hour++;
if (hour==100){ hour=0; }
}
}
}//---
void showchar(void)
{
char index=0;
index=sec / 10;
show_buffer[6]=char_dot[index];
index=sec % 10;
show_buffer[7]=char_dot[index];
index=mini / 10;
show_buffer[3]=char_dot[index];
index=mini % 10;
show_buffer[4]=char_dot[index];
index=hour / 10;
show_buffer[0]=char_dot[index];
index=hour % 10;
show_buffer[1]=char_dot[index];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -