单片机——汽车计价表(lcd+按键+数字屏)(proteus8.9和KeilC51)

单片机——汽车计价表(lcd+按键+数字屏)(proteus8.9和KeilC51),第1张

汽车计价表
  • 题目描述
  • 原理讲解
  • 代码实现
    • 原理图
    • 完整代码

题目描述
 出租车计费程序
 		单价
			5点之后10点之前  210点之后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;
		}
	//}
	
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1499298.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

发表评论

登录后才能评论

评论列表(0条)

保存