- 题目描述
- 原理讲解
- 代码实现
- 原理图
- 完整代码
出租车计费程序
单价
5点之后10点之前 2元
10点之后5点之前 4元
停车
5分钟之后 票价为当时的一半
在5分钟之内不收钱
原理讲解
原理讲解和代码讲解等之后会在补上
代码实现 原理图 按键作用
START 出租车开始计费
STOP 出租车到达目的地
WAIT 出租车开始停车,5分钟之后开始计费
WAIT-STOP 出租车提车结束,开始正常行驶
完整代码
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P1^2;
sbit keysp=P3^0;
sbit keyst=P3^1;
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code wenzi[]={"DJ: LC: JE:"};
void delay(uint xms){
uint i,j;
for(i=xms;i>0;i--){
for(j=110;j>0;j--);
}
}
void write_com(uchar com){
en=0;rs=0;rw=0;
P0=com;delay(5);
en=1;delay(5);en=0;
}
void write_dat(uchar dat){
en=0;rs=1;rw=0;
P0=dat;delay(5);
en=1;delay(5);en=0;
}
uint money=0,kg=0,sum=0;
uint h=23,m=0,s=0;
uint count=0;
uint number=0,n=0;
uint wait =0,waitsum=0;
uint flag=0;
void main(){
uint i;
IT0=1;IT1=1;
EA=1;
EX0=1;EX1=1;
TMOD=0x11;
TH0=(65536-50000)/256;TL0=(65536-50000)%256;
TH1=(65536-50000)/256;TL1=(65536-50000)%256;
TR0=1;TR1=0;
EA=1;ET0=1;ET1=1;
write_com(0x01);
write_com(0x06);
write_com(0x0c);
write_com(0x38);
while(1){
write_com(0x80+0x04); write_dat(h/10+'0');
write_com(0x80+0x05); write_dat(h%10+'0');
write_com(0x80+0x06); write_dat(':');
write_com(0x80+0x07); write_dat(m/10+'0');
write_com(0x80+0x08); write_dat(m%10+'0');
write_com(0x80+0x09); write_dat(':');
write_com(0x80+0x0A); write_dat(s/10+'0');
write_com(0x80+0x0B); write_dat(s%10+'0');
write_com(0x80+0x40); for(i=0;i<3;i++) write_dat(wenzi[i]);
write_com(0x80+0x43); write_dat(money+'0');///
write_com(0x80+0x44); for(i=3;i<7;i++) write_dat(wenzi[i]);
write_com(0x80+0x48); write_dat(kg+'0');
write_com(0x80+0x49);for(i=7;i<12;i++) write_dat(wenzi[i]);
write_com(0x80+0x4d); write_dat(sum/10+'0');
write_com(0x80+0x4e); write_dat(sum%10+'0');
if(keysp==0){
delay(10);
if(keysp==0){
wait=m;
flag=1;
}while(!keysp);
}
if(keyst==0){
delay(10);
if(keyst==0){
waitsum=sum-kg*money;
flag=0;
}while(!keyst);
}
}
}
void start() interrupt 0{
TR1=1;
number=0,n=0;
flag=0;
}
void startstop() interrupt 2{
TR1=0;
kg=0;
sum=0;
}
void time() interrupt 1{
TH0=(65536-50000)/256;TL0=(65536-50000)%256;
count++;
//if(count%20==0){
s++;
if(s==60){s=0;m++;}
//}
if(m==60){m=0;h++;}
if(h==24){h=m=s=0;}
if(h>=22||h<=5){money=4;}
else{money=2;}
}
void month() interrupt 3{
TH1=(65536-50000)/256;TL1=(65536-50000)%256;
number++;
//if(number%20==0){
n++;
if(n==60){
if(flag==0){
kg++;
sum=kg*money+waitsum;
}else{
if((m-wait)>5){
sum=sum+money/2;
}
}
n=0;
}
//}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)