- 题目描述
- 原理讲解
- 代码实现
- 原理图
- 完整代码
出租车计费程序 单价 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; } //} }



