⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 用单片机实现出租车计价器的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	
	temp=time_temp[1] ;		
	temp>>=4 ;			//循环右移四位
	temp&=0x0f	;		//取高四位
	lcd_temp[10]=temp+0x30;
	temp=time_temp[2] ;		
	temp&=0x0f	;		//取高四?
	lcd_temp[11]=temp+0x30;
	

	lcd_temp[12]=0xa3;	//冒号
	lcd_temp[13]=0xba;
	
	temp=time_temp[0] ;		
	temp>>=4 ;			//循环右移四位
	temp&=0x0f	;		//取高四位
	lcd_temp[14]=temp+0x30;
	temp=time_temp[0] ;		
	temp&=0x0f	;		//取高四?
	lcd_temp[15]=temp+0x30;

	lcd_dis_mul(16,0x90,lcd_temp);
	clr_lcd(lcd_temp,16);

}


//key1-2--service
//将日期存显示缓冲区单元
void  dis_date(void)
{ 		static uchar temp;
	lcd_temp[0]=0xc8;	//汉字
	lcd_temp[1]=0xd5;
	lcd_temp[2]=0xc6;
	lcd_temp[3]=0xda;
	lcd_temp[4]=0xa3;
	lcd_temp[5]=0xba;
	
	temp=date_temp[0] ;		//小时
	temp>>=4 ;			//循环右移四位
	temp&=0x0f	;		//取高四位
	lcd_temp[6]=temp+0x30;
	temp=date_temp[0] ;		
	temp&=0x0f	;		//取高四?
	lcd_temp[7]=temp+0x30;


	lcd_temp[8]=0x2e;	//
	lcd_temp[9]=0x00;
	
	
	temp=date_temp[1] ;		
	temp>>=4 ;			//循环右移四位
	temp&=0x0f	;		//取高四位
	lcd_temp[10]=temp+0x30;
	temp=date_temp[1] ;		
	temp&=0x0f	;		//取高四?
	lcd_temp[11]=temp+0x30;
	

	lcd_temp[12]=0x2e;	//冒号
	lcd_temp[13]=0x00;
	
	temp=date_temp[2] ;		
	temp>>=4 ;			//循环右移四位
	temp&=0x0f	;		//取高四位
	lcd_temp[14]=temp+0x30;
	temp=date_temp[2] ;		
	temp&=0x0f	;		//取高四?
	lcd_temp[15]=temp+0x30;

	lcd_dis_mul(16,0x88,lcd_temp);
	clr_lcd(lcd_temp,16);

	
}


//按键三显示硕?//显示日营业额 
void dis_sp(void)
{	
//显示速度
	lcd_temp[0]=0xcb;
	lcd_temp[1]=0xd9;
	lcd_temp[2]=0xb6;
	lcd_temp[3]=0xc8;
	lcd_temp[4]=0xa3;//显示冒号
	lcd_temp[5]=0xba;

	clr_ram(buf_bcd,8);
	hextobcd(buf_sp,buf_bcd);

	if ( buf_bcd[2]  )
	 	lcd_temp[6]=buf_bcd[2]+0x30;
			else 	lcd_temp[6]=0x20;
if (  buf_bcd[2]==0 && buf_bcd[1]==0 )   
		lcd_temp[7]=0x20;					
			else	lcd_temp[7]=buf_bcd[1]+0x30;
	
	lcd_temp[8]=buf_bcd[0]+0x30;	

//KM/h
	lcd_temp[9]=0x4B;  //km
	lcd_temp[10]=0x4D;

	lcd_temp[11]=0x2f;		///
	lcd_temp[12]=0x68;     //h

  	lcd_dis_mul(16,0x90,lcd_temp);
	clr_lcd(lcd_temp,16);

//显示日额
	clr_ram(buf_bcd,8);			//清除bcd缓冲区单元
	hextobcd(day_pre,buf_bcd);	//转为费用为bcd
//显示费用
	lcd_temp[0]=0xc8;
	lcd_temp[1]=0xd5;
	lcd_temp[2]=0xb6;
	lcd_temp[3]=0xee;
	lcd_temp[4]=0xa3;//显示冒号
	lcd_temp[5]=0xba;
		
	
if ( buf_bcd[5]  )
	 	lcd_temp[6]=buf_bcd[5]+0x30;
			else 	lcd_temp[6]=0x20;
if (  buf_bcd[5]==0 && buf_bcd[4]==0 )   
		lcd_temp[7]=0x20;					
			else	lcd_temp[7]=buf_bcd[4]+0x30;
	
	lcd_temp[8]=buf_bcd[3]+0x30;	

	lcd_temp[9]=0x2e;	//点
	
	  
	lcd_temp[10]=buf_bcd[2]+0x30;
	
//显示元
	lcd_temp[11]=0x59;
	lcd_temp[12]=0x00;
	
	lcd_dis_mul(16,0x88,lcd_temp);		
	clr_lcd(lcd_temp,16);
	
	
}



