基于MCS51單片機(jī)的計(jì)數(shù)器及出租車計(jì)費(fèi)器設(shè)計(jì)_第1頁
基于MCS51單片機(jī)的計(jì)數(shù)器及出租車計(jì)費(fèi)器設(shè)計(jì)_第2頁
基于MCS51單片機(jī)的計(jì)數(shù)器及出租車計(jì)費(fèi)器設(shè)計(jì)_第3頁
基于MCS51單片機(jī)的計(jì)數(shù)器及出租車計(jì)費(fèi)器設(shè)計(jì)_第4頁
基于MCS51單片機(jī)的計(jì)數(shù)器及出租車計(jì)費(fèi)器設(shè)計(jì)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 單 片 機(jī) 課 程 設(shè) 計(jì) 課程名稱: 單片機(jī)課程設(shè)計(jì) 設(shè)計(jì)題目: 基于外部脈沖自動(dòng)計(jì)數(shù)的出租車計(jì)費(fèi)器設(shè)計(jì) 專 業(yè): 測(cè)控技術(shù)與儀器 學(xué)生姓名: 湖南工業(yè)大學(xué)電氣與信息工程學(xué)院一、設(shè)計(jì)任務(wù):1.1外部脈沖自動(dòng)計(jì)數(shù),自動(dòng)顯示。1.1.1設(shè)計(jì)一個(gè)255計(jì)數(shù)器:0255計(jì)數(shù),計(jì)滿后自動(dòng)清0,重新計(jì)數(shù)(在數(shù)碼管中顯示)。1.1.2設(shè)計(jì)一個(gè)50000計(jì)數(shù)器:050000計(jì)數(shù),計(jì)滿后自動(dòng)清0,重新計(jì)數(shù)(在數(shù)碼管中顯示)。1.2 設(shè)計(jì)一個(gè)出租車計(jì)費(fèi)系統(tǒng): 起步價(jià)為5元(2km以內(nèi)),2km后,0.8元/0.5km;要求每500m刷新計(jì)費(fèi)一次,在6位數(shù)碼管中,前3位顯示數(shù)碼管顯示里程數(shù),后3位數(shù)碼管顯示價(jià)錢

2、(角,元,十元,百元)二、設(shè)計(jì)思路及源程序:2.1、0-255計(jì)數(shù)器設(shè)計(jì):設(shè)計(jì)思路: 十進(jìn)制數(shù)0-255可用8位二進(jìn)制數(shù)來表示,定時(shí)器/計(jì)數(shù)器的四種工作方式均可實(shí)現(xiàn)0-255的計(jì)數(shù)功能(工作方式3只有定時(shí)器0可以實(shí)現(xiàn))。在此為了設(shè)計(jì)方便,我采用定時(shí)器/計(jì)數(shù)器t1工作方式2(可自動(dòng)重裝初值),外部脈沖由at89s51的p3.5管腳引入,每來一個(gè)外部脈沖,計(jì)數(shù)器t1計(jì)數(shù)加一。由此,只需對(duì)tl1的計(jì)數(shù)值進(jìn)行相應(yīng)的二進(jìn)制-十進(jìn)制轉(zhuǎn)換,通過算法進(jìn)行運(yùn)算可得到百位,十位,各位,并存入相應(yīng)變量中(對(duì)c51語言而言)。選通相應(yīng)數(shù)碼管,再將各位數(shù)字的相應(yīng)顯示編碼輸入即可在數(shù)碼管上顯示計(jì)數(shù)結(jié)果。源程序:/*程序功

3、能描述:計(jì)數(shù)器接受外部脈沖實(shí)現(xiàn)自動(dòng)計(jì)數(shù),計(jì)數(shù)范圍0-255 計(jì)滿數(shù)后自動(dòng)清零,再重新循環(huán)計(jì)數(shù) 。 說明:主要硬件設(shè)備:6位共陽極數(shù)碼管,晶振頻率:12mhz*/#includereg51.h /c51頭文件unsigned char code led_num10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /數(shù)碼管顯示數(shù)字的十六進(jìn)制代碼unsigned char code led_bit6=0xf8,0xf9,0xfa,0xfb,0xfc,0xfd; /位選代碼,注意語句后的分號(hào)不能丟/*函數(shù)名稱:延時(shí)子程序*/void delay(u

4、nsigned int dat) unsigned int k,j; /定義局部無符號(hào)整形變量 for(k=0;kdat;k+) for(j=0;j2000;j+); /空循環(huán),延時(shí)語句 /*函數(shù)名稱:計(jì)數(shù)器初始設(shè)置函數(shù)*/void init_timer1(void) tmod=0x60; /設(shè)置為計(jì)數(shù)器模式,工作方式2,自動(dòng)重裝初值 th1=0x00; /計(jì)數(shù)器初值設(shè)為0 tl1=0x00; tr1=1; /開啟計(jì)數(shù)器/*函數(shù)名稱:主函數(shù) 說明:先將計(jì)數(shù)器1的tl1中數(shù)據(jù)百位、十位、個(gè)位分離,并存于數(shù)組led中,再將對(duì)應(yīng)數(shù)字的編碼送入數(shù)碼器顯示出來*/void main(void) unsi

5、gned char i,j; unsigned char led3; /用來存放要顯示數(shù)字的百、十和個(gè)位上的數(shù)字 init_timer1(); /計(jì)數(shù)器初始化 while(1) led0=tl1%10; /取個(gè)位數(shù)字存于字符數(shù)組 led1=tl1%100/10; /取十位數(shù)字 led2=tl1/100; /取百位數(shù)字 for(j=0;j10;j+) /在顯示上消耗時(shí)間,使三個(gè)數(shù)碼管顯示不中斷. for(i=0; i 3; i+) p2=led_biti; /把ledi表示的位置的位選通 p0=led_numledi; /把相應(yīng)位置的數(shù)顯式出來 delay(1); /延時(shí) proteus仿真效果

6、圖圖2.1、255計(jì)數(shù)器仿真效果圖2.2、0-50000計(jì)數(shù)器設(shè)計(jì): 設(shè)計(jì)思路:0-50000計(jì)數(shù)器設(shè)計(jì)方法與0-255計(jì)數(shù)器設(shè)計(jì)方法有很多地方相似,主要在一些地方作了一些技術(shù)處理。由于十進(jìn)制數(shù)0-50000用8位二進(jìn)制已不能表示出來,在此只能選擇定時(shí)器/計(jì)數(shù)器工作方式1。在用16位計(jì)數(shù)器處理0-50000計(jì)數(shù)時(shí),我們既可用單純的定時(shí)器/計(jì)數(shù)器模式,也可采用定時(shí)器/計(jì)數(shù)器中斷模式。中斷模式的優(yōu)越之處在于它可在計(jì)數(shù)溢出時(shí)打斷主程序的執(zhí)行,通過在中斷服務(wù)程序中編寫顯示清零程序,可以很精確的實(shí)現(xiàn)0-50000的計(jì)數(shù)。而用定時(shí)器/計(jì)數(shù)器模式時(shí)有可能在計(jì)數(shù)滿50000時(shí)顯示不能及時(shí)清零,造成這種現(xiàn)象的原

7、因主要是外部脈沖頻率太大,程序來不及對(duì)每個(gè)脈沖進(jìn)行處理。因此非中斷模式要受到外部脈沖的限制,考慮到現(xiàn)實(shí)中有些情況下脈沖頻率也可能會(huì)很大,故本程序及下面的出租車計(jì)費(fèi)器均采用中斷模式,把計(jì)數(shù)清零語句放到中斷服務(wù)程序中,以保證能精確實(shí)現(xiàn)0-50000的計(jì)數(shù)。 源程序: /*程序功能:此程序?yàn)橛?jì)數(shù)器1接受外部脈沖實(shí)現(xiàn)0-50000自動(dòng)計(jì)數(shù),計(jì)數(shù)快慢由外部脈沖的大小決定說明:主要硬件設(shè)備:6位共陽極數(shù)碼管。*/#includereg51.h /頭文件unsigned char code led_num10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90

8、; /數(shù)碼管顯示數(shù)字的十六進(jìn)制代碼unsigned char code led_bit6=0xf8,0xf9,0xfa,0xfb,0xfc,0xfd; /位選代碼/*函數(shù)名稱:延時(shí)子程序函數(shù)*/void delay(unsigned int dat)unsigned int k,j;for(k=0;kdat;k+)for(j=0;j=0x51) /第50001個(gè)脈沖來臨時(shí)將計(jì)數(shù)器清零th1=0x00; tl1=0x00;temp=th1; temp=temp8; /將th1中數(shù)字左移8位再賦給temp temp=temp|tl1; /將th1和tl1中數(shù)據(jù)合到一個(gè)整形變量temp中l(wèi)ed0=t

9、emp%10; /存取個(gè)位數(shù)字led1=temp%100/10; /存取十位數(shù)字led2=temp%1000/100; /存取百位數(shù)字led3=temp%10000/1000; /存取千位數(shù)字led4=temp/10000; /存取萬位數(shù)字 for(j=0;j10;j+) /在顯示上消耗時(shí)間,使三個(gè)數(shù)碼管顯示不中斷for(i=0; i 5; i+) p2=led_biti; /把ledi表示的位置的位選通 p0=led_numledi; /把相應(yīng)位置的數(shù)顯式出來 delay(1); /延時(shí)一個(gè)微小時(shí) proteus仿真效果圖圖2.2、50000計(jì)數(shù)器仿真效果圖2.3、出租車計(jì)費(fèi)設(shè)計(jì):設(shè)計(jì)思路:

10、出租車計(jì)費(fèi)器的設(shè)計(jì)可在0-50000計(jì)數(shù)器的基礎(chǔ)上擴(kuò)充改寫而成。出租車上安裝有一個(gè)霍爾傳感器,車子輪胎每轉(zhuǎn)動(dòng)一圈,霍爾傳感器便產(chǎn)生一個(gè)脈沖。因此計(jì)數(shù)脈沖跟輪胎有直接的對(duì)應(yīng)關(guān)系,考慮到車輪是按一定的規(guī)格生產(chǎn)的,在此我們將車程(汽車行駛距離)與車輪的直徑及計(jì)數(shù)脈沖數(shù)聯(lián)系起來。因此車程可用計(jì)數(shù)脈沖的個(gè)數(shù)表示出來,因而車程的顯示可轉(zhuǎn)化為計(jì)數(shù)器顯示問題。而車程與收費(fèi)之間的數(shù)學(xué)關(guān)系在設(shè)計(jì)要求中已明確。我采用6位數(shù)碼管來顯示車程和收費(fèi)。其中前三個(gè)數(shù)碼管顯示車程,后三個(gè)數(shù)碼管顯示收費(fèi)。特別指出最好用中斷處理計(jì)數(shù)脈沖數(shù)的臨界值,否則很容易不能達(dá)到預(yù)期目標(biāo)。/*程序功能:此為一個(gè)出租車計(jì)費(fèi)器,計(jì)數(shù)器接受外部脈沖自

11、動(dòng)計(jì)數(shù),在兩千米 以內(nèi)收費(fèi)5元,之后每 500m刷新一次計(jì)費(fèi),每500米收費(fèi)0.8元。數(shù)碼管前三位顯示里程數(shù),顯示精確到0.1km; 數(shù)碼管后三位顯示價(jià)錢,從低位到高位一次表示角,元,十元。 說明:車子的輪胎直徑用宏定義,方便根據(jù)不同車型修改參數(shù),用軟件仿真時(shí)為了更快看到結(jié)果,可將車的輪胎直徑參數(shù)設(shè)的小一點(diǎn)。*/#includereg51.h /c51頭文件#define pi 3.14159 /宏定義圓周率為3.14159#define dia 1.0 /宏定義出租車輪胎的直徑為1.0米u(yù)nsigned char code led_num10=0xc0,0xf9,0xa4,0xb0,0x99

12、,0x92,0x82,0xf8,0x80,0x90; /數(shù)碼管顯示數(shù)字的十六進(jìn)制代碼unsigned char code led_bit6=0xf8,0xf9,0xfa,0xfb,0xfc,0xfd; /位選代碼/*函數(shù)名稱:延時(shí)子程序*/void delay(unsigned int dat) /延時(shí)大小由形參的大小決定 unsigned int k,j; for(k=0;kdat;k+) for(j=0;j=0xed) /第9709個(gè)脈沖來臨時(shí)將計(jì)數(shù)器清零 th1=0x00;tl1=0x00;money=0; /計(jì)費(fèi)清零 temp=th1; temp=temp0)&(way=2.0) mo

13、ney=5.0; /兩千米之內(nèi)收費(fèi)5元 else cnt=2*(way-2); /將超出2km部分轉(zhuǎn)化為0.5km的整數(shù)倍并存于cnt中 money=cnt*0.8+5; /算出應(yīng)收的費(fèi)用并存于money中 wap=money*10; /將收費(fèi)數(shù)據(jù)轉(zhuǎn)化為整形,最低位表示角,其次為元,十元 tab=way*10; /將路程數(shù)據(jù)轉(zhuǎn)化為整形,最低位表示百米,其次表示千米,萬米 led0=wap%10; /角位上的數(shù)字存led0 led1=wap%100/10; /得出元位上的數(shù)字 led2=wap/100; /得出十元位上的數(shù)字 led3=tab%10; /得出百米上的數(shù)字 led4=tab%100

14、/10; /得出千米上的數(shù)字 led5=tab/100; /得出萬米上的數(shù)字 for(j=0;j10;j+) /在顯示上消耗時(shí)間,使三個(gè)數(shù)碼管顯示不中斷 for(i=0; i 6; i+) p2=led_biti; /把ledi表示的位置的位選通 if(i=1)|(i=4) p0=led_numledi&0x7f; /把相應(yīng)位置的數(shù)顯式出來,帶小數(shù)點(diǎn) else p0=led_numledi; /把相應(yīng)位置的數(shù)顯式出來,不帶小數(shù)點(diǎn) delay(1); /延時(shí)一個(gè)微小時(shí)間 proteus仿真效果圖注:高三位數(shù)碼管顯示車程,最低位表示百米;低三位數(shù)碼管顯示收費(fèi),最低位表示角圖1.2、出租車計(jì)費(fèi)仿真效

15、果圖三、單片機(jī)最小系統(tǒng)硬件資源介紹: 89s51單片機(jī); 6位共陽極數(shù)碼管; 段碼驅(qū)動(dòng)器74hc573,位選譯碼器74hc138; 4路獨(dú)立式按鍵; 外部晶振電路; isp下載接口(in system program,在系統(tǒng)編程); dc+5v電源試配器(選配); isp下載線(選配)。單片機(jī)最小系統(tǒng)實(shí)訓(xùn)板硬件資源分布見圖1元件布局圖和圖2電路原理圖:其中p1為外部電源輸入座(dc+5v),s8為電源最小系統(tǒng)的電源開關(guān),e1和c3為電源濾波,去耦電容。d1為系統(tǒng)電源指示燈。j2為isp下載接口,s7系統(tǒng)復(fù)位按鍵。cry1,c1,c2為外部時(shí)針電路。ic1為89s51(dip-40),左上角為第

16、一腳。pre1,pre2。為上拉排阻(阻值4.7k10k)。j5,j9,j6,j10分別對(duì)應(yīng)單片機(jī)的p0,p1,p2,p3口。便于二次開發(fā)。6路共陽極數(shù)碼管動(dòng)態(tài)顯示電路,p0口通過74hc573(起驅(qū)動(dòng)和隔離作用,讓電流通過74ch573流入公共地),來控制數(shù)碼管的8路段碼,p20-p22通過74hc138譯碼器(使用其中的6路)控制數(shù)碼管的公共端(中間還有三極管做驅(qū)動(dòng)器)。這樣設(shè)計(jì)的理由:為了保證該單片機(jī)最小系統(tǒng)的二次開發(fā)的資源充足和合理性。如果單只做一個(gè)動(dòng)態(tài)顯示電路,可以省去74hc573,和74hc138。圖3.1 元件布局圖圖3.2 單片機(jī)最小系統(tǒng)原理圖四、課程設(shè)計(jì)總結(jié)這次單片機(jī)課程設(shè)

17、計(jì)歷時(shí)兩周,是一次把理論融于實(shí)踐的教學(xué)行動(dòng)?;谖覀兓A(chǔ)還比較薄弱,這次課程設(shè)計(jì)老師給我們布置了三個(gè)設(shè)計(jì)課題,分別是0-255計(jì)數(shù)器,0-50000計(jì)數(shù)器以及出租車計(jì)費(fèi)器。這三個(gè)課題都是定時(shí)器/計(jì)數(shù)器接收外部脈沖實(shí)現(xiàn)計(jì)數(shù),程序設(shè)計(jì)層層相扣,由淺入深。255計(jì)數(shù)器設(shè)計(jì)是這次課程設(shè)計(jì)最簡(jiǎn)單的一道程序題,它也是后續(xù)程序設(shè)計(jì)的基礎(chǔ)。由于255計(jì)數(shù)器數(shù)據(jù)顯示范圍是0-255,所以由定時(shí)器t1的tli寄存器就可完全實(shí)現(xiàn)計(jì)數(shù)。定時(shí)器有四種工作方式,它們都可以滿足255計(jì)數(shù)要求(工作方式3只能用定時(shí)器t0),為了設(shè)計(jì)方便,老師建議使用定時(shí)器t1工作方式2(計(jì)數(shù)器自動(dòng)重裝初值)。老師又說不使用中斷也可完全實(shí)現(xiàn)編

18、程要求,而且告訴了我們數(shù)模轉(zhuǎn)換的方法,并幫我們理清了設(shè)計(jì)思路,這樣我們編程基本上不存在什么難點(diǎn)。 50000計(jì)數(shù)器設(shè)計(jì)比255計(jì)數(shù)器設(shè)計(jì)要難一點(diǎn),也是這次課程設(shè)計(jì)比較關(guān)鍵的一環(huán)。50000計(jì)數(shù)器只能使用定時(shí)器工作方式1(16位計(jì)數(shù)器),這里需要處理16位數(shù)字,用匯編語言編程,在這里將是一個(gè)難點(diǎn),用教科書中雙字節(jié)除法運(yùn)算程序顯然程序冗長(zhǎng)晦澀,不適合這種課程設(shè)計(jì)。在這里我們先把th1和tl1中的數(shù)據(jù)分別用數(shù)模轉(zhuǎn)換按位先分離,再采用滿十向高位進(jìn)一的辦法解決。在這次設(shè)計(jì)中我采用c51語言編程,定義一個(gè)雙字節(jié)整形變量,很簡(jiǎn)單解決了裝下th1和tl1中總共兩個(gè)字節(jié)數(shù)據(jù)并實(shí)現(xiàn)數(shù)模轉(zhuǎn)換的問題。由于16位計(jì)數(shù)器最大計(jì)數(shù)范圍為0-65535,所以在設(shè)計(jì)50000計(jì)數(shù)器的時(shí)候要注意計(jì)數(shù)滿50000顯示清零。 出租車計(jì)費(fèi)器可在計(jì)數(shù)50000的程序上修改而成。在這里我們要明白車子輪胎每轉(zhuǎn)一圈,霍爾傳感器發(fā)送一次脈沖,計(jì)數(shù)器接受脈沖計(jì)數(shù)加一。由此我們可得出車程與輪胎直徑及計(jì)數(shù)器計(jì)數(shù)值三者之間的關(guān)系,從而由計(jì)數(shù)器計(jì)數(shù)轉(zhuǎn)換為車程,并將車程用數(shù)碼管顯示出來。另一個(gè)問題是找出計(jì)費(fèi)與車程的關(guān)系,這在題目中已經(jīng)給出。最后還要注意當(dāng)計(jì)費(fèi)顯示達(dá)到最大值時(shí)要將數(shù)碼管顯示清零。由上可以知道已將出租車計(jì)費(fèi)器轉(zhuǎn)換為計(jì)數(shù)問題,從而使問題得到圓滿解決。 編程思路雖然理清了,但在編程過程中的一些細(xì)節(jié)問題還是要引起足夠的重視

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論