加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

基于51單片機(jī)出租車計費(fèi)設(shè)計(proteus仿真+程序+原理圖+設(shè)計說明書)

08/05 09:03
1201
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

仿真圖proteus 7.8

程序編譯器:keil 4/keil 5

編程語言:C語言

設(shè)計編號:C0050

功能說明

51單片機(jī) + 1302時鐘芯片準(zhǔn)確計時 + LCD1602液晶顯示 + 24c02芯片可以掉電存儲數(shù)據(jù) + 3v直流電機(jī)模擬發(fā)動機(jī)工作。

1、當(dāng)無乘客時液晶可以顯示時間(年月日時分秒),時間可以按鍵設(shè)置,此時電機(jī)不工作;

2、當(dāng)有乘客時電機(jī)工作,可以通過按鍵開始計費(fèi)系統(tǒng)工作,有清零鍵,收費(fèi)可以修改(包括起價費(fèi)、超過起價費(fèi)每公里或分鐘收費(fèi)、白天和夜晚收費(fèi)標(biāo)準(zhǔn));

3、可以切換白天和夜晚收費(fèi)標(biāo)準(zhǔn),可以按照分鐘或公里收費(fèi)切換。

仿真圖

img

img

程序

img

//出租車計價器
//宏定義
#define uchar unsigned char
#define uint unsigned int 

//頭函數(shù)聲明
#include <reg52.h>
#include "Lcd.h"
#include "Data.h"
#include "DS1302.h"
#include "AT24C02.h"


//鍵盤定義
sbit K1=P3^4;	//模式切換
sbit K2=P3^6;	//減按鍵
sbit K3=P3^5;	//加按鍵
sbit K4=P3^7;	//萬年歷模式時:設(shè)置時間信息。計價器模式時:設(shè)置單價

//模式0時鐘 1時鐘調(diào)整			   			
uchar Mode=0;
//時鐘屏幕調(diào)整
uchar Wei=0;
uchar SS=0;
//價格調(diào)整
uchar JGWei=0;

//計價器參數(shù)
uint Day=0;
uint Night=0;
uint DanJia=0;
uint DJ_min=0;
uint  ZJ=0;
unsigned long  GL=0;
uint  Time=0;
uint count=0;
uchar m=0;
//白天/晚上
uchar DN=0;
//公里/時間
uchar GT=0;

//初始化函數(shù)
void InitTimer0();
//寫初值
void SETS();
//讀初值
void READS();

//主函數(shù)
void main()
{
	//初始化
	Ds1302_Init();
	Init_LCD();
	initeeprom();
	//SETS();
	//讀取初始參數(shù)
	READS();
	//定時器初始化
	InitTimer0();
	//循環(huán)
	while(1)
	{
		//時鐘模式
		if(Mode==0)
		{
			//讀時間
			if(Wei==0)
			{
				Ds1302_Read_Time();
				//顯示時間
				display_NYR(time_buf1,Wei,0);
			}
		}
		else if(Mode==1)
		{
			if(time_buf1[4]>=23||time_buf1[4]<7)  
			DN=1;
			else
			DN=0;
			//顯示計價器信息
			
			display_S(Day,Night,DanJia,ZJ,GL/10,Time,GT,DN);
		}


		if(K4==0)
		{
			delay(100);
			//調(diào)時
			if(Mode==0)
			{
				Wei++;
				if(Wei==1)
				{
					SS=1;
				}
				//閃爍
				display_NYR(time_buf1,Wei,SS);
				if(Wei==7)
				{
					Wei=0;
					//保存時間
					Ds1302_Write_Time();
					Init_LCD();
				}
			}
			else if(Mode==1)
			{
				JGWei++;
				if(JGWei==1)
				{
					Mode=2;
					//顯示計價器價格
					Init_LCD_JGTZ();
					display_D(Day,Night,DanJia,JGWei,DJ_min);
				}
			}
			else if(Mode==2)
			{	
				JGWei++;	
				display_D(Day,Night,DanJia,JGWei,DJ_min);
				if(JGWei==5)
				{
					Mode=1;
					JGWei=0;
					//參數(shù)初始化
					//保存
					SETS();
					//讀初值
					READS();
	
					ZJ=0;
					GL=0;
					Time=0;
					//開啟定時器
					TR0=1;
					//顯示計價器
					Init_LCD_JJQ();
				}
			}
			while(K4==0);
		}
		//+
		if(K3==0)
		{
			delay(100);
			//調(diào)時
			if(Mode==0)
			{
				//年
				if(Wei==1)
				{
					time_buf1[1]++;
					if(time_buf1[1]>=100)
						time_buf1[1]=0;
				}
				//月
				else if(Wei==2)
				{
					time_buf1[2]++;
					if(time_buf1[2]>=13)
						time_buf1[2]=1;
				}
				//日
				else if(Wei==3)
				{
					time_buf1[3]++;
					if(time_buf1[3]>=YDay(time_buf1[1],time_buf1[2])+1)
						time_buf1[3]=1;
				}	
				//時
				else if(Wei==4)
				{
					time_buf1[4]++;
					if(time_buf1[4]>=24)
						time_buf1[4]=0;
				}	
				//分
				else if(Wei==5)
				{
					time_buf1[5]++;
					if(time_buf1[5]>=60)
						time_buf1[5]=0;
				}
				//秒
				else if(Wei==6)
				{
					time_buf1[6]++;
					if(time_buf1[6]>=60)
						time_buf1[6]=0;
				}
				//顯示
				if(Wei!=0)
					display_NYR(time_buf1,Wei,SS);			
			}
			//調(diào)價
			else if(Mode==2)
			{
				//單價
				if(JGWei==1)
				{
					DanJia++;
					if(DanJia>999)
					{
						DanJia=1;
					}
				}
				//等待時間單價
				else if(JGWei==2)
				{
					DJ_min++;
					if(DJ_min>999)
					{
						DJ_min=1;
					}
				}
				//夜間
				else if(JGWei==3)
				{
					Night++;
					if(Night>999)
					{
						Night=1;
					}
				}
				//白天
				else if(JGWei==4)
				{
					Day++;
					if(Day>999)
					{
						Day=1;
					}
				}
				display_D(Day,Night,DanJia,JGWei,DJ_min);
			}

			while(K3==0);
		}

		//-
		if(K2==0)
		{
			delay(100);
			//調(diào)時
			if(Mode==0)
			{
				//年
				if(Wei==1)
				{
					time_buf1[1]--;
					if(time_buf1[1]<0)
						time_buf1[1]=99;
				}
				//月
				else if(Wei==2)
				{
					time_buf1[2]--;
					if(time_buf1[2]<=0)
						time_buf1[2]=12;
				}
				//日
				else if(Wei==3)
				{
					time_buf1[3]--;
					if(time_buf1[3]<=0)
						time_buf1[3]=YDay(time_buf1[1],time_buf1[2]);
				}	
				//時
				else if(Wei==4)
				{
					time_buf1[4]--;
					if(time_buf1[4]<0)
						time_buf1[4]=23;
				}	
				//分
				else if(Wei==5)
				{
					time_buf1[5]--;
					if(time_buf1[5]<0)
						time_buf1[5]=59;
				}
				//秒
				else if(Wei==6)
				{
					time_buf1[6]--;
					if(time_buf1[6]<0)
						time_buf1[6]=59;
				}
				//顯示
				if(Wei!=0)
					display_NYR(time_buf1,Wei,SS);			
			}
			//調(diào)價
			else if(Mode==2)
			{
				//單價
				if(JGWei==1)
				{
					DanJia--;
					if(DanJia==0)
					{
						DanJia=999;
					}
				}
				//等待時間單價
				else if(JGWei==2)
				{
					DJ_min--;
					if(DJ_min==0)
					{
						DJ_min=999;
					}
				}
				//夜間
				else if(JGWei==3)
				{
					Night--;
					if(Night==0)
					{
						Night=999;
					}
				}
				//白天
				else if(JGWei==4)
				{
					Day--;
					if(Day==0)
					{
						Day=999;
					}
				}
				display_D(Day,Night,DanJia,JGWei,DJ_min);
			}
			while(K2==0);
		}	
		//切換
		if(K1==0)
		{
			delay(100);
			//計價器模式
			if(Mode==1)
			{
				Mode=0;
				ZJ=0;
				GL=0;
				Time=0;
				//開啟定時器
				TR0=0;
				EX0=0;
				//顯示計價器
				Init_LCD();
			}
			else if(Mode==0)
			{
				Mode=1;
				//參數(shù)初始化
				//讀初值
				READS();
				ZJ=0;
				GL=0;
				Time=0;
				//開啟定時器
				m=0;
				TR0=1;
				EX0=1;
				//顯示計價器
				Init_LCD_JJQ();
			}
			while(K1==0);
		}
	}
}

//初始化函數(shù)
void InitTimer0(void)
{
    TMOD = 0x01;
    TH0 = 0x3C;
    TL0 = 0xB0;		//10ms
    EA = 1;
    ET0 = 1;
    TR0 = 1;
	IT0=1;	//INT0負(fù)跳變觸發(fā)
	EX0=0;//開外部INTO中斷
}

//定時器0中斷10ms
void Timer0Interrupt(void) interrupt 1
{
    TH0 = 0x3C;
    TL0 = 0xB0;   //賦初值
	m++;
	if(m>=20)
	{
		m=0;
		if(count>=60)
		{
			GT=0;
			GL=GL+count/10;
			count=0;
		}
		else
		{
			count=0;
			GT=1;
			Time++;	 //時間++
		}
	}
	 //計算錢數(shù)
	 //公里數(shù)小于3
	 if(GL<=300)
	 {
		if(DN==0)
		{
			if(Time>60)
				ZJ=Day+Time/60*DJ_min;
			else
				ZJ=Day;
		}	
		else
		{
			if(Time>60)
				ZJ=Night+Time/60*DJ_min;
			else
				ZJ=Night;
		}
	 }
	 else
	 {
		if(DN==0)
		{
			if(Time>60)
				ZJ=Day+(GL/10-20)/10*DanJia+Time/60*DJ_min;
			else
				ZJ=Day+(GL/10-20)/10*DanJia;

		}	
		else
		{
			if(Time>60)
				ZJ=Night+(GL/10-20)/10*DanJia+Time/60*DJ_min;
			else
				ZJ=Night+(GL/10-20)/10*DanJia;
		}
	 }
}
void EXINT0() interrupt 0
{
	count++;
}

//讀初值
void READS()
{
	uchar SH=0,SL=0;
	uint temp=0;

	delay(10);
	SL=read_add(0x01);
	delay(10);
	SH=read_add(0x02);
	temp=SH;
	temp=temp<<8;
	temp=temp+SL;
	Day=temp;

	delay(10);
	SL=read_add(0x03);
	delay(10);
	SH=read_add(0x04);
	temp=SH;
	temp=temp<<8;
	temp=temp+SL;
	Night=temp;

	delay(10);
	SL=read_add(0x05);
	delay(10);
	SH=read_add(0x06);
	temp=SH;
	temp=temp<<8;
	temp=temp+SL;
	DanJia=temp;

	delay(10);
	SL=read_add(0x07);
	delay(10);
	SH=read_add(0x08);
	temp=SH;
	temp=temp<<8;
	temp=temp+SL;
	DJ_min=temp;
}


//寫初值
void SETS()
{
	uchar SH=0,SL=0;
	uint temp=0;

	temp=Day;
	SL=temp&0x00ff;
	SH=temp>>8;
	delay(10);
	write_add(0x01,SL);
	delay(10);
	write_add(0x02,SH);

	temp=Night;
	SL=temp&0x00ff;
	SH=temp>>8;
	delay(10);
	write_add(0x03,SL);
	delay(10);
	write_add(0x04,SH); 

	temp=DanJia;
	SL=temp&0x00ff;
	SH=temp>>8;
	delay(10);
	write_add(0x05,SL);
	delay(10);
	write_add(0x06,SH);

	temp=DJ_min;
	SL=temp&0x00ff;
	SH=temp>>8;
	delay(10);
	write_add(0x07,SL);
	delay(10);
	write_add(0x08,SH);
}

