📄 main.c
字号:
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 + -