亚洲免费人人妻人人,cao78在线视频,福建一级毛片,91精品视频免费观看,高清另类图片操逼,日本特黄特色大片免费看,超碰欧美人人澡曰曰澡夜夜泛

出租車計(jì)價(jià)器

時(shí)間:2023-05-01 07:05:49 資料 我要投稿
  • 相關(guān)推薦

出租車計(jì)價(jià)器

南京工業(yè)大學(xué)

出租車計(jì)價(jià)器

創(chuàng)新實(shí)踐報(bào)告

(2011 — 2012 學(xué)年 第1 學(xué)期)

課程名稱: 出租車計(jì)價(jià)器設(shè)計(jì) 班 級(jí): 電子0805 學(xué) 號(hào): 11 姓 名: 吾曉于 指導(dǎo)教師: 包亞萍

2011年 11月

一.出租車計(jì)價(jià)器概述 1.設(shè)計(jì)要求:

設(shè)計(jì)一個(gè)出租車計(jì)價(jià)器,該計(jì)價(jià)器的計(jì)費(fèi)系統(tǒng):行程3公里內(nèi),起步費(fèi)為6元; 3公里外以 每公里1.4元計(jì)費(fèi).

并能顯示日期和當(dāng)前時(shí)間,行駛公里數(shù),總費(fèi)用和暫停計(jì)價(jià)功能. 設(shè)計(jì)的主要技術(shù)指標(biāo) :

①計(jì)價(jià)范圍:0~999.9元 計(jì)價(jià)分辨率: 0.1元 ②計(jì)程范圍:0~99公里 計(jì)程分辨率: 1.0公里

本電路以SST89E58單片機(jī)為中心、附加555定時(shí)器構(gòu)成多諧振蕩器,組成信號(hào)產(chǎn)生電路來(lái)實(shí)現(xiàn)里程計(jì)數(shù),DS1302構(gòu)成時(shí)鐘電路,實(shí)現(xiàn)對(duì)出租車計(jì)價(jià)統(tǒng)計(jì),輸出采用LCD液晶顯示器。本電路設(shè)計(jì)的計(jì)價(jià)器不但能實(shí)現(xiàn)基本的計(jì)價(jià),同時(shí)還能作為時(shí)鐘為司機(jī)提供方便。

二.計(jì)價(jià)器硬件設(shè)計(jì)

本系統(tǒng)的硬件設(shè)計(jì)主要包括單片機(jī)SST89E58、LCD數(shù)據(jù)顯示部件、555定時(shí)器電路、DS1302時(shí)鐘電路的設(shè)計(jì)。在硬件設(shè)計(jì)過(guò)程中,充分利用各部件的功能,實(shí)現(xiàn)出租車計(jì)價(jià)器設(shè)計(jì)。 1. 系統(tǒng)的硬件構(gòu)成及功能

它由以下幾個(gè)部件組成:SST89E58單片機(jī)、總金額及里程顯示、鍵盤控制,里程計(jì)算單元、時(shí)鐘電路等。

利用單片機(jī)豐富的IO端口,及其控制的靈活性,實(shí)現(xiàn)基本的里程計(jì)價(jià)功能和時(shí)鐘顯示功能。

2. 單片機(jī)及其引腳說(shuō)明

SST89E58與ATMEL、PHILIPS、WINBOND等公司的8位標(biāo)準(zhǔn)8051系列單片機(jī)完全兼容,工作頻率為0~40MHZ,2.7V~5.5V,1K字節(jié)內(nèi)部SRAM,三個(gè)高電流驅(qū)動(dòng)端口(每端口16mA),三個(gè)16位定時(shí)器/計(jì)數(shù)器,全雙工、增強(qiáng)型串口,掉電檢測(cè),低功耗。

SST89E58是一個(gè)有40

個(gè)引腳的芯片,引腳配置和仿真圖如下圖所示:

其各自引腳功能如下:

Vcc:電源電壓。 GND:地。

P0口:P0口是一組8位漏極開路型雙向I/O接口,也即地址/數(shù)據(jù)總線復(fù)用口。當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址和數(shù)據(jù)總線復(fù)用,在訪問(wèn)期間激活內(nèi)部上拉電阻。在FLASH編程時(shí),P0口接受指令字節(jié),而在程序校驗(yàn)時(shí) ,輸出指令字節(jié)。

P1口:P1口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O接口,P1的輸出緩沖級(jí)

可驅(qū)動(dòng)4個(gè)TTL邏輯門電路。FLASH編程和程序校驗(yàn)時(shí),P1接收低8位地址。

P2口:P2口是一個(gè)帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級(jí)可驅(qū)動(dòng)4個(gè)TTL邏輯門電路。在訪問(wèn)外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器時(shí)P2口送高8位地址數(shù)據(jù)。FLASH編程或校驗(yàn)時(shí),P2亦接收高位地址和其他控制信號(hào)。

P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O接口。P3口輸出緩沖級(jí)可驅(qū)動(dòng)4個(gè)TTL邏輯門電路。

RST:復(fù)位輸入。

ALE/ PROG:當(dāng)訪問(wèn)外部數(shù)據(jù)時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。

EA/VPP:外部訪問(wèn)允許。

PSEN:程序儲(chǔ)存允許。PSEN輸出是外部程序存儲(chǔ)器的度選通信號(hào)。

XTAL1:振蕩器反相放大及內(nèi)部是鐘發(fā)生器的輸入端。 XTAL2:振蕩器反相放大器的輸出端。

3. 按鍵單元的設(shè)計(jì)

電路共采用了六個(gè)按鍵和一個(gè)開關(guān),S1、S2、S3、S4、S5、S6,其功能分別是:S1光標(biāo)左移,S2光標(biāo)右移,S3『+』,S4『-』,S5設(shè)定時(shí)間,S6暫停。開關(guān)為控制計(jì)價(jià)器工作和停止。

4. 555定時(shí)器構(gòu)成多諧振蕩器

555 定時(shí)器是一種模擬和數(shù)字功能相結(jié)合的中規(guī)模集成器件。一般用雙極性工藝制作的稱為 555,用 CMOS 工藝制作的稱為 7555,除單定時(shí)器外,還有對(duì)應(yīng)的雙定時(shí)器 556/7556。555 定時(shí)器的電源電壓范圍寬,可在 4.5V~16V 工作,7555 可在 3~18V 工作,輸出驅(qū)動(dòng)電流約為 200mA,因而其輸出可與 TTL、CMOS 或者模擬電路電平兼容。

555構(gòu)成多諧振蕩器,組成信號(hào)產(chǎn)生電路

振蕩周期: T=0.7(R1+2R2)C

輸出高電平時(shí)間 T=(R1+R2)Cln2 輸出低電平時(shí)間T=R2Cln2

輸出方波的占空比為D=tPH/T=(R1+R2)/(R1+2R2) R1=R2=47KΩ

f=1/T=1.43/( R1+R2)C=150Hz

5.DS1302時(shí)鐘電路

DS1302 是美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。

DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于

Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí),DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過(guò)把RST輸入驅(qū)動(dòng)置高電平來(lái)啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作。如果在傳送過(guò)程中RST置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc>2.0V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說(shuō)明。SCLK為時(shí)鐘輸入端。 下圖為DS1302的引腳功能和仿真圖:

6.LCD顯示器

LM016L 的結(jié)構(gòu)及功能

LM016L 液晶模塊采用 HD44780 控制器,hd44780 具有簡(jiǎn)單而功能較強(qiáng)的指令集,可以實(shí) 現(xiàn)字符移動(dòng),閃爍等功能。 液晶模塊的引腳功能如下: VSS 一般接地 VDD 接電源(+5V)

V0 液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比 度過(guò)高時(shí)會(huì)產(chǎn)生"鬼影",使用時(shí)可以通過(guò)一個(gè) 10K 的電位器調(diào)整對(duì)比度).

RS 為寄存器選擇,高電平 1 時(shí)選擇數(shù)據(jù)寄存器,低電平 0 時(shí)選擇指令寄存器.

R/W 為讀寫信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫操作. E E(或 EN)端為使能(enable)端,下降沿使能. D0—D3 底4位三態(tài), 雙向數(shù)據(jù)總線0-3位 D4—D7 高4位三態(tài), 雙向數(shù)據(jù)總線4-7位

計(jì)價(jià)器流程圖

總原理圖

計(jì)價(jià)器程序

//出租車車計(jì)價(jià)器 設(shè)計(jì)

//該模擬程序折合規(guī)則:1km-1m,等待30s-1km-1m,1m-1.4元 //底層規(guī)則:若脈沖個(gè)數(shù)/秒 #include #include #include #include

uchar code univalent[2] = {1,40}; 價(jià)整數(shù)位,[1]-里程單價(jià)小數(shù)位

//保存單價(jià)的數(shù)組,[0]-里程單

uchar code time_pos[7] = {4,-1,7,10,4,7,10}; //各時(shí)間在液晶上的顯示位置

uchar code money_pos[4] = {4,7,4,7}; //計(jì)價(jià)器價(jià)格各位在液晶上的顯示位置

bit config_ok = 0; bit state = 0;

(計(jì)里程),1-低速(計(jì)時(shí)間) bit pause = 0; 價(jià),1-暫停計(jì)價(jià)

uint pulse_count = 0;

//0-未配置完成,1-配置完成 //當(dāng)前儀表的運(yùn)行狀態(tài),0-全速//計(jì)價(jià)停止?fàn)顟B(tài)位,0-正常計(jì)//脈沖計(jì)數(shù)器

//保存等待計(jì)時(shí)的變量,單位為

uint pulse_count_tmp = 0;

uint time_count = 0; 秒,10s-1km-1.4元

uint mileage_count_new = 0,mileage_count_old = 0; //保存里程的變量,通過(guò)差值計(jì)

算里程變化,單位為km,1km-1.4元,

uchar idata time[7] = {0x09,0x1,0x1,0x1,0x0,0x0,0x0}; //保存時(shí)間的數(shù)組 uint money[2]={6,0}; //保存車費(fèi)的數(shù)組,[0]-整數(shù)位,[1]-小數(shù)位

uchar first_3_km = 0;

void INT0_init(void); void INT1_init(void); void Delay(uint); void System_init(void);

void Time_Show(uchar time_data[7]);

void Run_Show_Time(uchar time_data[7]); void Money_Show(uint money[2]); void Show_Wait_Time(uint); void Show_Mileage(void);

void Run_BackGround(void);

出現(xiàn)的

void Run_BackGround(void) { WriteChar('/', 3,0); WriteChar(':',10,0); WriteChar(':',13,0); WriteChar('.',3,1);

WriteChar('Y',6,1);

}

void Show_Mileage(void) { WriteDecimal(pulse_count / 200,0,12,1); WriteInt(pulse_count % 200 / 10,0,0,13,1); WriteChar('.',12,1); WriteString("km",14,1);

}

void Show_Wait_Time(uint time_count) { WriteChar('s',15,1); WriteChar(' ', 10,1);

WriteInt(time_count,1,4,11,1);

//運(yùn)行起來(lái)后,將在LCD上一直

void Money_Show(uint money[2]) { WriteDecimal(money[0],0,3,1); WriteDecimal(money[1],1,3,1);

}

void Run_Show_Time(uchar time_data[7]) { WriteInt(BcdToInt(time_data[2]),1,2, 1,0); WriteInt(BcdToInt(time_data[3]),1,2, 4,0); WriteInt(BcdToInt(time_data[4]),1,2, 8,0); WriteInt(BcdToInt(time_data[5]),1,2,11,0); WriteInt(BcdToInt(time_data[6]),1,2,14,0);

}

void Time_Show(uchar time_data[7]) { WriteChar('/',6,0); WriteChar('/',9,0);

WriteChar(':',6,1); WriteChar(':',9,1);

WriteInt(BcdToInt(time_data[0]),1,2, 4,0); WriteInt(BcdToInt(time_data[2]),1,2, 7,0); WriteInt(BcdToInt(time_data[3]),1,2,10,0); WriteInt(BcdToInt(time_data[4]),1,2, 4,1); WriteInt(BcdToInt(time_data[5]),1,2, 7,1); WriteInt(BcdToInt(time_data[6]),1,2,10,1);

}

void System_init(void) { RstLcd(); ClrLcd(); P1 = 0x00; config_ok = 0; Time_Show(time); LcdPos(5,0);

SetCur(3); INT1_init();

while(config_ok == 0); //等待配置時(shí)間結(jié)束標(biāo)志

}

SetCur(1);

WriteString("set time over...",0,0); Delay(60000); ClrLcd();

Run_BackGround(); P1= 0xff;

void Delay(uint dtime) { }

uint temp;

for(temp=0;temp

void INT0_init(void) {

EA = 0; IT0 = 1; EX0 = 1; EA = 1;

}

void INT1_init(void) { EA = 0; }

IT1 = 1; EX1 = 1; EA = 1;

void main() {

uchar time_tmp[7],i; System_init();

DS1302_GetData(time);

pulse_count_tmp = pulse_count;

mileage_count_new = mileage_count_old = 0; Money_Show(money); Run_Show_Time(time); Show_Mileage(); while(1)

{

if(config_ok == 0) System_init();

DS1302_GetData(time_tmp);

if(!(P1 & 0x04)) {

P1 &= 0xfe; P1 |= 0x02; pause = 0;

if(time[6] != time_tmp[6]) { }

Run_Show_Time(time_tmp); for(i = 0;i

time[i] = time_tmp[i];

//若設(shè)置時(shí)間未完成

first_3_km = 0; money[0] = 6; money[1] = 0;

mileage_count_new = mileage_count_old = 0; WriteString(" ",0,1); WriteString(" ",9,1); Money_Show(money); pulse_count = 0; Show_Mileage(); time_count = 0;

}

else if(pause == 0) {

INT0_init();

if(time[6] != time_tmp[6]) {

Run_Show_Time(time_tmp); for(i = 0;i

if(pulse_count - pulse_count_tmp

行駛(計(jì)時(shí)),即一秒內(nèi),脈沖數(shù)目的個(gè)數(shù)變化值若小于10,則判為低速

{

state = 1; P1 &= 0xfe; P1 |= 0x02;

time_count ++;

//等待計(jì)時(shí)加1

if(time_count % 10 == 0 && first_3_km > 2)//由等待時(shí)間換算公

里數(shù),10s折合為1km(1m) {

}

}

money[1] += 40; if(money[1] > 99) { }

money[0] += 1; money[1] %= 100;

money[0] += 1; Money_Show(money);

else if(time_count % 10 == 0 && first_3_km

mileage_count_old = mileage_count_new; Show_Wait_Time(time_count);

//否則則判為全速狀

態(tài)(計(jì)里程)

}

else {

state = 0; P1 &= 0xfd; P1 |= 0x01; time_count = 0;

//全速狀態(tài)下,把等

待時(shí)間清0

}

pulse_count_tmp = pulse_count;

if(state == 0) {

mileage_count_new = pulse_count / 200;

if(mileage_count_new != mileage_count_old && first_3_km > 2) {

Show_Mileage();

for(i = mileage_count_old;i

money[1] += 40; if(money[1] > 99) { }

money[0] += 1; money[1] %= 100;

}

}

}

}

money[0] += 1;

Money_Show(money); }

mileage_count_old = mileage_count_new;

} else if(mileage_count_new != mileage_count_old && first_3_km

first_3_km ++;

mileage_count_old = mileage_count_new; Show_Mileage();

else { }

if(time[6] != time_tmp[6]) { Run_Show_Time(time_tmp); }

for(i = 0;i

static void INT0_ser(void) interrupt 0 { }

pulse_count ++;

static void INT1_ser(void) interrupt 2 {

uchar month_day[12]={31,0,31,30,31,30,31,31,30,31,30,31}; char result; uchar i;

static uchar pos;

//配置時(shí)間

if(!(P2 & 0x20) && config_ok == 0) {

for(i = 0;i

if(!(P2 & 0x20) && config_ok == 0) {

//++

//配置到哪一項(xiàng)

result = BcdToInt(time[pos]) + 1;

if((pos == 0 && result == 50) || (pos == 4 && result == 24) || (pos == 5 && result == 60) || (pos == 6 && result == 60)) result = 0; else if(pos == 2 && result == 13)

result = 1; else if(pos == 3) {

month_day[1] = (time[0] % 4 == 0 && time[0] % 100 != 0) || time[0] % if(result == month_day[time[2] - 1] + 1)

result = 1;

400 == 0 ? 29:28;//判斷潤(rùn)平年

}

time[pos] = IntToBcd(result);

//--

}

else;

}

else if(!(P2 & 0x40) && config_ok == 0) {

for(i = 0;i

if(!(P2 & 0x40) && config_ok == 0) {

result = BcdToInt(time[pos]) - 1; if((pos == 0 && result == -1)) result = 49; else if(pos == 2 && result == 0) result = 12;

else if(pos == 3) { month_day[1]=(time[0] % 4 == 0 && time[0] % 100 != 0) || time[0] %

400 == 0 ? 29:28;//判斷潤(rùn)平年

if(result == 0)

}

result = month_day[time[2] - 1];

else if(pos == 4 && result == -1) result = 23;

else if((pos == 5 || pos == 6) && result == -1) result = 59; else

;

time[pos] = IntToBcd(result);

} }

else if(!(P2 & 0x08) && config_ok == 0)

//NEXT

{ for(i = 0;i

if(!(P2 & 0x08) && config_ok == 0) { pos++; pos %= 7; if(pos == 1)

pos = 2;

} }

else if(!(P2 & 0x10) && config_ok == 0)

{ for(i = 0;i

if(!(P2 & 0x10) && config_ok == 0) { pos--; if(pos == -1) pos = 6; if(pos == 1)

pos = 0;

}

}

else if(!(P2 & 0x80) && config_ok == 0) { for(i = 0;i

DS1302_Reset();

DS1302_SettingData(time);

}

}

else if(!(P2 & 0x80) && config_ok == 1) { for(i = 0;i

if(!(P2 & 0x80) && config_ok == 1) { config_ok = 0;

}

}

else if(!(P1 & 0x08) && config_ok == 1) {

//PREVIOUS

//ENTER

//CONFIG

}

}

for(i = 0;i

if(!(P1 & 0x08) && config_ok == 1) { pause = ~pause; EX0 = 0; }

if(config_ok == 0) { }

WriteInt(BcdToInt(time[pos]),1,2,time_pos[pos],pos > 3 ?1:0 ); LcdPos(time_pos[pos]+1,pos > 3 ?1:0);

【出租車計(jì)價(jià)器】相關(guān)文章:

出租車計(jì)價(jià)器作弊與預(yù)防05-02

出租車計(jì)價(jià)器抗干擾問(wèn)題分析05-01

出租車多功能計(jì)價(jià)器安裝與調(diào)測(cè)05-02

出租車計(jì)價(jià)器示值誤差測(cè)量結(jié)果的不確定度評(píng)定05-01

計(jì)價(jià)器外圍故障的調(diào)修04-27

出租汽車計(jì)價(jià)器的發(fā)展與車載GPS04-27

出租汽車計(jì)價(jià)器檢定應(yīng)注意的問(wèn)題04-27

出租汽車計(jì)價(jià)器抗干擾硬件設(shè)計(jì)05-02

指紋識(shí)別技術(shù)在出租汽車計(jì)價(jià)器的應(yīng)用04-30

JJG517-2009《出租汽車計(jì)價(jià)器》檢定規(guī)程解讀04-28