久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

出租車計價器課程設計2

時間:2019-05-14 04:53:47下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《出租車計價器課程設計2》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《出租車計價器課程設計2》。

第一篇:出租車計價器課程設計2

出租車計價器課程設計

目錄

前言

1、系統工作原理 1.1 功能說明 1.2 基本原理

2、硬件設計

2.1 單片機最小系統單元 2.2 A44E霍爾傳感器檢測單元 2.3 AT24C01存儲單元 2.4 鍵盤調整單元 2.5 顯示單元

3、軟件設計 3.1 系統主程序 3.2 中斷程序

3.2.1 里程計數中斷程序 3.2.2 中途等待中斷程序 3.3 計算程序 3.4 顯示程序 3.5 鍵盤程序

4、總結 參考文獻

附錄A 系統原理圖

附錄B 系統源程序

前言

隨著出租車行業的發展,出租車已經是城市交通的重要組成部分,從加強行業管理以及減少司機與乘客的糾紛出發,具有良好性能的計價器對出租車司機和乘客來說都是很必要的。而采用模擬電路和數字電路設計的計價器整體電路的規模較大,用到的器件多,造成故障率高,難調試。而采用單片機進行的設計,相對來說功能強大,用較少的硬件和適當的軟件相互配合可以很容易地實現設計要求,且靈活性強,可以通過軟件編程來完成更多的附加功能。本設計采用AT89S52單片機為主控器,以A44E霍爾傳感器測距,實現對出租車的多功能的計價設計,并采用AT24C01實現在系統掉電的時候保存單價等信息,輸出采用8段數碼顯示管。本電路設計的計價器不但能實現基本的計價,而且還能根據白天,黑夜和中途等待來調節單價。

第一章 系統工作原理

1.1 功能說明

出租車計價器根據乘客乘坐汽車行駛距離和等候時間的多少進行計價,并在行程中同步顯示車費值。從起步價開始,當汽車程行駛未滿3公里時,均按起步價計算。過3公里后,實現每1公里單價收費,中間遇暫停時,計程數不再增加,開始計時收費,測距收費和測時收費的和便構成了一位乘客的車費。同時,白天和夜晚價格不同,可以進行切換。白天單價、夜晚單價、等待單價和起步價格都可通過獨立鍵盤進行調節。(默認起步價為5元/3公里,里程單價白天為1.5元/公里,夜晚為1.8元/公里,等待計時單價為0.5元/5分鐘)

1.2 基本原理

計數器系統主要由五部分組成:A44E霍爾傳感器、AT89S52單片機、獨立鍵盤、EEPROM AT24C01和顯示數碼管。

霍爾傳感器安裝在車輪上,主要檢測汽車行進的公里數,并產生一系列相應的脈沖輸出,脈沖送到單片機進行處理,單片機根據程序設定通過計算脈沖數換算出行駛公里數,再根據從EEPROM中讀取的價格等相關數據進行金額的計算,計算好的金額、里程和單價都實時地顯示在數碼管上。獨立鍵盤可以調節價格等相關數據,按下相應的按鈕,產生信號交由單片機處理并實時顯示出來,調節好的數據存儲到EEPROM中,掉電后可以使調好的數據不丟失,下次得電后直接從EEPROM讀到單片機,系統結構圖如圖1。

圖1 系統結構圖

第二章 硬件設計

2.1 單片機最小系統單元

主控機系統采用了Atmel 公司生產的 AT89S52單片機,它含有256 字節數據存儲器,內置8K 的電可擦除FLASH ROM,可重復編程,大小滿足主控機軟件系統設計,所以不必再擴展程序存儲器。復位電路和晶振電路是AT89S52 工作所需的最簡外圍電路。單片機最小系統電路圖如圖2所示。

圖2 單片機最小系統圖

AT89S52 的復位端是一個史密特觸發輸入,高電平有效。RST端若由低電平上升到高電平并持續2個周期,系統將實現一次復位操作。在復位電路中,按一下復位開關就使在RST端出現一段時間的高電平,外接11.0592M 晶振和兩個30pF 電容組成系統的內部時鐘電路。

2.2 A44E霍爾傳感器檢測單元

A44E 屬于開關型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號符合TTL電平標準,可以直接接到單片機的IO 端口上,而且其最高檢測頻率可達到1MHZ。

A44E 集成霍耳開關由穩壓器A、霍耳電勢發生器(即硅霍耳片)B、差分放大器C、施密特觸發器D和OC門輸出E五個基本部分組成。在輸入端輸入電壓Vcc,經穩壓器穩壓后加在霍爾電勢發生器的兩端,根據霍爾效應原理,當霍爾片處在磁場中時,在垂直于磁場的方向通以電流,則與這二者相垂直的方向上將會產生霍爾電勢差VH輸出,該VH信號經放大器放大后送至施密特觸發器整形,使其成為方波輸送到OC門輸出。當施加的磁場達到工作點(即Bop)時,觸發器輸出高電壓(相對于地電位),使三極管導通,此時OC門輸出端輸出低電壓,三極管截止,使OC門輸出高電壓,這種狀態為關。這樣兩次電壓變換,使霍爾開關完成了一次開關動作。A44E霍爾傳感器原理如圖3所示。

圖3 A44E霍爾傳感器原理

里程計算是通過安裝在車輪上的霍爾傳感器檢測到的脈沖信號,送到單片機產生中斷,單片機再根據程序設定,計算出里程。其原理如圖4所示。

圖4 傳感器測距示意圖

本系統選擇了將A44E的脈沖輸出口接到P3.3口外部中斷1作為信號的輸入端(這樣可以減少程序設計的麻煩),車輪每轉一圈(設車輪的周長是1米),霍爾開關就檢測并輸出信號,引起單片機的中斷,對脈沖計數,當計數達到1000次時,即1公里,單片機就控制將金額自動增加,如圖5。

圖5 A44E霍爾元件接線圖

2.3 AT24C01存儲單元 存儲單元的作用是在電源斷開的時候,存儲當前設定的單價信息。AT24C01 是Ateml公司的1KB的電可擦除存儲芯片,采用兩線串行的總線和單片機通訊,電壓最低可以到2.5V,額定電流為1mA,靜態電流10uA(5.5V),芯片內的資料可以在斷電的情況下保存40年以上,而且采用8 腳的DIP 封裝,使用方便。

AT24C02芯片引腳配置如圖6所示。

存儲單元電路連接如圖7所示。

圖 7 存儲單元電路原理圖 圖中R4、R5 是上拉電阻,其作用是減少AT24C01 的靜態功耗。由于AT24C01的數據線和地址線是復用的,采用串口的方式傳送數據,所以只用兩根線SCL(時鐘脈沖)和SDA(數據/地址)與單片機P2.2和P2.3口連接,進行傳送數據。

每當設定一次單價,系統就自動調用存儲程序,將單價信息保存在芯片內;當系統重新上電的時候,自動調用讀存儲器程序,將存儲器內的單價等信息,讀到緩存單元中,供主程序使用。

2.4 鍵盤調整單元

當單價等信息需要進行修改時,就要用到鍵盤進行修改。由于調節信息不多,故采用4個獨立鍵盤即可,分別實現清零、切換、增大、減小和功能等作用。電路原理如圖8所示。

圖8 鍵盤調整單元接線圖

S1:接P1.0口,對上一次的計費進行清零,為下次載客準備

S2:接P1.1口,實現白天和夜晚單價的切換;當功能鍵S4按下時,S2可對數據進行增大。S3:接P1.2口,當功能鍵S4按下時,S3可對數據進行減小。S4:接P1.3口,按1次,進入調整白天單價;按2次,進入調整夜晚單價;按3次,進入調整等待單價;按4次,進入調整起步價;按5次,返回。

2.5 顯示單元

顯示單元由7個8段共陽數碼管組成,采用動態掃描進行顯示。前三個數碼管分別接P3.0、P3.1和P3.2,用于顯示總金額;中間兩個分別接P3.4和P3.5,用于顯示里程;后邊兩個分別接P3.6和P3.7,用于顯示單價。電路如圖9所示。

圖9 數碼管顯示圖

第三章 軟件設計

3.1 系統主程序

在主程序模塊中,需要完成對各參量和接口的初始化、出租車起價和單價的初始化以及中斷、計算、循環等工作。另外,在主程序模塊中還需要設置啟動/清除標志寄存器、里程寄存器和價格寄存器,并對它們進行初始化。然后,主程序將根據各標志寄存器的內容,分別完成啟動、清除、計程和計價等不同的操作。

當汽車運行起來時,就啟動計價,根據里程寄存器中的內容計算和判斷行駛里程是否已超過起步價公里數。若已超過,則根據里程值、每公里的單價數和起步價數來計算出當前的總金額,并將結果存于總金額寄存器中;中途等待時,無脈沖輸入,不產生中斷,當時間超過等待設定值時,開始進行計時,并把等待價格加到總金額里,然后將總金額、里程和單價送數碼管顯示出來。程序流程如圖10所示。

圖10 主程序流程圖 圖11 計算程序流程圖

3.2 中斷程序

3.2.1 里程計數中斷程序

每當霍爾傳感器輸出一個低電平信號就使單片機中斷一次,當里程計數器對里程脈沖計滿1000次時,進入里程計數中斷服務程序中,里程變量加一。主函數中總金額也相應地變化。

3.2.2 中途等待中斷程序

在中途等待中斷程序中,每1ms產生一次中斷,將當前里程值送入某個緩存變量,每5分鐘將緩存變量中的值和當前里程值比較,當汽車停止,霍爾傳感器5分鐘沒有輸出信號,當前里程值和緩存變量內的值相同,則進入等待計時,每5分鐘記一次價格。

3.3 計算程序

計算程序根據里程數分別進入不同的計算公式。如果里程大于3公里,則執行公式:總金額=起步價+(里程-3)*單價+等待時間*等待單價;否則,執行公式:總金額=起步價+等待時間*等待單價。程序流程圖如圖11所示。

3.4 顯示程序

顯示程序利用定時器每1ms產生一次中斷,相應變量置位,點亮一個數碼管,顯示一位數據,利用主函數內的循環,實現動態掃描顯示,同時根據數碼管余輝和人眼暫留現象,即可實現顯示。

3.5 鍵盤程序

鍵盤采用查詢的方式,放在主程序中,當沒有按鍵按下的時候,單片機循環主程序,一旦右按鍵按下,便轉向相應的子程序處理,處理結束再返回。流程圖如圖12。

圖12 鍵盤程序流程圖

第四章 總結

經過這些天有關于出租車計價器的課程設計,使我對單片機的應用有了更深的了解。在課程設計的過程中,還是碰到了許多的問題。比如,對于數碼管動態掃描顯示和鍵盤的延時防抖的綜合編程不能較好地解決;對于代碼的前后順序及調用掌握得還不夠好;對于一些相關的應用軟件沒能熟練掌握。通過這幾天晚上的苦想和反復調試,以及參考網上的程序,最終還是把問題解決了。通過這次課程設計,我最大的收獲就是自己的動手能力和獨立解決問題的能力得到了很大的提高,也充分體會到了自己設計東西的樂趣、學會查閱資料和對別人的東西融會變通的重要性,也明白了很多知識光靠趴在書本上學是學不到其中的精髓的,必須親自去試著實踐,親自去經歷才能對它們真正的掌握,凡事都要自己去動下手,去實踐一下,遇到困難,永遠不要沮喪氣餒。在動手的過程中,不僅能增強實踐能力,而且在理論上可以有更深的認識;這次設計給了我極大的鼓舞和信心,相信在以后的學習中可以通過不斷的摸索和實踐來提高其他方面的知識。

參考文獻

[1] 馬淑華,王鳳文,張美金編著.單片機原理與接口技術(第二版).北京:北京郵電大學出版社,2007.[2] 譚浩強著.C程序設計(第三版).北京:清華大學出版社,2005.附錄A 系統原理圖

源程序

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define delayNOP();{_nop_();_nop_();_nop_();_nop_();_nop_();};

uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

sbit exter=P3^3;

//外部中斷

sbit key0=P1^0;

//清零

sbit key1=P1^1;

//切換/+

sbit key2=P1^2;

//-

sbit key3=P1^3;

//功能鍵

sbit p30=P3^0;

//數碼管各位控制

sbit p31=P3^1;

sbit p32=P3^2;

sbit p34=P3^4;

sbit p35=P3^5;

sbit p36=P3^6;

sbit p37=P3^7;

sbit SDA=P2^3;

//IIC引腳

sbit SCL=P2^2;

uint inter,aa,bb,temp,temp1;

uint zongjine,licheng,dengdai;

uint key3num,qiehuantemp,delaytemp;

uchar danjia1,danjia2,danjia3,danjia,qibu;

void delay(uint x)

//延時時基為1ms {

int i,j;

for(i=x;i>0;i--)

for(j=340;j>0;j--);}

void start()

//IIC開始位

{

SDA = 1;

SCL = 1;

delayNOP();

SDA = 0;

delayNOP();

SCL = 0;

}

void stop()

// IIC停止位

{

SDA = 0;

delayNOP();

SCL = 1;

delayNOP();

SDA = 1;}

void respons()

//IIC應答位

{

uchar i;

SCL=1;

delayNOP();

while((SDA==1)&&(i<250))

i++;

SCL=0;

delayNOP();}

uchar read_byte()

// 從EEPROM讀到MCU {

uchar i,j;

for(i=0;i<8;i++)

{

SCL=1;

j<<=1;

j|=SDA;

SCL=0;

}

return(j);}

void write_byte(uchar date)

{

uchar i,temp;

temp=date;

for(i=0;i<8;i++)

{

temp=temp<<1;

SCL=0;

delayNOP();

SDA=CY;

delayNOP();

SCL=1;

delayNOP();

}

SCL=0;

// 從MCU寫到EEPROM

delayNOP();

SDA=1;

delayNOP();}

void write_data(uchar addr, uchar date){

start();

write_byte(0xa0);

respons();

write_byte(addr);

respons();

write_byte(date);

respons();

stop();}

uchar read_data(uchar addr)

{

uchar date;

start();

write_byte(0xa0);

// 在指定地址addr處寫入數據date // 在指定地址addr讀取數據

respons();

write_byte(addr);

respons();

start();

write_byte(0xa1);

respons();

date=read_byte();

stop();

return date;}

void display(uint zongjine0,uint licheng0,uint danjia0){

uint jbai,jshi,jge,lshi,lge,dshi,dge;

uint numwei,numshu;

//數碼管位置分配

jbai=zongjine0/100;

jshi=zongjine0%100/10;

jge=zongjine0%100%10;

lshi=licheng0/10;

//數碼管顯示

lge=licheng0%10;

dshi=danjia0/10;

dge=danjia0%10;

//數碼管動態顯示

if(aa)

{

aa=0;numshu++;if(numshu==7)

numshu=0;P3=0xff;switch(numwei){

case 0:p30=0;P0=table[jbai];break;

case 1:p31=0;P0=table[jshi]&0x7f;break;

case 2:p32=0;P0=table[jge];break;

case 3:p34=0;P0=table[lshi];break;

case 4:p35=0;P0=table[lge];break;

case 5:p36=0;P0=table[dshi]&0x7f;break;

case 6:p37=0;P0=table[dge];break;

}

numwei++;

if(numwei==7)

numwei=0;

} }

void keyscan()

//鍵盤掃描

{

if(key3==0)

//功能鍵調節

{

delay(5);

if(key3==0)

{

key3num=1;

while(!key3);

delay(5);

while(!key3);

while(key3num)

{

if(key3num==1)

調白天單價

//

{

if(key1==0)

{

delay(5);

if(key1==0)

danjia1=0;

{

danjia1++;

if(danjia1==100)

while(!key1);

delay(5);

while(!key1);

} } if(key2==0){

delay(5);

if(key2==0)

{

danjia1--;

if(danjia1==-1)

danjia1=99;

while(!key2);

delay(5);

while(!key2);

}

調夜晚單價

danjia2=0;

}

display(1,0,danjia1);} if(key3num==2)

//{

write_data(1,danjia1);

if(key1==0)

{

delay(5);

if(key1==0)

{

danjia2++;

if(danjia2==100)

while(!key1);

delay(5);

while(!key1);

}

}

danjia2=99;

if(key2==0)

{

delay(5);

if(key2==0)

{

danjia2--;

if(danjia2==-1)

while(!key2);

delay(5);

while(!key2);

}

}

display(2,0,danjia2);} if(key3num==3)

//調等待單價

{

write_data(2,danjia2);

if(key1==0)

danjia3=0;

{

delay(5);

if(key1==0)

{

danjia3++;

if(danjia3==100)

while(!key1);

delay(5);

while(!key1);

} } if(key2==0){

delay(5);

if(key2==0)

{

danjia3--;

if(danjia3==-1)

danjia3=99;

while(!key2);

步價

delay(5);

while(!key2);

}

}

display(3,0,danjia3);} if(key3num==4)

//調起{

write_data(3,danjia3);

if(key1==0)

{

delay(5);

if(key1==0)

{

qibu++;

if(qibu==100)

qibu=0;

while(!key1);

delay(5);

qibu=99;

while(!key1);

} } if(key2==0){

delay(5);

if(key2==0)

{

qibu--;

if(qibu==-1)

while(!key2);

delay(5);

while(!key2);

} }

display(4,0,qibu);

}

if(key3num==5)

//退出功能鍵

{

}

}

write_data(4,qibu);

key3num=0;}

if(key3==0){

delay(5);

if(key3==0)

{

key3num++;

while(!key3);

delay(5);

while(!key3);

} }

} } void init(){ SDA=1;SCL=1;

zongjine=0;licheng=0;dengdai=0;

danjia1=read_data(1);danjia2=read_data(2);danjia3=read_data(3);qibu=read_data(4);

aa=0;//數碼管動態掃描的定時器時基個數

bb=0;//判斷是否等待的時基個數

inter=0;

EA=1;//開總中斷

EX1=1;//開外部中斷1 IT1=1;//觸發方式下降沿

TMOD=0x01;TH0=(65536-1000)/256;TL0=(65536-1000)%256;ET0=1;//開定時器T0中斷

TR0=1;//開定時器T0

P3=0x08;P0=table[0];}

void jisuan(){ if(licheng>3)zongjine=qibu+(licheng-3)*danjia+dengdai*danjia3;//金額計算

else zongjine=qibu+dengdai*danjia3;//起步公里內金額計算 }

void qiehuan(){ if(key1==0)//白天夜晚切換

{ delay(5);//鍵盤防抖

if(key1==0)qiehuantemp=!qiehuantemp;while(!key1);delay(5);while(!key1);} if(qiehuantemp==0)danjia=danjia2;if(qiehuantemp==1)danjia=danjia1;}

void main(){ init();qiehuantemp=1;key3num=0;while(1){ qiehuan();//切換白天夜晚單價

jisuan();//計算總金額

display(zongjine,licheng,danjia);keyscan();if(key0==0)//清零鍵

init();} }

void inter1()interrupt 2 //脈沖中斷 { delay(5);// if(exter==0)// { // IT1=1;inter++;if(inter==5){ inter=0;licheng++;} } // while(!exter);// delay(5);// while(!exter);// }

void timer0()interrupt 1 { TH0=(65536-1000)/256;TL0=(65536-1000)%256;aa++;bb++;temp1=licheng;//測試是否進入等待

if(bb==10000)//10s無反應進入等待計費

{ bb=0;if(temp=temp&temp1)dengdai++;temp=licheng;} }

原來文件地址http://blog.sina.com.cn/s/blog_609003ef0100dt1o.html

存儲器可以不用

第二篇:出租車計價器 硬件課程設計

硬件課程設計報告

題目:出租車計價器

目錄

1. 引言....................................................................................................................................錯誤!未定義書簽。

1.1設計目的................................................................................................................錯誤!未定義書簽。1.2設計任務................................................................................................................錯誤!未定義書簽。1.3設計思路................................................................................................................錯誤!未定義書簽。

2.需求分析.............................................................................................................................錯誤!未定義書簽。

2.1芯片原理................................................................................................................錯誤!未定義書簽。2.1.1可編程計數器/定時器8253/8254原理.............................................................錯誤!未定義書簽。2.1.2可編程外圍接口芯片8255原理.......................................................................錯誤!未定義書簽。2.1.3 12864液晶顯示器ST7920原理........................................................................錯誤!未定義書簽。2.2硬件設計................................................................................................................錯誤!未定義書簽。2.3軟件設計................................................................................................................錯誤!未定義書簽。2.3.1功能模塊圖.........................................................................................................錯誤!未定義書簽。2.3.2程序流程圖.........................................................................................................錯誤!未定義書簽。2.3.3模塊流程圖.........................................................................................................錯誤!未定義書簽。

3.詳細設計.............................................................................................................................錯誤!未定義書簽。

3.1程序模塊分析........................................................................................................錯誤!未定義書簽。3.1.1初始化模塊程序分析.........................................................................................錯誤!未定義書簽。3.1.2判斷開關程序模塊分析.....................................................................................錯誤!未定義書簽。3.1.3圈數統計模塊程序分析.....................................................................................錯誤!未定義書簽。3.1.4計算里程模塊程序分析.....................................................................................錯誤!未定義書簽。3.1.5顯示模塊程序分析.............................................................................................錯誤!未定義書簽。3.1.6結束模塊程序分析.............................................................................................錯誤!未定義書簽。3.2程序代碼................................................................................................................錯誤!未定義書簽。

4.5.6.程序結果.............................................................................................................................錯誤!未定義書簽。分析與測試.........................................................................................................................錯誤!未定義書簽。體會.....................................................................................................................................錯誤!未定義書簽。

附錄A:參考文獻.....................................................................................................................錯誤!未定義書簽。

一、引言

1.1設計目的

現在各大城市出租車已經成為了一種重要的交通工具,當然出租車的收費問題也成了人們關注的焦點,那么怎么樣才能實現一種合理的收費方式讓大家都認可呢?在這種要求下,出租車自動計價器就走進了人們的生活,當然這就要求有一種合理公正的計價器收費方式。這不僅關系到出租車計價器的市場,也影響這出租車的市場,這就要求我們設計出更好的計價器來滿足人們的需求。

本設計是關于出租車計價器的設計。在本次設計中,我以計價器的基本功能作為設計的重點。為了完成上述設計,我們采用了8254、8255等芯片,用計算機匯編語言進行軟件功能的實現。

1.2設計任務

1.實現一個出租車計價器,可以顯示起步價。2.一個鍵來控制是否到達終點,是否計價要清零。3.基于路程的出租車計價方式。

1.3設計思路

利用直流電機來模仿出租車輪子的轉動來計算出租車行進的路程。將直流電機的直流端與滑動變阻器相連,通過人工控制滑動變阻器來模擬出租車的行進;并將計數端與8253CLK0端相連,GATE0接高電平,工作方式為方式二。直流電機每轉1000圈,8253輸出一個高電平,假設出租車已經走了1公里。同時將8253OUT0接入8255方便CPU讀取。再將8255與ST7920顯示器相連,CPU通過控制8255來控制顯示,一旦8255從8253讀入一個高電平,則公里數加一,同時價格相應增加。另有一個開關連入8255,用以判斷出租車計價器是否啟動。

二、需求分析

2.1芯片原理

本節主要在介紹本次設計所用到的芯片的原理,共有可編程計數器/定時器8253/8254、可編程外圍接口芯片8255和12864液晶顯示器ST7920原理三種芯片。

2.1.1可編程計數器/定時器8253/8254原理

圖2-1 8254內部結構圖

從圖2-1可見,8254內部包含數據總線緩沖器、讀/寫控制邏輯、控制字寄存器和3個結構完全相同的計數器,這3個計數器分別稱為計數器0、計數器1和計數器2。

圖2-2 8254管腳圖

A1、A0:地址輸入線,用來控制8253內部的4個端口,即3個計數器和1個控制字寄存器與CPU系統地址線相連。

CLK0-2:時鐘脈沖輸入端,用于輸入定時脈沖或計數脈沖信號。CLK可以是系統的時鐘脈沖,也可以由系統時鐘分頻或者其他脈沖源提供。當用于定時時,這個脈沖必須是均勻的、連續的、周期精確的,而用于計數時,這個脈沖可以是不均勻的、斷續的、周期不定的。

GATE0-2:門控輸入端,用于外部控制計數器的啟動計數和停止計數的操

作。兩個或兩個以上計數器連用時,可用此信號同步,也可用于與外部某信號的同步。

OUT0-2:計數輸出,當計數器從初值開始完成計數操作進,OUT引腳輸出相應的信號。

8253的方式控制字

圖2-3 8254控制字圖

本設計中8254的功能

只是用通道1,采用方式三。采用二進制計數,輸入0FFFH。先輸入低字節,再輸入高字節。當8254從0FFFFH遞減到159FH時(即轉了60000圈時),8254向總線發信號使程序向下進行。

2.1.2可編程外圍接口芯片8255原理

內部結構如圖所示,由以下4個部分組成:

圖2-4 8255內部結構圖

(1)輸入/輸出端口A、B、C。這三個端口均可看作是I/O端口,但它們的結構和功能也稍有不同。A口和B口是一個獨立的8位I/O口。C口:可以看作是一個獨立的8位I/O口;也可以看作是兩個獨立的4位I/O口。

(2)A組和B組控制電路。這是兩組根據CPU命令控制8255A工作方式的電路,這些控制電路內部設有控制寄存器,可以根據CPU送來的編程命令來控制8255A的工作方式,也可以根據編程命令來對C口的指定位進行置/復位的操作。A組控制電路用來控制A口及C口的高4位;B組控制電路用來控制B口及C口的低4位

(3)讀/寫控制邏輯。(同上:它負責管理8255A的數據傳輸過程。它接收CS*及RD*、WR*、RESET,還有來自系統地址總線的口地址選擇信號A0和A1。將這些信號組合后,得到對A組控制部件和B組控制部件的控制命令,并將命令發給這兩個部件,以完成對數據、狀態信息和控制信息的傳輸。)

(4)數據總緩沖器。(同上:它是8位的雙向的三態緩沖器。作為8255A與系統總線連接的界面,輸入/輸出的數據,CPU的編程命令以及外設通過8255A傳送的工作狀態等信息,都是通過它來傳輸的。)

如圖所示8255A的芯片引腳信號。除了電源和地以外,其他信號可以分為兩組:

圖2-5 8255管腳圖

1.和外設一邊相連的: PA7-PA0:A組數據信號

PB7-PB0:B組數據信號 PC7-PC0:C組數據信號 2.和CPU一邊相連的:

RESET:復位信號,低電平有效。當RESET信號來到時,所有內部寄存器就被清除,同時,3個數據端口被自動設為輸入端口。

D7-D0:它們是8255A的數據線,和系統數據總線相連。

CS*:芯片選擇信號,低電平有效。在一個系統中,一般根據全部接口芯片來分配若干較低位地址(比如A5、A4、A3)來組成各種芯片選擇碼,當這幾位地址組成某一個代碼時,譯碼器便往8255A的CS*端輸出一個低電平,于是8255A被選中。只有當 CS*有效時,讀信號RD*和寫信號WR*才對8255A有效。

RD*:芯片讀出信號低電平有效。WR*:芯片寫入信號低電平有效。8255的方式控制字格式

圖2-6 8255控制字圖

本設計中8255的功能

8255PA0-PA7和PC0-PC2與ST7920相連,控制輸出。PB0與8253的OUT1相連,讀入8253OUT1 的數據。PB1與開關K0相連,讀入K0的數值用于確定是否開啟計價器。

2.1.3可編程外圍接口芯片8255原理

ST7920控制器系列中文圖形液晶模塊的軟件特性主要由ST7920控制驅動器決定。ST7920同時作為控制器和驅動器,它可提供33路com輸出和64路seg輸出。在驅動器ST7921的配合下,最多可以驅動256×32點陣液晶。

ST7920是臺灣矽創電子公司生產的中文圖形控制芯片,它是一種內置12864漢字圖形點陣的液晶顯示控制模塊,用于顯示漢字及圖形。該芯片共內置8192

個中文漢字(16×16點陣)、128個字符的ASCII字符庫(8×16點陣)及64×2256點陣顯示RAM(GDRAM)。

為了能夠簡單、有效地顯示漢字和圖形,該模塊內部設計有2MB的中文字型CGROM和64×256點陣的GDRAM繪圖區域;同時,該模塊還提供有4組可編程控制的16×16點陣造字空間;除此之外,為了適應多種微處理器和單片機接口的需要,該模塊還提供了4位并行、8位并行、2線串行以及3線串行等多種接口方式。利用上述功能可方便地實現漢字、ASCII碼、點陣圖形、自造字體的同屏顯示,所有這些功能(包括顯示RAM、字符產生器以及液晶驅動電路和控制器)都包含在集成電路芯片里,因此,只要一個最基本的微處理系統就可以通過ST7920芯片來控制其它的芯片

圖2-7 ST7920外觀尺寸圖

本設計中ST7920的功能

用于顯示出租車行駛路程與應收費用。

2.2硬件設計

其中,8253GATE1連+5V高電平,直流電機連0~+5V,8253連280h~287h,8255連288h~28fh。8255PA0-PA7連ST7920顯示器D0-D7,PC0連DI,PC1連RW,PC2連E。開關K0連8255PB0。8253CLK1連直流電機計數端。

0~+5V直流電機D0-D7計數ST7920顯示屏DIRWE+5VGATE1CLK1PA0-PA7+5VPC0PC1PC2開關K0PB0+5V8253CS8255CS280H-288H289H-28FH總線圖2-8硬件連接圖

實際連接圖如下圖所示

圖2-9硬件實際連接圖

2.3軟件設計 2.3.1功能模塊圖

本節先給出一個程序的功能模塊圖。

出租車計價器系統計價器開關功能模塊讀入直流電機轉圈數模塊ST7920顯示功能模塊根據里程計算價格模塊

圖2-10軟件功能模塊圖

2.3.2程序流程圖

本節先給出一個程序的整體流程圖。

開始結束8253初始化液晶顯示屏初始化8255初始化是計價器是否開始工作通過8255讀入b0否是否有鍵盤輸入否液晶顯示屏初始化是液晶顯示屏調用顯示價格功能從直流電機讀入輸入圈數將更改過的路程在顯示器中顯示出來讀到一定圈數走的路程加一比較路程是否大于3公里是價格為(路程-3)*2+7 元將儲存的顯示字符串內路程價格改為目前路程價格否價格為7元

圖2-11軟件程序流程圖

2.3.3模塊流程圖

如果對整個程序進行細分則可以分為初始化模塊,判斷開關模塊,圈數統計模塊,計算里程模塊、結束模塊和顯示模塊。其中初始化模塊是8253芯片、8255芯片和顯示屏的初始化。判斷開關模塊是對8255的b0端是否有高電平進行判斷。

圈數統計模塊是對直流電機傳入8253中高電平的數量進行圈數統計。計算里程模塊是對里程及價格進行計算的模塊。結束模塊是程序結束的操作與方法。顯示模塊是控制顯示屏顯示計算模塊的結果。

初始化模塊顯示模塊調用關判斷開關模塊開結束模塊圈數統計模塊計算里程模塊調用顯示模塊圖2-12軟件模塊流程圖

三、詳細設計

3.1程序模塊分析

我們將按模塊分析程序的功能并給出模塊內的功能流程圖。

3.1.1初始化模塊分析

在初始化模塊中,我們定義了需要使用的8255和8254的接口,需要使用的變量如JSS,要輸出的字符串等,初始化了DS,完成了8255的初始化以及顯示屏的初始化。其流程圖為

開始圖3-1初始化模塊流程圖

3.1.2判斷開關模塊分析

以上為判斷開關模塊,在判斷開關模塊中,系統讀入8255PB0的電平,如果是高電平則程序繼續進行,如果是低電平則程序調用chushi函數,用屏幕顯示“空車歡迎乘坐”,并繼續度8255PB0直到有高電平為止。其流程圖如下所示:

8255PB0是否為高電平是圈數統計模塊否Chushi函數計數變量和對應的字符串置零顯示 空車 歡迎乘坐 調用顯示模塊

圖3-2判斷開關模塊流程圖

3.1.3圈數統計模塊分析

在圈數統計模塊中,我們將直流電機計數端連入8254CLK1中(8253采用方式三),在CLK1中讀所記的數,從0FFFFH向下計,一直計到159FH,即轉了6000圈后,進入程序的下一段。其流程圖如下所示:

讀8254計數值否是否到159FH以下是重新將8254計數初值設為0FFFFH計算里程模塊

圖3-3圈數統計模塊流程圖

3.1.4計算里程模塊分析

我們用地址JSS里表示已經走過的公里,即8254傳過來的高電平,同時我們采用價格公式來計算價格,將其里程和價格對應的中文字碼表存入要顯示的字符串中。我們用地址JSS里表示已經走過的公里,即8254傳過來的高電平,同時我們采用價格公式來計算價格,將其里程和價格對應的中文字碼表存入要顯示的字符串中。

計算公式為: 價格=(里程-3)* 2……(里程>3)

價格= 7…………………..(里程<=3)并調用顯示模塊來顯示這些字碼其流程圖如下所示:

圈數統計模塊計數值JSS加一并十進制化里程數加一里程數是否是大于3是價格為(里程-3)*2調用顯示模塊否價格為7

圖3-4計算里程模塊流程圖

3.1.5顯示模塊分析

在顯示模塊中,我們使用ST7920顯示我們要顯示的兩行字符串。我們采取先顯示第一行,再顯示第二行的方法,只是用ST7920的中間兩行。

調整顯示屏指針指向第二行調整顯示屏指針指向第三行調整字符串指針指向第一個字調整字符串指針指向第九個字輸出輸出延時延時

圖3-5顯示模塊流程圖

3.1.6結束模塊分析

結束模塊在程序的尾部在結束模塊中,我們規定只要在鍵盤上按任意一個鍵就會結束整個程序。如果無鍵按下,則程序自動跳轉到程序頭部。其程序流程圖如下圖所示:

調用DOS中斷是否有鍵按下是結束否判斷開關模塊

圖3-6結束模塊流程圖

3.2程序代碼

IO8253A

EQU 280H IO8253B

EQU 281H IO8253C

EQU 283H

DATA

SEGMENT HZ DW 0C2B7H,0B3CCH,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0B9ABH,0C0EFH

DW BCDBH,0B8F1H,0A3B0H,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0D4AAH;存放原始輸出 HZ_TAB DW 0C2B7H,0B3CCH,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0B9ABH,0C0EFH

DW 0BCDBH,0B8F1H,0A3B0H,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0D4AAH;存放要輸出的值 HZ_BG DW 0BFD5H,0B3B5H,0A2A0H,0A2A0H,0BBB6H,0D3ADH,0B3CBH,0D7F8H

DW 0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H;存放“空車歡迎乘坐”

HZ_ADR DB ?

;存放顯示行起始端口地址 JSS

DW 0000H DII

DW 0000H GAO

DW 0000H ZHE

DW 0000H NUMBER

DW 0A3B0H,0A3B1H,0A3B2H,0A3B3H,0A3B4H,0A3B5H,0A3B6H,0A3B7H,0A3B8H,0A3B9H DATA

ENDS IO_ADDRESS

EQU 288H

CODE SEGMENT ASSUME CS:CODE,DS:DATA START:

MOV AX,DATA MOV DS,AX

MOV DX,IO_ADDRESS ADD DX,3 MOV AL,82H OUT DX,AL

;8255初始化 MOV AL,0FFH MOV DX,300H OUT DX, AL CALL CLEAR

;LCD 清除

LLL:

MOV DX,IO_ADDRESS ADD DX,1 IN AL,DX

;判斷開關是否打開 AND AL,01H CMP AL,01H JZ F0 CALL CHUSHI JMP LLL F0: MOV AL,01110110B MOV DX,IO8253C OUT DX,AL

;8254初始化 MOV AL,0FFH MOV DX,IO8253B OUT DX,AL MOV AL,0FFH

;設置計數初值0FFFFH OUT DX,AL F1: MOV AL,01000000B

MOV DX,IO8253C OUT DX,AL MOV DX,IO8253B

IN AL,DX MOV AH,AL IN AL,DX XCHG AH,AL CMP AX,159FH

;查看是否下降到159FH JA F1

;不滿足條件繼續讀值

MOV AL,01110110B

;重置8253 MOV DX,IO8253C OUT DX,AL MOV AL,0FFH MOV DX,IO8253B OUT DX,AL MOV AL,0FFH OUT DX,AL

CALL DISP

;調顯示子程序

CALL DDSP

CALL DELAY PUSH DX

MOV AH,06H MOV DL,0FFH INT 21H POP DX

JZ LLL

MOV AH,4CH

;退出

INT 21H L1:

JMP

START;L1

CHUSHI PROC NEAR

LEA SI, HZ_TAB LEA DI,HZ MOV CX,0FH F3: ADD SI,2 ADD DI,2 MOV AX,[DI] MOV [SI],AX LOOP F3

;重置HZ_TAB

MOV AX,0000H LEA BX,JSS MOV [BX],AX LEA BX, HZ_BG MOV CH,2

CALL LCD_DISP LEA BX, HZ_BG MOV CH,3

;顯示“空車歡迎乘坐” CALL LCD_DISP RET CHUSHI ENDP

DDSP

PROC NEAR

LEA DI,HZ_TAB LEA BX,JSS LEA SI,NUMBER MOV AX,WORD PTR[BX]

MOV BP,AX AND BP,00FFH ADD BP,BP

MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+6],DX

;將JSS中低八位傳入HZ_TAB MOV BP,AX AND BP,0FF00H ROR BP,8 ADD BP,BP MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+4],DX

LEA BX, HZ_TAB

MOV CH,2

CALL LCD_DISP LEA DI,HZ_TAB LEA BX,JSS LEA SI,NUMBER MOV AX,WORD PTR[BX] CMP AX,0003H

JBE L3 CALL BJ LEA BX,JSS JMP L4

L3:MOV BP,0007H

ADD BP,BP MOV DX,WORD PTR[BP+SI ] MOV WORD PTR[DI+24],DX JMP L4 L4:

LEA BX, HZ_TAB

MOV CH,3

CALL LCD_DISP RET DDSP

ENDP

BJ

PROC NEAR

LEA DI,HZ_TAB LEA BX,JSS LEA SI,NUMBER MOV AX,WORD PTR[BX] CMP AL,03H

;將JSS中高八位傳入HZ_TAB

;顯示第2行信;比較路程與3的大小;路程比3小的情況

;顯示第3行信息

JAE BJ1 SUB AH,01H ADD AL,0AH SUB AL,03H AAS

;路程減三并十進制化 JMP BJ2 BJ1:

SUB AX,0003H BJ2: MOV CX,AX AND AX,00FFH ADD AL,AL AAA ADD AX,07H AAA

LEA BX,DII MOV [BX],AX;DII MOV BP,AX AND BP,00FFH ADD BP,BP MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+24],DX

MOV AX,CX SHR AX,8 AND AX,00FFH ADD AL,AL

AAA LEA BX,GAO MOV [BX],AX;GAO LEA BX,DII MOV DX,[BX];DII AND AX,00FFH AND DX,0FF00H SHR DX,8 AND DX,00FFH ADD AL,DL

AAA LEA BX,ZHE MOV [BX],AX;ZHE MOV BP,AX AND BP,00FFH ADD BP,BP MOV DX,WORD PTR[BP+SI]

;路程加七并十進制化;先計算個位

;十位相加

;再加進位

MOV WORD PTR[DI+22],DX

;再計算十位 LEA BX,ZHE MOV DX,[BX] LEA BX,GAO MOV AX,[BX] AND DX,0FF00H AND AX,0FF00H SHR AX,8 SHR DX,8 ADD DL,AL

;百位加進位 AAA MOV BP,DX AND BP,00FFH ADD BP,BP MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+20],DX

;最后計算百位 RET BJ ENDP

DISP

PROC NEAR

;顯示子程序

PUSH DX

LEA BX, JSS

MOV AX,WORD PTR[BX]

ADD AL,01H

CMP AL,09H

;判斷是否<=9

JLE NUM

;若是則為'0'-'9',ASCII碼加30H

MOV AL,00H

ADD AH,01H

CMP AH,0AH

JZ L2 NUM:

MOV WORD PTR[BX],AX

ADD AL,30H

ADD AH,30H

MOV DL,AH

MOV DH,AL

MOV AH,02H

;屏幕顯示

INT 21H

MOV DL,DH

MOV AH,02H

;屏幕顯示

INT 21H

MOV DL,0DH

;加回車符

INT 21H

MOV DL,0AH

;加換行符

INT 21H

POP DX

RET

;子程序返回 DISP ENDP L2: MOV AH,4CH

;退出

INT 21H

CLEAR

PROC

MOV AL,0CH

CLEAR

FUNCUP

;

;

;

FUNCUP

LCD_DISP

;

DISP_SEC:

NEXT:

CONTINUE:

MOV DX, IO_ADDRESS OUT DX,AL

;設置CLEAR命令 CALL CMD_SETUP

;啟動LCD執行命令 RET

ENDP

PROC MOV AL, 0FH

;LCD功能設置命令 OUT DX, AL CALL CMD_SETUP MOV AL, 34H

;LCD顯示狀態命令 OUT DX, AL CALL CMD_SETUP RET

ENDP PROC LEA BX, HZ_TAB CMP CH, 2 JZ DISP_SEC MOV BYTE PTR HZ_ADR, 88H

;第三行起始端口地ADD BX,16

;指向第二行信息 JMP NEXT MOV BYTE PTR HZ_ADR,90H MOV CL,8

PUSH CX MOV AL,HZ_ADR MOV DX, IO_ADDRESS OUT DX, AL CALL CMD_SETUP

;設定DDRAM地址命令 MOV AX,[BX] PUSH AX MOV AL,AH

;先送漢字編碼高位 MOV DX,IO_ADDRESS OUT DX,AL CALL DATA_SETUP

;輸出漢字編碼高字節

CALL DELAY

;延遲

POP AX

MOV DX,IO_ADDRESS

OUT DX, AL

CALL DATA_SETUP

;輸出漢字編碼低字節

CALL DELAY

INC BX

INC BX

;修改顯示內碼緩沖區指針

INC BYTE PTR HZ_ADR

;修改LCD顯示端口地址

POP CX

DEC CL

JNZ CONTINUE

RET LCD_DISP

ENDP CMD_SETUP

PROC

MOV DX,IO_ADDRESS

制端口

ADD DX,2

NOP

MOV AL,00000000B

(LCD I端=0,W端=0)

OUT DX, AL

CALL DELAY

NOP

MOV AL,00000100B

=1)

OUT DX, AL

NOP

CALL DELAY

MOV AL, 00000000B

0)

OUT DX, AL

CALL DELAY

RET CMD_SETUP

ENDP DATA_SETUP

PROC

MOV DX,IO_ADDRESS

ADD DX,2

MOV AL,00000001B

(LCD I端=1)

OUT DX, AL

NOP

CALL DELAY

;指向8255端口控

;PC1置0,PC0置0

;PC2置1(LCD E端

;PC2置0,(LCD E端置

;指向8255控制端

;PC1置0,PC0=1

MOV AL,00000101B

;PC2置1(LCD E端=1)

OUT DX, AL

NOP

CALL DELAY

MOV AL, 00000001B

;PC2置0,(LCD E端=0)

OUT DX, AL

NOP

CALL DELAY

RET DATA_SETUP

ENDP DELAY

PROC

PUSH CX

PUSH DX

MOV CX, 0FFFH X1:

LOOP

X1

POP DX

POP CX

RET DELAY

ENDP

CODE ENDS

END START

四、程序結果

我們利用8254、8255、ST7920顯示屏、直流電機等制作出了一個出租車計價器有專用鍵可以表示是否空車,同時利用直流電機模擬車輪運動,通過路程計算價格,成果如下圖所示:

圖4-1程序結果圖

五、分析與測試

程序中,我遇到的最大的難題就是如何完成正確的十進制計算,因為所有的計算指令都是十六進制的,雖然有的計算里有類似AAA這樣的調整指令,但是很多時候就不一定記得起來加上。同時由于需要根據數字來查表對應相應的字符碼,而且我是建立一個從零到九的數組,而由于計算錯誤導致經常出現亂碼,而且比較難找到相應的錯誤。而且有些計算沒有十進制轉換指令,需要自己編寫。

同時我認為我利用提前存儲變量來表示走過的路程比利用堆棧要好,因為堆棧容易記混,而變量有獨特的名字,利于記憶與調用。而且易于清零、增減。

六、心得體會

這次課程設計中,令我印象最為深刻的就是我們應該有一種堅持的精神,有時候幾個小時都沒有成果,找不到BUG。顯示的就是有問題,這時候我們應該有一種堅持下去的毅力,積極詢問老師同學,問題的解決就很快了。

同時我發現編程習慣非常重要,應該有一個提前的規劃,不能想到哪寫到哪,這樣的話,后期的DEBUG會非常麻煩,因為自己也看不懂自己的代碼,我們都應該有規范化的代碼意識,這樣的編程能力才能上升。

參考文獻

[1]周荷琴,吳秀清,《微型計算機原理與接口技術》,合肥:中國科學技術大學出版社 2008。[2] 曹國清,《數字電路與邏輯設計》,徐州:中國礦業大學出版社 2003。[3] 8255芯片原理:http://baike.baidu.com/link?url=KHojvZzBGmo26_6iYGTdrdqH6PxQbM1Hnnc8hWQNPIp60L7TWG5LZu_ppSkXo5maU5M4APs4qCGSudiqZ0bdl_ [4]ST7920芯片原理:http://wenku.baidu.com/view/0dafd9232f60ddccda38a0fa.html訪問時間2013/10/15 [5]ST7920中文字碼表:http://wenku.baidu.com/view/d4abe628647d27284b735127.html訪問時間:2013/10/15

第三篇:51單片機 出租車計價器課程設計

第一章 出租車計價系統的設計要求與設計方案

1.1 出租車計價器設計要求

設計一個出租車自動計費器,計費包括起步價、行車里程計費、等待時間計費三部分,用七段數碼管顯示總金額,單價,運行里程,起步價為6元,超過6元,每一公里增加1元或2元,等待時間單價為每30秒鐘1元,計費功能:費用的計算是按行駛里程收費。設起步價為6元。

1、當總金額<6元時,按起價計算費用

2、當總金額>6元時,每公里按1元或2元計費

3、等待累計時間>30s時,按1元/30s計費

4、S1為啟動按鈕、S2轉換單價按鈕、S3復位按鈕。顯示功能:

1、顯示行駛里程:用三位數字顯示,顯示方式為“XX.X”,單位為km。計程范圍0-99.9km,精確到0.1km。

2、顯示單價:用兩位數字顯示,顯示方式為“X.X”,單位為元。

3、顯示總費用:用三位數字顯示,顯示方式為“XX.X”,單位為元。計價范圍0-99.9元,精確到0.1元。

1.2 系統主要功能

本出租車自動計費,上電后顯示最初的起步價,里程計費單價。同時具有運行,復位,轉換等狀態,可以切換白天與晚上不同計費單價,可以實現每等待30s收1元功能。出租車顯示行駛的總費用,里程,單價。

1.3 方案論證與比較

方案一:采用數字電子技術,利用555定時芯片構成多諧振蕩器,或采用外圍的晶振電路作為時鐘脈沖信號,采用計數芯片對脈沖盡心脈沖的計數和分頻,最后通過譯碼電路對數據進行譯碼,將譯碼所得的數據送給數碼管顯示,一下是該方案的流程框圖,方案一如圖1-1所示:

圖1-1方案一

方案二:采用EDA技術,根據層次化設計理論,該設計問題自頂向下可分為分頻模塊,控制模塊 計量模塊、譯碼和動態掃描顯示模塊,其系統框圖如圖1-2所示:

圖1-2方案二

方案三:采用MCU技術,通過單片機作為主控器,采用外部晶振作為時鐘脈沖,通過按鍵可以方便調節,以下是方案三的系統流程圖,本方案主要是必須對于數字電路比較熟悉,成本又不高。方案圖如圖1-3所示:

圖1-3方案三

方案總結:通過各個方案的比較,本次采用方案三,不但控制簡單,而且成本低廉,設計電路簡單。

第二章 出租車計價系統的硬件設計

2.1 AT89C51單片機介紹

AT89C51是一種帶4K字節閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集合輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89S51是一種高效微控器,為很多嵌入式控制系統提供了一種靈活性且廉價的方案 單片機各引腳功能說明:

VCC:供電電壓。GND:接地。

P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行。校驗時,P0輸出原碼,此時P0外部必須被拉高。

P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。

P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。

P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89S52的一些特殊功能口,P3口同時為閃爍編程和編程校驗接收一些控制信號。

RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。

ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。

/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。

/EA/VPP:當/EA保持低電平時,則在此期間選擇外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。

XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。

2.2 里程計算、計價單元的設計

里程計算是通過安裝在車輪上的霍爾傳感器A44E檢測到的信號,送到單片機,經處理計算,送給顯示單元的。其原理如圖2-1所示

圖2-1 由于A44E 屬于開關型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號符合TTL 電平標準,可以直接接到單片機的I/O 端口上,而且其最高檢測頻率可達到1MHZ。

如圖2-2,A44E 集成霍耳開關由穩壓器A、霍耳電勢發生器(即硅霍耳片)B、差分放大器C、施密特觸發器D 和OC 門輸出E 五個基本部分組成。

圖2-2 路程測量電路

在輸入端輸入電壓CC V,經穩壓器穩壓后加在霍耳電勢發生器的兩端,根據霍耳效應原理,當霍耳片處在磁場中時,在垂直于磁場的方向通以電流,則與這二者相垂直的方向上將會產生霍耳電勢差H V 輸出,該H V 信號經放大器放大后送至施密特觸發器整形,使其成為方波輸送到OC 門輸出。當施加的磁場達到工作點(即OP B)時,觸發器輸出高電壓(相對于地電位),使三極管導通,此時OC 門輸出端輸出低電壓,通常稱這種狀態為開。當施加的磁場達到釋放點(即rP B)時,觸發器輸出低電壓,三極管截止,使OC 門輸出高電壓,這種狀態為關。這樣兩次電壓變換,使霍耳開關完成了一次開關動作。

我們選擇了P3.5 口作為信號的輸入端,內部采用計數的方式,車輪每轉一圈(我們設車輪的周長是10米),霍爾開關就檢測并輸出信號,引起單片機對脈沖計數,當計數達到10次時,也就是0.1 公里,單片機就控制將金額自動的加增加,其計算公式:當前單價× 公里數=金額。

2.3 數據顯示單元的設計

由于設計要求有單價(2 位)、路程(3位)、總金額(3位)顯示輸出,我們采用8個7段數碼管動態顯示。如圖2-3:

圖2-3 數據顯示硬件電路圖

2.4 按鍵單元的設計

電路共采用了四個按鍵,S1、S2、S3、S4,其功能分別是:S1 啟動計價開關、S2 白天/晚上轉換開關、S3 數據復位清零開關、S4閉合表示出租車正常運行,計價器也正常計價;若打開S4則表示出租車在暫停,轉入判斷是否收費程序,閉合超過30秒,開始計價。如圖2-4:

圖2-4 按鍵單元電路圖 2.5 振蕩電路

單片機內部有一個高增益、反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。通過這兩個引腳在芯片外并接石英晶體振蕩器和兩只電容(電容和一般取33pF)。這樣就構成一個穩定的自激振蕩器。振蕩電路脈沖經過二分頻后作為系統的時鐘信號,再在二分頻的基礎上三分頻產生ALE信號,此時得到的信號時機器周期信號。振蕩電路如圖2-5所示:

圖2-5 振蕩電路

2.6 復位電路

復位操作有兩種基本形式:一種是上電復位,另一種是按鍵復位。按鍵復位具有上電復位功能外,若要復位,只要按圖中的RESET鍵,電源VCC經電阻R1、R2分壓,在RESET端產生一個復位高電平。上電復位電路要求接通電源后,通過外部電容充電來實現單片機自動復位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平只要能保持足夠的時間(2個機器周期),單片機就可以進行復位操作。按鍵復位電路圖如圖2-6所示。

圖2-6 復位電路 總電路圖

第三章 出租車計價系統的軟件設計

3.1主程序流程圖記描述

由于用到了外部中斷0,所以,按中斷系統的編程結構在0000H處放置一條長跳轉指令LJMP START跳轉到主程序入口,在外部中斷0的中斷入口地址0003H處放置一條長跳轉指令LJMP EXT0跳轉到外部中斷0服務程序處。主程序進行程序中用到的一些存儲單元的初始化,T0,T1的初始化。首先,進行存儲器單元初始化,將71H-79H單元賦值。然后進行定時器的設置。設置T1的工作方式為模式2,計數狀態,自啟動。T0的工作方式,模式1,定時狀態,自啟動,對輸入的脈沖進行計數,給T0、T1賦初值。之后調用計數脈沖子程序,及等待子程序,數碼管動態顯示子程序,最后進入鍵盤掃描子程序進行掃描。主程序不斷進行調用數碼管顯示子程序及鍵盤掃描子程序循環操作,等待中斷。如圖3-1:

圖3-1 主程序流程圖 3.2計費子程序流程圖

72H存儲總金額小數位,73H存儲器總金額個位,78H存儲器總金額十位,77H存儲單價元。將72H中值放入A中,再將A與77H相加,即小數位與單價相加,結果存入A,再進行十進制調整,將結果存于R6,將高四位與低四位交換并屏蔽高四位,保留低四位與個位相加得到總金額個位。若總金額超過10則清零,并且總金額十位加1。將R6中數值取出,屏蔽高四位,輸出總金額小數位。如圖3-2:

圖3-2 計費子程序流程圖 3.3 等待是否收費子程序

在出租車的計價系統中,出租車在等待的時候也要計價,本設計體現了這點。程序判斷了出租車是否停止,若停止30秒以上是,開始計價。55H中賦初值20,56H中賦初值10,總共30秒延時。超過30秒時,調用計費子程序。如圖3-3

圖3-3 等待是否收費子程序流程圖

3.4 按鍵子程序流程圖

圖3-4 等待收費子程序流程圖

3.5 外部中斷0流程圖

圖3-5 外部中斷0子程序流程圖 程序

ORG 0000H LJMP MAIN ORG 0003H;外部中斷入口地址 LJMP REST ORG 030H MAIN:

MOV 71H,#00H;脈沖計數每10個脈沖里程數加0.1顯示緩沖單元 MOV 72H,#00H;存儲總金額小數位 MOV 73H,#00H;存儲總金額個位 MOV 74H,#00H;存儲里程數小數位 MOV 75H,#00H;存儲里程數個位 MOV 76H,#00H;存儲單價角位 MOV 77H,#01H;存儲單價元位 MOV 78H,#00H;存儲總金額十位 MOV 79H,#00H;存儲里程數十位 MOV 55H,#20;給定等待初值20*50ms MOV 56H,#10;10秒等待時間初值 SETB EA;開總中斷 SETB EX0;開外部中斷0 MOV TCON,#04H;外部中斷0低電平

MOV TMOD,#61H;設置使用定時器1,模式2,計數狀態,自啟動,定時器0,模式1,定時狀態,自啟動

MOV TL0,#0B0H;50ms初值設定C350H MOV TH0,#03CH MOV TL1,#0FFH;設置定時器低八位初值為FFH,即有一脈沖輸入就溢出

MOV TH1,#0FFH;設置定時器高八位初值為FFH,用于重裝低八位 START: LCALL PULSE;調用計數脈沖子程序 LCALL WAIT;調用等待子程序 LCALL DISPLAY;調用顯示程序進行顯示 LCALL KEY;調用鍵盤掃描程序

SJMP START;返回START處繼續循環執行 REST: PUSH ACC MOV 71H,#00H;脈沖計數每10個脈沖里程數加1顯示緩存單元 MOV 72H,#00H;存儲總金額個位 MOV 73H,#00H;存儲總金額十位 MOV 74H,#00H;存儲里程數個位 MOV 75H,#00H;存儲里程數十位 MOV 78H,#00H;存儲總金額百位 MOV 79H,#00H;存儲里程數百位 MOV 55H,#20 MOV 56H,#10 POP ACC RETI PULSE: JBC TF1,PTO1;TF1為1則轉PT01 LJMP PSOUT PTO1: MOV 55H,#20 MOV 56H,#10 INC 71H MOV R1,71H CJNE R1,#0AH,PSOUT;脈沖調整,改變立即數即可;里程數個位74H,R1不等于0AH則轉PSOUT MOV 71H,#00H INC 74H LCALL MONEY MOV R1,74H CJNE R1,#0AH,PSOUT;里程數十位75H MOV 74H,#00H INC 75H MOV R1,75H CJNE R1,#0AH,PSOUT MOV 75H,#00H INC 79H MOV R1,79H CJNE R1,#0AH,PSOUT MOV 79H,#00H PSOUT:RET WAIT: JBC TF0,PTO2 LJMP CHU0 PTO2:MOV TL0,#0B0H MOV TH0,#03CH DJNZ 55H,CHU0;不為0則轉 MOV 55H,#20 DJNZ 56H,CHU0 MOV 56H,#10;30秒等待計時 INC 72H MOV A,72H LCALL MONEY1 CHU0:RET MONEY: MOV A,72H ADD A,77H MONEY1:DA A MOV R6,A SWAP A ANL A,#0FH ADD A,73H MOV 73H,A CJNE A,#0AH,MONEY2 MOV 73H,#00H INC 78H MOV A,78H CJNE A,#0AH,MONEY2 MOV 78H,#00H MONEY2:MOV A,R6 ANL A,#0FH MOV 72H,A RET DISPLAY:MOV A,78H CJNE A,#00H,L2 MOV A,73H CJNE A,#06H,L1 L1:JNC L2 MOV A,#82H ADD A,#80H MOV P0,A MOV P2,#02H LCALL DELAY MOV P2,#00H MOV A,#0C0H MOV P0,A MOV P2,#01H LCALL DELAY MOV P2,#00H MOV A,#0C0H MOV P0,A MOV P2,#40H LCALL DELAY MOV P2,#00H LJMP L3 L2:MOV A,73H MOV DPTR,#TAB MOVC A,@A+DPTR ADD A,#80H MOV P0,A MOV P2,#02H LCALL DELAY MOV P2,#00H MOV A,72H MOVC A,@A+DPTR MOV P0,A MOV P2,#01H LCALL DELAY MOV P2,#00H MOV A,78H MOVC A,@A+DPTR MOV P0,A MOV P2,#40H LCALL DELAY MOV P2,#00H L3:MOV A,75H MOV DPTR,#TAB MOVC A,@A+DPTR ADD A,#80H MOV P0,A MOV P2,#08H LCALL DELAY MOV P2,#00H MOV A,74H MOVC A,@A+DPTR MOV P0,A MOV P2,#04H LCALL DELAY MOV P2,#00H MOV A,77H MOVC A,@A+DPTR ADD A,#80H MOV P0,A MOV P2,#20H LCALL DELAY MOV P2,#00H MOV A,76H MOVC A,@A+DPTR MOV P0,A MOV P2,#10H LCALL DELAY MOV P2,#00H

MOV A,79H MOVC A,@A+DPTR MOV P0,A MOV P2,#80H LCALL DELAY MOV P2,#00H RET KEY: MOV A,#0FH MOV P3,A MOV A,P3 ORL A,#0F0H CJNE A,#0FFH,KEY1 LCALL DELAY SJMP EKEOUT KEY1: LCALL DELAY MOV A,P3 ORL A,#0F0H CJNE A,#0FFH,KEY2 SJMP EKEOUT KEY2: MOV R1,A KEY3: MOV A,P3 ORL A,#0FCH CJNE A,#0FFH,KEY3 MOV A,R1 JNB ACC.0,RUN JNB ACC.1,CHANGE SJMP EKEOUT RUN: SETB TR0 SETB TR1 SETB EA SJMP EKEOUT EKEOUT:RET CHANGE: PUSH ACC MOV A,77H CJNE A,#02H,NIGHT MOV 77H,#01H SJMP CHOUT NIGHT: MOV 77H,#02H CHOUT: POP ACC RET DELAY: MOV R7,#100 DJNZ R7,$ RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END

第四篇:單片機課程設計出租車計價器1.

常州機電職業技術學院 畢業設計(論文

作者:叢佳偉學號:40931111系部:電氣工程系 專業:應用電子技術 題目:出租車計價器系統 指導者:徐登黃勇 評閱者: 2012年05月 摘要

現在各個城市出租車行業都已普及,因此出租車計價器的技術已經成熟,但是出租車計價器的市場還具有廣闊的前景。隨著城市建設的日益完善,關乎城市面貌的出租車行業也將迅速發展,出租車計價器的的大批量需求也是毫無疑問的,所以未來出租車計價器的市場還是有相當大的潛力的。

本次出租車計價器設計以AT89S52單片機為中心,采用U18霍爾傳感器對輪胎轉數進行計數,實現對出租車里程的測量,并最終計算出結果。其中采用寄存器芯片AT24C02使系統在掉電的時候對單價、里程、車輪長度等信息進行存儲,采用時鐘芯片DS1302來顯示時間和在系統需要時進行計時。輸出采用兩個4段數碼顯示管,而且根據按鍵有空車指示燈、等待查詢指示燈、單程指示燈進行指示。

汽車計價器是乘客與司機雙方的交易準則,它是出租車行業發展的重要標志,是出租車中最重要的工具。它關系著交易雙方的利益。具有良好性能的計價器無論是對廣大出租車司機朋友還是乘客來說都是很必要的。因此,汽車計價器的研究也是有一定的應用價值的。

關鍵詞:計價器、霍爾傳感器、單片機 目錄 摘要(1 1 緒論(3 1.1 出租車計價器概述(3 1.2 單片機的概述(3 2 總體方案設計(4 2.1 設計任務要求(4 2.1.1 設計任務(4 2.1.2 設計要求(5 2.2 設計的主要功能(5 2.3 方案的選取(5 2.3.1 硬件設計方案(5 2.3.2 軟件設計方案(6 3 硬件設計(7 3.1 AT89S52單片機及最小系統(7 3.2 測距單元(10 3.3 按鍵單元(12 3.4 時鐘單元(12

3.5 顯示單元(13 3.6 儲存單元(15 4 軟件設計(16 4.1 系統主程序(16 4.2 數據處理子程序(17 4.3 等待時間計時子程序(18 4.4 鍵盤掃描子程序(19 5 Proteus軟件仿真(21 總結.............................................錯誤!未定義書簽。致謝.(23 參考文獻(23 附

1、系統原理圖(25 1 緒論

1.1 出租車計價器概述

我國在70年代開始出現出租車,但那時的計費系統大都是國外進口不但不夠準確,價格還十分昂貴。隨著改革開放日益深入,出租車行業的發展勢頭已十分突出,國內各機械廠家紛紛推出國產計價器。出租車計價器的功能從剛開始的只顯示路程(需要司機自己定價,計算后四舍五入,到能夠自主計費,以及現在的能夠打一發票和語音提示、按時間自主變動單價等功能。隨著城市旅游業的發展,出租車行業已成為城市的窗口,象征著一個城市的文明程度。

本次設計的目的在于現在各大中城市出租車行業都已普及自動計價器,所以計價器技術的發展已成定局。而部分小城市尚未普及,但隨著城市建設日益加快,象征

著城市面貌的出租車行業也將加速發展,計價器的普及也是毫無疑問的,所以未來汽車計價器的市場還是十分有潛力的。

1.2 單片機的概述

計算機系統已明顯地朝巨型化、單片化、網絡化三個方向發展。巨型化發展的目的在于不斷提高計算機的運算速度和處理能力,以解決復雜系統計算和高速數據處理,比如系統仿真和模擬、實時運算和處理。單片化是把計算機系統盡可能集成在一塊半導體芯片上,其目的在于計算機微型化和提高系統的可靠性,這種單片計算簡稱單片機。單片機的內部硬件結構和指令系統主要是針對自動控制應用而設計的所以單片機又稱微控制器MCU(Micro Controller Unit。用它可以很容易地將計算機嵌入到各種儀器和現場控制設備中,因此單片機又叫做嵌入式微控制器(Embedded MCU。單片機自20世紀70年代問世以來,以其鮮明的特點得到迅猛發展,已廣泛應用于家用電器、智能玩具、智能儀器儀表、工業控制、航空航天等領域,經過30多年的發展,性能不斷提高,品種不斷豐富,已經形成自動控制的一支中堅力量。據統計,我國的單片機年容量已達1~3億片,且每年以大約16%的速度增長,但相對于國際市場我國的占有率還不到1%。這說明單片機應用在我國有著廣闊的前景。對于從事自動控制的技術人員來講,掌握單片機原理及其應用已經成為必不可少的學習任

務。

單片機的應用十分廣泛,在工業控制領域、家電產品、智能化儀器儀表、計算機外部設備,特別是機電一體化產品中,都有重要的用途。其主要的用途可以分為以下方面。

●顯示:通過單片機控制發光二極管或是液晶,顯示特定的圖形和字符。●機電控制:用單片機控制機電產品做定時或定向的動作。

●檢測:通過單片機和傳感器的聯合使用,用來檢測產品或者工況的意 外發生。

●通信:通過RS-232串行通信或者是USB通信,傳輸數據和信號。●科學計算:用來實現簡單的算法。

那么單片機是不是解決上述應用的唯一選擇呢?當然不是!單片機最明顯的優點是價格便宜,從幾元人民幣到幾十元人民幣。這是因為這類芯片的生產量很大,技術也很成熟。

其次,單片機的體積也遠小于其他兩種方案。單片機本身一般用40引腳封裝,當然功能多一些的單片機也有引腳比較多的,如68引腳,功能少的只有10多個或20多個引腳,有的甚至只有8只引腳。

當然,單片機無論在速度還是容量方面都小于其他兩種方案,但是在實際工作中并不是任何需要計算機的場合都要求計算機有很高的性能。例如,控制電冰箱的控制器就不需要使用嵌入式系統,用一片51就可以輕松實現。所以應用的關鍵是看能否夠用,是否有很好的性能價格比。51系列的單片機已經面世十多年,依然沒有被淘汰,還在不斷發展中,這就說明是它有廣闊的應用前景。總體方案設計

本次設計是使用單片機技術來實現一個出租車的數字計價器,利用單片機豐富的IO端口,及其控制的靈活性,實現基本的里程計價功能和單雙程價格調整、時鐘顯示功能等等。具有性能可靠,電路簡單、成本低、擴展空間大等特點。

2.1 設計任務要求 2.1.1 設計任務

設計一款基于AT89S52單片機的出租車數字計價器,通過對傳感器的檢測,對數值進行處理和顯示。

2.1.2 設計要求

一、基本要求

(1能顯示里程,單位為公里,最后一位為小數位。(2能顯示金額數,單位為元,最后一位為小數位。

(3可設定單程價格和往返價格,單程價格為2元/公里,往返價格為1.5元/ 公里。

(4車速<5公里/小時的時間累積為總等待時間,每5分鐘等待時間相當于 里程數增加1公里。

(5起步公里數為3公里,價格為5元,若實際距離大于3公里,按規則3計 算價格。

(6按暫停鍵,計價器可暫停計價,按查詢鍵,可顯示總等待時間。

二、發揮部分

(1增加了空車指示功能,當無客人時,按下功能切換按鍵,空車指示燈亮。(2增加實時時間顯示,無論計價器工作或者空車,都能顯示實時時間,便于時間提醒。

(3增加信息儲存功能。可以儲存等待時間,里程和金額。2.2 設計的主要功能

本設計所設計的出租車數字計價器的主要功能有:金額輸出、路程輸出、數據復位、計時計價、空車顯示等。輸出采用2個4位8段共陽數碼管,車輛行走時前4位顯示路程,后4位顯示金額。車輛候車時,前4位顯示等待時間,后4位顯示等待金額。空車時顯示實時時間。儲存等待時間,里程和金額。

2.3 方案的選取

本設計是由軟件設計和硬件設計兩部分組成的。軟件設計要進行程序的編寫和軟件仿真;硬件設計要設計電路、硬件仿真和制作電路板。

2.3.1 硬件設計方案

本系統的硬件設計主要包括單片機AT89S52、數據顯示部件、U18霍爾傳感 器電路、里程計算及計價單元的設計。在硬件設計過程中,充分利用各部件的功能,實現多功能的出租車計價器設計。

計價器的單片機系統框圖如圖2-1所示。它由以下幾個部件組成:霍爾傳感器單元、AT89S52單片機、金額顯示、里程顯示、電源。利用單片機豐富的IO 端口,及其控制的靈活性,實現基本的里程和價格的計算及顯示功能。

圖2-1計價器系統框圖 2.3.2 軟件設計方案

本設計程序的采取C 語言進行編寫,使用Keil uVision3編譯和Proteus7.4a 仿真軟件進行仿真調試。其中的里程計算和費用計算方案如下。

1、里程計算

(1霍爾傳感器對車輪進行信號檢測,產生并輸出脈沖信號到單片機;(2單片機對傳感器輸出的脈沖信號進行計數,并進行km 計算:每一個信號代表輪胎旋轉一周,設輪胎的周長為1.57m;每km 產生的信號數為N ,里程顯示為N × 1.57m = 1.57N(km

2、費用計算

(1出租車的起步費為5元,并且3km 內不需額外計價;(2出租車行駛3km 后,單程2元/km ,雙程1.5元/km。

單 片 機 霍爾

傳感器 數據顯示 狀態指示 時鐘顯示 按鍵 信息存儲

(3等待收費的標準為5分鐘算一公里;(4暫停時計價器暫停計價,不收費用。3 硬件設計

本設計的硬件設計包括單片機AT89S52單元、測距單元、顯示單元(數碼管顯示金額、等待時間和里程,指示燈對單雙程切換指示、空車指示、等待計時指示、按鍵單元、時鐘單元和儲存單元。

3.1 AT 89S52單片機及最小系統

1、AT89S52單片機

AT89S52具有如下特點:40個引腳,8k Bytes Flash片內程序存儲器, 256bytes的隨機存取數據存儲器(RAM,32個外部雙向輸入/輸出(I/O口,3個16位可編程定時計數器,全雙工串行口,看門狗(WDT電路,片內時鐘振蕩器。

P0口有二個功能:

1、外部擴展存儲器時,當做數據/地址總線。

2、不擴展時,可做一般的I/O使用,但內部無上拉電阻,作為輸入或輸出時應在外部接上拉電阻。

P1口只做I/O口使用:其內部有上拉電阻。

P2口有兩個功能:

1、擴展外部存儲器時,當作地址總線使用。

2、做一般I/O口使用,其內部有上拉電阻。

P3口有兩個功能:除了作為I/O使用外(其內部有上拉電阻,還有一些特殊功能,由特殊寄存器來設置。

圖3-1 AT89S52引腳圖

設計中用到的單片機各管腳(圖3-1功能以及與其他模塊連接介紹如下: VCC:接+5V電源。

VSS:接地。

時鐘引腳:XTAL1和XTAL2兩端接晶振和30PF的電容,構成時鐘電路。

它可以使單片機穩定可靠的運行。

RST:復位信號輸入端,高電平有效。當在此引腳加兩個機器周期的高電平時,就可以完成復位操作。

P1.0:接功能按鍵。

P1.1:接切換鍵,表示單雙程切換。P1.2:接查詢(上次金額鍵。P1.3:接清零鍵。P1.4:接空車指示燈。P1.5:接查詢指示燈。P1.6:接開始計時指示燈。P1.7:接雙程指示燈。P3.0:接查詢/確認鍵。

P0口接數碼管段選端,P2口接數碼管位選段。P3.2:接霍爾傳感器的輸出口。P3.3:接存儲器的SCL口。P3.4:接儲存器的SDA口。

P3.5:接時鐘電路DS1302的RST口。P3.6:接DS1302的SCLK口。P3.7:接DS1302的I/O口。

2、單片機最小系統

復位電路和晶振電路是AT89S52工作所需的最簡外圍電路。單片機最小系統電路圖如圖3-2所示。

圖3-2單片機最小系統

AT89S52 的復位端是一個史密特觸發輸入,高電平有效。RST端若由低電平上升到高電平并持續2個周期,系統將實現一次復位操作。在復位電路中,按一下復位開關就使在RST端出現一段時間的高電平,外接11.0592M 晶振和兩個30pF 電容組成系統的內部時鐘電路。

3.2 測距單元

本次設計我們選取了霍爾傳感器來進行里程測量。

霍爾器件是一種磁傳感器。用它們可以檢測磁場及其變化,可在各種與磁場有關的場合中使用。霍爾器件以霍爾效應為其工作基礎。

霍爾器件具有許多優點,它們的結構牢固,體積小,重量輕,壽命長,安裝方便,功耗小,頻率高,耐震動,不怕灰塵、油污、水汽及鹽霧等的污染或腐蝕。

霍爾器件分為:霍爾元件和霍爾集成電路兩大類,前者是一個簡單的霍爾片,使用時常常需要將獲得的霍爾電壓進行放大。后者將霍爾片和它的信號處理電路集成在同一個芯片上。本次設計選取了霍爾集成電路來測量里程。

里程測量是通過將霍爾傳感器的集成電路安裝在車輪上方的鐵板上,將磁鐵安裝在車輪上,旋轉的車輪將磁鐵對準集成電路時,霍爾傳感器會輸出一個脈沖信號,送到單片機,經過單片機的計算處理,將行駛的里程送到顯示單元并顯示出來。

其原理示意圖如下:

圖3-3 傳感器測距示意圖

U18是一種利用霍爾效應做成的半導體集成電路器件,它被設計在交變磁場中運行,特別是能在低電源電壓和長時間運行溫度范圍可達到125℃。這種霍爾IC可用作各種類型的傳感器(速度傳感器、位移傳感器、轉速傳感器等等,接觸開關以及

相類似的應用場合。其工作電壓比較寬(2.5~20V,可運行在較大的溫度范圍內(-20℃~125℃, 其輸出的信號符合TTL電平標準,可以直接接到單片機的IO 端口上,而且其最高檢測頻率可達到1MHZ。

霍爾傳感器的特性如圖3-4所示,其中BOP為工作點“開”的磁感應強度, BRP為釋放點“關”的磁感應強度。當外加的磁感應強度超過動作點BOP時,傳

感器輸出低電平,當磁感應強度降到動作點BOP以下時,傳感器輸出電平不變,一直要降到釋放點BRP時,傳感器才由低電平躍變為高電平。BOP與BRP之間的滯后使開關動作更為可靠。

U18集成霍耳開關由穩壓器A、霍耳電勢發生器(即硅霍耳片B、差分放大器C、施密特觸發器D和OC門輸出E五個基本部分組成。

在輸入端輸入電壓VCC,經穩壓器穩壓后加在霍爾電勢發生器的兩端,根據霍爾效應原理,當霍爾片處在磁場中時,在垂直于磁場的方向通以電流,則與這二者相垂直的方向上將會產生霍爾電勢差VH輸出,該VH信號經放大器放大后送至施密特觸發器整形,使其成為方波輸送到OC門輸出。當施加的磁場達到工作點(即Bop時,觸發器輸出高電壓(相對于地電位,使三極管導通,此時OC門輸出端輸出低電壓,三極管截止,使OC門輸出高電壓,這種狀態為關。這樣兩次電壓變換,使霍爾開關完成了一次開關動作。

圖3-4 U18霍爾傳感器和其輸出特性

U18霍爾傳感器有3個外接口,2個是電源的正負極接口,最后一個是脈沖信號輸出口,只要將霍爾傳感器的信號輸出端接到單片機的端口上便可以實現距離檢測。

其中,單片機的P3.2(INT0引腳作為信號的輸入端,采用外部中斷0進行計數。車輪每轉一圈,霍爾傳感器就產生一個脈沖信號,根據霍爾效應原理,當霍爾片處在磁場中時,霍爾傳感器的輸出端輸出低電平。當車輪轉動一圈時小磁鐵提供一個磁場,則霍爾傳感器輸出一次低電平完成一次數據采集,從而產生信號。霍爾傳感器檢測并輸出信號到單片機的INT0或INT1計算脈沖輸入端, 引起單片機的中斷,對脈沖計數,當計數達到特定的次數時,里程就會增加,單片機對里程進行計算后,通過接口電路將計算好的結果傳送到數碼管并顯示出來。

3.3 按鍵單元

本設計的按鍵單元電路(如圖3-5有5個按鍵,功能分別是:S1是空車時查詢上次金額和里程以及等待時間,結賬時查詢本次金額和里程以及等待時間;S2功能鍵,不按時空車指示燈亮而且數碼管顯示實時時間,按下時可設置單雙程,此時再按S3可進行單程和雙程之間切換,再按S1可確認單雙程,雙程時雙程指示燈亮并開始計價;按下S4可對本次金額、里程以及等待時間進行查詢;S5為清零鍵,按下時清零之前數據消除以及存儲本次信息。

圖3-5 按鍵單元電路 3.4 時鐘單元

本設計采用基于DS1302的時鐘電路(如圖3-6對時間進行實時顯示,單片機掉電對其沒有影響。用數碼管表現出來,當出租車空車時就顯示時間,給人時間提示。

圖3-6 時鐘電路單元 3.5 顯示單元

本設計顯示單元包括兩部分:數碼管顯示(圖3-7和二極管指示顯示(圖3-8。數碼管顯示部分使用兩個四位一體的LED數碼管,LED顯示器是由LED發光二極管發展過來的一種顯示器件,是發光二極管的改型。LED是發光二極管的簡稱,是一種將電能轉換成光能的設備。本身也是一種光源。LED顯示器是由發光二極管排列組成的顯示器件。它采用低電壓掃描驅動,具有:耗電少、使用壽命長、成本低、故障少、視角大、可視距離遠等特點。此外,它的響應時間短(一般不超過0.1us,亮度也比較高。它的缺點是工作電流比較大,每一段的工作電流在10mA左右。

其中每位數碼管是由8個發光二極管演變而來,其中7個發光二極管構成7筆字形,另一個構成小數點,稱為8段LED。8段LED數碼管是利用7個LED(發光二極管外加一個小數點的LED組合而成的顯示設備,可以顯示0~9等10個數字和小數點,使用非常廣泛,它的外觀如圖3-9所示:

圖3-9 8段數碼管

這類數碼管可以分為共陽極(8個發光二極管的陽極接在—起與共陰極(8 個發光二極管陰極連在一起兩種,共陽極就是把所有LED的陽極連接到共同接點,而每個LED的陰極分別為a、b、c、d、e、f、g及dp(小數點;共陰極則是把所有LED的陰極連接到共同接點,而每個LED的陽極分別為a、b、c、d、e、f、g及dp(小數點,如圖3-10所示。

圖3-10 共陽和共陰數碼管結構

通過控制這個公共端,可使該位亮或暗。如共陰極端接地或共陽極接高電平,則該位顯示器有效,反之無效。本設計采用共陰LED數碼管。

數碼管有靜態顯示和動態顯示兩種,這里采用動態顯示。它具有低功耗、接口少等特點。如圖3-7兩個四位一體數碼管接P0口作為段選,接P2口作為位選。空車時顯示時間,開始計價時前四位顯示路程,后四位顯示價錢。當查詢等待時間時顯示為等待時間。

圖3-7顯示單元(數碼管顯示部分

二極管指示部分包括空車指示燈、等待時間查詢指示、開始計時指示和雙程指示如圖3-8。這些指示燈能對出租車的每一種狀態進行指示,空車時空車指示燈亮,查詢等待時間時等待時間查詢指示燈亮,當汽車速度小于5km/h 時開始計時,計時指示燈亮。計價前如果按下雙程鍵雙程指示燈亮,表示為雙程。

圖3-8 顯示單元(二極管指示部分 3.6 儲存單元

存儲單元的作用是儲存上一次的里程、金額和等待時間。AT24C02 是Atmel 公司的1KB的電可擦除存儲芯片,采用兩線串行的總線和單片機通訊,電壓最低可以到2.5V,額定電流為1mA,靜態電流10uA(5.5V,芯片內的資料可以在斷電的情況下保存40年以上,而且采用8 腳的DIP 封裝,使用方便。

圖3-11儲存單元電路

圖中R3、R4 是上拉電阻,其作用是減少AT24C02 的靜態功耗。由于AT24C02的數據線和地址線是復用的,采用串口的方式傳送數據,所以只用兩根線SCL(時鐘脈沖和SDA(數據/地址與單片機P3.3和P3.4口連接,進行傳送數據。軟件設計

本系統的軟件設計主要分為系統主程序、數據處理子程序、等待時間及時子程序和鍵盤掃描子程序五個模塊,下面對每一塊進行介紹。

4.1 系統主程序

本設計中,軟件設計采用模塊化操作,利用各個模塊之間的相互聯系,在設計中采用主程序調用各個子程序的方法,使程序通俗易懂,我們設計了整體程序流程圖。

在main函數編寫開始,要進行初始化,包括對系統初始化和對硬件設備進行初始化,并使硬件處于就緒狀態。

在主程序模塊中,需要完成對各接口芯片的初始化、出租車起價和單價的初始化、中斷向量的設計以及開中斷、循環等待等工作。系統流程圖如下圖4-1。

開始 初始化 數據處理 鍵盤掃描 結束

圖4-1系統主程序流程圖 4.2 數據處理子程序

每當霍爾傳感器輸出一個低電平信號就使單片機中斷一次,在計數中斷服務程序,里程和金額都相應變化,當然等待時間也換算成里程(當速度小于5km/h 時5分鐘想當于1公里。計算程序根據里程數分別進入不同的計算公式。如果里程大于3公里,則執行公式:金額=(里程-3*單價+5;否則,執行公式:總金額=起步價。程序流程圖如圖4-2所示。

計算里程 開始

里程<3公里否是

金額=5元金額=單價*(里程-3+5 顯示金額

結束

圖4-2 數據處理子程序流程圖 4.3 等待時間計時子程序

當出租車的速度5km/h時等待時間開始計時,并被換算里程,進行計算顯示等待時間和金額。當結算時停止計時和計費并顯示金額,當有查詢鍵按下時顯示等待時間,當有清零鍵按下時存儲本次金額。如圖4-3: 開始

結算鍵按下?Speed<5公里/ 小時?開始計時,并顯示Speed>5公里/ 小時?停止計時,開始計 路程 否 是

停止計時,計費,顯示金額 查詢鍵按下? 存儲本次金額 是清零鍵按下? 是 否

顯示等待時間

圖4-3等待時間計時子程序 4.4 鍵盤掃描子程序

鍵盤采用查詢的方式,放在主程序中,當沒有按鍵按下的時候,單片機循環主程序,一旦右按鍵按下,便轉向相應的子程序處理,處理結束再返回。流程圖如圖4-4。

開始 功能鍵按下? 單雙程設置 切換鍵按下? 切換單雙程 確認鍵按下? 空車指示滅,開始計價計時,顯示里 程,價格 結算鍵按下? 結算金額顯示 是 是 是 是

否 顯示時間 否 否 否

查詢鍵按下? 顯示等待時間與里 程

清零鍵按下?存儲金額 是 否 是否 按下兩次? 是

查詢鍵按下? 顯示上次金額 是

圖4-4 鍵盤掃描子程序 5 Proteus軟件仿真

本設計需要用Keil uVision3對C51程序進行編譯,生成“.hex”文件,如圖5-1 :

圖5-1 Keil uVision3編譯

在Proteus軟件中畫出仿真電路(如圖5-2,把Keil uVision3編譯后生成的“.hex”導入到單片機中,按“運行仿真”鍵進行仿真。

圖5-2Proteus仿真 總結

總結在本次設計中,我們采用AT89S52芯片為核心器件,設計出了簡單的出租車計價器,能夠實現顯示時間、等待時間、金額和里程,按鍵控制,空車指示。

選題后,我們便開始復習單片機方面的知識,也查閱、搜索了很多相關資料,進行總體設計與具體設計,同時也學習仿真軟件Proteus和編程軟件Keil uVision3。由于以前都采用匯編語言實現編程,對用C語言來實現單片機的編程不太習慣,花費了一些時間來熟悉C語言的編程。在設計開始,要形成流程圖,它可以使設計有一定的邏輯性與嚴密性,使得設計思路明確。采用模塊化的設計思想很重要,它方便編寫、修改與調試,另外加上必要的注釋,便于交流與理解。

這次課程設計設計完成后,體會頗多,在學與做的過程中,取長補短,不斷學習新的知識,吸取經驗,達到進步的目的。通過自身的努力以及相關圖書資料的幫助,逐漸熟

悉了Keil uVision3、PROTEUS和C語言等軟件的使用以及硬件焊接與檢測過程中的一些小技巧。本次設計我學習到不少單片機的知識,但由于自己的理論知識水平有限,實踐知識和設計經驗不足,在設計過程中難免存在一些問題。所焊實物尚有許多不足,個別功能還不能很好的實現,主要原因是考慮問題不周全,電路設計經驗少,實際動手能力不足。懇請各位老師批評指正,以使我在以后的學習和實踐中加以改進和提高。

致謝

畢業設計即將結束,在老師的指導和同學的幫助之下,學生對于出租車計價器設計有了更多新的認知,對出租車計價器設計有了更深一步的認識,對出租車計價器綜合設計的整體脈絡了解得更加的清晰透徹。通過畢業設計,學生對自己三年以來所學的知識有更多的認識。

畢業設計,幫助我們總結大學的收獲、認清自我。同時,還幫助我們改變一些處理事情時懶散的習慣。從最開始時的搜集資料,整理資料,到方案比選,確定方案,再到著手開始設計,每一步都是環環相扣,銜接緊密,其中任何一個步驟產生遺漏或者疏忽,就會對以后的設計帶來很多的不便。

本次作者的畢業設計是由徐老師指導的,在他的悉心指導下,我開闊了眼界,明確了思路。在整個的設計過程中,徐老師提出了許多寶貴的建議和指導,使我能夠順利的完成整個設計,在此,謹向徐老師表示由衷的感謝。

在即將離開學校之際,我要感謝在大學生活中任課的眾多老師,正是在他們的諄諄教誨下使我順利完成了大學的基礎知識和專業知識的學習。在此,還要感謝陪伴我共同走過大學時代并給予我幫助的同學和朋友們,感謝你們,祝福你們在以后的日子里開開心心的度過每一天!參考文獻

1.戴佳, 陳斌, 苗龍.51單片機應用系統開發典型實例.中國電力出版社,2005

2.余發山,王福忠.單片機原理及應用技術.中國礦業大學出版社, 2008.6 3.侯玉寶, 陳忠平, 李成群.基于Proteus的51系列單片機設計與仿真.電子工業出版社,2008 4.李玉梅.基于MCS-51系列單片機原理的應用設計.國防工業出版社,2006 5.邊春元, 李文濤, 江杰.C51單片機典型模塊設計與應用.機械工業出版社,2008 6.樓然苗,胡佳文,李光飛等.單片機實驗與課程設計.浙江大學出版社,2010.10 常州機電職業技術學院畢業設計報告 附

1、系統原理圖、25

第五篇:出租車計價器Multisim課程設計

時序邏輯電路的課程設計題目

組員:楊天樂

閆帥錚 艾文杰

一、題目:出租車計價器

? ? ? ? ? ? ? ? 設計內容:1)進行需求分析,確定總體框架;

2)畫出邏輯圖;

3)對設計的電路進行仿真;

設計要求:1)根據出租車上的速度傳感器傳來的脈沖個數和設置的里程單價來計算對應的總價格,并將總價格通過LED實時顯示;

2)起步價可以設置;

3)里程單價可以設置;

4)可以對總價格進行復位,從而為下次計費做好準備;

設計提示:本設計應主要實現兩個功能,顯示行駛里程與總價。行駛里程的計算可由計數器實現,每一個脈沖假設為1Km。實驗系統有標準時鐘信號,因此通過分頻可以獲得脈沖信號。

總價格可由可控制條件的累加器實現,然后予以輸出。累加器可由一個加法器和一個可復位的寄存器組成,最后設計譯碼器,將2位的十六進制轉化為BCD碼。?

二、設計原理及Multisim電路圖

電路分兩部分,一部分用于記錄行車里程,一部分用于記錄費用。

所用器件:74LS163,74LS283,2輸入與門,4輸入與門,1輸入非門,2輸入與非門,4輸入與非門,6輸入與非門,DCD-HEX-BLUEx6,74LS77。

(1)里程單價:

電路有2個時鐘,一個用于里程,一個用于價格,單價為第二個時鐘與第一個時鐘的比值,比如第一個時鐘為3HZ,第二個1HZ,則單價為3元,以此來調整價格。

(2)行車里程

三個163計數器從左到右依次為個,十,百位計數器,通過:

當個位為9時使十位使能;

當個位與十位同時為9時使下一個計數器使能。

均采用163接成模十計數器。

(3)價格

起步價部分:通過4個與門分別接一根總線接出到個位輸出9,其他接起步價0-9,當計數到9時,使起步價無效,則不會產生當起步價為1時,計數不會出現10的情況,其中采用了D鎖存器。整體相當于一個起步價輸入的使能端。具體電路圖如下:

(4)實例:

起步價為0,里程單價為3時:

單價為1時:

三、Verilog編程

下載出租車計價器課程設計2word格式文檔
下載出租車計價器課程設計2.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    出租車計價器(范文大全)

    基于單片機的出租車計價器設計 摘要 出租車計價器的數字系統的設計正是基于一些專用的芯片,才發揮其有效特性,從而實現出租車的計價功能。此數字系統主要分為三個單元,即里程計......

    出租車計價器設計范文

    平頂山工業職業技術學院 目錄 目錄 .....................................................................................................................................

    第二組_出租車計價器課程設計調試報告

    電子設計與制作課程設計報告 題目:出租車計價器課程設計 學年:2011學年 學期:上學期 專業:信息電子班級:H09-1 組別2 姓名: 曾磊 指導教師: 劉銳老師 小組成員: 曾磊 劉毅 朱亮......

    EDA課程設計-簡易出租車計價器設計5則范文

    HBQY #20080230403 課程設計 EDA 課 程 設 計 [RTX于2012/2/22] 簡 易 出租車計價器設計 要求: ? 計價器按1.2元/公里計費,超過10公里后,則按1.8元/公里收費。 ? 起步價6元(3公......

    出租車計價器畢業論文附錄

    北京信息科技大學 畢業設計(論文)附錄 題 目:學 院: 專 業:學生姓名: 班級/學號 指導老師/督導老師:起止時間:2012 年 月 日 至 2012 年 月 日 目錄 附件1 原理圖·······......

    出租車計價器調試報告

    出租車計價器調試報告 本設計可分為單片機主控模塊、鍵盤、顯示器、溫度檢測、狀態指示、時鐘日歷、語音收錄播報、分頻器電路、脈沖信號發生器等9部分。仔細分析系統的工作......

    出租車計價器信息(精選5篇)

    霍市質監局集中對全市出租車計價器進行安裝檢定 切實規范運營行為近期,霍市質監局下屬檢測中心對全市范圍內具有交通主管部門頒發經營許可證的500余輛出租車計價器進行統一......

    單片機出租車計價器源程序

    出租車計價器設計與制作 設計并制作一臺出租車計價器。調試時采用10Hz方波信號模擬,每個方波代表10m。基本要求: (1)不同情況具有不同的收費標準 白天 1元/公里 晚上 2元/ 公......

主站蜘蛛池模板: 久久人妻少妇嫩草AV蜜桃漫画| 99久久精品精品6精品精品| 亚洲成a人片在线观看你懂的| 国产明星精品无码av换脸| 国产初高中生真实在线视频| 野外做受又硬又粗又大视幕| 无码中文字幕在线播放2| 欧美va天堂在线电影| 天堂а√中文在线官网| 亚洲区小说区图片区qvod| 婷婷五月亚洲综合图区| 亚洲色成人网一二三区| 2021年国产精品专区丝袜| 国产一区二区三区高清在线观看| 精品国产a∨无码一区二区三区| 免费人成小说在线观看网站| 人妻妺妺窝人体色www聚色窝| 亚洲精品中文字幕一区二区三区| 久久99精品久久久久久婷婷2021| 国产麻豆成人传媒免费观看| 日本护士吞精囗交gif| 黑人尾随强伦姧人妻爽翻天| 日韩内射美女片在线观看网站| 性生交大片免费看女人按摩摩| 国产欧美成人一区二区a片| 香蕉人妻av久久久久天天| 国内精品久久久久久久电影视| 久久精品高清一区二区三区| 久久国产人妻一区二区免费| 在线精品亚洲一区二区| 国内精品久久人妻互换| 成在人线av无码免费看网站直播| 午夜爽爽爽男女免费观看影院| 国产成人亚洲精品无码青| 国产精品天干天干综合网| a欧美爰片久久毛片a片| 激情国产一区二区三区四区小说| 大地资源网高清在线播放| 免费人成再在线观看视频| 又黄又硬又湿又刺激视频免费| 成人国产一区二区三区|