?? time.c
字號:
#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int
#include<intrins.h>
sbit ws1=P2^7;
sbit ws2=P2^6;
sbit ws3=P2^5;
sbit ws4=P2^4;
sbit FM=P3^7;
uchar BUFFER[4];
uchar BUFFER1[4];
uchar code display_taber[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code display_taber1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uchar flag;
uchar i,j,n,p,q;
uchar num;
uchar recode;
void inint()
{
i=0;
j=0;
q=0;
p=0;
flag=0;
TMOD=0x11;
EA=1;
ET0=1;
ET1=1;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
}
void timer0() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
q++;
recode++;
if(flag==0)
{
switch(p)
{
case 0:ws1=1;ws2=0;ws3=0;ws4=0;P0=display_taber[BUFFER[0]];break;
case 1:ws1=0;ws2=1;ws3=0;ws4=0;
if(q<=100)
{
P0=display_taber[BUFFER[1]];
}
if(q>=101)
{
P0=display_taber1[BUFFER[1]];
}
if(q==200)
{
q=0;
}
break;
case 2:ws1=0;ws2=0;ws3=1;ws4=0;P0=display_taber[BUFFER[2]];break;
case 3:ws1=0;ws2=0;ws3=0;ws4=1;P0=display_taber[BUFFER[3]];break;
default:break;
}
}
if(flag==1)
{
if(j<=3)
{
switch(p)
{
case 0:ws2=0;ws3=0;ws4=0;
if(i==0)
{
if(q<=100)
ws1=1;
if(q>=101)
ws1=0;
if(q==200)
q=0;
}
if(i!=0)
ws1=1;
P0=display_taber[BUFFER[0]];break;
case 1:ws1=0;ws3=0;ws4=0;
if(i==1)
{
if(q<=100)
ws2=1;
if(q>=101)
ws2=0;
if(q==200)
q=0;
}
if(i!=1)
ws2=1;
P0=display_taber[BUFFER[1]];break;
case 2:ws1=0;ws2=0;ws4=0;
if(i==0)
{
if(q<=100)
ws3=1;
if(q>=101)
ws3=0;
if(q==200)
q=0;
}
if(i!=0)
ws3=1;
P0=display_taber[BUFFER[2]];break;
case 3:ws1=0;ws2=0;ws3=0;
if(i==0)
{
if(q<=100)
ws4=1;
if(q>=101)
ws4=0;
if(q==200)
q=0;
}
if(i!=0)
ws4=1;
P0=display_taber[BUFFER[3]];break;
default:break;
}
}
if(j>=4)
{
switch(p)
{
case 0:ws2=0;ws3=0;ws4=0;
if(i==0)
{
if(q<=100)
ws1=1;
if(q>=101)
ws1=0;
if(q==200)
q=0;
}
if(i!=0)
ws1=1;
P0=display_taber[BUFFER1[0]];break;
case 1:ws1=0;ws3=0;ws4=0;
if(i==1)
{
if(q<=100)
ws2=1;
if(q>=101)
ws2=0;
if(q==200)
q=0;
}
if(i!=1)
ws2=1;
P0=display_taber[BUFFER1[1]];break;
case 2:ws1=0;ws2=0;ws4=0;
if(i==0)
{
if(q<=100)
ws3=1;
if(q>=101)
ws3=0;
if(q==200)
q=0;
}
if(i!=0)
ws3=1;
P0=display_taber[BUFFER1[2]];break;
case 3:ws1=0;ws2=0;ws3=0;
if(i==0)
{
if(q<=100)
ws4=1;
if(q>=101)
ws4=0;
if(q==200)
q=0;
}
if(i!=0)
ws4=1;
P0=display_taber[BUFFER1[3]];break;
default:break;
}
}
}
p++;
if(p==4)
p=0;
}
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
n++;
}
void display_time()
{
TR0=1;
}
void delay()
{
uint z;
for(z=0;z<=300;z++);
}
void movdata_time()
{
uchar sccode;
sccode=num;
if(sccode==1)
{
i++;
j++;
if(i==4)
i=0;
if(j==8)
{
j=0;
flag=0;
}
}
if(sccode==2)
BUFFER[i]=0;
if(sccode==3)
{
if(j<=3)
{
BUFFER[i]++;
if(BUFFER[0]>=2)
BUFFER[0]=2;
if(BUFFER[0]==2)
{
if(BUFFER[1]>=4)
BUFFER[1]=4;
}
if(BUFFER[2]>=5)
BUFFER[2]=5;
if(BUFFER[i]>=10)
BUFFER[i]=0;
}
if(j>=4)
{
BUFFER1[i]++;
if(BUFFER1[0]>=2)
BUFFER1[0]=2;
if(BUFFER1[0]==2)
{
if(BUFFER1[1]>=4)
BUFFER1[1]=4;
}
if(BUFFER1[2]>=5)
BUFFER1[2]=5;
if(BUFFER1[i]>=10)
BUFFER1[i]=0;
}
}
if(sccode==4)
{
if(j<=3)
{
BUFFER[i]--;
if(BUFFER[0]>=2)
BUFFER[0]=2;
if(BUFFER[0]==2)
{
if(BUFFER[1]>=4)
BUFFER[1]=4;
}
if(BUFFER[2]>=5)
BUFFER[2]=5;
if(BUFFER[i]<=0)
BUFFER[i]=0;
}
if(j>=4)
{
BUFFER1[i]--;
if(BUFFER1[0]>=2)
BUFFER1[0]=2;
if(BUFFER1[0]==2)
{
if(BUFFER1[1]>=4)
BUFFER1[1]=4;
}
if(BUFFER1[2]>=5)
BUFFER1[2]=5;
if(BUFFER1[i]<=0)
BUFFER1[i]=0;
}
}
if(sccode==5)
{
flag=1;
num=0;
}
}
void read_key()
{
uchar temp;
P1=0xf0;
if ((P1&0xf0)!=0xf0)
{
if(recode>=1)
{
recode=0;
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay();
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:num=1;break;
case 0xde:num=2;break;
case 0xbe:num=3;break;
case 0x7e:num=4;break;
default:break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay();
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xed:num=5;break;
case 0xdd:num=6;break;
case 0xbd:num=7;break;
case 0x7d:num=8;break;
default:break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay();
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xeb:num=9;break;
case 0xdb:num=10;break;
case 0xbb:num=11;break;
case 0x7b:num=12;break;
default:break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay();
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xe7:num=13;break;
case 0xd7:num=14;break;
case 0xb7:num=15;break;
case 0x77:num=16;break;
}
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
movdata_time();
}
}
void action_time()
{
uchar second,minute,hour;
minute=BUFFER[3]+BUFFER[2]*10;
hour=BUFFER[1]+BUFFER[0]*10;
if(flag==0)
{
TR1=1;
if(n==19)
{
second++;
n=0;
}
if(second==60)
{
minute++;
second=0;
n=0;
BUFFER[3]=minute%10;
BUFFER[2]=minute/10;
BUFFER[1]=hour%10;
BUFFER[0]=hour/10;
if(BUFFER[0]==BUFFER1[0])
{
if(BUFFER[1]==BUFFER1[1])
{
if(BUFFER[2]==BUFFER1[2])
{
if(BUFFER[3]==BUFFER1[3])
FM=1;
}
}
}
}
if(minute==60)
{
hour++;
minute=0;
second=0;
n=0;
BUFFER[3]=minute%10;
BUFFER[2]=minute/10;
BUFFER[1]=hour%10;
BUFFER[0]=hour/10;
FM=1;
}
if(hour==24)
{
hour=0;
minute=0;
second=0;
n=0;
BUFFER[3]=minute%10;
BUFFER[2]=minute/10;
BUFFER[1]=hour%10;
BUFFER[0]=hour/10;
}
}
}
main()
{
inint();
display_time();
while(1)
{
read_key();
action_time();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -