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

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

联系作者

一、主要功能

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设计。