51出租车计价器程序
余年寄山水
911次浏览
2020年07月29日 10:21
最佳经验
本文由作者推荐
笤帚拼音-潢的读音
#include
#include "Delay.h"
#include "LED8.h"
sbit KEY1=P1^0;
sbit KEY2=P1^1;
sbit KEY3=P1^2;
sbit KEY4=P1^3;
sbit BEEP=P1^4;
sbit KEY5=P1^5;
bit TypeFlag=0;t //显示类型 0-时钟 1-日期t
bit SetFlag=0;
bit SetTimeFlag=0;
bit LongKeyFlag=0;
bit StopFlag=0;
bit LookFlag=0;
uint Clk=0;
uint Money=12;t//总价
long Run=0; //里程
uint Speed=0;
uchar SetNum=0;
uchar SetNum1=0;//调节时间
uchar Price1=12; //起步价t 12元 2公里范围
uchar Price2=3; //单价 3元 /公里
uchar Price3=1; //等待价格 1元 /2分钟
char StartHour=0;
char StartMin=0;
char StopHour=0;
char StopMin=0;
char Hour, Min, Sec;
uchar Mode=0;t //模式0 计价器模式 模式1 - 时钟模式
uint Circ=2;//R16轮胎周长 2米
uchar PauseMin=0;//等待分钟
uchar PauseSec=0;
void BeepON()
{
BEEP=0;
DelayMS(100);
BEEP=1;
}
void DisplayTime()
{
arrTime[0]=Hour/10;
arrTime[1]=Hour%10;
arrTime[2]=29;t //-
arrTime[3]=Min/10;
arrTime[4]=Min%10;
arrTime[5]=29;t //-
arrTime[6]=Sec/10;
arrTime[7]=Sec%10;
}
void DisplayStartTime() //显示上车时间
{
arrStartTime[0]=5;t //S-
arrStartTime[1]=29;
arrStartTime[2]=StartHour/10;t
arrStartTime[3]=StartHour%10;
arrStartTime[4]=29;
arrStartTime[5]=StartMin/10;t
arrStartTime[6]=StartMin%10;
arrStartTime[7]=30;
}
void DisplayStopTime() //显示下车时间
{
arrStopTime[0]=14;t //E-
arrStopTime[1]=29;
arrStopTime[2]=StopHour/10;t
arrStopTime[3]=StopHour%10;
arrStopTime[4]=29;
arrStopTime[5]=StopMin/10;t
arrStopTime[6]=StopMin%10;
arrStopTime[7]=30;
}
void DisplayRun()
{
arrDisplay[0]=21;ttt//L里程t 换算成公里
arrDisplay[1]=Run/100000;
arrDisplay[2]=Run%100000/10000;
arrDisplay[3]=Run%10000/1000;
arrDisplay[4]=29;ttt//-总价
arrDisplay[5]=Money/100;
arrDisplay[6]=Money%100/10;
arrDisplay[7]=Money%10;
}
void DisplayPause()t //显示等待分钟
{
arrDisplay[0]=25;tt
arrDisplay[1]=29;
arrDisplay[2]=PauseMin/100;
arrDisplay[3]=PauseMin%100/10;
arrDisplay[4]=PauseMin%10;ttt
arrDisplay[5]=29;
arrDisplay[6]=PauseSec/10;
arrDisplay[7]=PauseSec%10;
}
void KeyScan()
{
if(KEY1==0)
{
DelayMS(5);
if(KEY1==0)
{t
PressFlag=1;
PressSec=0;
LongKeyFlag=0;
while(KEY1==0)
{
if((PressSec>=2)&&(SetFlag==0)&&(SetTimeFlag==0))
{
BeepON();
PressFlag=0;
PressSec=0;
LongKeyFlag=1;
SetTimeFlag=1;
DisplayTime();
DisNum=1;
SetNum1=1;
}
}
if(LongKeyFlag==0)
{
BeepON();
if(SetTimeFlag==0)
{
if(SetFlag==0)
{
SetFlag=1;
arrDisplay[0]=10; //A
arrDisplay[1]=Price1/100;
arrDisplay[2]=Price1%100/10;
arrDisplay[3]=Price1%10;
arrDisplay[4]=11; //B
arrDisplay[5]=Price2/100;
arrDisplay[6]=Price2%100/10;
arrDisplay[7]=Price2%10;
}
SetNum++;tt//SetNum=1起步价 =2单价 =3等待价
if(SetNum==3)
{
arrDisplay[0]=12; //C
arrDisplay[1]=Price3/100;
arrDisplay[2]=Price3%100/10;
arrDisplay[3]=Price3%10;
arrDisplay[4]=30;
arrDisplay[5]=30;
arrDisplay[6]=30;
arrDisplay[7]=30;
}
if(SetNum>3)
{
SetNum=0;
SetFlag=0;
DisplayRun();
}
}
else
{
SetNum1++;
if(SetNum1>3)
{
SetNum1=0;
SetTimeFlag=0;
}
}
}
}
}
if(KEY2==0)
{
DelayMS(5);
if(KEY2==0)
{
while(KEY2==0);tt//增加
BeepON();
if(SetFlag==1)
{
switch(SetNum)
{
case 1: //增加起步价 默认12元
Price1++;
if(Price1>200)
{
Price1=200;
}
arrDisplay[0]=10; //A
arrDisplay[1]=Price1/100;
arrDisplay[2]=Price1%100/10;
arrDisplay[3]=Price1%10;
break;
case 2:t//增加单价t 默认3元
Price2++;
if(Price2>200)
{
Price2=200;
}
arrDisplay[4]=11; //B
arrDisplay[5]=Price2/100;
arrDisplay[6]=Price2%100/10;
arrDisplay[7]=Price2%10;
break;
case 3:t//增加等待价 默认1元
Price3++;
if(Price3>200)
{
Price3=200;
}
arrDisplay[0]=12; //C
arrDisplay[1]=Price3/100;
arrDisplay[2]=Price3%100/10;
arrDisplay[3]=Price3%10;
arrDisplay[4]=30;
arrDisplay[5]=30;
arrDisplay[6]=30;
arrDisplay[7]=30;
break;
}
}
if(SetTimeFlag==1)
{
switch(SetNum1)
{
case 1: //秒 增加
Sec++;
if(Sec>59)
{
Sec=0;
}
DisplayTime();
break;
case 2:t//分 增加
Min++;
if(Min>59)
{
Min=0;
}
DisplayTime();
break;
case 3:t//时 增加
Hour++;
if(Hour>23)
{
Hour=0;
}
DisplayTime();
break;
}
}
if((SetFlag==0)&&(SetTimeFlag==0)) //不在设置状态下 第二功能 开始/停止
{
if(StartFlag==0)
{
StartFlag=1;//开始标志
StartHour=Hour;
StartMin=Min;
StopFlag=0;
Run=0;
Money=Price1;
}
else
{
StartFlag=0;
StopHour=Hour;
StopMin=Min;
StopFlag=1;
}
}
}
}
if(KEY3==0)
{
DelayMS(5);
if(KEY3==0)
{
while(KEY3==0);t //减少
BeepON();
if(SetFlag==1)
{
switch(SetNum)
{
case 1: //减少起步价 默认12元
Price1--;
if(Price1<1)
{
Price1=1;
}
arrDisplay[0]=10; //A
arrDisplay[1]=Price1/100;
arrDisplay[2]=Price1%100/10;
arrDisplay[3]=Price1%10;
break;
case 2:t//增加单价t 默认3元
Price2--;
if(Price2<1)
{
Price2=1;
}
a
rrDisplay[4]=11; //B
arrDisplay[5]=Price2/100;
arrDisplay[6]=Price2%100/10;
arrDisplay[7]=Price2%10;
break;
case 3:t//增加等待价 默认1元
Price3--;
if(Price3<1)
{
Price3=1;
}
arrDisplay[0]=12; //C
arrDisplay[1]=Price3/100;
arrDisplay[2]=Price3%100/10;
arrDisplay[3]=Price3%10;
arrDisplay[4]=30;
arrDisplay[5]=30;
arrDisplay[6]=30;
arrDisplay[7]=30;
break;
}
}
if(SetTimeFlag==1)
{
switch(SetNum1)
{
case 1: //秒 减少
Sec--;
if(Sec<0)
{
Sec=59;
}
DisplayTime();
break;
case 2:t//分 减少
Min--;
if(Min<0)
{
Min=59;
}
DisplayTime();
break;
case 3:t//时 减少
Hour--;
if(Hour<0)
{
Hour=23;
}
DisplayTime();
break;
}
}
}
}
if(KEY4==0)
{
DelayMS(5);
if(KEY4==0)t //确认
{
while(KEY4==0);
BeepON();
if((SetTimeFlag==0)&&(SetFlag==0))
{
DisNum++;
if(StopFlag==0)
{
if(DisNum>1)
{
DisNum=0;
}
}
else
{
if(DisNum==2)
{t//显示上车时间
DisplayStartTime();
}
if(DisNum==3)
{t//显示下车时间
LookFlag=0;
DisplayStopTime();
}
if(DisNum>3)
{
DisNum=0;
}
}
}
if(SetFlag==1)
{
SetFlag=0;
SetNum=0;
DisplayRun();
}
if(SetTimeFlag==1)
{
SetTimeFlag=0;
SetNum1=0;
DisplayTime();
}
}
}
if(KEY5==0)
{
DelayMS(5);
if(KEY5==0)t //暂停
{
while(KEY5==0);
BeepON();
if(StartFlag==1)
{
if(PauseFlag==0)
{
PauseFlag=1;
PauseMin=0;
DisplayPause();
}
else
{
PauseFlag=0;
}
}
}
}
}
void Clock()
{
if(SetTimeFlag==0)
{
Sec++;
if(Sec>59)
{
Sec=0;
Min++;
if(Min>59)
{
Min=0;
Hour++;
if(Hour>23)
{
Hour=0;
}
}
}
DisplayTime();
}
}
void main(void)
{
InitTimer();
DisNum=0; //显示HELLO
TR0=1;
TR1=1;t//启动计数器T1
DisplayRun();
while(1)
{ttt
KeyScan();
if(TimeFlag==1)
{
TimeFlag=0;
Clock();
if(PauseFlag==1)
{
PauseSec++;
if(PauseSec>59)
{
PauseSec=0;
PauseMin++;
}
DisplayPause();
}
if(StartFlag==1)
{
Clk=TH1*256+TL1;
Run=Run+Clk*Circ;t //里程= 圈速 * 周长 单位米
if((Run/1000)>2)
{
Money=Price1+(Run/1000-2)*Price2; //总价=起步价 + 单价*里程
}
else
{
Money=Price1;
}
if(PauseFlag==1)
{
Money=Money+Price3; //等待 费
}
TL1=0;
TH1=0;
if((SetFlag==0)&&(PauseFlag==0))
{
Displa
yRun();
}
}
}
}t
}