版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 畢 業(yè) 論 文</b></p><p> 基于單片機(jī)的出租車計價系統(tǒng)的設(shè)計</p><p><b> 2012年6月5日</b></p><p> 學(xué)生姓名XXX</p><p> 所 在 系XXXXX</p><p> 班 級XXXX
2、</p><p> 專 業(yè)XXXXXXX</p><p> 指導(dǎo)教師XXXXX</p><p><b> 指導(dǎo)教師評閱書</b></p><p><b> 評閱教師評閱書</b></p><p> 教研室(或答辯小組)及教學(xué)系意見</p><p
3、><b> 摘 要</b></p><p> 出租車計價器是乘客與司機(jī)雙方的交易準(zhǔn)則,他是出租車行業(yè)發(fā)展的重要標(biāo)志,是現(xiàn)代出租車不可或缺的部分。它關(guān)系著交易雙方的利益。具有良好性能的計價器,無論是對廣大出租車司機(jī)朋友還是乘客都是很必要的。因此,出租車計價器的研究也是一個具有應(yīng)用價值的研究課題。而采用模擬電路或是數(shù)字電路設(shè)計的計價器整體電路規(guī)模較大,用到的器件多,造成的故障率高,難調(diào)
4、試。相對于普通的模擬電路或數(shù)字電路,采用單片機(jī)AT89S52型號芯片進(jìn)行的設(shè)計相對來說功能強(qiáng)大,用較少的硬件和適當(dāng)?shù)能浖嗷ヅ浜峡梢院苋菀椎膶?shí)現(xiàn)設(shè)計要求,且靈活性強(qiáng),可用12864液晶顯示屏顯示,可以通過軟件編程來完成更多的附加功能。針對計費(fèi)模式的切換,通過軟件編程就可以輕易而舉的實(shí)現(xiàn)。避免了機(jī)械開關(guān)帶來的不穩(wěn)定因素。</p><p> 關(guān)鍵詞:出租車計價器, AT89S52,12864液晶顯示屏</p&
5、gt;<p><b> 錄目</b></p><p><b> 摘 要1</b></p><p><b> 第一章 緒 論1</b></p><p> 第一節(jié) 課題背景1</p><p> 第二節(jié) 課題意義1</p><p&g
6、t; 第二章 系統(tǒng)組成及功能2</p><p> 第一節(jié) 系統(tǒng)的組成2</p><p> 第二節(jié) 系統(tǒng)工作原理2</p><p> 第三節(jié) 系統(tǒng)功能的確定3</p><p> 2.3.1 基本功能3</p><p> 2.3.2 擴(kuò)展功能3</p><p> 2.3.3
7、系統(tǒng)操作說明4</p><p> 第三章 系統(tǒng)硬件設(shè)計5</p><p> 第一節(jié) 芯片的選擇5</p><p><b> 第二節(jié) 芯片圖6</b></p><p> 第三節(jié) 功能電路分析6</p><p> 3.3.1 時鐘電路6</p><p>
8、 3.3.2 復(fù)位電路7</p><p> 3.3.3 鍵盤電路7</p><p> 3.3.4 LCD12864顯示8</p><p> 第四章 系統(tǒng)軟件設(shè)計10</p><p> 第一節(jié) 主程序設(shè)計10</p><p> 第二節(jié) 定時中斷服務(wù)程序12</p><p>
9、 第三節(jié) 鍵盤服務(wù)程序12</p><p> 第五章 系統(tǒng)測試14</p><p> 第一節(jié) 硬件調(diào)試14</p><p> 第二節(jié) 軟件調(diào)試15</p><p><b> 結(jié)束語18</b></p><p><b> 致謝19</b></p>
10、;<p><b> 附錄A20</b></p><p> 附錄B:程序清單21</p><p><b> 參考文獻(xiàn)29</b></p><p><b> 第一章 緒 論</b></p><p> 單片機(jī)自1976年由Intel公司推出MCS-48開
11、始,迄今已有二十多年了。由于單片機(jī)集成度高、功能強(qiáng)、可靠性高、體積小、功耗低、使用方便、價格低廉等一系列優(yōu)點(diǎn),目前已經(jīng)滲入到人們工作和生活的方方面面,單片機(jī)的應(yīng)用領(lǐng)域已從面向工業(yè)控制、通訊、交通、智能儀表等迅速發(fā)展到家用消費(fèi)產(chǎn)品、辦公自動化、汽車電子、PC機(jī)外圍以及網(wǎng)絡(luò)通訊等廣大領(lǐng)域。</p><p> 單片機(jī)有兩種基本結(jié)構(gòu):一種是在通用微型計算機(jī)中廣泛采用的,程序存儲器和數(shù)據(jù)存儲器共用一個存儲器空間的結(jié)構(gòu),稱
12、為“馮·諾依曼”(Von Neumann)結(jié)構(gòu)。另一種是將程序存儲器和數(shù)據(jù)存儲器截然分開,分別尋址的結(jié)構(gòu),稱為“哈佛”(Harvard)結(jié)構(gòu),目前的單片機(jī)采用此種結(jié)構(gòu)為多。</p><p> 汽車計價器是乘客與司機(jī)雙方的交易準(zhǔn)則,它是出租車行業(yè)發(fā)展的重要標(biāo)志,是出租車中最重要的工具。它關(guān)系著交易雙方的利益。具有良好性能的計價器無論是對廣大出租車司機(jī)朋友還是乘客來說都是很必要的。因此,汽車計價器的研究也
13、是十分有一個應(yīng)用價值的。我國在70年代開始出現(xiàn)出租車,但那時的計費(fèi)系統(tǒng)大都是國外進(jìn)口不但不夠準(zhǔn)確,價格還十分昂貴。隨著改革開放日益深入,出租車行業(yè)的發(fā)展勢頭已十分突出,國內(nèi)各機(jī)械廠家紛紛推出國產(chǎn)計價器。出租車計價器的功能從剛開始的只顯示路程(需要司機(jī)自己定價,計算后四舍五入),到能夠自主計費(fèi),以及現(xiàn)在的能夠打一發(fā)票和語音提示、按時間自主變動單價等功能。隨著城市旅游業(yè)的發(fā)展,出租車行業(yè)已成為城市的窗口,象征著一個城市的文明程度。</
14、p><p> 本次設(shè)計的目的在于現(xiàn)在各大中城市出租車行業(yè)都已普及自動計價器,所以計價器技術(shù)的發(fā)展已成定局。而部分小城市尚未普及,但隨著城市建設(shè)日益加快,象征著城市面貌的出租車行業(yè)也將加速發(fā)展,計價器的普及也是毫無疑問的,所以未來汽車計價器的市場還是十分有潛力的。 </p><p> 第二章 系統(tǒng)組成及功能
15、</p><p><b> 第一節(jié) 系統(tǒng)的組成</b></p><p> 本系統(tǒng)有硬件和軟件兩部分組成。</p><p> 本系統(tǒng)有硬件采用模塊化設(shè)計,以AT89S52控制器為核心,與獨(dú)立鍵盤電路和顯示電路等組成出租車計價系統(tǒng)。該系統(tǒng)硬件的組成包括單片機(jī)為主控模塊、LM324、電機(jī)、光電傳感器、獨(dú)立按鍵等。單片機(jī)主控模塊完成外圍硬件的控制
16、以及一些運(yùn)算。獨(dú)立按鍵完成開始暫停等功能,單片機(jī)控制的出租車計價系統(tǒng)的硬件組成框圖如圖2-1所示:</p><p><b> 如圖2-1 </b></p><p> 第二節(jié) 系統(tǒng)工作原理</p><p> 本系統(tǒng)的工作流程圖如圖2-2所示,有電源給單片機(jī)模塊供電。單片機(jī)產(chǎn)生的數(shù)字信號送給LCD12864顯示,和單片機(jī)產(chǎn)生高低電平信號傳給
17、繼電器使電機(jī)工作,讓光電傳感器產(chǎn)生高低電平信號通過LM324放大電路放大后傳給單片機(jī)進(jìn)行相關(guān)的運(yùn)算。</p><p><b> 如圖2-1 </b></p><p> 第三節(jié) 系統(tǒng)功能的確定</p><p> 2.3.1 基本功能</p><p> ?。?)顯示:單程價、起步價、可以顯示里程、總金額、等待時間、速
18、度。</p><p> (2)計費(fèi)功能:起步公里數(shù)為3公里,價格為8元;若實(shí)際運(yùn)行大于3公里,按單程價格為2元/公里,往返則價格為1.5元/公里,等待計費(fèi)1.5遠(yuǎn)/min。</p><p> ?。?)按鍵功能:單程/往返分別由“單程” 按鍵和“往返” 按鍵設(shè)定;按“暫?!?鍵,計價器可暫停計價;按“清除” 鍵,計價器能將記錄數(shù)據(jù)(里程、等待時間與金額等)自動清0;按“查詢”鍵,能自動顯示
19、總等待時間;按“返回”鍵,仍然顯示里程和金額。</p><p> 2.3.2 擴(kuò)展功能</p><p> 停車計費(fèi)功能:用單片機(jī)控制電機(jī)轉(zhuǎn)動,并用光電傳感器檢測轉(zhuǎn)盤轉(zhuǎn)動模擬車速,車速與轉(zhuǎn)盤轉(zhuǎn)速成正比。車速<5公里/小時的時間累積為總等待時間,每1分鐘等待時間相當(dāng)于里程數(shù)增加1公里。</p><p> 2.3.3系統(tǒng)操作說明</p><p&g
20、t; (1)按鍵S1:單程按鍵。按下該鍵,里程隨脈沖數(shù)成正比累加,在里程大于3公里后,金額數(shù)按單程價格為2元/公里進(jìn)行累加。</p><p> ?。?)按鍵S2:往返按鍵。按下該鍵,里程隨脈沖數(shù)成正比累加,在里程大于3公里后,金額數(shù)按單程價格為1.5元/公里進(jìn)行累加。</p><p> (3)按鍵S3:暫停按鍵。到達(dá)目的地后,按“暫?!?鍵,計價器可暫停計價。</p>&
21、lt;p> ?。?)按鍵S4:清除按鍵。按“清除” 鍵,計價器能將記錄數(shù)據(jù)(里程、等待時間與價格等)自動清0。</p><p> ?。?)按鍵S5:查詢按鍵。按“查詢”鍵,能自動顯示總等待時間。</p><p> ?。?)按鍵S6:返回按鍵。按下該鍵,回到顯示里程數(shù)、金額狀態(tài)</p><p> 第三章 系統(tǒng)硬件設(shè)計</p><p>&
22、lt;b> 第一節(jié) 芯片的選擇</b></p><p> 本設(shè)計選用AT89S52芯片,它是一種低功耗、高性能CMOS 8位微控制器,具有8K(0000H~1FFFH)在線系統(tǒng)可編程Flash存儲器。片上Flash允許程序存儲器在線編程,也適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在線系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供靈活、高效的解決方案。</
23、p><p> AT89S52具有以下標(biāo)準(zhǔn)功能:8K(0000H~1FFFH)Flash,256字節(jié)(00H~FFH)數(shù)據(jù)存儲器(RAM),64K(0000H~FFFFH)程序存儲器(ROM),32位I/O口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口內(nèi)晶振及時鐘電路。</p><p> 其中,數(shù)據(jù)存儲器(RAM)用于存放各種運(yùn)算的中間結(jié)果,
24、作緩存和數(shù)據(jù)暫存,以及設(shè)置特征標(biāo)志等。AT89S52的片內(nèi)數(shù)據(jù)存儲器用位尋址方式,最大尋址范圍為256字節(jié)(00H~FFH)。按使用情況不同可分成低128字節(jié)(00H~7FH)和高128字節(jié)(80H~FFH)。其中低128字節(jié)為真正的RAM存儲器,高128字節(jié)為特殊功能寄存器(SFR)區(qū),如累加器ACC、程序狀態(tài)字PSW、數(shù)據(jù)指針DPTR、程序計數(shù)器PC等。整個片內(nèi)RAM區(qū)分布如圖3-1所示。</p><p>
25、 AT89S52的引腳圖如圖3-2所示:</p><p> 圖3-2 AT89S52引腳圖</p><p> 第三節(jié) 功能電路分析</p><p> 3.3.1 時鐘電路</p><p> 實(shí)驗(yàn)板的時鐘振蕩源電路如圖3-3所示。其中JT 為11.0592MHz 的晶振,改變兩電容CB的值即可對此晶振頻率進(jìn)行調(diào)節(jié)。該電路提供單片機(jī)工
26、作所需的振蕩頻率,計算定時器初值即需此晶振頻率,在通信時也需知道晶振頻率,以對波特率進(jìn)行計算。</p><p> 3.3.2 復(fù)位電路</p><p> 如圖3-4所示為實(shí)驗(yàn)板的復(fù)位電路,當(dāng)RESET 信號為低電平時,實(shí)驗(yàn)板為工作狀態(tài),當(dāng)RESET信號為高電平時,實(shí)驗(yàn)板為復(fù)位或下載程序狀態(tài)。由于AT89S52具有ISP 的功能,即可以通過并口線直接將程序下載到單片機(jī)內(nèi),因此, AT89
27、S52 具有兩種狀態(tài),下載程序狀態(tài)和運(yùn)行狀態(tài)。該復(fù)位電路能實(shí)現(xiàn)上電自動復(fù)位,也能手動復(fù)位,一般復(fù)位時RESET應(yīng)保持20毫秒以上高電平,此復(fù)位時間由接地電容控制。</p><p> 3.3.3 鍵盤電路</p><p> 如圖3-5所示為獨(dú)立式按鍵電路,每個按鍵占用一根I/O口線,每根I/O口線上按鍵的工作狀態(tài)不會影響其它按鍵的工作狀態(tài)。這種按鍵的軟件程序簡單,但占用I/O口線較多。(
28、一跟口線接一個按鍵),適用于鍵盤數(shù)較少的系統(tǒng)中。</p><p> 圖 3-5 鍵電路圖</p><p> 圖 3-6 按鍵實(shí)物圖</p><p> 3.3.4 LCD12864顯示</p><p> 通過用12864顯示出租車的單程價、起步價、可以顯示里程、總金額、等待時間、速度等。現(xiàn)在的LCD價格便宜且適合我們做單片機(jī)的顯示屏。
29、應(yīng)用也十分廣泛。電路連接如圖3-7所示。</p><p><b> 圖 3-7顯示電路</b></p><p> 圖 3-7 LCD12864實(shí)物圖</p><p> 第四章 系統(tǒng)軟件設(shè)計</p><p><b> 第一節(jié) 主程序設(shè)計</b></p><p>
30、在主程序模塊中,需要完成對各接口芯片的初始化、出租車起價和單價的初始化、中斷向量的設(shè)計以及開中斷、循環(huán)等待等工作。另外,在主程序模塊中還需要設(shè)置啟動/清除標(biāo)志寄存器、里程寄存器和價格寄存器,并對它們進(jìn)行初始化。然后,主程序?qū)⒏鶕?jù)各標(biāo)志寄存器的內(nèi)容,分別完成啟動、清除、計程和計價等不同的操作。主程序流程圖如圖4.1 所示。當(dāng)按下S1時,就啟動計價,將根據(jù)里程寄存器中的內(nèi)容計算和判斷出行駛里程是否已超過起價公里數(shù)。若已超過,則根據(jù)里程值、每
31、公里的單價數(shù)和起價數(shù)來計算出當(dāng)前的累計價格,并將結(jié)果存于價格寄存器中,然后將時間和當(dāng)前累計價格送顯示電路顯示出來。當(dāng)?shù)竭_(dá)目的地的時候,由于霍爾開關(guān)沒有送來脈沖信號,就停止計價,顯示當(dāng)前所應(yīng)該付的金額和對應(yīng)的單價,到下次啟動計價時,系統(tǒng)自動對顯示清零,并重新進(jìn)行 初始化過程。</p><p> 如圖4-1 主程序流程圖</p><p> 第二節(jié) 定時中斷服務(wù)程序</p&g
32、t;<p> 在定時中斷服務(wù)程序中,每1/40s 產(chǎn)生一次中斷,當(dāng)產(chǎn)生40 次中斷的時候,也就到了一秒,送數(shù)據(jù)到相應(yīng)的顯示緩沖單元,并調(diào)用顯示子程序?qū)崟r顯示。其程序流程如圖4-2 所示。</p><p> 圖4-2 定時中斷服務(wù)程序</p><p> 第三節(jié) 鍵盤服務(wù)程序</p><p> 鍵盤采用查詢的方式,放在主程序中,當(dāng)沒有按鍵按下的時
33、候,單片機(jī)循環(huán)主程序,一旦有按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。</p><p> 六個按鍵分別對應(yīng)六個簡單的子程序。</p><p> 如果按鍵S1被按下,則調(diào)用第一個子程序:begin_signal標(biāo)志置1,將s_or_d標(biāo)志置0;表示單程開始。</p><p> 如果按鍵S2被按下,則調(diào)用第一個子程序:begin_signal標(biāo)志置1,將s
34、_or_d標(biāo)志置1; 表示往返開始。</p><p> 如果按鍵S3被按下,則調(diào)用第一個子程序:begin_signal標(biāo)志置0; 表示暫停。</p><p> 如果按鍵S4被按下,則調(diào)用第一個子程序:pulse_counter標(biāo)志置0,將t置0; 表示將顯示數(shù)據(jù)清空。</p><p> 如果按鍵S5被按下,則調(diào)用第一個子程序:dispflag標(biāo)志置1; 表示
35、進(jìn)入查詢界面。</p><p> 如果按鍵S6被按下,則調(diào)用第一個子程序:dispflag標(biāo)志置0; 表示退出查詢界面。</p><p><b> 第五章 系統(tǒng)測試</b></p><p><b> 第一節(jié) 硬件調(diào)試</b></p><p> 第一步:目測,檢測外部的各元件電路是否有斷點(diǎn)。一
36、般先檢查有焊接點(diǎn)的線路,因?yàn)檫@些地方是最容易出現(xiàn)斷點(diǎn)的可用帶放大鏡的臺燈檢查更佳,如圖5-1為目測實(shí)圖。</p><p> 如圖5-1 目測實(shí)物圖</p><p> 第二步用萬用表檢測。</p><p> 先用萬用表復(fù)核目測中有疑問的連接點(diǎn),在檢測各種電源線與底線是否有短路現(xiàn)象。</p><p> 將萬用表打在歐姆擋,然后將表筆接在被
37、測線路之間,看實(shí)數(shù)是否有變化,有則表明導(dǎo)通。如圖5-2為萬用表測試實(shí)物圖。</p><p><b> 如圖5-2 </b></p><p><b> 第二節(jié) 軟件調(diào)試</b></p><p> 軟件調(diào)試是通過對用戶程序的匯編、連接、執(zhí)行來發(fā)現(xiàn)程序中存在的語法錯誤與邏輯錯誤并加以排除糾正的過程。查看程序是否有邏輯錯誤
38、。如圖5-1程序窗口。</p><p> 如圖5-1 程序輸入窗口</p><p> 如圖5-2為程序編譯窗口。</p><p> 如圖5-2 程序編譯窗口</p><p> 如果信息欄顯示沒有錯誤,表明沒有語法錯誤,然后可以生成“*.HEX”文件下載到芯片里,與硬件聯(lián)合調(diào)試。</p><p><b>
39、; 結(jié)束語</b></p><p> 經(jīng)過這些天有關(guān)于出租車計價器的課程設(shè)計,使我對單片機(jī)的應(yīng)用有了更深的了解。在課程設(shè)計的過程中,還是碰到了許多的問題。比如,對于數(shù)碼管動態(tài)掃描顯示和鍵盤的延時防抖的綜合編程不能較好地解決;對于代碼的前后順序及調(diào)用掌握得還不夠好;對于一些相關(guān)的應(yīng)用軟件沒能熟練掌握。通過這幾天晚上的苦想和反復(fù)調(diào)試,以及參考網(wǎng)上的程序,最終還是沒能把問題解決。</p>
40、<p> 通過這次課程設(shè)計,我最大的收獲就是自己的動手能力和獨(dú)立解決問題的能力得到了很大的提高,也充分體會到了自己設(shè)計東西的樂趣、學(xué)會查閱資料和對別人的東西融會變通的重要性,也明白了很多知識光靠趴在書本上學(xué)是學(xué)不到其中的精髓的,必須親自去試著實(shí)踐,親自去經(jīng)歷才能對它們真正的掌握,凡事都要自己去動下手,去實(shí)踐一下,遇到困難,永遠(yuǎn)不要沮喪氣餒。在動手的過程中,不僅能增強(qiáng)實(shí)踐能力,而且在理論上可以有更深的認(rèn)識;這次設(shè)計給了我極大的
41、鼓舞和信心,相信在以后的學(xué)習(xí)中可以通過不斷的摸索和實(shí)踐來提高其他方面的知識。通過本次課程設(shè)計,又使我學(xué)到了許多書本上無法學(xué)到的知識,也使也深該體會到單片機(jī)技術(shù)應(yīng)用領(lǐng)域的廣泛,不僅使我對學(xué)過的單片機(jī)知識有了很多的鞏固,同時也對單片機(jī)這一門課程產(chǎn)生了更大的</p><p><b> 致謝</b></p><p> 首先要感謝我的家人,是他們讓我能上大學(xué);在大學(xué)里,先要
42、學(xué)會學(xué)習(xí)才能學(xué)的更好,是老師教了我怎樣學(xué)習(xí),到現(xiàn)在能完成畢業(yè)設(shè)計,都少不了老師的功勞;在整個設(shè)計過程中,從硬件電路圖到軟件編程,應(yīng)用了相當(dāng)多的知識,包含了大學(xué)三年所學(xué)的知識,在此向各位任課老師表示感謝。</p><p> 在設(shè)計過程中,指導(dǎo)老師xx老師給予了我很大幫助,xx老師對設(shè)計中出現(xiàn)的問題作了及時講解和耐心指導(dǎo),使我的設(shè)計得以順利完成。在此,特向xx等表示感謝;同時,很多同學(xué)也給我提供了很多幫助,也向幫助
43、我的同學(xué)表示感謝。</p><p><b> 附錄A </b></p><p><b> 附錄B 程序清單</b></p><p> #include<reg52.h> </p><p> #define uint unsigned int </p><p
44、> #define uchar unsigned char</p><p> #define rate 15//脈沖數(shù)與里程數(shù)的比例 </p><p> sbit P20=P2^0; </p><p> sbit P21=P2^1; </p><p> sbit P22=P2^2; //接 74 LS 13
45、8 控制 數(shù)碼管 </p><p> sbit pulse_in=P1^0;</p><p> bit pulse=1;</p><p> bit dispflag;</p><p> uchar num,temp;</p><p> bit begin_signal;// 開始標(biāo)志 </p&g
46、t;<p> bit s_or_d;//單程 還是往返 標(biāo)志 </p><p> uint times; // 定時次數(shù) </p><p> uint pulse_counter;</p><p> uint record;</p><p> uint s_temple;</p><
47、p> uint s,m; //里程數(shù) s 和 金額 m </p><p> uint t; //等待時間 </p><p> char baiwei,shiwei,gewei,xiaoshu; </p><p> char keynum; //鍵盤 的鍵值 </p><p> uchar
48、 code table[]={</p><p> 0x3f,0x06,0x5b,0x4f,</p><p> 0x66,0x6d,0x7d,0x07,</p><p> 0x7f,0x6f,0x77,0x7c,</p><p> 0x39,0x5e,0x79,0x71,0x40}; //0~f and '-'的
49、字型碼(共陰) </p><p> //聲明 區(qū) </p><p> void delay(uint x); </p><p> void init();</p><p> void divide(uint counter);</p><p> void select(bit a,bit b
50、,bit c);</p><p> void debouncer(void);</p><p> uchar keyscan(void);</p><p> void delay(uint x)//延時 x ms .</p><p><b> {</b></p><p><b
51、> uint i,j;</b></p><p> for(i=0;i<x;i++)</p><p> for(j=0;j<=150;j++)</p><p><b> ;</b></p><p><b> }</b></p><p>
52、 void init() // 定時器初始化 </p><p><b> {</b></p><p> TMOD=0x01;</p><p> TH0=(65536-25000)/256;// timer=1/40s</p><p> TL0=(65536-25000)%256;</p
53、><p><b> EA=1;</b></p><p><b> ET0=1;</b></p><p><b> TR0=1;</b></p><p><b> }</b></p><p> void divide(uint
54、 counter)</p><p><b> {</b></p><p> if(dispflag==0)</p><p><b> {</b></p><p><b> P0=0x00;</b></p><p> counter=count
55、er*10/rate;</p><p> xiaoshu=counter%10;</p><p> gewei=(counter/10)%10;</p><p> shiwei=(counter/100)%10;</p><p> baiwei=(counter/1000)%10;</p><p> if(c
56、ounter<=30)m=80;</p><p><b> else</b></p><p> if(s_or_d==0)m=80+2*(counter-30)+t/300;</p><p> else m=80+1.5*(counter-30)+t/300;</p><p> select(1,
57、1,0);//顯示里程數(shù)目 </p><p> P0=table[xiaoshu];</p><p> delay(2); </p><p> select(0,1,0);</p><p> P0=table[gewei]|0x80;</p><p><b> delay(2);</b
58、></p><p> select(1,0,0);</p><p> P0=table[shiwei];</p><p><b> delay(2);</b></p><p> select(0,0,0);</p><p> P0=table[baiwei];</p>
59、<p><b> delay(2);</b></p><p> xiaoshu=m%10;</p><p> gewei=(m/10)%10;</p><p> shiwei=(m/100)%10;</p><p> baiwei=(m/1000)%10;</p><p>
60、 select(1,1,1); //顯示 金額數(shù)目 </p><p> P0=table[xiaoshu];</p><p> delay(2); </p><p> select(0,1,1);</p><p> P0=table[gewei]|0x80;</p><p><b> dela
61、y(2);</b></p><p> select(1,0,1);</p><p> P0=table[shiwei];</p><p><b> delay(2);</b></p><p> select(0,0,1);</p><p> P0=table[baiwei];
62、</p><p><b> delay(2);</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> P0=0
63、x00;</b></p><p> xiaoshu=t%10;</p><p> gewei=(t/10)%10;</p><p> shiwei=(t/100)%10;</p><p> baiwei=(t/1000)%10;</p><p> select(1,1,0);//顯示 等待時間
64、 </p><p> P0=table[xiaoshu];</p><p> delay(2); </p><p> select(0,1,0);</p><p> P0=table[gewei];</p><p><b> delay(2);</b></p>&
65、lt;p> select(1,0,0);</p><p> P0=table[shiwei];</p><p><b> delay(2);</b></p><p> select(0,0,0);</p><p> P0=table[baiwei];</p><p><b&g
66、t; delay(2);</b></p><p><b> }</b></p><p><b> }</b></p><p> void timer0() interrupt 1</p><p><b> {</b></p><p>
67、; TH0=(65536-25000)/256;</p><p> TL0=(65536-25000)%256;</p><p> if(begin_signal==1)</p><p><b> {</b></p><p> if(pulse_in!=pulse)</p><p>&l
68、t;b> {</b></p><p> delay(10);</p><p> if(pulse_in!=pulse)</p><p> {pulse=~pulse;</p><p> pulse_counter++;</p><p><b> }</b></
69、p><p><b> }</b></p><p> if (times==39)//1 s timer completed</p><p><b> {</b></p><p><b> times=0;</b></p><p> if((pul
70、se_counter-record)<5)//如果 每秒 脈沖小于 5 , 則等待時間 增加 </p><p><b> t++;</b></p><p> record=pulse_counter;</p><p><b> }</b></p><p>
71、;<b> times++;</b></p><p><b> }</b></p><p> //s_temple=pulse_counter/2;</p><p> //divide(s_temple);</p><p><b> }</b></p>
72、<p> void select(bit a,bit b,bit c)</p><p><b> {</b></p><p><b> P20=a;</b></p><p><b> P21=b;</b></p><p><b> P22=c;
73、</b></p><p><b> }</b></p><p> void debouncer(void)// 防抖動 程序 </p><p><b> {</b></p><p><b> uint i;</b></p><
74、p> for(i=0;i<4800;i++);</p><p><b> }</b></p><p> uchar keyscan()</p><p><b> {</b></p><p><b> P3=0x7f;</b></p><
75、p><b> temp=P3;</b></p><p> temp=temp&0x0f;</p><p> while(temp!=0x0f)</p><p><b> {</b></p><p> delay(10);</p><p><b&g
76、t; temp=P3;</b></p><p> temp=temp&0x0f;</p><p> while(temp!=0x0f)</p><p><b> {</b></p><p><b> temp=P3;</b></p><p>
77、switch(temp)</p><p><b> {</b></p><p> case 0x7e:num=1;</p><p><b> break;</b></p><p> case 0x7d:num=2;</p><p><b> break;&
78、lt;/b></p><p> case 0x7b:num=3;</p><p><b> break;</b></p><p> case 0x77:num=4;</p><p><b> break;</b></p><p><b> }<
79、/b></p><p> while(temp!=0x0f)</p><p><b> {</b></p><p><b> temp=P3;</b></p><p> temp=temp&0x0f;</p><p><b> }</b
80、></p><p><b> }</b></p><p><b> }</b></p><p><b> P3=0xbf;</b></p><p><b> temp=P3;</b></p><p> temp=te
81、mp&0x0f;</p><p> while(temp!=0x0f)</p><p><b> {</b></p><p> delay(10);</p><p><b> temp=P3;</b></p><p> temp=temp&0x0f;
82、</p><p> while(temp!=0x0f)</p><p><b> {</b></p><p><b> temp=P3;</b></p><p> switch(temp)</p><p><b> {</b></p>
83、;<p> case 0xbe:num=5;</p><p><b> break;</b></p><p> case 0xbd:num=6;</p><p><b> break;</b></p><p> case 0xbb:num=7;</p><
84、p><b> break;</b></p><p> case 0xb7:num=8;</p><p><b> break;</b></p><p><b> }</b></p><p> while(temp!=0x0f)</p><p&
85、gt;<b> {</b></p><p><b> temp=P3;</b></p><p> temp=temp&0x0f;</p><p><b> }</b></p><p><b> }</b></p><p
86、><b> }</b></p><p><b> P3=0xdf;</b></p><p><b> temp=P3;</b></p><p> temp=temp&0x0f;</p><p> while(temp!=0x0f)</p>
87、<p><b> {</b></p><p> delay(10);</p><p><b> temp=P3;</b></p><p> temp=temp&0x0f;</p><p> while(temp!=0x0f)</p><p><
88、;b> {</b></p><p><b> temp=P3;</b></p><p> switch(temp)</p><p><b> {</b></p><p> case 0xde:num=9;</p><p><b> br
89、eak;</b></p><p> case 0xdd:num=10;</p><p><b> break;</b></p><p> case 0xdb:num=11;</p><p><b> break;</b></p><p> case 0x
90、d7:num=12;</p><p><b> break;</b></p><p><b> }</b></p><p> while(temp!=0x0f)</p><p><b> {</b></p><p><b> temp
91、=P3;</b></p><p> temp=temp&0x0f;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> P3=
92、0xef;</b></p><p><b> temp=P3;</b></p><p> temp=temp&0x0f;</p><p> while(temp!=0x0f)</p><p><b> {</b></p><p> delay(1
93、0);</p><p><b> temp=P3;</b></p><p> temp=temp&0x0f;</p><p> while(temp!=0x0f)</p><p><b> {</b></p><p><b> temp=P3;&l
94、t;/b></p><p> switch(temp)</p><p><b> {</b></p><p> case 0xee:num=13;</p><p><b> break;</b></p><p> case 0xed:num=14;</p
95、><p><b> break;</b></p><p> case 0xeb:num=15;</p><p><b> break;</b></p><p> case 0xe7:num=16;</p><p><b> break;</b>&l
96、t;/p><p><b> }</b></p><p> while(temp!=0x0f)</p><p><b> {</b></p><p><b> temp=P3;</b></p><p> temp=temp&0x0f;<
97、/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> return num;</p><p><b> }</b></p><p&
98、gt; void singleway(void)// 單程 開始 函數(shù) </p><p><b> {</b></p><p> begin_signal=1;</p><p><b> s_or_d=0;</b></p><p><b> }</b></
99、p><p> void doubleway(void)//往返 開始 函數(shù) </p><p><b> {</b></p><p> begin_signal=1;</p><p><b> s_or_d=1;</b></p><p><b> }<
100、/b></p><p> void pause(void)//暫停 函數(shù) </p><p><b> {</b></p><p> begin_signal=0;</p><p><b> }</b></p><p> void clear(void)//
101、清除 函數(shù) </p><p><b> {</b></p><p> pulse_counter=0;</p><p><b> t=0;</b></p><p><b> }</b></p><p> void check(void)//
102、 查詢 函數(shù) </p><p><b> {</b></p><p> dispflag=1;</p><p><b> }</b></p><p> void check2(void)// 查詢 函數(shù) </p><p><b> {</
103、b></p><p> dispflag=0;</p><p><b> }</b></p><p> void sentence(void)// 判定鍵盤值 </p><p><b> {</b></p><p> if(keynum!=0)</
104、p><p><b> {</b></p><p> switch(keynum)</p><p><b> {</b></p><p> case 1:singleway();break;</p><p> case 2:doubleway();break;&l
105、t;/p><p> case 3:pause();break;</p><p> case 4:clear();break;</p><p> case 5:check();break;</p><p> case 6:check2();break;</p><p><b> }<
106、/b></p><p><b> }</b></p><p><b> }</b></p><p><b> main()</b></p><p><b> {</b></p><p><b> init(
107、);</b></p><p><b> while (1)</b></p><p><b> {</b></p><p> divide(pulse_counter);</p><p> keynum=keyscan();</p><p> senten
108、ce();</p><p><b> }</b></p><p><b> }</b></p><p><b> 參考文獻(xiàn)</b></p><p> [1] 胡漢才.單片機(jī)原理及接口技術(shù)[M].北京:清華大學(xué)出版社,1996.</p><p>
109、 [2] 胡健.單片機(jī)原理及接口技術(shù)[M].北京:機(jī)械工業(yè)出版社,2004.</p><p> [3] 胡健.單片機(jī)實(shí)用教程[M].北京:兵器工業(yè)出版社,2001.</p><p> [4] 周行慈.單片機(jī)應(yīng)用程序設(shè)計基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,1991.</p><p> [5] 李廣弟.單片機(jī)基礎(chǔ)[M].修訂本,北京:北京航空航天大學(xué)出版社,
110、2001.</p><p> [6] 李朝青.單片機(jī)原理及接口技術(shù)[M],簡明修訂版.北京:北京航空航天大學(xué)出版社,1999.</p><p> [7] 李葉紫.MCS-51單片機(jī)應(yīng)用教程[M].北京:清華大學(xué)出版社,2004.</p><p> [8] 朱定華.單片機(jī)原理及接口技術(shù)[M].北京:電子工業(yè)出版社,2001.</p><p&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機(jī)出租車測速計價系統(tǒng)畢業(yè)論文
- 基于單片機(jī)出租車測速計價系統(tǒng)畢業(yè)論文
- 基于單片機(jī)的出租車計價系統(tǒng)的設(shè)計畢業(yè)論文
- 基于at89c51單片機(jī)的出租車計價系統(tǒng)的設(shè)計-畢業(yè)論文
- 基于51單片機(jī)的出租車計價器畢業(yè)設(shè)計論文
- 畢業(yè)論文----基于c-51單片機(jī)出租車計價器的研究
- 基于單片機(jī)的出租車計價器設(shè)計畢業(yè)論文
- 基于單片機(jī)的出租車計價器設(shè)計【畢業(yè)論文】
- 畢業(yè)論文--基于單片機(jī)的出租車計價器設(shè)計
- 基于單片機(jī)出租車計費(fèi)系統(tǒng)畢業(yè)論文
- 基于51單片機(jī)的出租車計價器設(shè)計
- 畢業(yè)論文---基于單片機(jī)的出租車計價器的設(shè)計
- 畢業(yè)論文--基于51單片機(jī)設(shè)計的多功能出租車計價器
- 畢業(yè)論文(設(shè)計)基于單片機(jī)的出租車計價器的設(shè)計
- 畢業(yè)論文-- 基于單片機(jī)的出租車計價器軟件設(shè)計
- 課程設(shè)計---基于51單片機(jī)的出租車計價器
- 基于單片機(jī)的出租車計價器
- 2017畢業(yè)論文-基于pic單片機(jī)的出租車計費(fèi)系統(tǒng)
- 基于89S51單片機(jī)的出租車計價器系統(tǒng)設(shè)計論文.doc
- 基于at89c51單片機(jī)的出租車計價器系統(tǒng)設(shè)計
評論
0/150
提交評論