📄 出租车计价器程序.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,0xbf,0x86,
0xdb,0xcf,0xe6,0xed,
0xfd,0x87,0xff,0xef};
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 lc[8]={0,0,0,16,16,0,18,0};
unsigned char jia[8]={2,19,17,0,19,17,5,20} ;
unsigned char zong[8]={0,18,17,17,17,0,18,0} ;
unsigned char mima[8]={16,16,16,16,16,16,16,16} ;
unsigned char mima1[8]={1,2,3,4,5,6,7,8};
unsigned char lu,x,y,cuo=0,hour1,w=0,m=0,n;
int i;
unsigned char dispbitcnt;
char second;
char minite;
char hour;
unsigned int tcnt,tcnt2;
unsigned char mstcnt,a,c;
sbit k0=P1^0;
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P1^3;
bit k=0;
delay(int t)
{
int s,e;
for(s=0;s<t;s++)
for(e=0;e<100;e++);
}
tiaoshi()
{
if(w==1)
goto loop;
k=1;
for(i=7;i>0;i=i-3)
{
while(1)
{
if(erjian()==1)
{
if(i==7)
{
hour++;
if(hour==24)
hour=0;
}
if(i==4)
{
minite++;
if(minite==60)
minite=0;
}
if(i==1)
{
second++;
if(second==60)
second=0;
}
}
if(shangjian()==1)
{
if(i==7)
{
hour--;
if(hour<0)
hour=23;
}
if(i==4)
{
minite--;
if(minite<0)
minite=59;
}
if(i==1)
{
second--;
if(second<0)
second=59;
}
}
if(yijian()==1) break;
}
if(yijian()==1) break;
}
k=0;
loop:1;
}
lucheng()
{
TR1=1;
a=1;
while(1)
{
if(yijian()==1)
{
a=3;
}
if(erjian()==1)
{
TR1=~TR1;
}
if(shangjian()==1)
{
k=~k;
if(k==1)
{
TR1=0;
a=4;
}
if(k==0)
{
a=0;
lc[5]=0;
lc[6]=18;
lc[7]=0;
zong[0]=18;
zong[1]=0;
zong[5]=0;
zong[6]=18;
zong[7]=0;
break;
}
}
}
}
gaijia()
{
a=2;
i=8;
while(1)
{
if(shangjian()==1)
goto loop;
if(erjian()==1)
{
if(mi()==1) {a=2; break; }
else {a=0;goto loop;}
}
if(yijian()==1)
{
gaimi();
goto loop;
}
}
for(i=7;i>=0;i--)
{
if(i==5|i==2) continue;
if((i==7|i==4|i==1)&jia[i]<18) jia[i]=18;
while(1)
{
if(shangjian()==1)
{
jia[i]--;
if(jia[i]<0|jia[i]<18)
jia[i]=jia[i]+10;
}
if(erjian()==1)
{
jia[i]++;
if(jia[i]==10|jia[i]==28)
jia[i]=jia[i]-10;
}
if(yijian()==1) break;
}
if(yijian()==1) break;
}
loop:1;
a=0;
i=0;
}
mi()
{
char h;
if(w==1)
{goto loop;}
a=5;
for(i=7;i>=0;i--)
{
while(1)
{
if(erjian()==1)
{
mima[i]++;
if(mima[i]>9) mima[i]=0;
}
if(yijian()==1)
break;
}
}
for(i=0;i<=7;i++)
if(mima[i]!=mima1[i]) break;
if(i<=7)
{
cuo++;
if(cuo>=3)
{
cuo=0;
w=1;
}
h=0;
}
else h=1;
for(i=7;i>=0;i--)
{
mima[i]=16;
}
loop:if(w==1) return 0;
return h;
}
gaimi()
{
if(w==1)
{goto loop;}
if(mi()==1)
{
a=6;
for(i=7;i>=0;i--)
{
while(1)
{
if(erjian()==1)
{
mima1[i]++;
if(mima1[i]>9) mima1[i]=0;
}
if(yijian()==1)
break;
}
}
}
loop:if(w==1) return 0;
}
yijian()
{
char q=0;
if(k0==0)
{
delay(2);
if(k0==0)
{
q=1;
while(1) if(k0==1) break;
}
}
return q;
}
erjian()
{
char q=0;
if(k1==0)
{
delay(2);
if(k1==0)
{
q=1;
while(1) if(k1==1) break;
}
}
return q;
}
shangjian()
{
char q=0;
if(k2==0)
{
delay(2);
if(k2==0)
{
q=1;
while(1) if(k2==1) break;
}
}
return q;
}
kaiguan()
{
char q=0;
if(k3==0)
{
delay(2);
if(k3==0)
{
q=1;
}
}
return q;
}
void main()
{
TMOD=0x42;
TH0=0x06;
TL0=0x06;
TH1=7192;
TL1=7192;
TR0=1;
ET0=1;
ET1=1;
EA=1;
P0=dispcode[dispbuf[dispbitcnt]] ;
P2=dispbitcode[dispbitcnt] ;
while(1)
{
if(yijian()==1)
{
tiaoshi();
}
if(erjian()==1)
{
lucheng();
}
if(shangjian()==1)
{
gaijia();
}
if(kaiguan()==1)
{
m=1;
}
// if(hour1==minite-2)
// {
// w=0;
// }
}
}
void t0(void) interrupt 1 using 1
{
mstcnt++;
if(mstcnt==8)
{
mstcnt=0;
switch(a)
{
case 0: if((i==dispbitcnt|(i-1)==dispbitcnt)&i>0)
{
if(tcnt<1500)
{
P0=dispcode[17];
}
else P0=dispcode[dispbuf[dispbitcnt]] ;
break;
}
else P0=dispcode[dispbuf[dispbitcnt]] ; break;
case 1: P0=dispcode[lc[dispbitcnt]]; break;
case 2: if(i==dispbitcnt&i>=0)
{
if(tcnt<1500)
{
P0=dispcode[17];
}
else P0=dispcode[jia[dispbitcnt]] ; break;
}
else P0=dispcode[jia[dispbitcnt]] ; break;
case 3: if(dispbuf[1]%2==1)
{
P0=dispcode[lc[dispbitcnt]] ; break;
}
else P0=dispcode[zong[dispbitcnt]] ; break;
case 4: P0=dispcode[zong[dispbitcnt]] ; break;
case 5: if(i==dispbitcnt&i>=0)
{
if(tcnt<1500)
{
P0=dispcode[17];
}
else P0=dispcode[mima[dispbitcnt]] ;
break;
}
else P0=dispcode[mima[dispbitcnt]] ; break;
case 6: if(i==dispbitcnt&i>=0)
{
if(tcnt<1500)
{
P0=dispcode[17];
}
else P0=dispcode[mima1[dispbitcnt]] ;
break;
}
else P0=dispcode[mima1[dispbitcnt]] ; break;
}
P2=dispbitcode[dispbitcnt] ;
dispbitcnt++;
if(dispbitcnt==8)
{
dispbitcnt=0;
}
}
tcnt++;
if(tcnt==3500)
{
tcnt=0;
if(k==0)
second++;
if(second>=60)
{
if(w==1)
{
hour1++;
if(hour1==2)
{
hour1=0;
w=0;
}
}
second=0;
minite++;
if(x==1)
{
y++;
if(y==10&TR1==1)
{
y=0;
zong[0]=jia[3];
zong[1]=jia[4];
zong[5]=zong[5]+jia[3];if(zong[5]>9)
{
n=1; zong[5]=zong[5]%10;
}
zong[6]=zong[6]+jia[4];if(n==1)
{
zong[6]++;n=0;
}
zong[6]=zong[6]-18;
if(zong[6]>27)
{
n=1; zong[6]=zong[6]-10;
}
if(n==1)
{
zong[7]++;
n=0;
if(zong[7]>9)
zong[7]=0;
}
}
}
if(minite>=60)
{
minite=0;
hour++;
if(hour>=24)
{
hour=0;
}
/* if(w==1)
{
hour1++;
if(hour1==24)
{
hour1=0;
w=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;
}
}
void t1(void) interrupt 3 using 2
{
x=0;
tcnt2++;
switch(m)
{
case 0: zong[0]=jia[0];
zong[1]=jia[1];
break;
case 1: zong[0]=jia[6];
zong[1]=jia[7];
break;
}
if(tcnt2<=10)
{
zong[6]=23;
}
else
{
c++;
if(c==5)
{
c=0;
switch(m)
{
case 0: zong[5]=zong[5]+jia[0];if(zong[5]>9)
{
n=1; zong[5]=zong[5]%10;
}
zong[6]=zong[6]+jia[1];if(n==1)
{
zong[6]++;n=0;
}
zong[6]=zong[6]-18;
if(zong[6]>27)
{
n=1; zong[6]=zong[6]-10;
}
if(n==1)
{
zong[7]++;
n=0;
if(zong[7]>9)
zong[7]=0;
}
break;
case 1: zong[5]=zong[5]+jia[6];if(zong[5]>9)
{
n=1; zong[5]=zong[5]%10;
}
zong[6]=zong[6]+jia[7];if(n==1)
{
zong[6]++;n=0;
}
zong[6]=zong[6]-18;
if(zong[6]>27)
{
n=1; zong[6]=zong[6]-10;
}
if(n==1)
{
zong[7]++;
n=0;
if(zong[7]>9)
zong[7]=0;
}
zong[0]=jia[6];
zong[1]=jia[7];
break;
}
}
}
lc[5]++;
if(lc[5]>9)
{
n=1;
lc[5]=lc[5]%10;
}
if(n==1)
{
n=0;
lc[6]++;
if(lc[6]>27)
{
n=1;
lc[6]=lc[6]-10;
}
}
if(n==1)
{
n=0;
lc[7]++;
}
x=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -