📄 5.c
字号:
#include <AT89X51.H>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x40,0x00};
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char dispbuf[8]={0,0,16,0,0,16,0,0};
unsigned char dispcun[10][8];
unsigned char dispbitcnt;
unsigned char second;
unsigned char minite;
unsigned char hour;
unsigned int tcnt;
unsigned char mstcnt;
unsigned int key;
unsigned char cun=0,b,a;
delay(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<100;j++);
}
char scan_key()
{
char i,j,find;
int ini,inj;
char in;
find=0;
for(i=0;i<4;i++)
{
P0=dispbitcode[i] ;
delay(30);
in=P0;
in=in>>4;
in=in|0xf0;
for(j=0;j<4;j++)
if(dispbitcode[j]==in)
{
find=1;
inj=j,ini=i;
}
}
if(find==0) return 0;
key=ini*4+inj;
return find;
}
void main()
{
char m,n;
for(m=0;m<10;m++)
{
for(n=0;n<8;n++)
{
if(n==2|n==5) dispcun[m][n]=16;
else dispcun[m][n]=1;
}
}
TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
P3_7=0;
P2=dispbitcode[dispbitcnt] ;
while(1)
{
if(scan_key()==1&key==12)
{
tiaoshi();
}
if(scan_key()==1&key==13)
{
cunshi();
}
if(a==1)
{
for(m=0;m<=9;m++)
{
for(n=7;n>2;n--)
{
if(n==5) continue ;
if(dispcun[m][n]!=dispbuf[n]) break;
}
if(n==2) dadian();
}
}
}
}
get_key()
{
while(1) if(scan_key()!=0) break;
}
fan_key()
{
while(1) if(scan_key()==0) break;
}
void t0(void) interrupt 1 using 0
{
mstcnt++;
if(mstcnt==8)
{
mstcnt=0;
if(cun==0)
{
/* if(i!=0&i==dispbitcnt)
{
a++;
if(a=100)
{
a=0;f=~f;
}
if(f==0) P1=dispcode[16];
else P1=dispcode[dispbuf[dispbitcnt]] ;
}
else
*/
P1=dispcode[dispbuf[dispbitcnt]] ;
}
else
{
P1=dispcode[dispcun[b][dispbitcnt]] ;
}
P2=dispbitcode[dispbitcnt] ;
dispbitcnt++;
if(dispbitcnt==8)
{
dispbitcnt=0;
}
}
tcnt++;
if(tcnt==3700)
{
tcnt=0;
second++;
if(second>=60)
{
second=0;
minite++;
if(minite>=60)
{
minite=0;
hour++;
if(hour>=24)
{
hour=0;
}
}
}
dispbuf[0]=second%10;
dispbuf[1]=second/10;
dispbuf[3]=minite%10;
dispbuf[4]=minite/10;
dispbuf[6]=hour%10;
dispbuf[7]=hour/10;
}
}
tiaoshi()
{
char i;
P3_0=0;
fan_key();
for(i=7;i>=0;i--)
{
switch(i)
{
case 7: get_key(); if(key>2) {key=2;} hour=key*10; break;
case 6: get_key(); if(key>9) {key=9;} hour=hour+key;
if(hour>24) {hour=23;} break;
case 4: get_key(); if(key>5) {key=5;} minite=key*10; break;
case 3: get_key(); if(key>9) {key=9;} minite=minite+key; break;
case 1: get_key(); if(key>5) {key=5;} second=key*10; break;
case 0: get_key(); if(key>9) {key=9;} second=second+key; break;
}
fan_key();
}
P3_0=1;
}
cunshi()
{
char i;
P3_1=0;
fan_key() ;
cun=1;
a=1;
for(b=0;b<10;b++)
{
for(i=7;i>=0;i--)
{
switch(i)
{
case 7: get_key(); if(key==15) {fan_key(); goto loop;}
else /*if(key>2){key=2;} */ dispcun[b][i]=key; break;
case 6: get_key();/* if(key>3&dispcun[b][i+1]>1) dispcun[b][i]=3;// break;
else if(key>9&dispcun[b][i+1]<2) dispcun[b][i]=9;// break;
else */ dispcun[b][i]=key; break;
case 4: get_key(); /*if(key>5){key=5;} */dispcun[b][i]=key; break;
case 3: get_key(); /*if(key>9){key=9;} */dispcun[b][i]=key; break;
case 1: if(b==9) dispcun[b][i]=1;
else dispcun[b][i]=0; break;
case 0: if(b==9) dispcun[b][i]=0;
else dispcun[b][i]=b+1; break;
}
fan_key();
}
loop: 1;
}
b=9 ;
while(1)
if(scan_key()==1&key==14)
{
cun=0; P3_1=1;break;
}
}
dadian()
{
P3_7=1;
P3_6=0;
delay(8000);
P3_7=0;
P3_6=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -