版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 畢 業(yè) 論 文</b></p><p> 基于單片機的出租車計價系統(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> 出租車計價器是乘客與司機雙方的交易準則,他是出租車行業(yè)發(fā)展的重要標志,是現(xiàn)代出租車不可或缺的部分。它關(guān)系著交易雙方的利益。具有良好性能的計價器,無論是對廣大出租車司機朋友還是乘客都是很必要的。因此,出租車計價器的研究也是一個具有應(yīng)用價值的研究課題。而采用模擬電路或是數(shù)字電路設(shè)計的計價器整體電路規(guī)模較大,用到的器件多,造成的故障率高,難調(diào)
4、試。相對于普通的模擬電路或數(shù)字電路,采用單片機AT89S52型號芯片進行的設(shè)計相對來說功能強大,用較少的硬件和適當?shù)能浖嗷ヅ浜峡梢院苋菀椎膶崿F(xiàn)設(shè)計要求,且靈活性強,可用12864液晶顯示屏顯示,可以通過軟件編程來完成更多的附加功能。針對計費模式的切換,通過軟件編程就可以輕易而舉的實現(xiàn)。避免了機械開關(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 擴展功能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> 參考文獻29</b></p><p><b> 第一章 緒 論</b></p><p> 單片機自1976年由Intel公司推出MCS-48開
11、始,迄今已有二十多年了。由于單片機集成度高、功能強、可靠性高、體積小、功耗低、使用方便、價格低廉等一系列優(yōu)點,目前已經(jīng)滲入到人們工作和生活的方方面面,單片機的應(yīng)用領(lǐng)域已從面向工業(yè)控制、通訊、交通、智能儀表等迅速發(fā)展到家用消費產(chǎn)品、辦公自動化、汽車電子、PC機外圍以及網(wǎng)絡(luò)通訊等廣大領(lǐng)域。</p><p> 單片機有兩種基本結(jié)構(gòu):一種是在通用微型計算機中廣泛采用的,程序存儲器和數(shù)據(jù)存儲器共用一個存儲器空間的結(jié)構(gòu),稱
12、為“馮·諾依曼”(Von Neumann)結(jié)構(gòu)。另一種是將程序存儲器和數(shù)據(jù)存儲器截然分開,分別尋址的結(jié)構(gòu),稱為“哈佛”(Harvard)結(jié)構(gòu),目前的單片機采用此種結(jié)構(gòu)為多。</p><p> 汽車計價器是乘客與司機雙方的交易準則,它是出租車行業(yè)發(fā)展的重要標志,是出租車中最重要的工具。它關(guān)系著交易雙方的利益。具有良好性能的計價器無論是對廣大出租車司機朋友還是乘客來說都是很必要的。因此,汽車計價器的研究也
13、是十分有一個應(yīng)用價值的。我國在70年代開始出現(xiàn)出租車,但那時的計費系統(tǒng)大都是國外進口不但不夠準確,價格還十分昂貴。隨著改革開放日益深入,出租車行業(yè)的發(fā)展勢頭已十分突出,國內(nèi)各機械廠家紛紛推出國產(chǎn)計價器。出租車計價器的功能從剛開始的只顯示路程(需要司機自己定價,計算后四舍五入),到能夠自主計費,以及現(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控制器為核心,與獨立鍵盤電路和顯示電路等組成出租車計價系統(tǒng)。該系統(tǒng)硬件的組成包括單片機為主控模塊、LM324、電機、光電傳感器、獨立按鍵等。單片機主控模塊完成外圍硬件的控制
16、以及一些運算。獨立按鍵完成開始暫停等功能,單片機控制的出租車計價系統(tǒng)的硬件組成框圖如圖2-1所示:</p><p><b> 如圖2-1 </b></p><p> 第二節(jié) 系統(tǒng)工作原理</p><p> 本系統(tǒng)的工作流程圖如圖2-2所示,有電源給單片機模塊供電。單片機產(chǎn)生的數(shù)字信號送給LCD12864顯示,和單片機產(chǎn)生高低電平信號傳給
17、繼電器使電機工作,讓光電傳感器產(chǎn)生高低電平信號通過LM324放大電路放大后傳給單片機進行相關(guān)的運算。</p><p><b> 如圖2-1 </b></p><p> 第三節(jié) 系統(tǒng)功能的確定</p><p> 2.3.1 基本功能</p><p> ?。?)顯示:單程價、起步價、可以顯示里程、總金額、等待時間、速
18、度。</p><p> ?。?)計費功能:起步公里數(shù)為3公里,價格為8元;若實際運行大于3公里,按單程價格為2元/公里,往返則價格為1.5元/公里,等待計費1.5遠/min。</p><p> (3)按鍵功能:單程/往返分別由“單程” 按鍵和“往返” 按鍵設(shè)定;按“暫?!?鍵,計價器可暫停計價;按“清除” 鍵,計價器能將記錄數(shù)據(jù)(里程、等待時間與金額等)自動清0;按“查詢”鍵,能自動顯示
19、總等待時間;按“返回”鍵,仍然顯示里程和金額。</p><p> 2.3.2 擴展功能</p><p> 停車計費功能:用單片機控制電機轉(zhuǎn)動,并用光電傳感器檢測轉(zhuǎn)盤轉(zhuǎn)動模擬車速,車速與轉(zhuǎn)盤轉(zhuǎn)速成正比。車速<5公里/小時的時間累積為總等待時間,每1分鐘等待時間相當于里程數(shù)增加1公里。</p><p> 2.3.3系統(tǒng)操作說明</p><p&g
20、t; (1)按鍵S1:單程按鍵。按下該鍵,里程隨脈沖數(shù)成正比累加,在里程大于3公里后,金額數(shù)按單程價格為2元/公里進行累加。</p><p> (2)按鍵S2:往返按鍵。按下該鍵,里程隨脈沖數(shù)成正比累加,在里程大于3公里后,金額數(shù)按單程價格為1.5元/公里進行累加。</p><p> ?。?)按鍵S3:暫停按鍵。到達目的地后,按“暫停” 鍵,計價器可暫停計價。</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具有以下標準功能: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)用于存放各種運算的中間結(jié)果,
24、作緩存和數(shù)據(jù)暫存,以及設(shè)置特征標志等。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> 實驗板的時鐘振蕩源電路如圖3-3所示。其中JT 為11.0592MHz 的晶振,改變兩電容CB的值即可對此晶振頻率進行調(diào)節(jié)。該電路提供單片機工
26、作所需的振蕩頻率,計算定時器初值即需此晶振頻率,在通信時也需知道晶振頻率,以對波特率進行計算。</p><p> 3.3.2 復(fù)位電路</p><p> 如圖3-4所示為實驗板的復(fù)位電路,當RESET 信號為低電平時,實驗板為工作狀態(tài),當RESET信號為高電平時,實驗板為復(fù)位或下載程序狀態(tài)。由于AT89S52具有ISP 的功能,即可以通過并口線直接將程序下載到單片機內(nèi),因此, AT89
27、S52 具有兩種狀態(tài),下載程序狀態(tài)和運行狀態(tài)。該復(fù)位電路能實現(xiàn)上電自動復(fù)位,也能手動復(fù)位,一般復(fù)位時RESET應(yīng)保持20毫秒以上高電平,此復(fù)位時間由接地電容控制。</p><p> 3.3.3 鍵盤電路</p><p> 如圖3-5所示為獨立式按鍵電路,每個按鍵占用一根I/O口線,每根I/O口線上按鍵的工作狀態(tài)不會影響其它按鍵的工作狀態(tài)。這種按鍵的軟件程序簡單,但占用I/O口線較多。(
28、一跟口線接一個按鍵),適用于鍵盤數(shù)較少的系統(tǒng)中。</p><p> 圖 3-5 鍵電路圖</p><p> 圖 3-6 按鍵實物圖</p><p> 3.3.4 LCD12864顯示</p><p> 通過用12864顯示出租車的單程價、起步價、可以顯示里程、總金額、等待時間、速度等。現(xiàn)在的LCD價格便宜且適合我們做單片機的顯示屏。
29、應(yīng)用也十分廣泛。電路連接如圖3-7所示。</p><p><b> 圖 3-7顯示電路</b></p><p> 圖 3-7 LCD12864實物圖</p><p> 第四章 系統(tǒng)軟件設(shè)計</p><p><b> 第一節(jié) 主程序設(shè)計</b></p><p>
30、在主程序模塊中,需要完成對各接口芯片的初始化、出租車起價和單價的初始化、中斷向量的設(shè)計以及開中斷、循環(huán)等待等工作。另外,在主程序模塊中還需要設(shè)置啟動/清除標志寄存器、里程寄存器和價格寄存器,并對它們進行初始化。然后,主程序?qū)⒏鶕?jù)各標志寄存器的內(nèi)容,分別完成啟動、清除、計程和計價等不同的操作。主程序流程圖如圖4.1 所示。當按下S1時,就啟動計價,將根據(jù)里程寄存器中的內(nèi)容計算和判斷出行駛里程是否已超過起價公里數(shù)。若已超過,則根據(jù)里程值、每
31、公里的單價數(shù)和起價數(shù)來計算出當前的累計價格,并將結(jié)果存于價格寄存器中,然后將時間和當前累計價格送顯示電路顯示出來。當?shù)竭_目的地的時候,由于霍爾開關(guān)沒有送來脈沖信號,就停止計價,顯示當前所應(yīng)該付的金額和對應(yīng)的單價,到下次啟動計價時,系統(tǒng)自動對顯示清零,并重新進行 初始化過程。</p><p> 如圖4-1 主程序流程圖</p><p> 第二節(jié) 定時中斷服務(wù)程序</p&g
32、t;<p> 在定時中斷服務(wù)程序中,每1/40s 產(chǎn)生一次中斷,當產(chǎn)生40 次中斷的時候,也就到了一秒,送數(shù)據(jù)到相應(yīng)的顯示緩沖單元,并調(diào)用顯示子程序?qū)崟r顯示。其程序流程如圖4-2 所示。</p><p> 圖4-2 定時中斷服務(wù)程序</p><p> 第三節(jié) 鍵盤服務(wù)程序</p><p> 鍵盤采用查詢的方式,放在主程序中,當沒有按鍵按下的時
33、候,單片機循環(huán)主程序,一旦有按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。</p><p> 六個按鍵分別對應(yīng)六個簡單的子程序。</p><p> 如果按鍵S1被按下,則調(diào)用第一個子程序:begin_signal標志置1,將s_or_d標志置0;表示單程開始。</p><p> 如果按鍵S2被按下,則調(diào)用第一個子程序:begin_signal標志置1,將s
34、_or_d標志置1; 表示往返開始。</p><p> 如果按鍵S3被按下,則調(diào)用第一個子程序:begin_signal標志置0; 表示暫停。</p><p> 如果按鍵S4被按下,則調(diào)用第一個子程序:pulse_counter標志置0,將t置0; 表示將顯示數(shù)據(jù)清空。</p><p> 如果按鍵S5被按下,則調(diào)用第一個子程序:dispflag標志置1; 表示
35、進入查詢界面。</p><p> 如果按鍵S6被按下,則調(diào)用第一個子程序:dispflag標志置0; 表示退出查詢界面。</p><p><b> 第五章 系統(tǒng)測試</b></p><p><b> 第一節(jié) 硬件調(diào)試</b></p><p> 第一步:目測,檢測外部的各元件電路是否有斷點。一
36、般先檢查有焊接點的線路,因為這些地方是最容易出現(xiàn)斷點的可用帶放大鏡的臺燈檢查更佳,如圖5-1為目測實圖。</p><p> 如圖5-1 目測實物圖</p><p> 第二步用萬用表檢測。</p><p> 先用萬用表復(fù)核目測中有疑問的連接點,在檢測各種電源線與底線是否有短路現(xiàn)象。</p><p> 將萬用表打在歐姆擋,然后將表筆接在被
37、測線路之間,看實數(shù)是否有變化,有則表明導(dǎo)通。如圖5-2為萬用表測試實物圖。</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è)計,使我對單片機的應(yīng)用有了更深的了解。在課程設(shè)計的過程中,還是碰到了許多的問題。比如,對于數(shù)碼管動態(tài)掃描顯示和鍵盤的延時防抖的綜合編程不能較好地解決;對于代碼的前后順序及調(diào)用掌握得還不夠好;對于一些相關(guān)的應(yīng)用軟件沒能熟練掌握。通過這幾天晚上的苦想和反復(fù)調(diào)試,以及參考網(wǎng)上的程序,最終還是沒能把問題解決。</p>
40、<p> 通過這次課程設(shè)計,我最大的收獲就是自己的動手能力和獨立解決問題的能力得到了很大的提高,也充分體會到了自己設(shè)計東西的樂趣、學(xué)會查閱資料和對別人的東西融會變通的重要性,也明白了很多知識光靠趴在書本上學(xué)是學(xué)不到其中的精髓的,必須親自去試著實踐,親自去經(jīng)歷才能對它們真正的掌握,凡事都要自己去動下手,去實踐一下,遇到困難,永遠不要沮喪氣餒。在動手的過程中,不僅能增強實踐能力,而且在理論上可以有更深的認識;這次設(shè)計給了我極大的
41、鼓舞和信心,相信在以后的學(xué)習中可以通過不斷的摸索和實踐來提高其他方面的知識。通過本次課程設(shè)計,又使我學(xué)到了許多書本上無法學(xué)到的知識,也使也深該體會到單片機技術(shù)應(yīng)用領(lǐng)域的廣泛,不僅使我對學(xué)過的單片機知識有了很多的鞏固,同時也對單片機這一門課程產(chǎn)生了更大的</p><p><b> 致謝</b></p><p> 首先要感謝我的家人,是他們讓我能上大學(xué);在大學(xué)里,先要
42、學(xué)會學(xué)習才能學(xué)的更好,是老師教了我怎樣學(xué)習,到現(xiàn)在能完成畢業(yè)設(shè)計,都少不了老師的功勞;在整個設(shè)計過程中,從硬件電路圖到軟件編程,應(yī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;// 開始標志 </p&g
46、t;<p> bit s_or_d;//單程 還是往返 標志 </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> 參考文獻</b></p><p> [1] 胡漢才.單片機原理及接口技術(shù)[M].北京:清華大學(xué)出版社,1996.</p><p>
109、 [2] 胡健.單片機原理及接口技術(shù)[M].北京:機械工業(yè)出版社,2004.</p><p> [3] 胡健.單片機實用教程[M].北京:兵器工業(yè)出版社,2001.</p><p> [4] 周行慈.單片機應(yīng)用程序設(shè)計基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,1991.</p><p> [5] 李廣弟.單片機基礎(chǔ)[M].修訂本,北京:北京航空航天大學(xué)出版社,
110、2001.</p><p> [6] 李朝青.單片機原理及接口技術(shù)[M],簡明修訂版.北京:北京航空航天大學(xué)出版社,1999.</p><p> [7] 李葉紫.MCS-51單片機應(yīng)用教程[M].北京:清華大學(xué)出版社,2004.</p><p> [8] 朱定華.單片機原理及接口技術(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機出租車測速計價系統(tǒng)畢業(yè)論文
- 基于單片機出租車測速計價系統(tǒng)畢業(yè)論文
- 基于單片機的出租車計價系統(tǒng)的設(shè)計畢業(yè)論文
- 基于at89c51單片機的出租車計價系統(tǒng)的設(shè)計-畢業(yè)論文
- 畢業(yè)論文----基于c-51單片機出租車計價器的研究
- 基于51單片機的出租車計價器畢業(yè)設(shè)計論文
- 基于單片機的出租車計價器設(shè)計畢業(yè)論文
- 基于單片機的出租車計價器設(shè)計【畢業(yè)論文】
- 畢業(yè)論文--基于單片機的出租車計價器設(shè)計
- 基于單片機出租車計費系統(tǒng)畢業(yè)論文
- 基于51單片機的出租車計價器設(shè)計
- 畢業(yè)論文---基于單片機的出租車計價器的設(shè)計
- 畢業(yè)論文--基于51單片機設(shè)計的多功能出租車計價器
- 畢業(yè)論文(設(shè)計)基于單片機的出租車計價器的設(shè)計
- 畢業(yè)論文-- 基于單片機的出租車計價器軟件設(shè)計
- 課程設(shè)計---基于51單片機的出租車計價器
- 基于單片機的出租車計價器
- 2017畢業(yè)論文-基于pic單片機的出租車計費系統(tǒng)
- 基于at89c51單片機的出租車計價器系統(tǒng)設(shè)計
- 基于89S51單片機的出租車計價器系統(tǒng)設(shè)計論文.doc
評論
0/150
提交評論