设计要求 :
①、不同情况具有不同的收费标准。 白天,晚上,途中等待(>10min 开始收费);
②、能进行手动修改单价 ;
③、具有数据的复位功能;
④、具有启动计时开关、白天/晚上收费标准的转换开关、数据的清零开关、单价的调整(最好使用+和-按键);
⑤、数据输出:单价输出 2 位(要能输入小数),路程输出 2 位,总金额输出 3 位(有 1 位小数)。
基于51单片机的出租车计价器
/**
************************************* Copyright ******************************
File name: // 51出租车计价器
Author:Kevin
Version: //1.0
Description: // 实现出租车计价功能,可以分白天和晚上设置不同价格。
Others: // 其它内容的说明
Log: // 公众号:Kevin的学习站
******************************************************************************
*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit key_start =P1^0; //开始/结束计价
sbit key_wait =P1^1; //等待
sbit key_set =P1^2; //设置
sbit key_jia =P1^3; //加值
sbit key_jian =P1^4; //减值
sbit key_dn =P1^5; //控制白天晚上
sbit key_fuwei =P1^6; //复位
sbit mod=P1^7; //电机控制
/************************——变量定义***********************/
uint start_price=77; //起步价
uint white_price=66; //白天的单价 超过3公里每公里6元
uint black_price=88; //夜晚的单价 超过3公里每公里8元
uint Wait_price=100; //等待价钱
bit dnc=0; //白天晚上的转换标志
bit qiting; //起 停标志位
uint price1,price2; //总价钱、等待价钱
uint mil; //里程数
uint mil2;
uchar shi,fen,miao;
uchar moshi,moshi2,ms,set_f; //模式mos=0初始界面,=1改价页面,=2等待页面
//set_f设置标志=1设置初始价格,=2设置等待价格,=3设置晚上单价,=4设置白天单价
void delay(uchar ms) //延时函数
{
uchar j;
while(ms--)
{
for(j=0;j<130;j++);
}
}
void key() //按键函数
{
if(key_dn==0)
{
delay(5); //延时去抖
if(key_dn==0)
{
while(!key_dn);
dnc=~dnc;
}
}
if(key_start==0)
{
delay(5);
if(key_start==0)
{
while(!key_start); //检测按键是否松开
qiting=~qiting; //起 停 转换
if(qiting==0)
{
moshi=0;
}
mod=~qiting; //电机打开/关闭
TR0=qiting; //定时器0打开/关闭
set_f=0;
}
}
if(key_fuwei==0) //复位
{
delay(5);
if(key_fuwei==0)
{
while(!key_fuwei);
miao=0;fen=0;shi=0;
price1=0;price2=0; mil=0;moshi=0;
}
}
if(key_wait==0)
{
delay(5);
if(key_wait==0)
{
while(!key_wait);
miao=0;fen=0;shi=0;
moshi=2;
}
}
if(qiting==0) //结束计价后才能设置
{
if(key_set==0)
{
delay(5);
if(key_set==0)
{
while(!key_set);
set_f++;
moshi=1;
if(set_f==5){moshi=0;set_f=0;}
}
}
if(set_f!=0)
{
if(key_jia==0)
{
delay(5);
if(key_jia==0)
{
while(!key_jia);
if(set_f==1){if(start_price<999)start_price++;}
if(set_f==2){if(Wait_price<999)Wait_price++;}
if(set_f==3){if(black_price<999)black_price++;}
if(set_f==4){if(white_price<999)white_price++;}
}
}
if(key_jian==0)
{
delay(5);
if(key_jian==0)
{
while(!key_jian);
if(set_f==1){if(start_price>0)start_price--;}
if(set_f==2){if(Wait_price>0)Wait_price--;}
if(set_f==3){if(black_price>0)black_price--;}
if(set_f==4){if(white_price>0)white_price--;}
}
}
}
}
}
void xianshi()
{
if(moshi!=moshi2)
{
lcd_wcmd(0x01); //清显示屏
moshi2=moshi;
}
if(moshi==0)
{
lcd_wcmd(0x80);
lcd_data('N');
lcd_data('J');
lcd_data(':');
lcd_data(ASCII[black_price%1000/100]);
lcd_data(ASCII[black_price%100/10]);
lcd_data('.');
lcd_data(ASCII[black_price%10]);
// lcd_wcmd(0x80);
// lcd_data('D');
// lcd_data('J');
// lcd_data(':');
// lcd_data(ASCII[white_price%1000/100]);
// lcd_data(ASCII[white_price%100/10]);
// lcd_data('.');
// lcd_data(ASCII[white_price%10]);
// lcd_data('Y');
lcd_data('G');
lcd_data(':');
lcd_data(ASCII[mil%1000/100]);
lcd_data(ASCII[mil%100/10]);
lcd_data('.');
lcd_data(ASCII[mil%10]);
lcd_data('K');
lcd_data('M');
lcd_wcmd(0x80+0x40);
lcd_data('D');
lcd_data('J');
lcd_data(':');
lcd_data(ASCII[white_price%1000/100]);
lcd_data(ASCII[white_price%100/10]);
lcd_data('.');
lcd_data(ASCII[white_price%10]);
lcd_data('Y');
lcd_data('Y');
lcd_data('Q');
lcd_data(':');
lcd_data(ASCII[price1%1000/100]);
lcd_data(ASCII[price1%100/10]);
lcd_data('.');
lcd_data(ASCII[price1%10]);
lcd_data('O');
lcd_data('Y');
}
if(moshi==1) //改价页面
{
lcd_wcmd(0x80);
lcd_data('S');
lcd_data('J');
lcd_data(ASCII[start_price%1000/100]);
lcd_data(ASCII[start_price%100/10]);
lcd_data('.');
lcd_data(ASCII[start_price%10]);
lcd_data('Y');
lcd_data(' ');
lcd_data('P');
lcd_data('T');
lcd_data(ASCII[Wait_price%1000/100]);
lcd_data(ASCII[Wait_price%100/10]);
lcd_data('.');
lcd_data(ASCII[Wait_price%10]);
lcd_data('Y');
lcd_wcmd(0x80+0x40);
lcd_data('N');
lcd_data('J');
lcd_data(ASCII[black_price%1000/100]);
lcd_data(ASCII[black_price%100/10]);
lcd_data('.');
lcd_data(ASCII[black_price%10]);
lcd_data('Y');
lcd_data(' ');
lcd_data('D');
lcd_data('J');
lcd_data(ASCII[white_price%1000/100]);
lcd_data(ASCII[white_price%100/10]);
lcd_data('.');
lcd_data(ASCII[white_price%10]);
lcd_data('Y');
}
if(moshi==2) //等待页面
{
lcd_wcmd(0x80);
lcd_data('W');
lcd_data('a');
lcd_data('i');
lcd_data('t');
lcd_data(':');
lcd_data(' ');
lcd_data(' ');
lcd_data(ASCII[shi%100/10]);
lcd_data(ASCII[shi%10]);
lcd_data(':');
lcd_data(ASCII[fen%100/10]);
lcd_data(ASCII[fen%10]);
lcd_data(':');
lcd_data(ASCII[miao%100/10]);
lcd_data(ASCII[miao%10]);
lcd_wcmd(0x80+0x40);
lcd_data('D');
lcd_data('D');
lcd_data('M');
lcd_data(':');
// lcd_data(ASCII[(white_price/2)%1000/100]);
// lcd_data(ASCII[(white_price/2)%100/10]);
lcd_data(ASCII[price2%1000/100]);
lcd_data(ASCII[price2%100/10]);
lcd_data('.');
lcd_data(ASCII[price2%10]);
//lcd_data(ASCII[(white_price/2)%10]);
lcd_data(' ');
lcd_data('Y');
}
}
void jiaqianjisuan() //计算价钱
{
if(dnc==0) //白天价钱
{
if(mil>30)
{
price1=(white_price*((mil-30)/10));
price1=price1+start_price+price2;
}
else
price1=start_price+price2;
}
else //晚上价钱
{
if(mil>30)
{
price1=(black_price*((mil-30)/10));
price1=price1+start_price+price2;
}
else
price1=start_price+price2;
}
}
void T0_init() //定时器0初始化
{
EA=1; //开总中断
ET0=1; //定时器T0中断允许
TMOD=0x01; //使用定时器T0的模式1
TH0=(65536-50000)/256; //定时器T0的高8位赋初值
TL0=(65536-50000)%256; //定时器T0的低8位赋初值
TR0=0; //关闭定时器0
EX0=1; //外部中断0允许位
IT0=1; //下降沿触发外部中断
}
void main()
{
lcd_init(); //LCD1602初始化
T0_init(); //定时器0初始化
while(1) //死循环
{
jiaqianjisuan();
key(); //按键检测处理
xianshi();
}
}
void timer0() interrupt 1 //定时器0中断函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //定50ms
ms++;
if(ms>=20)
{
ms=0;
miao++;
if(moshi==0)
{
if(miao>=3)
{
moshi=2;
miao=0;
}
}
if(moshi==2)
{
if(miao>=60)
{
miao=0;
fen++;
if(fen>=60)
{
fen=0;
shi++;
}
if(moshi==2){if(fen>=1)price2=price2+(white_price/2); }
}
}
}
}
void inn0() interrupt 0 //外部中断0中断子函数
{
if(qiting==1)
{
mil2++;
if(moshi==2) moshi=0;
if(moshi==0) miao=0;
if(mil2==10)
{
mil2=0;
mil++;
}
}
}
其它毕设/课设资源
基于51单片机的智能温控风扇
基于51单片机的智能水箱控制系统
基于51单片机的智能家居安防系统
基于51单片机的计算器设计
基于单片机的声光电子琴
自动浇花系统的设计
基于51单片机数字电压表的设计
基于51单片机的CO浓度报警器设计
基于51单片机的温度报警器设计
51单片机+PM2.5+温湿度
基于51单片机的智能小车
基于51单片机+超声波模块的避障小车
基于51单片机的四通道交通灯设计
项目的仿真和程序工程已经放在下面公众号里面,可以关注公众号:Kevin的学习站,输入关键字:“出租车计价器”,就可以获取啦!创作不易,但您的点赞、关注、收藏就是对我最大的鼓励!