//key1_service
//切换显示time and date
void dis_time_date(void) 
{	
	 if( fg_on) 
		on_taxi();
	if (!key_fg)	
		 {	dis_time();
			dis_date();
		 }
			
		else dis_sp();		
			
			
}

//key2-1--service
//显示上次载客数据
//里程和费用
void dis_pre_data(void)
{

	clr_ram(buf_bcd,8);		//清除bcd缓冲区单元
   	hextobcd(pre_dis,buf_bcd);	//转化距离为bcd

 
//显示里程
//显示里程
	lcd_temp[0]=0xc0;
	lcd_temp[1]=0xef;
	lcd_temp[2]=0xb3;
	lcd_temp[3]=0xcc;
	lcd_temp[4]=0xa3;//显示冒号
	lcd_temp[5]=0xba;
		
if ( buf_bcd[3]  )
	 	lcd_temp[6]=buf_bcd[3]+0x30;
			else 	lcd_temp[6]=0x20;
if (  buf_bcd[3]==0 && buf_bcd[2]==0 )   
		lcd_temp[7]=0x20;					
			else	lcd_temp[7]=buf_bcd[2]+0x30;
	
	lcd_temp[8]=buf_bcd[1]+0x30;	

	lcd_temp[9]=0x2e;	//点
	
	  
	lcd_temp[10]=buf_bcd[0]+0x30;
//KM	
	lcd_temp[11]=0x4B;
	lcd_temp[12]=0x4D;
	

  	lcd_dis_mul(16,0x88,lcd_temp);
	clr_lcd(lcd_temp,16);


	clr_ram(buf_bcd,8);			//清除bcd缓冲区单元
	hextobcd(pre_pre,buf_bcd);	//转为费用为bcd
//显示费用
	lcd_temp[0]=0xb7;
	lcd_temp[1]=0xd1;
	lcd_temp[2]=0xd3;
	lcd_temp[3]=0xc3;
	lcd_temp[4]=0xa3;//显示冒号
	lcd_temp[5]=0xba;
		
	
if ( buf_bcd[5]  )
	 	lcd_temp[6]=buf_bcd[5]+0x30;
			else 	lcd_temp[6]=0x20;
if (  buf_bcd[5]==0 && buf_bcd[4]==0 )   
		lcd_temp[7]=0x20;					
			else	lcd_temp[7]=buf_bcd[4]+0x30;
	
	lcd_temp[8]=buf_bcd[3]+0x30;	

	lcd_temp[9]=0x2e;	//点
	
	  
	lcd_temp[10]=buf_bcd[2]+0x30;
	
//显示元
	lcd_temp[11]=0x59;
	lcd_temp[12]=0x00;
	
	lcd_dis_mul(16,0x90,lcd_temp);		
	clr_lcd(lcd_temp,16);
		

}


//key2-2--service
//显示计费参数
void dis_para(void)
{
	
	lcd_temp[0]=0X53;//S
	lcd_temp[1]=0X3A;//:
	
	// 起步价格10
	clr_ram(buf_bcd,8);		//清除bcd缓冲区单元
	hextobcd(qibu_day,buf_bcd);
	lcd_temp[2]=buf_bcd[4]+0X30;
	lcd_temp[3]=buf_bcd[3]+0X30;

	clr_ram(buf_bcd,8);		//清除bcd缓冲区单元

	lcd_temp[4]=0x20;    //空格
	lcd_temp[5]=0X4D;     //M
	lcd_temp[6]=0X3A;	//:
	hextobcd(midd_day,buf_bcd);
	lcd_temp[7]=buf_bcd[2]+0X30;
	lcd_temp[8]=0x2e;
	lcd_temp[9]=buf_bcd[1]+0X30;

	clr_ram(buf_bcd,8);		//清除bcd缓冲区单元

	lcd_temp[10]=0x20;    //空格
	lcd_temp[11]=0X48;     //H
	lcd_temp[12]=0X3A;		//:
	hextobcd(huikong_day,buf_bcd);
	lcd_temp[13]=buf_bcd[2]+0X30;
	lcd_temp[14]=0x2e;				//.
	lcd_temp[15]=buf_bcd[1]+0X30;  
			
	lcd_dis_mul(16,0x88,lcd_temp);
	clr_lcd(lcd_temp,16);

}


