【51单片机】【protues仿真】 基于51单片机出租车计价器系统

发布于:2025-09-01 ⋅ 阅读:(12) ⋅ 点赞:(0)

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、数码管显示
2、按键修改起步价,单价​,启动,停止和清零计费
3、实时时间显示
4、电机模拟里程

二、使用步骤

基于51单片机的出租车计价器设计主要包含硬件电路搭建和软件编程两部分,核心功能是通过数码管显示里程、价格、计时信息。

三、硬件资源

1、51单片机核心模块
2、按键模块
3、DS1302模块
4、数码管驱动芯片
5、电机模块
6、数码管显示模块

四、软件设计

#include "reg51.h"
#include"ds1302.h"
sbit k1=P1^0;//调整起步价
sbit k2=P1^1;
sbit k3=P1^2;//调整单价
sbit k4=P1^3;
sbit k5=P1^4;//启动
sbit k6=P1^5;//停止
sbit k7=P1^6;//清零
uchar code smgduan0[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9,无小数点
uchar code smgduan1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//显示0~9,有小数点

uchar qibu=10;//起步价
uchar dan=1;//单价
uint all=0;//总价
uint juli =0;//里程

uchar sec=0;//定时
uchar start=0;//启动
void delay(uint i)//延时
{
    while(i--);
}
void main()
{
    Ds1302ReadTime();
    TIME[0]=0;
    Ds1302Init();
    //设置INT0
    IT0=1;//跳变沿出发方式(下降沿)
    EX0=1;//打开INT0的中断允许。
    TMOD|=0X01;
    TH0=0X3C;
    TL0=0XB0;    
    ET0=1;//打开定时器0中断允许
    EA=1;//打开总中断
    TR0=1;//打开定时器
    while(1)
    {
        //显示
        P0=0; //时
        P2=0;
        P0=smgduan0[TIME[2]>>4];
        delay(100);
        P0=0; 
        P2=1;
        P0=smgduan1[TIME[2]&0x0f];
        delay(100);
        P0=0; //分
        P2=2;
        P0=smgduan0[TIME[1]>>4];
        delay(100);
        P0=0; 
        P2=3;
        P0=smgduan1[TIME[1]&0x0f];
        delay(100);
        P0=0; //秒
        P2=4;
        P0=smgduan0[TIME[0]>>4];
        delay(100);
        P0=0; 
        P2=5;
        P0=smgduan0[TIME[0]&0x0f];
        delay(100);

        P0=0; //起步价
        P2=6;
        P0=smgduan0[qibu/10];
        delay(100);
        P0=0; 
        P2=7;
        P0=smgduan0[qibu%10];
        delay(100);

        P0=0; //单价
        P2=8;
        P0=smgduan0[dan/10];
        delay(100);
        P0=0; 
        P2=9;
        P0=smgduan0[dan%10];
        delay(100);

        P0=0; //里程
        P2=10;
        P0=smgduan0[juli/1000];
        delay(100);
        P0=0; 
        P2=11;
        P0=smgduan0[juli%1000/100];
        delay(100);
        P0=0; 
        P2=12;
        P0=smgduan0[juli%100/10];
        delay(100);
        P0=0; 
        P2=13;
        P0=smgduan0[juli%10];
        delay(100);

        P0=0; //总价
        P2=14;
        P0=smgduan0[all/1000];
        delay(100);
        P0=0; 
        P2=15;
        P0=smgduan0[all%1000/100];
        delay(100);
        P0=0; 
        P2=16;
        P0=smgduan0[all%100/10];
        delay(100);
        P0=0; 
        P2=17;
        P0=smgduan0[all%10];
        delay(100);

        //按键检测
        if(start==0)
        {
        if(!k1)//起步价加
        {
            delay(10000);
            if(!k1)
            {
                if(qibu<99)
                    qibu++;
            }
            while(!k1);
        }
        if(!k2)//起步价减
        {
            delay(10000);
            if(!k2)
            {
                if(qibu>0)
                    qibu--;
            }
            while(!k2);
        }
        if(!k3)//单价加
        {
            delay(10000);
            if(!k3)
            {
                if(dan<99)
                    dan++;
            }
            while(!k3);
        }
        if(!k4)//单价减
        {
            delay(10000);
            if(!k4)
            {
                if(dan>0)
                    dan--;
            }
            while(!k4);
        }
        }
        if(!k5)//启动
        {
            delay(10000);
            if(!k5)
            {
                start=1;
            }
            while(!k5);
        }
        if(!k6)//停止
        {
            delay(10000);
            if(!k6)
            {
                start=0;
            }
            while(!k6);
        }
        if(!k7)//清零
        {
            delay(10000);
            if(!k7)
            {
                start=0;
                juli=0;
                all=0;
            }
            while(!k7);
        }
    }


}

五、实验现象

演示视频:


网站公告

今日签到

点亮在社区的每一天
去签到