原理圖

img

設(shè)計說明書

img

摘要

? 出租車行業(yè)在我國是八十年代初興起的一項新興行業(yè),隨著我國國民經(jīng)濟(jì)的高速發(fā)展,出租汽車已成為城市公共交通的重要組成部分。多年來國內(nèi)普遍使用的計價器只具備單一的計量功能。目前全世界的計價器中有90%為臺灣所生產(chǎn)?,F(xiàn)在各個城市出租車行業(yè)都已普及,因此出租車計價器的技術(shù)已經(jīng)成熟,但是出租車計價器的市場還具有廣闊的前景。隨著城市建設(shè)的日益完善,關(guān)乎城市面貌的出租車行業(yè)也將迅速發(fā)展,出租車計價器的的大批量需求也是毫無疑問的,所以未來出租車計價器的市場還是有相當(dāng)大的潛力。

? 本次出租車計價器設(shè)計可以分為六個模塊,主控模塊、計時模塊、存儲模塊、顯示模塊、按鍵模塊和電機(jī)驅(qū)動模塊。本設(shè)計采用STC89C52單片機(jī)作為主控模塊的主控芯片,結(jié)合單片機(jī)的外圍電路實現(xiàn)對整個系統(tǒng)的控制,DS1302時鐘芯片準(zhǔn)確計時具有重新上電不用調(diào)時的功能,顯示部分采用LCD1602液晶顯示,24c02芯片可以掉電存儲設(shè)置的計費(fèi)數(shù)據(jù),即使掉電也不會丟失設(shè)置的費(fèi)用,3v直流電機(jī)模擬發(fā)動機(jī)工作,使整個設(shè)計更加逼真,當(dāng)無乘客時液晶可以顯示時間(年月日時分秒),時間可以按鍵設(shè)置,此時電機(jī)不工作;當(dāng)有乘客時電機(jī)工作,可以通過按鍵開始計費(fèi)系統(tǒng)工作,有清零鍵,收費(fèi)可以修改(包括起價費(fèi)、超過起價費(fèi)每公里或分鐘收費(fèi)、白天和夜晚收費(fèi)標(biāo)準(zhǔn)),可以切換白天和夜晚收費(fèi)標(biāo)準(zhǔn),可以按照分鐘或公里收費(fèi)切換。汽車計價器是乘客與司機(jī)雙方的交易準(zhǔn)則,它是出租車行業(yè)發(fā)展的重要標(biāo)志,是出租車中最重要的工具。它關(guān)系著交易雙方的利益。具有良好性能的計價器無論是對廣大出租車司機(jī)朋友還是乘客來說都是很必要的。因此,汽車計價器的研究也是有一定的應(yīng)用價值的。

設(shè)計清單(提供資料清單所有文件)

資料下載

img

  • 設(shè)計資料獲取聯(lián)系方式.doc

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
STM32F103RBT6 1 STMicroelectronics Mainstream Performance line, Arm Cortex-M3 MCU with 128 Kbytes of Flash memory, 72 MHz CPU, motor control, USB and CAN

ECAD模型

下載ECAD模型
$10.15 查看
CP2102N-A02-GQFN28R 1 Silicon Laboratories Inc USB Bus Controller, CMOS, QFN-28

ECAD模型

下載ECAD模型
$2.5 查看
PIC32MX575F512L-80I/PT 1 Microchip Technology Inc 32-BIT, FLASH, 80 MHz, RISC MICROCONTROLLER, PQFP100, 12 X 12 MM, 1 MM HEIGHT, LEAD FREE, PLASTIC, TQFP-100

ECAD模型

下載ECAD模型
$8.67 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