单片机c语言出租车计时程序,基于单片机的出租车计费(c语言).doc

基于单片机的出租车计费(c语言)

基于单片机的出租车计费(c语言)

基于proteus仿真

一.设计要求:

1.用实现出租车计费器的设计。

出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如.0),车行驶2km以内,只收起步价元。

出租车行驶超过km后,按每公里1.元在.0元的基础上增加。

出租车达到目的地后,(用一个按钮)计程和计费数据清零,为下一次计费开始。

出租车行驶仿真:把信号发生器的输出接到单片机外部中断上,设置信号发生器不同的频率输出,分别表示速度的快慢。

每一个脉冲表示轮胎转一圈,目前出租车轮胎周长为1.83米。

(时、分、秒)

9.出租车行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.元。

行驶速度计算

参数设置:可以修改轮胎周长,修改起步价,修改每公里单价等。

三.设计程序

#include

unsignedchar d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//段选

unsigned char f=0x00,y=0x00,k=0x00,m=0x00,z=0x00,q=0x00,w=0x00,s=0x00;//定义变量注意其范围(不然容易出现乱码)

unsigned int x=0;

#define uint unsigned int

#define uchar unsigned char

void delay(unsigned int i)//延时1ms

{

unsigned char j;

while(i--)

{

for(j=0;j<125;j++)

{;}

}

}

void div2()//显示

{ P2=0x80;

P1=d[s/10];//计时小时

P0=d[y/100];//计费百位

delay(5);

P2=0x40;

P1=d[s%10];//小时个位

P0=d[y%100/10];//计费十位

delay(5);

P2=0x20;

P1=d[10];//显示“-”

P0=d[y%10]&0x7f;//计费个位

delay(5);

P2=0x10;

P1=d[f/10];//分钟

P0=d[x*2/10000];//路程万位

delay(5);

P2=0x08;

P1=d[f%10];

P0=d[x*2%10000/1000];//路程千位

delay(5);

P2=0x04;

P1=d[10];

P0=d[x*2%1000/100];

delay(5);

P2=0x02;

P1=d[w/10];//秒

P0=d[x*2%100/10];

delay(5);

P2=0x01;

P1=d[w%10];

P0=d[x*2%10];

delay(5);

}

void tt()//总费用函数

{

if(x*2<2000)

{y=5;}

else if(x*2>2000)

{

y=5+(x*2-2000)/1000*2;

}

else if(x*2>10000)

{

y=21+(x*2-10000)/1000*3;

}

}

void main()//开3个中断端

{

EX0=1;//开启外部中断源

IT0=1;

EX1=1;

IT1=1;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

TMOD=0X01;ET0=1;TR0=1;//开启定时中断

EA=1;//开中断源

while(1)

{

div2();tt();

}

}

void int1(void) interrupt 0 //信号中断服务程序

{

x++;

}

void int2() interrupt 2//清零中断

{

w=0;

f=0;

s=0;

x=0;

y=0;

EX0=0;

ET0=0;

}

void int0() interrupt 1//计时中断服务程序

{ET0=0;

TR0=0;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

q++;

if(q==20)//计数20恰好为1秒

{

q=0;w++;

if(w==60)//秒到60

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值