基于单片机的出租车计价器设计代码
时间: 2023-07-15 19:12:28 浏览: 80
以下是一个基于单片机的出租车计价器的设计代码,使用的是C语言编写的Keil C51嵌入式开发环境。
```
#include<reg52.h>
#include<stdio.h>
sbit RS=P1^0; //LCD1602定义
sbit RW=P1^1;
sbit EN=P1^2;
sbit beep=P1^3;
unsigned int time=0; //单位时间
unsigned long int total_time=0; //总时间
unsigned int count=0; //计时
unsigned int meter=0; //路程
unsigned long int total_meter=0; //总路程
unsigned int money=0; //费用
unsigned long int total_money=0; //总费用
void delay(unsigned int n) //延时函数
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<125;j++);
}
void init() //LCD1602初始化函数
{
command(0x38);
command(0x0c);
command(0x06);
command(0x01);
delay(5);
}
void command(unsigned char cmd) //LCD1602指令函数
{
P0=cmd;
RS=0;
RW=0;
EN=1;
delay(5);
EN=0;
}
void write(unsigned char dat) //LCD1602数据函数
{
P0=dat;
RS=1;
RW=0;
EN=1;
delay(5);
EN=0;
}
void display() //LCD1602显示函数
{
unsigned char buf[16];
sprintf(buf,"time:%.2d:%.2d:%.2d",time/3600,time%3600/60,time%60);
write_command(0x80+0x00);
for(int i=0;i<16;i++)
write_data(buf[i]);
sprintf(buf,"meter:%5d m",meter);
write_command(0x80+0x40);
for(int i=0;i<16;i++)
write_data(buf[i]);
sprintf(buf,"money:%4d yuan",money);
write_command(0x80+0x10);
for(int i=0;i<16;i++)
write_data(buf[i]);
}
void main()
{
init();
while(1)
{
total_time++;
count++;
if(count==10)
{
time++;
count=0;
}
meter++;
if(meter==1000)
{
meter=0;
money++;
}
total_meter++;
total_money++;
display();
if(money>=500) //总费用大于等于500元时蜂鸣器鸣叫
beep=1;
else
beep=0;
delay(100);
}
}
```
该代码实现了一个简单的出租车计价器,每行程开始时计时器从0开始计时,路程计数器也从0开始计数,每走1000米费用加1元,总费用达到500元时蜂鸣器鸣叫。代码中使用了LCD1602显示屏来显示计价器的计时、路程和费用信息。