//显示等待?void dis_wait_time(void)
{	

	 
	
//待时 B4FD,CAB1,A3BA,
	lcd_temp[0]=0xb4;
	lcd_temp[1]=0xFD;
	lcd_temp[2]=0xCA;
	lcd_temp[3]=0xB1;
	lcd_temp[4]=0xA3;
	lcd_temp[5]=0xBA;

	
	clr_ram(buf_bcd,8);		//清除bcd缓冲区单元
	hextobcd(dis_wmin,buf_bcd);
	lcd_temp[6]=buf_bcd[1]+0X30;
	lcd_temp[7]=buf_bcd[0]+0X30;


	lcd_temp[8]=0x3a;	//冒号
	lcd_temp[9]=0x00;
	

	clr_ram(buf_bcd,8);		//清除bcd缓冲区单元
	hextobcd(dis_wsec,buf_bcd);
	lcd_temp[10]=buf_bcd[1]+0X30;
	lcd_temp[11]=buf_bcd[0]+0X30;
	
	lcd_dis_mul(16,0x90,lcd_temp);
	clr_lcd(lcd_temp,16);
}




//key2--service
//服务程序
void dis_data_para(void)
{
	 if( fg_on) 
	 	on_taxi();

if(key_fg)	
 {	dis_pre_data();
	
  }
else	{	dis_wait_time();
			dis_para();
}

}





//key9----service
//停止载客
//转移数据---里程,费用,等待时间,同时清零,还有清除按键值
void  down_taxi(void )
{
	
if(fg_on)
{	fg_on=0;

	pre_dis=buf_dis;	//存上次里程
	pre_pre=buf_pre;	//存上次费用
	buf_dis=0;			//清零,为下次载客准备
	buf_pre=0;			

	
	fg_qibu=1;			//重先设置标志
	
//	dis_wmin=wait_min;	//载客结束存等待分钟
//	dis_wsec=wait_sec;	//载客结束存等待秒

	wait_sec=wait_min=wait_second=0;

//min
	
					//day_pre+=pre_pre;	//存至每天营业额
					//week_pre+=pre_pre;	//存至每周营业额
					//month_pre+=pre_pre;	//存至每月营业额
	total_pre+=pre_pre;		//营业额
	day_pre+=pre_pre;
}

else dis_time_date();


}


//查表显示缓冲区单元内容
void display (void )
{
static uint i;
if (fg_1s)
{
	fg_1s=0;
	for(i=0;i<8;i++)
//		trd[i]+=table_shape0[ dis_temp[i] ]  ; //查表 
		
	no=8;			//写7290八个字节
	suba=0X10;	//器内地址
	sla=0X70;	//器件地址
   	

	if (  ! ISendStr(sla,suba,trd,no)  ) 
		  		
			error_type=0x03;	//显示错误,代码0x03
	
}


}



//定时器0中断服务程序
//定时37.68ms计算速度
void timer0_isr(void) interrupt 1
{	
		TH0=0X6C;
		TL0=0XD0;
	if( buf_dia ) buf_dia--;
					
		else 	{
					buf_dia=dia;
				buf_sp=buf_sp_temp;
					buf_sp_temp=0;
				}
}

//ex0---service
//对霍尔脉冲计算 ,并用于计算里程100m和费用100m的到来!
void ex_int0(void) interrupt 0 
{
	buf_sp_temp+=1;		//霍尔脉冲加1

	if( buf_pu ) buf_pu--;	
				else {	buf_pu=pu;
						fg_100=1;		
					
					   }

				


}

//ex1---service
//调用其它函数时候,不要使用using
void ex_int1 (void) interrupt 2 
{	stack[0]=no;
	stack[1]=suba;
	stack[2]=sla;


	key_fg=~key_fg;
	no=1;	//读取7290 1个字节
	suba=0X01;	//器内地址
	sla=0X70;	//器件地址
	if ( ! IRcvStr(sla,suba,mrd,no) ) 
		
			error_type=0x04;	//读按键值错误,代码0x04		

	buf_key=*mrd ;				//存按键值
	
	no=stack[0];
	suba=stack[1];
	sla=stack[2];
}

void dis_seri(void)
{

static uchar i;
for(i=0;i<6;i++)
dis_temp[i]=buf_seri[i];

for(i=6;i<7;i++)
	dis_temp[i]=0;

}


//处理按键
void process_key(void)
{
	  
	switch( buf_key )
	{//	case  0 :	dis_time_date() ; break;	//无按键显示时间
		case  1	:	dis_time_date()	; break;	//按键1切换时间和日期,?		case  2	:	dis_data_para()	 ;break;     //按键2切换显示统计信息(上次载客里程和数据),和计费参屎偷却

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -