📄 test.c
字号:
#include <AT89X51.H>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x00,0x40}; //0x77,0x7c, 0x39,0x5e,0x79,0x71,
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char dispbuf[8]={0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa};
unsigned char dispbuff[8]={0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa};
unsigned char dispbufff[8] ={0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa};
bit flag=1;
bit sflag=1;
bit sflage=1;
unsigned char sec ;
unsigned char dispbitcnt;
unsigned char second;
unsigned char minite;
unsigned char hour;
unsigned int tcnt;
unsigned char mstcnt;
unsigned char i,j;
unsigned char shi;
unsigned char qian;
unsigned char shiwan;
unsigned char one_time=2;//完成一次跳变的时间 秒
unsigned int half_sec;
unsigned char count;
void delay();
void main(void)
{
TMOD=0x22;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
TH1=0x06;
TL1=0x06;
TR1=1;
ET1=1;
EX0=1;
IT0=1;
EA=1;
while(1)
{ P1_1=1;P1_2=1;P1_3=1;
if(P1_4==0)
{
delay();
if(P1_4==0)
sflag=0;
}
if(P1_5==0)
{
delay();
if(P1_5==0)
{
one_time++;if(one_time==99) one_time=3;
}
while(P1_5==0);
}
if(P1_6==0)
{
delay();
if(P1_6==0)
{
one_time--;
if(one_time==0) one_time=3;
}
while(P1_6==0);
}
if(P1_7==0)
{
delay();
if(P1_7==0)
sflag=1;
}
}
}
void t0(void) interrupt 1 using 0
{
mstcnt++;
if(mstcnt==8)
{
mstcnt=0;
P2=~0xff;
if(sflag)
{ if(flag)
P0=~dispcode[dispbuff[dispbitcnt]];
else
P0=~dispcode[dispbuf[dispbitcnt]];
}
else P0=~dispcode[dispbufff[dispbitcnt]];
P2=~dispbitcode[dispbitcnt];
dispbitcnt++;
if(dispbitcnt==8)
{
dispbitcnt=0;
}
}
dispbuf[7]=second%10;
dispbuf[6]=second/10;
dispbuf[5]=11;
dispbuf[4]=minite%10;
dispbuf[3]=minite/10;
dispbuf[2]=11;
dispbuf[1]=hour%10;
dispbuf[0]=hour/10;
dispbuff[2]=shiwan/10;
dispbuff[3]=shiwan%10;
dispbuff[4]=qian/10;
dispbuff[5]=qian%10;
dispbuff[6]=shi/10;
dispbuff[7]=shi%10;
if((shiwan==0)&&(qian==0))
{ dispbuff[2]=10;dispbuff[3]=10;dispbuff[4]=10;dispbuff[5]=10;}
else if(shiwan==0)
{ dispbuff[2]=10;dispbuff[3]=10;}
dispbufff[6]=one_time/10;
dispbufff[7]=one_time%10;
}
void t1(void) interrupt 3 using 2
{
half_sec++;
if(half_sec==2000)
{
half_sec=0;count++;
if(count>=one_time){P1_0=~P1_0;count=0;}
}
tcnt++;
if(tcnt==4000)
{
tcnt=0;
sec++;
if(sec==3)
{sec=0;flag=~flag;}
second++;
if(second==60)
{
second=0;
minite++;
if(minite==60)
{
minite=0;
hour++;
}
}
}
}
void it0(void) interrupt 0
{
shi++;
if(shi==100)
{
shi=0;
qian++;
if(qian==100)
{
qian=0;
shiwan++;
}
}
}
void delay()
{
for(j=248;j!=0;j--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -