版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《單片機(jī)原理與接口技術(shù)》課程設(shè)計</p><p> 題 目: 基于單片機(jī)的出租車計價器的設(shè)計</p><p> 學(xué)院(系): XXXXXXX系 </p><p> 年級專業(yè): XXXXXXXXXXX班 </p><p> 學(xué) 號: XXXXXXXXXXXX
2、 </p><p> 學(xué)生姓名: X X X </p><p> 指導(dǎo)教師: X X X </p><p><b> 課程設(shè)計任務(wù)書</b></p><p> 學(xué)生姓名: X X X 專業(yè)班級: XXX班
3、 </p><p> 指導(dǎo)教師: X X X 工作單位: XX系 </p><p> 題 目: 基于單片機(jī)的出租車計價器的設(shè)計 </p><p><b> 初始條件:</b><
4、;/p><p> 運用所學(xué)的單片機(jī)原理與接口技術(shù)知識和數(shù)字電路知識;</p><p> 51單片機(jī)應(yīng)用開發(fā)系統(tǒng)一套;</p><p> PC機(jī)及相關(guān)應(yīng)用軟件。</p><p> 要求完成的主要任務(wù):</p><p> 以目前生活中正在使用的出租車計價器為原型進(jìn)行設(shè)計,要求具有按時間和里程綜合計算車價的功能,能顯示
5、時間、里程、單價、總車價等相關(guān)信息。</p><p> 完成出租車計價器的設(shè)計和調(diào)試。 </p><p> 撰寫課程設(shè)計說明書,說明書使用A4打印紙計算機(jī)打印,用Protel等繪圖軟件繪制電子線路圖紙。</p><p><b> 時間安排:</b></p><p> 第1周 下達(dá)課程設(shè)計任務(wù)書和日程安排,調(diào)研
6、和查找資料,明確設(shè)計任務(wù)要求;</p><p> 第2周 完成方案論證、總體設(shè)計和硬件設(shè)計;</p><p> 第3周 完成軟件設(shè)計和程序的編寫; </p><p> 第4周 調(diào)試硬件系統(tǒng)和軟件程序,完成整個系統(tǒng)的設(shè)計和調(diào)試;</p><p> 第5周 結(jié)果分析整理、撰寫課程設(shè)計報告,驗收和答辯。</p><p&g
7、t; 指導(dǎo)教師簽名: 2010 年 12 月 15 日</p><p> 系主任(或責(zé)任教師)簽名: 2010 年 12 月 16 日</p><p> 基于51單片機(jī)原理出租車計價器的設(shè)計</p><p><b> 摘要 </b></p><p>
8、本設(shè)計的是一個基于單片機(jī)AT89S52的出租車自動計費設(shè)計,附有復(fù)位電路,時鐘電路,鍵盤電路等。復(fù)位電路是單片機(jī)的初始化操作,除了正常的初始化外,為擺脫困境,通過復(fù)位電路可以重新開始。時鐘電路采用12MHz的晶振,作為系統(tǒng)的時鐘源,具有較高的準(zhǔn)確性。</p><p> 在上電時字符型液晶1602顯示最初的起步價,里程收費,等待時間收費三種收費,通過按鍵可以調(diào)整起步價,里程收費,等待時間收費。通過按鍵模擬出租車的
9、運行,暫停,停止。在1602液晶上可以顯示運行的時間,運行時暫停的時間,通過計算可以得出總共的費用和總的路程。在這里主要是以AT89S52單片機(jī)為核心控制器,P0口接1602液晶顯示模塊,P1口接按鍵的,通過按鍵輸入。</p><p> 關(guān)鍵詞:單片機(jī)AT89C51; AT89S52;1602液晶;出租車計費器;</p><p><b> 目 錄</b><
10、/p><p><b> 前 言1</b></p><p> 第一章 出租車計價系統(tǒng)的設(shè)計要求與設(shè)計方案2</p><p> 1.1出租車計價器設(shè)計要求2</p><p> 1.2系統(tǒng)主要功能2</p><p> 1.3方案論證與比較2</p><p>
11、; 第二章 出租車計價系統(tǒng)的硬件設(shè)計4</p><p> 2.1振蕩電路4</p><p> 2.2復(fù)位電路設(shè)計4</p><p> 2.3鍵盤接口電路5</p><p> 2.4顯示電路5</p><p> 2.5路程測量部分6</p><p> 2.6
12、單片機(jī)各引腳功能說明6</p><p> 2.71602液晶的簡介8</p><p> 第三章 出租車計價系統(tǒng)的軟件設(shè)計10</p><p> 3.1單片機(jī)資源使用10</p><p> 3.2中斷子函數(shù)10</p><p> 3.3判鍵子函數(shù)11</p><p>
13、; 3.4顯示子程序11</p><p> 3.5總程序流程框圖13</p><p> 第四章proteus的簡介14</p><p> 4.1Proteus介紹14</p><p> 第五章 設(shè)計體會與小結(jié)15</p><p><b> 參考文獻(xiàn)15</b><
14、;/p><p><b> 附 錄16</b></p><p><b> 一.源程序16</b></p><p><b> 二.設(shè)計總圖2</b></p><p><b> 前 言</b></p><p> 出租車計價器
15、是出租車營運收費的專用智能化儀表,隨著電子技術(shù)的發(fā)展,出租車計價器技術(shù)也在不斷進(jìn)步和提高。國內(nèi)出租車計價器已經(jīng)經(jīng)歷了4 個階段的發(fā)展。從傳統(tǒng)的全部由機(jī)械元器件組成的機(jī)械式,到半電子式即用電子線路代替部分機(jī)械元器件的出租車計價器;再從集成電路式到目前的單片機(jī)系統(tǒng)設(shè)計的出租車計價器。出租車計價器計費是否準(zhǔn)確、出租車司機(jī)是否作弊才是乘客最關(guān)心的問題,而計價器營運數(shù)據(jù)的管理是否方便才是出租車司機(jī)最關(guān)注的。因此怎樣設(shè)計出一種既能有效防止司機(jī)作弊又
16、能方便司機(jī)的計價器尤為重要。因此, 本文以單片機(jī)A T89S52 為核心設(shè)計一款多功能出租車計價器,該計價器能實現(xiàn)按時間和里程綜合計算車價,能顯示時間、里程、單價、總車價等相關(guān)信息顯示。它比市場上的一些計價器使用更方便,功能更全,還具有有效防止司機(jī)作弊和系統(tǒng)穩(wěn)定性好的優(yōu)點。</p><p> 第一章 出租車計價系統(tǒng)的設(shè)計要求與設(shè)計方案</p><p> 出租車計價器設(shè)計要求</
17、p><p> 設(shè)計一個出租車自動計費器,計費包括起步價、行車?yán)锍逃嬞M、等待時間計費三部分,用1602液晶 顯示總金額,運行時間,暫停時間,最大值為99.9元,起步價為5.0元,3Km之內(nèi)起步價計費,超過3Km,設(shè)速度為100m/s,10s增加1.3元(即1KM增加1.3元),等待時間單價為每分鐘1.5元,用液晶顯示總里程,同時用液晶顯示等待時間和運行花費時間。</p><p><b&g
18、t; ?、?、計費功能</b></p><p> 費用的計算是按行駛里程收費。設(shè)起步價為5.00元。</p><p> 1、當(dāng)里程<3km時,按起價計算費用</p><p> 2、當(dāng)里程>3km時,每公里按1.3元計費</p><p> 3、等待累計時間>2min時,按1.5元/min計費</p>
19、;<p><b> ?、凇@示功能</b></p><p> 1、顯示行駛里程:用四位數(shù)字顯示,顯示方式為“XXXX”,單位為km。計程范圍0-99km,精確到1km。</p><p> 2、顯示等候時間:用兩位數(shù)字顯示,顯示方式為“XX”,單位為min。計時范圍0-59min,精確到1min。</p><p> 3、顯示總
20、費用:用四位數(shù)字顯示,顯示方式為“XXX.X”,單位為元。計價范圍0-999.9元,精確到0.1元。</p><p><b> 系統(tǒng)主要功能</b></p><p> 本出租車自動計費,上電后顯示最初的起步價,里程計費單價,等待時間計費單價,通過按鍵可以調(diào)節(jié)起步價,里程計費單價,等待時間計費單價。同時具有運行,暫停,停止等狀態(tài),可以顯示運行的時間,同時可以顯示暫停
21、的時間,具有累加功能,暫停和運行時間在暫停和運行前一次的狀態(tài)上計時。出租車停止后能夠顯示行駛的總費用。</p><p><b> 方案論證與比較</b></p><p> 方案一:采用數(shù)字電子技術(shù),利用555定時芯片構(gòu)成多諧振蕩器,或采用外圍的晶振電路作為時鐘脈沖信號,采用計數(shù)芯片對脈沖盡心脈沖的計數(shù)和分頻,最后通過譯碼電路對數(shù)據(jù)進(jìn)行譯碼,將譯碼所得的數(shù)據(jù)送給數(shù)碼
22、管顯示,一下是該方案的流程框圖,方案一如圖1-1所示:</p><p><b> 圖1-1方案一</b></p><p> 案二:采用EDA技術(shù),根據(jù)層次化設(shè)計理論,該設(shè)計問題自頂向下可分為分頻模塊,控制模塊 計量模塊、譯碼和動態(tài)掃描顯示模塊,其系統(tǒng)框圖如圖1-2所示:</p><p><b> 圖1-2方案二</b>
23、;</p><p> 方案三:采用MCU技術(shù),通過單片機(jī)作為主控器,利用1602字符液晶作為顯示電路,采用外部晶振作為時鐘脈沖,通過按鍵可以方便調(diào)節(jié),以下是方案三的系統(tǒng)流程圖,本方案主要是必須對于數(shù)字電路比較熟悉,成本又不高。方案圖如圖1-3所示:</p><p><b> 圖1-3方案三</b></p><p> 方案總結(jié):通過各個方案
24、的比較,本次采用方案三,不但控制簡單,而且成本低廉,設(shè)計電路簡單。</p><p> 第二章 出租車計價系統(tǒng)的硬件設(shè)計</p><p><b> 振蕩電路</b></p><p> 單片機(jī)內(nèi)部有一個高增益、反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。通過這兩個引腳在芯片外并接石英晶體振蕩器和兩只電容(電容和一般取
25、33pF)。這樣就構(gòu)成一個穩(wěn)定的自激振蕩器。 振蕩電路脈沖經(jīng)過二分頻后作為系統(tǒng)的時鐘信號,再在二分頻的基礎(chǔ)上三分頻產(chǎn)生ALE信號,此時得到的信號時機(jī)器周期信號。振蕩電路如圖2-1所示:</p><p><b> 圖2-1振蕩電路</b></p><p><b> 復(fù)位電
26、路設(shè)計</b></p><p> 復(fù)位操作有兩種基本形式:一種是上電復(fù)位,另一種是按鍵復(fù)位。按鍵復(fù)位具有上電復(fù)位功能外,若要復(fù)位,只要按圖中的RESET鍵,電源VCC經(jīng)電阻R1、R2分壓,在RESET端產(chǎn)生一個復(fù)位高電平。上電復(fù)位電路要求接通電源后,通過外部電容充電來實現(xiàn)單片機(jī)自動復(fù)位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平只要
27、能保持足夠的時間(2個機(jī)器周期),單片機(jī)就可以進(jìn)行復(fù)位操作。按鍵復(fù)位電路圖如圖2-2所示。</p><p> 圖2-2 AT89C51引腳配置</p><p><b> 鍵盤接口電路</b></p><p> 獨立式鍵盤:獨立式鍵盤中,每個按鍵占用一根I/O口線,每個按鍵電路相對獨立。I/O口通過按鍵與地相連,I/O口有上拉電阻,無鍵按下
28、時,引腳端為高電平,有鍵按下時,引腳電平被拉低。I/O口內(nèi)部有上拉電阻時,外部可不接上拉電阻。鍵盤接口電路如圖2-3所示:</p><p> 圖2-3鍵盤接口電路</p><p><b> 顯示電路</b></p><p> 對于現(xiàn)實電路我們可以采用數(shù)碼管,也可以采用液晶顯示,液晶又分字符型和點陣型,我們使用的液晶是字符型液晶,并且?guī)ё址?/p>
29、庫的,不需要查找代碼。英文字符就可。液晶電路使用時,如果發(fā)現(xiàn)液晶不亮可以調(diào)節(jié)連接液晶的點位器,改變液晶的亮度。顯示電路如圖2-4所示:</p><p> 圖2-4 數(shù)碼管封裝圖及數(shù)據(jù)線與數(shù)碼管管腳關(guān)系</p><p><b> 路程測量部分</b></p><p> 出租車中需要一個能準(zhǔn)確獲得車輪轉(zhuǎn)動即路量信號的裝置,以得到標(biāo)準(zhǔn)的脈沖信號
30、送入單片機(jī)的定時/ 計數(shù)器T1 即P3. 5 引腳,利用單片機(jī)的T1 的計數(shù)功能完成100 次的計數(shù)后產(chǎn)生一中斷來完成路程的測量。(設(shè)車輪周長為1 m ,則霍爾傳感器每產(chǎn)生100 個脈沖便表示車已行程0. 1 km ,根據(jù)際情況在程序中進(jìn)行設(shè)置) 。汽車聯(lián)軸器按圓周間隔嵌入磁鋼,用霍傳感器集成芯片A44E 測并輸出脈沖,其工作原理如圖4 所示,霍爾傳感器集成芯片A44E 有信號轉(zhuǎn)換、電壓放大、等功能,為增加其抗干擾的能力,經(jīng)過74L S
31、14 對信號整形后再通過光偶送入P3. 5 引腳。</p><p> 圖2-5路程測量電路</p><p> 單片機(jī)各引腳功能說明</p><p> AT89S52電路圖如圖2-6所示: </p><p> VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8T
32、TL門流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行 圖2-6</p><p> 校驗時,P0輸出原碼,此時P0外部必須被拉高。
33、 圖2-6 AT89S52 </p><p> P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。 </p><p> P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 &l
34、t;/p><p> P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,
35、P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。</p><p> P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89S52的一些特殊功能口,P3口同時為閃爍編程和編程校驗接收一
36、些控制信號。</p><p> RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機(jī)器周期的高電平時間。</p><p> ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注
37、意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p> /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不
38、出現(xiàn)。</p><p> /EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。</p
39、><p> XTAL2:來自反向振蕩器的輸出。</p><p><b> 1602液晶的簡介</b></p><p> 字符型液晶1602主要技術(shù)參數(shù)如表2-1所示:</p><p> 表2-1 字符型液晶1602主要技術(shù)參數(shù)</p><p> 接口信號說明如表2-2所示:</p>
40、;<p> 表2-2 1602接口信號說明</p><p> 控制器接口說明(HD44780及兼容芯片)</p><p><b> 1、 基本操作時序</b></p><p> a 讀狀態(tài):輸入:Rs=L, Rw=H, E=H 輸出:D0—D7=狀態(tài)字</p><p> b
41、 寫指令:輸入:Rs=L, Rw=L, D0—D7=指令碼 輸出:無</p><p><b> E=高脈沖</b></p><p> C 讀數(shù)據(jù):輸入:Rs=H, Rw=L, E=H 輸出:D0—D7=數(shù)據(jù)</p><p> d 寫數(shù)據(jù):輸入:Rs=H, Rw=L, D0—D7=數(shù)據(jù) 輸出:無</
42、p><p><b> E=高脈沖</b></p><p> 狀態(tài)字說明如表2-3所示:</p><p> 表2-3狀態(tài)字說明(a)</p><p> 表2-4 狀態(tài)字說明(b)</p><p> 注:對控制器進(jìn)行讀寫操作之前,都必須進(jìn)行讀寫檢測,確保STA7為0</p><
43、;p><b> RAM地址映射圖</b></p><p> 控制器內(nèi)部帶有80*8位的RAM緩沖區(qū),對應(yīng)關(guān)系如下圖2-5所示:</p><p> 表2-5 RAM地址映射圖LCD16字*2行</p><p> 顯示模式設(shè)置如表2-6所示:</p><p> 表2-6 顯示模式設(shè)置</p>&
44、lt;p> 顯示開關(guān)及光標(biāo)設(shè)置如表2-7所示:</p><p> 表2-7 顯示開關(guān)及光標(biāo)設(shè)置</p><p><b> 數(shù)據(jù)控制</b></p><p> 控制器內(nèi)部沒有一個數(shù)據(jù)地址指針,用戶可通過它們來訪問內(nèi)部的全部80字節(jié)RAM。</p><p> 第三章 出租車計價系統(tǒng)的軟件設(shè)計</p&g
45、t;<p><b> 單片機(jī)資源使用</b></p><p> 在本次設(shè)計中像電路鍵盤用到了P1口,其中P1.0到P1.4口作為鍵盤的輸</p><p> 入,直流電機(jī)電路的控制線用了P2口線,P3.0、P3.1、P3.2分別為led信號控制腳。顯示電路用到了P0和P2口,P0口為液晶的數(shù)據(jù)口。</p><p><b&
46、gt; 中斷子函數(shù)</b></p><p> 對于中斷程序,只要定時器計數(shù)滿就會產(chǎn)生中斷50ms中斷一次,共計20次,秒鐘加1,秒鐘計滿再分鐘加,當(dāng)分鐘加到99時全部清零。以下是中斷子函數(shù)的流程圖如圖3-1所示:</p><p> 圖3-1 中斷子程序流程圖</p><p><b> 判鍵子函數(shù)</b></p>
47、<p> 對于獨立式鍵盤判鍵,首先看有鍵按下不,如果有鍵按下則延時一會兒,在判斷是否真的有鍵按下,如果確實有鍵按下,在判鍵釋放,最后執(zhí)行鍵功能程序。判鍵子函數(shù)的流程框圖如圖3-2所示: </p><p> 圖3-2判鍵子程序流程圖</p><p><b> 顯示子程序</b></p><p> 1602液晶是字符
48、型液晶,它的內(nèi)部自帶字符庫,它可以寫兩行的字符,同時每行可以寫40個字符,在寫顯示程序的時候,我們先寫命令,再設(shè)定字符顯示,最后寫數(shù)據(jù),在每寫一次命令或數(shù)據(jù)都需要判斷液晶是否忙。液晶顯示程序流程圖如圖3-3所示:</p><p> 圖3-3 顯示子程序流程圖</p><p> 圖3-3 液晶顯示程序流程圖</p><p><b> 總程序流程框圖&l
49、t;/b></p><p> 圖3-4整體程序流程圖</p><p> 第四章proteus的簡介</p><p><b> Proteus介紹</b></p><p> Proteus軟件是來自英國Labcenter electronics公司的EDA工具軟件,它組合了高級原理布圖、混合模式SPICE仿真
50、,PCB設(shè)計以及自動布線來實現(xiàn)一個完整的電子設(shè)計系統(tǒng)。此系統(tǒng)受益于15年來的持續(xù)開發(fā),被《電子世界》在其對PCB設(shè)計系統(tǒng)的比較文章中評為最好產(chǎn)品—“The Route to PCB CAD”。Proteus 產(chǎn)品系列也包含了我們革命性的VSM技術(shù),用戶可以對基于微控制器的設(shè)計連同所有的周圍電子器件一起仿真。用戶甚至可以實時采用諸如LED/LCD、鍵盤、RS232終端等動態(tài)外設(shè)模型來對設(shè)計進(jìn)行交互仿真。 其功能模塊:—個易用而又功
51、能強(qiáng)大的ISIS原理布圖工具;PROSPICE混合模型SPICE仿真;ARES PCB設(shè)計。PROSPICE 仿真器的一個擴(kuò)展PROTEUS VSM:便于包括所有相關(guān)的器件的基于微處理器設(shè)計的協(xié)同仿真。此外,還可以結(jié)合微控制器軟件使用動態(tài)的鍵盤,開關(guān),按鈕,LEDs甚至LCD顯示CPU模型。支持許多通用的微控制器,如PIC,AVR,HC11以及8051。最新支持ARM。交互的裝置模型包括:LED和LCD顯示,RS232終</p&g
52、t;<p> 第五章 設(shè)計體會與小結(jié) </p><p> 出租車計費器系統(tǒng)的設(shè)計已經(jīng)全部完成,能按預(yù)期的效果進(jìn)行模擬汽車啟動,停止,暫停等功能并能夠通過LCD顯示車費數(shù)目。本款出租車計價器包括單價輸出、單價調(diào)整、顯示當(dāng)前的系統(tǒng)時間等功能。另外,多功能出租車計價器還具有性能可靠、電路簡單、成本低、實用性強(qiáng)等特點,加上經(jīng)過優(yōu)化的程序,使其有很高的智能化水平。</p><p>
53、; 一個月來,經(jīng)過自己努力,基本上完成了設(shè)計要求的內(nèi)容,在系統(tǒng)可行性分析、原理圖設(shè)計等方面都作了許多實際工作,取得了一些成績,同時也遇到了一些問題,存在一些不足。經(jīng)過這一個月的學(xué)習(xí),我覺得自己不論是在理論知識方面還是在動手能力方面都有了不小的進(jìn)步,自己從中受益匪淺。這次設(shè)計很好的把以前學(xué)到的理論知識應(yīng)用于實踐,使我認(rèn)識到理論知識與實踐之間有一定的差距,只有通過不斷的努力學(xué)習(xí)和實踐才能很好的把理論知識應(yīng)用到實踐當(dāng)中,也只有通過不斷的實踐
54、才能對理論知識的理解。</p><p> 通過這次設(shè)計不僅學(xué)會了如何去查找相關(guān)資料,更重要的是通過查找資料和翻閱書籍學(xué)到了不少知識,擴(kuò)大了知識面,提高了知識水平。經(jīng)過單元設(shè)計和系統(tǒng)設(shè)計鞏固了以前所學(xué)的專業(yè)知識,自己真正認(rèn)識到理論聯(lián)系實際的重要性,為以后的學(xué)習(xí)和工作提供了很多有價值的經(jīng)驗。通過這次設(shè)計不僅增強(qiáng)了自己的動腦能力和動手能力,也提高了我思考問題、分析問題、解決問題的能力,更重要的是學(xué)會用工程化的思想來解
55、決問題。這在以前的學(xué)習(xí)過程中是不曾學(xué)到的。</p><p> 這次設(shè)計是我認(rèn)真認(rèn)識到完整、嚴(yán)謹(jǐn)、科學(xué)分析問題、解決問題的思想是多么的重要,只有擁有了科學(xué)的態(tài)度才能設(shè)計出有用的產(chǎn)品。另外通過本次設(shè)計,是我認(rèn)識到自己理論知識的應(yīng)用能力有很大的欠缺,需要在以后的學(xué)習(xí)中進(jìn)一步提高。</p><p><b> 參考文獻(xiàn)</b></p><p> 李
56、廣弟,朱月秀,冷祖祁.單片機(jī)基礎(chǔ)[M].第3版.北京航空航天大學(xué)出版社,2007</p><p> 李華.MCS-51系列單片機(jī)實用接口技術(shù)[M].北京航空航天大學(xué)出版社,1996</p><p> 李群芳,肖看.單片機(jī)原理接口與應(yīng)用.北京:清華大學(xué)出版社,2005</p><p> 朱承高.電工及電子技術(shù)手冊[M].北京:高等教育出版社,1990</p
57、><p> 高峰.單片微型應(yīng)用系統(tǒng)設(shè)計及實用技術(shù).北京:機(jī)械工業(yè)出版社,2004</p><p> 胡輝,單片機(jī)原理及應(yīng)用設(shè)計—21世紀(jì)高等院校規(guī)劃教材[M],水利水電出版社,2005.7</p><p> 劉守義,單片機(jī)應(yīng)用技術(shù)[M],西安:西安電子科技大學(xué)出版社,1996</p><p><b> 附 錄 </b&g
58、t;</p><p><b> 一.源程序</b></p><p> #include<reg52.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int </p><p> sbi
59、t rw=P2^1;//讀或?qū)?lt;/p><p> sbit rs=P2^0;//</p><p> sbit en=P2^2;//讀寫時能控制端</p><p> sbit b=P0^7;//液晶判斷忙標(biāo)志位</p><p> void lcd_init();//</p><p> void wr_com(u
60、char command);//液晶寫命令</p><p> void wr_data(uchar data0);//寫數(shù)據(jù)</p><p> void lcd_clear();//液晶清屏</p><p> void lcd_set();//設(shè)置液晶的起始位置</p><p> void busy();//液晶判忙函數(shù)</p&
61、gt;<p> void display();//顯示</p><p> void printstring(uchar *s);//直接寫字符</p><p> void display1();</p><p> void key1();</p><p> sbit K=P1^0;</p><p&g
62、t; sbit K1=P1^1;</p><p> sbit K2=P1^2;</p><p> sbit K3=P1^3;</p><p> sbit K4=P1^4;</p><p> sbit g=P2^7;</p><p> sbit aa=P2^3;</p><p> s
63、bit bb=P2^4;</p><p> sbit cc=P2^5;</p><p> sbit led_run=P3^0;</p><p> sbit led_await=P3^1;</p><p> sbit led_stop=P3^2;</p><p> bit f_start;//開始標(biāo)志位<
64、/p><p> bit jump_in;//跳入開始標(biāo)志位</p><p> bit jump_out;//跳出標(biāo)志位</p><p> void key();</p><p> uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x70};//字符
65、1,2,3,,,,,0</p><p> uchar dispbuf[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};</p><p> uchar dispbuf1[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};</p><p> uchar v,v1;//按鍵次數(shù)累加變量</p><p>&
66、lt;b> uchar i;</b></p><p> void init();//</p><p> void chuli();//</p><p> void chuli1();//</p><p> void delay(uchar t);//</p><p> void clear
67、();//</p><p> void set(uchar x);//</p><p> void set1(uchar y);//</p><p> uchar command;//</p><p> uchar count,count1;//</p><p> uchar second,minite,se
68、cond1,minite1;//</p><p> unsigned int tt,tt1;//</p><p> unsigned char value1=50,value2=25,value3=15;//起始價,運行價,等待價</p><p> unsigned int money;//金額變量</p><p> //******
69、*************************************</p><p> void main()</p><p><b> {</b></p><p><b> init();</b></p><p> lcd_init();</p><p>&l
70、t;b> while(1)</b></p><p><b> { </b></p><p><b> key1();</b></p><p><b> chuli();</b></p><p> display();</p><p
71、> if(jump_in==1)</p><p><b> {</b></p><p> jump_in=0;</p><p> lcd_init();</p><p><b> while(1)</b></p><p><b> {</b&
72、gt;</p><p><b> key();</b></p><p><b> chuli1();</b></p><p> display1();</p><p> if(jump_out==1) </p><p><b> {</b>&l
73、t;/p><p> lcd_init();</p><p> jump_out=0;</p><p><b> clear();</b></p><p><b> break;</b></p><p><b> }</b></p>&
74、lt;p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //************************************
75、*******</p><p> void clear()//跳出下一次</p><p><b> {</b></p><p><b> TR0=0;</b></p><p><b> TR1=0;</b></p><p><b>
76、money=0;</b></p><p><b> second=0;</b></p><p> second1=0;</p><p><b> minite=0;</b></p><p> minite1=0;</p><p> value1=50;&
77、lt;/p><p> value2=25;</p><p> value3=15;</p><p> led_run=1;</p><p> led_await=1;</p><p> led_stop=1;</p><p><b> v=0;</b></p&
78、gt;<p><b> v1=0;</b></p><p> for(i=0;i<15;i++)</p><p><b> {</b></p><p> dispbuf[i]=0;</p><p> dispbuf1[i]=0;</p><p>
79、<b> }</b></p><p><b> }</b></p><p> //*******************************************</p><p> void init()//定時器初始化</p><p><b> {</b>&l
80、t;/p><p> TMOD=0x11;</p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p> TH1=(65536-50000)/256;</p><p> TL1=(65536-50000)%256;</p>
81、;<p><b> ET0=1;</b></p><p><b> ET1=1;</b></p><p><b> EA=1;</b></p><p><b> TR0=0;</b></p><p><b> TR1=0;
82、</b></p><p><b> }</b></p><p> //*******************************************</p><p> void t0_(void) interrupt 1 using 0//定時器0中斷</p><p><b> {&
83、lt;/b></p><p><b> count++;</b></p><p> if(count==20)</p><p><b> {</b></p><p><b> count=0;</b></p><p><b>
84、second++;</b></p><p> if(second==60)</p><p><b> {</b></p><p><b> second=0;</b></p><p><b> minite++;</b></p><p&g
85、t; if(minite==99)</p><p><b> {</b></p><p><b> minite=0;</b></p><p><b> }</b></p><p><b> }</b></p><p>&
86、lt;b> }</b></p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p> dispbuf1[0]=minite/10;</p><p> dispbuf1[1]=minite%10;</p><p&g
87、t; dispbuf1[2]=second/10;</p><p> dispbuf1[3]=second%10;</p><p><b> }</b></p><p> //*******************************************</p><p> void t1_(void)
88、interrupt 3 using 3//定時器1中斷</p><p><b> {</b></p><p><b> count1++;</b></p><p> if(count1==20)</p><p><b> {</b></p><p&g
89、t;<b> count1=0;</b></p><p> second1++;</p><p> if(second1==60)</p><p><b> {</b></p><p> second1=0;</p><p> minite1++;</p&g
90、t;<p> if(minite1==99)</p><p><b> {</b></p><p> minite1=0;</p><p><b> }</b></p><p><b> }</b></p><p><b&g
91、t; }</b></p><p> TH1=(65536-50000)/256;</p><p> TL1=(65536-50000)%256;</p><p> dispbuf1[4]=minite1/10;</p><p> dispbuf1[5]=minite1%10;</p><p>
92、dispbuf1[6]=second1/10;</p><p> dispbuf1[7]=second1%10;</p><p><b> }</b></p><p> //*******************************************</p><p> void lcd_init()//
93、液晶初始化</p><p><b> {</b></p><p> wr_com(0x3c);</p><p> wr_com(0x06);</p><p> wr_com(0x0c);</p><p> wr_com(0x01);</p><p><b&g
94、t; }</b></p><p> //*******************************************</p><p> void wr_com(uchar command)//液晶寫命令</p><p><b> {</b></p><p><b> busy()
95、;</b></p><p><b> rs=0;</b></p><p><b> rw=0;</b></p><p> P0=command;</p><p><b> en=1;</b></p><p><b> en
96、=0;</b></p><p><b> }</b></p><p> //*******************************************</p><p> void wr_data(uchar data0)//液晶寫數(shù)據(jù)</p><p><b> {</b&g
97、t;</p><p><b> busy();</b></p><p><b> rs=1;</b></p><p><b> rw=0;</b></p><p><b> P0=data0;</b></p><p><
98、;b> en=1;</b></p><p><b> en=0;</b></p><p><b> }</b></p><p> //*******************************************</p><p> void busy()//液晶判
99、忙</p><p><b> {</b></p><p><b> while(1)</b></p><p><b> {</b></p><p><b> en=0;</b></p><p><b> rs=0
100、;</b></p><p><b> rw=1;</b></p><p> P0=0xff; </p><p><b&g
101、t; en=1;</b></p><p> if(b!=1)break;</p><p><b> }</b></p><p><b> en=0;</b></p><p><b> }</b></p><p> //******
102、*************************************</p><p> void chuli()//數(shù)值處理</p><p><b> {</b></p><p> dispbuf[0]=value1/100%10;</p><p> dispbuf[1]=value1/10%10;<
103、/p><p> dispbuf[2]=value1%10;</p><p> dispbuf[3]=value2/100%10;</p><p> dispbuf[4]=value2/10%10;</p><p> dispbuf[5]=value2%10;</p><p> dispbuf[6]=value3/
104、100%10;</p><p> dispbuf[7]=value3/10%10;</p><p> dispbuf[8]=value3%10;</p><p><b> }</b></p><p> //*******************************************</p>
105、<p> void display()</p><p><b> {</b></p><p><b> set(0);</b></p><p> printstring("step :");</p><p> wr_data(table[dispbuf[0
106、]]);</p><p> wr_data(table[dispbuf[1]]);</p><p> printstring(".");</p><p> wr_data(table[dispbuf[2]]);</p><p><b> set(16);</b></p><
107、p> printstring("mileage :");</p><p> wr_data(table[dispbuf[3]]);</p><p> wr_data(table[dispbuf[4]]);</p><p> printstring(".");</p><p> wr_da
108、ta(table[dispbuf[5]]);</p><p><b> set1(0);</b></p><p> printstring("await :");</p><p> wr_data(table[dispbuf[6]]);</p><p> wr_data(table[dispb
109、uf[7]]);</p><p> printstring(".");</p><p> wr_data(table[dispbuf[8]]);</p><p><b> /*</b></p><p><b> set1(16);</b></p><p
110、> printstring("run : ");</p><p> wr_data(table[dispbuf1[0]]);</p><p> wr_data(table[dispbuf1[1]]);</p><p> printstring(":");</p><p> wr_data
111、(table[dispbuf1[2]]);</p><p> wr_data(table[dispbuf1[3]]);</p><p><b> */</b></p><p><b> }</b></p><p> //************************************
112、*******</p><p> void chuli1()</p><p><b> {</b></p><p> if(f_start==1)</p><p><b> {</b></p><p> tt=minite*60+second;//總時間</p
113、><p> tt1=minite1;//等待時間</p><p> money=value1+value2*0.1*tt+value3*tt1;//起始價+每公里價*時間*速度+等待價*等待時間</p><p><b> }</b></p><p> else if(f_start==0)</p>&l
114、t;p><b> {</b></p><p><b> money=0;</b></p><p><b> }</b></p><p> dispbuf1[8]=money/100%10;//</p><p> dispbuf1[9]=money/10%10;/
115、/</p><p> dispbuf1[10]=money%10;//</p><p><b> }</b></p><p> //*******************************************</p><p> void display1()</p><p>&l
116、t;b> {</b></p><p><b> set(0);</b></p><p> printstring("run: ");</p><p> wr_data(table[dispbuf1[0]]);</p><p> wr_data(table[dispbuf1[
117、1]]);</p><p> printstring(":");</p><p> wr_data(table[dispbuf1[2]]);</p><p> wr_data(table[dispbuf1[3]]);</p><p><b> set(14);</b></p>&
118、lt;p> printstring("await:");</p><p> wr_data(table[dispbuf1[4]]);</p><p> wr_data(table[dispbuf1[5]]);</p><p> printstring(":");</p><p> wr_
119、data(table[dispbuf1[6]]);</p><p> wr_data(table[dispbuf1[7]]);</p><p><b> set1(0);</b></p><p> printstring("sum is: ");</p><p> wr_data(table[
120、dispbuf1[8]]);</p><p> wr_data(table[dispbuf1[9]]);</p><p> printstring(".");</p><p> wr_data(table[dispbuf1[10]]);</p><p><b> }</b></p>
121、<p> //*******************************************</p><p> void printstring(uchar *s)//行字符函數(shù)</p><p><b> {</b></p><p><b> while(*s)</b></p>
122、<p> wr_data(*s++);</p><p><b> } </b></p><p> //*******************************************</p><p> void key()</p><p><b> { </b></p
123、><p><b> if(K3==0)</b></p><p><b> {</b></p><p> delay(50);</p><p><b> if(K3==0)</b></p><p><b> {</b></
124、p><p> while(K3==0);</p><p><b> v1++;</b></p><p> if(v1==4) v1=0;</p><p><b> }</b></p><p><b> }</b></p><p&
125、gt; switch(v1)</p><p><b> {</b></p><p> case 1:f_start=1;TR0=1;TR1=0;led_run=0;led_await=1;led_stop=1;aa=1;bb=0;cc=1;break;</p><p> case 2:TR0=0;TR1=1;led_run=1;led_
126、await=0;led_stop=1;aa=0;cc=0;break;</p><p> case 3:TR0=0;TR1=0;led_run=1;led_await=1;led_stop=0;break;</p><p><b> }</b></p><p><b> if(K4==0)</b></p>
127、<p><b> {</b></p><p> delay(50);</p><p><b> if(K4==0)</b></p><p><b> {</b></p><p> while(K4==0);</p><p> j
128、ump_out=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //*******************************************</p>&
129、lt;p> void delay(uchar t)</p><p><b> {</b></p><p> while(--t);</p><p><b> }</b></p><p> //*******************************************<
130、;/p><p> void set(uchar x)</p><p><b> {</b></p><p> command=0x80+x;</p><p> wr_com(command);</p><p><b> }</b></p><p>
131、; //*******************************************</p><p> void set1(uchar y)</p><p><b> {</b></p><p> command=0xc0+y;</p><p> wr_com(command);</p>
132、<p><b> }</b></p><p> //*******************************************</p><p> void key1()</p><p><b> {</b></p><p><b> if(K==0)<
溫馨提示
- 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ī)課程設(shè)計論文---出租車計價器
- 單片機(jī)課程設(shè)計--出租車計價器
- 單片機(jī)課程設(shè)計--出租車計價器
- 單片機(jī)課程設(shè)計---出租車計價器
- 單片機(jī)課程設(shè)計--出租車計價器
- 單片機(jī)課程設(shè)計出租車計價器
- 單片機(jī)課程設(shè)計----出租車計價器
- 單片機(jī)課程設(shè)計-出租車計價器
- 單片機(jī)課程設(shè)計--出租車計價器
- 單片機(jī)課程設(shè)計---出租車計價器設(shè)計
- 單片機(jī)課程設(shè)計--出租車計價器設(shè)計
- 基于單片機(jī)的出租車計價器設(shè)計畢業(yè)設(shè)計論文
- 基于單片機(jī)的出租車計價器設(shè)計畢業(yè)設(shè)計論文
- 畢業(yè)設(shè)計----多功能單片機(jī)出租車計價器
- 基于單片機(jī)的出租車計價器畢業(yè)設(shè)計
- 基于單片機(jī)的出租車計價器畢業(yè)設(shè)計
- 基于單片機(jī)的出租車計價器畢業(yè)設(shè)計
- 課程設(shè)計---基于51單片機(jī)的出租車計價器
- 課程設(shè)計--基于單片機(jī)的出租車計價器的設(shè)計
- 基于單片機(jī)的出租車計價器的設(shè)計(課程設(shè)計)
評論
0/150
提交評論