目录
一、主要功能
1、数码管显示
2、按键修改起步价,单价,启动,停止和清零计费
3、实时时间显示
4、电机模拟里程
二、使用步骤
本项目使用Proteus8仿真
包含:程序,仿真,文档等
三、硬件资源
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);
}
}
}
五、实验现象
B站演示视频:
【51单片机-B014】【protues仿真】 基于51单片机出租车计价器仿真_哔哩哔哩_bilibili

联系作者
作者B站链接:https://space.bilibili.com/3493294220773802
专注于51单片机、STM32、Proteus、物联网软件开发,PCB设计。