基于51单片机的出租车计价器设计(一)

1、简介
本例是一个基于51单片机的出租车计价器设计方案。在这一设计中,以51单片机作为核心处理器,对车速信号传感器所产生的脉冲信号进行采集,接着对采集到的信号实施处理和变换操作,从而计算得出出租车的行驶里程。依据既定的计费标准,能够算出相应的费用金额。此外,借助LCD12864液晶显示屏,能够显示出里程数、单价、总价等相关信息。同时,用户还可以通过操作按键来选择白天或黑夜状态,并且能够实现开始计价、暂停计价以及数据清零等操作。

2、主要功能

  • 通过滑动变阻器模拟采集车速信号的传感器,并将数据传输到单片机处理。
  • 通过电机模拟车辆运行状态。
  • 通过LCD12864液晶显示里程、单价、总价等相关信息。
  • 通过按键选择白天和黑夜状态,以及实现开始、暂停、清零等操作。

3、环境搭建
资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频
仿真版本:Proteus8.6及以上版本
编译平台:Keil C51
编程语言:C语言

4、源程序

#include<reg52.h>
#include<intrins.h>
#include"lcd12864.c"
#include"code.h"
#include"ds1302.c"
#include"display.c"

// 定义引脚
sbit P34 = P3^4;  // 白天
sbit P33 = P3^3;  // 清零
sbit P31 = P3^1;  // 黑夜
sbit P12 = P1^2;  // 电机

// 定义变量
float p, price, distance_km, money;  // 路程,金额
unsigned int b, n;
bit flag = 1;
bit a = 1;

// 主函数
void main(void) {
    init_lcd();          // 液晶显示屏
    clearscreen(0);      // 清屏
    setline(0);          // 起始行
    TMOD = 0x01;         // 方式1 定时功能
    TH0 = 0x3c;          // 00111100
    TL0 = 0xb0;          // 10101111  50ms计数一次
    IE = 0x87;
    IT0 = 1;
    IP = 0x01;
    distance_km = 0;     // 路程=0
    Init_DS1302();       // 时钟芯片

    while (1) {
        if (flag) {
            TR0 = 0;
            P12 = 1;
            price = p;
            display(price);
            display1(distance_km);  // 显示路程
            display2(money);        // 显示金额
        } else {
            TR0 = 1;  // T0中断
            P12 = 0;  // 灯亮
            price = p;
            display(price);
            display1(distance_km);  // 显示路程
            display2(money);        // 显示金额
        }

        displayc(1, 0, 0 * 16, dan);      // 显示“单”
        displayc(1, 0, 1 * 16, jia);     // 显示“价”
        displaye(1, 0, 4 * 8, num, 15);  // 显示“:”
        displayc(1, 3, 0 * 16, li);      // 显示“里”
        displayc(1, 3, 1 * 16, chen);    // 显示“程”
        displayc(1, 3, 2 * 16, shu);     // 显示“数”
        displaye(1, 3, 6 * 8, num, 15);  // 显示“:”
        displayc(1, 6, 0 * 16, jin);     // 显示“金”
        displayc(1, 6, 1 * 16, e);       // 显示“额”
        displaye(1, 6, 4 * 8, num, 15);  // 显示“:”

        if (P34 == 0) {
            a = 1;
        }
        if (P31 == 0) {
            a = 0;
        }
    }
}

// 定时器0中断
void timer1(void) interrupt 1 {
    TH0 = 0x3c;          // 00111100
    TL0 = 0xb0;          // 10101111  50ms计数一次
    b++;
    if (b == 10) {
        if (a == 1) {
            p = 1.5;
            distance_km += 0.1;  // 路程+0.1
            if (distance_km <= 3)
                money = 5;  // 小于3km,计价5元
            else
                money = 4.9 + (distance_km - 3) * p;  // 大于3km部分1.5元每km
            b = 0;
        }
        if (a == 0) {
            p = 2;
            distance_km += 0.1;  // 路程+0.1
            if (distance_km <= 3)
                money = 6;  // 小于3km,计价6元
            else
                money = 5.9 + (distance_km - 3) * p;  // 大于3km部分2元每km
            b = 0;
        }
    }
}

5、proteus8.6仿真
本设计采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。
白天
在这里插入图片描述
黑夜
在这里插入图片描述

6、设计资料清单
计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。
在这里插入图片描述

设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等。由于不定期更新,最新的资料包不一定与下面图片完全一致,但主要资料都有。
在这里插入图片描述

7、资料获取方式
方式1:网盘链接(推荐方式)
方式2:优快云免积分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值