導航:首頁 > 操作系統 > 單片機課設方案論證

單片機課設方案論證

發布時間:2024-10-17 07:11:29

單片機 智能小車 課程設計

智能小車的設計與製作
摘要:本課題組設計製作了一款具有智能判斷功能的小車,功能強大。小車具有以下幾個功能:自動避障功能;尋跡功能(按路面的黑色軌道行駛);趨光功能(尋找前方的點光源並行駛到位);檢測路面所放置的鐵片的個數的功能;計算並顯示所走的路程和行走的時間,並可發聲發光。作品可以作為高級智能玩具,也可以作為大學生學習嵌入式控制的強有力的應用實例。
作品以兩電動機為主驅動,通過各類感測器件來採集各類信息,送入主控單元AT89S52單片機,處理數據後完成相應動作,以達到自身控制。電機驅動電路採用高電壓,高電流,四通道驅動集成晶元L293D。其中避障採用紅外線收發來完成;鐵片檢測部分採用電感式接近開關LJ18A3-8-Z/BX檢測;黑帶檢測採用紅外線接收二極體完成;趨光部分通過3路光敏二極體對光源信號的採集,再經過ADC0809轉化為數字信號送單片機處理判別方向。由控制單元處理數據後完成相應動作,實現了無人控制即可完成一系列動作,相當於簡易機器人。
關鍵字:智能控制 蔽障 紅外線收發 尋跡行駛 趨光行駛
1.總體方案論證與比較
方案一:採用各類數字電路來組成小車的控制系統,對外圍避障信號,黑帶檢測信號,鐵片檢測信號,各路趨光信號進行處理。本方案電路復雜,靈活性不高,效率低,不利於小車智能化的擴展,對各路信號處理比較困難。
方案二:採用ATM89S52單片機來作為整機的控制單元。紅外線探頭採用市面上通用的發射管與及接收頭,經過單片機調制後發射。鐵片檢測採用電感式接近開關LJ18A3-8-Z/BX檢測,黑帶採用光敏二極體對光源信號採集,再經過ADC0809轉化為數字信號送到單片機系統處理。此系統比較靈活,採用軟體方法來解決復雜的硬體電路部分,使系統硬體簡潔化,各類功能易於實現,能很好地滿足題目的要求。
比較以上兩種方案的優缺點,方案二簡潔、靈活、可擴展性好,能達到題目的設計要求,因此採用方案二來實現。方案二的基本原理如圖1所示。
圖1 智能車運行基本原理圖框圖

避障部分採用紅外線發射和接受原理。鐵片檢測採用電感式接近開關LJ18A3-8-Z/BX檢測,產生的高低電平信號經過處理後,完成相應的記錄數目,驅動蜂鳴器發聲。黑帶尋跡依靠安裝在車底部左右兩個光敏二極體對管來對地面反射光感應。尋光設計在小車前端安裝3路(左、中、右)光敏電阻對光源信號採集,模擬信號經過ADC0809轉化為數字信號送到MCU處理。記程通過在車輪上安裝小磁塊,再用霍爾管感應產生計數脈沖。記時由軟體實現,顯示採用普通七段LED。此系統比較靈活,採用軟體方法來解決復雜的硬體電路部分,使系統硬體簡潔化,各類功能易於實現
2.模塊電路設計與比較
1) 避障方案選擇
方案一:採用超聲波避障,超聲波受環境影響較大,電路復雜,而且地面對超聲波的反射,會影響系統對障礙物的判斷。
方案二:採用紅外線避障,利用單片機來產生38KHz信號對紅外線發射管進行調制發射,發射出去的紅外線遇到避障物的時候反射回來,紅外線接收管對反射回來信號進行解調,輸出TTL電平。外界對紅外信號的干擾比較小,且易於實現,價格也比較便宜,故採用方案二。
紅外線發射接受電路原理圖如圖2所示。
採用紅外線避障方法,利用一管發射另一管接收,接收管對外界紅外線的接收強弱來判斷障礙物的遠近,由於紅外線受外界可見光的影響較大,因此用250Hz的信號對38KHz的載波進行調制,這樣減少外界的一些干擾。 接收管輸出TTL電平,有利於單片機對信號的處理。採用紅外線發射與接收原理。利用單片機產生38KHz信號對紅外線發射管進行調制發射,發射距離遠近由RW調節,本設計調節為10CM左右。發射出去的紅外線遇到避障物的時候反射回來,紅外線接收管對反射回來信號進行解調,輸出TTL電平。利用單片機的中斷系統,在遇障礙物時控制電機並使小車轉彎。由於只採用了一組紅外線收發對管,在避障轉彎方向上,程序採用遇障礙物往左拐方式。如果要求小車正確判斷左轉還是右轉,需在小車側邊加多一組對管。外界對紅外信號的干擾比較小,性價比高。 。調試時主要是調制發射頻率為接收頭能接收的頻率,採用單片機程序解決。發射信號強弱的調節,由可調精密電阻調節。
圖2 紅外線發射接受電路原理圖

2)檢測鐵片方案選擇
方案一:採用電渦流原理自製的感測器,取才方便,但難以調試,輸出信號也不可靠,成功率比較低,難以准確輸出感測信息。
方案二:採用市面易購的電感式接近開關,本系統採用市面比較通用LJ18A3-8-Z/BX來完成鐵片檢測的任務。雖然電感式接近開關占的體積大,對本是可以接受,且輸出信號較可靠,穩定性好,受外界的干擾小,故採用方案二。
檢測鐵片電路原理圖如圖3所示。
圖3 檢測鐵片電路原理圖

3)聲音提示
方案一:採用單片機產生不同的頻率信號來完成聲音提示,此方案能完成聲音提示功能,給人以提示的可懂性比較差,但在一定程度上能滿足要求,而且易於實現,成本也不高,我們出自經費方面考慮,採用方案一。
方案二:採用DS1420可分段錄放音模塊,能夠給人以直觀的提示,但DS1420錄放音模塊價格比較高,也可以採用此方案來處理,但方案二性價比不如方案一。
4)黑帶檢測方案選擇
方案一:採用發光二極體發光,用光敏二極體接收。由於光敏二極體受可見光的影響較大,穩定性差。
方案二:利用紅外線發射管發射紅外線,紅外線二極體進行接收。採用紅外線發射,外面可見光對接收信號的影響較小,再用射極輸出器對信號進行隔離。本方案也易於實現,比較可靠,因此採用方案二。黑帶檢測電路圖如圖4所示。
輸出信號進入74LS02。穩定性能得到提升。當小車低部的某邊紅外線收發對管遇到黑帶時輸入電平為高電平,反之為低電平。結合中斷查詢方式,通過程序控制小車往哪個方向行走。電路中的可調電阻可調節靈敏度,以滿足小車在不同光度的環境光中能夠尋跡。由於接收對管裝在車底,發射距離的遠近較難控制,調節可調電阻,發現靈敏度總是不盡人意,最後採用在對管上套一塑料管,屏蔽外界光的影響,靈敏度大幅提升。再是轉彎的時間延遲短長控制。
圖4 黑帶檢測電路圖
3)計量路程方案
方案一:利用紅外線對射方式,在小車的車輪開一些透光孔來計量車輪轉過圈數,從而間接地測量路程。
方案二:利用霍爾元件來對轉過的車輪圈數來計程,在車輪子上裝小磁片,霍爾元件靠近磁片一次計程為車輪周長。此方案感測的信號強, 電路簡單,但精度不高。
如果想達到一定的計量精度,用霍爾感測元件比較難以實現,因為在車輪上裝一定量的小磁片會相互影響,而利用紅外線對射方式不會影響各自的脈沖,可達到厘米的精度,因此採用方案一來實現。計量路程示意圖見圖5。
通過計算車輪的轉數間接測量距離,利用了霍爾元件感應磁塊產生脈沖的原理,再對脈沖進行計數。另可採用紅外線原理提高記程精度,其方法為在車輪均勻打上透光小孔,當車輪轉動時,紅外光透射過去,不斷地輸出脈沖,通過單片機對脈沖計數,再經過一個數據的處理過程,這樣就可把小車走過的距離計算出來,小孔越多,計數越精密。
圖 5 計量路程示意圖
3)智能車驅動電路
方案一:採用分立元件組成的平衡式驅動電路,這種電路可以由單片機直接對其進行操作,但由於分立元件佔用的空間比較大,還要配上兩個繼電器,考慮到小車的空間問題,此方案不夠理想。
方案二:因為小車電機裝有減速齒輪組,考慮不需調速功能,採用市面易購的電機驅動晶元L293D,該晶元是利用TTL電平進行控制,對電機的操作方便,通過改變晶元控制端的輸入電平,即可以對電機進行正反轉操作,很方便單片機的操作,亦能滿足直流減速電機的要求。智能車驅動電路實現如圖6所示。
圖6 智能車驅動電路

小車電機為直流減速電機,帶有齒輪組,考慮不需調速功能,採用電機驅動晶元L293D。L293D是著名的SGS公司的產品。為單塊集成電路,高電壓,高電流,四通道驅動,設計用來接收DTL或者TTL邏輯電平,驅動感性負載(比如繼電器,直流和步進馬達),和開關電源晶體管。內部包含4通道邏輯驅動電路。其額定工作電流為1A,最大可達1.5A,Vss電壓最小4.5V,最大可達36V;Vs電壓最大值也是36V,經過實驗,Vs電壓應該比Vss電壓高,否則有時會出現失控現象。表1是其使能、輸入引腳和輸出引腳的邏輯關系。
表1 引腳和輸出引腳的邏輯關系

EN A(B) IN1(IN3) IN2(IN4) 電機運行情況
H H L 正轉
H L H 反轉
H 同IN2(IN4) 同IN1(IN3) 快速停止
L X X 停止
L293D可直接的對電機進行控制,無須隔離電路。通過單片機的I/O輸入改變晶元控制端的電平,即可以對電機進行正反轉,停止的操作,非常方便,亦能滿足直流減速電機的大電流要求。調試時在依照上表,用程序輸入對應的碼值,能夠實現對應的動作,調試通過。
3) 尋找光源功能
方案一:在小車前面裝上幾個光電開關,通過不同方向射來的光使光電開關工作,從而對小車行駛方向進行控制,根據光電開關特性,只有當光達到一定強度時才能夠導通,因此帶有一定的局限性。
方案二:在小車前面裝上參數一致的光敏二極體或者光敏電阻,再通過A/D轉換電路轉換成數字量送入單片機,單片機再對讀入的幾路數據進行存儲、比較,然後發出命令對外圍進操作。對方案一、二進行比較,方案二硬體稍為復雜,但能夠對不同強度的光進行採集以及比較,操作靈活,所以採用方案二。
尋找光源電路圖如圖7所示。
圖7 尋找光源電路圖
3)顯示部分
方案一:採用LCD顯示,用單片機可實現顯示數據,但顯示亮度和字體大小在演示時不盡人意,價格也比較昂貴。
方案二:採用LED七段數碼管,採用經典電路解碼和驅動,電路結構簡單,並且可以實現單片機I/O口的並用,顯示效果直觀,明亮,調試容易。故採用LED數碼管顯示。
4)顯示電路如圖8所示。
圖8 顯示電路

3. 系統原理及理論分析
1) 單片機最小系統組成
單片機系統是整個智能系統的核心部分,它對各路感測信號的採集、處理、分析及對各部分整體調整。主要是組成是:單片機AT89S52、模數轉換晶元ADC0809、小車驅動系統晶元L293D、數碼管顯示的解碼晶元74LS47、74LS138及各路的感測器件。
2)避障原理
採用紅外線避障方法,利用一管發射另一管接收,接收管對外界紅外線的接收強弱來判斷障礙物的遠近,由於紅外線受外界可見光的影響較大,因此用250Hz的信號對38KHz的載波進行調制,這樣減少外界的一些干擾。 接收管輸出TTL電平,有利於單片機對信號的處理。
3)計程原理
通過計算車輪的轉數間接測量距離,在車輪均勻打上透光小孔,當車輪轉動時,紅外光透射過去,不斷地輸出脈沖,通過單片機對脈沖計數,再經過一個數據的處理過程,這樣就可把小車走過的距離計算出來。
4)黑帶檢測原理
利用光的反射原理,當光線照射在白紙上,反射量比較大,反之,照在黑色物體上,由於黑色對光的吸收,反射回去的量比較少,這樣就可以判斷黑帶軌道的走向。由於各路感測器會對單片機產生一定的干擾,使信號發生錯誤。因此,採用一級射極輸出方式對信號進行隔離,這樣系統對信號的判斷就比較准確。
4. 系統程序設計
用單片機定時器T0產生38KHz的方波,再用定時器T1產生250Hz的方波對38KHz方波進行調制。為了提高小車反應靈敏度,對紅外線接收信號及黑帶檢測信號都採用中斷法來處理。用定時方法對鐵片檢測、計量路程、倒車、拐彎及數碼管動態掃描進行處理。
主程序流程圖見圖9,各子程序圖見圖10、圖11、圖12。
圖9 主程序流程圖
圖 10 外部中斷0服務子程序
圖 11 外部中斷1服務子程序
圖12 定時器1中斷子程序
6.調試及性能分析
整機焊接完畢,首先對硬體進行檢查聯線有無錯誤,再逐步對各模塊進行調試。首先寫入電機控制小程序,控制其正反轉,停機均正常。加入避障子程序,小車運轉正常,調整靈敏度達最佳效果。加入顯示時間子程序,顯示正常。鐵片檢測依靠接近開關,對檢測信號進行處理並實時顯示和發出聲光信息,無異常狀況。路程顯示部分是對霍爾管脈沖進行計數,為了盡量達到精確,車輪加裝小磁片。接著對黑帶檢測模塊調試,發現有時小車會跑出黑帶,經判斷是因為紅外線收發對管靈敏度不高,調整靈敏度後仍然達不到滿意效果,疑是受環境光影響,利用塑料套包圍紅外線收發後問題解決。趨光電路主要由三個光敏電阻構成,調整三個光敏電阻的角度同時測試軟體,以最佳效果完成趨光功能。
整機綜合調試,上電後對系統進行初始化,接著控制電機使小車向前行駛,突然發現系統即刻進入外部中斷1,重復多次測試,結果都是自動進入該中斷。推斷是由剛上電時電機起動所引起,為了避免上電瞬間的影響,在啟動小車後延時幾毫秒,再開外部中斷,結果問題解決。允許的話應採用雙電源供電,即電機和電路應分開供電,L293D與單片機之間採用隔離信號控制。這樣就不會出現小車啟動時程序出錯和數碼管顯示閃動的問題。在計程精度上,可用紅外線原理獲得較高精度。
7.結論
通過各種方案的討論及嘗試,再經過多次的整體軟硬體結合調試,不斷地對系統進行優化,智能小車能夠完成各項功能到達車庫。
8.參考文獻
《單片機應用技術》
《周立功單片機》
《單片機原理與應用》
《8051單片機程序設計與實例》
《MCS-51單片機實驗指導》

② 基於51單片機的數字電壓表總結與體會

通過與同學的討論與認真計算設計分析所完成的,課程設計的任務是設計、組裝並調試一個數字電壓表測量系統。需要我們綜合運用單片機等課程的知識,通過查閱資料、方案論證與選定;設計和選取電路和元器件;分析指標及討論,完成設計任務。
在這次課程設計中,我學會了怎樣去根據課題的要求去設計電路和調試電路。動手能力得到很大的提高。從中我發現自己並不能很好的熟練去使用我所學到的高頻電路知識。在以後學習中我要加強對使用電路的設計和選用能力。但由於電路比較簡單、定型,而不是真實的生產、科研任務,所以我們基本上能有章可循,完成起來並不困難。把過去熟悉的定型分析、定量計算逐步,元器件選擇等手段結合起來,掌握工程設計的步驟和方法,了解科學實驗的程序和實施方法。這對今後從事技術工作無疑是個很好的訓練。通過這種綜合訓練,我們可以掌握電路設計的基本方法,提高動手組織實驗的基本技能,培養分析解決電路問題的實際本領,為以後畢業設計和從事電子實驗實際工作打下基礎。
還有就是每次在組團做試驗都會感覺特別的充實,我們可以按照自己設計的電路去完成,老師也不是死板的要求我們怎麼怎麼,而是給了我們盡可能大的自己決定的餘地,這次的元器件都是按照我們設計出來的電路參數給定的,而且每位老師都很耐心的為我們解決試驗中所出現的問題,最後真心的感謝老師對我們課程設計的建議和幫助,我們才得以圓滿的完成這次課程設計!

③ 單片機的畢業論文怎麼寫

一、畢業設計題目及要求 (2個) 1、基於單片機控制的電動機Y-△啟動的設計 要求:1)控制器為單片機,電動機為三相非同步電動機;2)啟動時間為3秒;3)由按鍵設置電動機Y-△運行、停止。 2、基於單片機控制的可調直流穩壓電源的設計 要求:1)控制器為單片機,電壓輸出范圍為0-10V,電壓精度為0.1V;2)通過數碼管顯示電壓值;3)由按鍵設置電壓值。 二、畢業設計用到的主要軟體(及功能) 畢業設計用到的主要軟體(及功能):Keil 51(源程序編譯),Proteus(電路模擬),AutoCAD(繪圖), Visio(繪流程圖), Protel 99SE(原理圖電路設計,PCB板製作) 三、單片機方面畢業設計要求 1、學會編寫程序(用C語言或匯編語言),用Keil 51軟體對源程序進行編譯。 2、學會用Proteus電路模擬軟體對所設計的硬體電路進行模擬。 3、在寫畢業論文時,學會用Word、AutoCAD, Visio,Protel 99SE等軟體對程序流程圖、電路原理圖等進行繪制。 相關答案 ↓位朋友,以51單片機為例。51現在很多都是用模擬器來進行在線調試的,而每個公司的模擬器都會有自帶的編程軟體,當然,跟keil是差不了多少的。 步驟大體如下: 1.新建,進行程序的編寫 2.連上模擬器或燒寫器,這一步有可能要對模擬器或燒寫器進行設置,具體可看它們的使用說明 3.對程序進行編譯,這一步會自動檢測你的程序有沒錯,如果有錯,是不能進入下一步的.如果你用的是模擬器,這一步編譯成功後就可以直接運行進行在線調試了。 4.如果用的是燒寫器,那就進行燒寫 各個軟體和調試方法會有些不同,但大體就是這樣,一些調試工具的說明書也有很詳細的說明。 學參數測量技術涉及范圍廣,特別是微電壓、微電流、高電壓以及待測信號強弱相差極大的情況下,既要保證弱信號的測量精度又要兼顧強信號的測量范圍,在技術上有一定的難度。傳統的低成本儀表在測量電壓、電阻時都採用手動選擇檔位的方法來轉換量程。在使用中,當忘記轉換檔位時,會造成儀表測量精度下降或損壞。 現代電子測量對系統的精度要求越來越高且智能化程度也越來越高。全量程無檔自動量程轉換電壓表和電阻表是在保證測量精度不下降的前提條件下省去手動轉換量程的工作,得到了廣泛應用。 本文介紹了一種基於AT89S52 單片機 的智能多用表。該表能在單片機的控制下完成直流電壓、電阻和直流電流的測量。測量電流部分採用了簡單的I/V轉換電路完成測試;測量電壓部分結合模擬開關CD4051和運算放大器OP07構成程式控制放大器,實現了自動量程轉換;測量電阻部分也由模擬開關CD4051和運算放大器OP07相結合,在單片機控制下完成了自動量程轉換。電流、電壓和電阻的最終測量信號都在單片機的控制下由12位A/D轉換器TLC2543進行採集,採集的信號經單片機數據處理後通過LCD(12864)顯示出來,測量結果還可以由帶有串列EEPROM的CPU存儲器和監控器的X25045進行多個數據保存。 關鍵詞:TLC2543 自動量程轉換 程式控制增益放大器 電壓 電阻 電流 目錄 摘要1 Abstract 2 第一章 緒論 5 1. 1 概述 5 1. 2 智能儀器/儀表國內外發展概況 5 1. 3 課題研究目的及意義 6 第二章 系統結構及功能介紹 8 2. 1 系統功能和性能指標 8 2. 1. 1 儀表功能 8 2. 1. 2 性能指標 8 2. 1. 3 本機特色 8 2. 1. 4 系統使用說明 9 2. 2 系統工作原理概述 9 第三章 方案設計與論證 11 3. 1 量程選擇的設計與論證 11

④ 基於單片機設計的直流電機調速系統文獻綜述怎麼寫

單片機控制的直流電機調速系統 摘要:本文採用AT89C52作為主控晶元,設計了一種直流電機高速系統。AT89C52產生單極性工作制的定頻PWM脈沖,配合驅動能力強大的L298,從而實現控制和調整直流電機轉速和轉向的功能。利用軟體編程,能夠設置多個占空比不同的脈沖,使得電機轉速可以逐步增大或減小,同時在LCD上顯示電機的工作狀態,易於觀察和識別。本設計主要由電機調速控制模塊和LCD顯示模塊組成,具有電路簡單,可靠性高,運行穩定的特點,是對於小型直流電機調速裝置的一種探究。 關鍵詞:AT89C52 定頻PWM LCD 直流電機 目 錄 1 緒論... 1 2 方案設計... 1 2.1 功能要求... 1 2.2 方案論證... 1 3 系統硬體的設計... 3 3.1 電機調速控制模塊... 3 3.2 LCD顯示模塊... 6 3.3 硬體設計總原理圖... 11 4 系統軟體的設計... 12 4.1 主程序... 12 5 調試及性能分析... 14 5.1 調試與測試... 14 6 結論... 15 7 致謝... 15 參考文獻... 17 附錄... 18

⑤ 51單片機關於密碼鎖的畢業設計,論文

程序設計內容

(1). 密碼的設定,在此程序中密碼是固定在程序存儲器ROM中,假設預設的密碼為「12345」共5位密碼。

(2). 密碼的輸入問題:由於採用兩個按鍵來完成密碼的輸入,那麼其中一個按鍵為功能鍵,另一個按鍵為數字鍵。在輸入過程中,首先輸入密碼的長度,接著根據密碼的長度輸入密碼的位數,直到所有長度的密碼都已經輸入完畢;或者輸入確認功能鍵之後,才能完成密碼的輸入過程。進入密碼的判斷比較處理狀態並給出相應的處理過程。

(3).按鍵禁止功能:初始化時,是允許按鍵輸入密碼,當有按鍵按下並開始進入按鍵識別狀態時,按鍵禁止功能被激活,但啟動的狀態在3次密碼輸入不正確的情況下發生的。

C語言源程序

#includeunsignedcharcodeps[]={1,2,3,4,5};

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,                              

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsignedcharpslen=9;unsignedchartemplen;

unsignedchardigit;unsignedcharfuncount;

unsignedchardigitcount;

unsignedcharpsbuf[9];

bitcmpflag;

bithibitflag;

biterrorflag;

bitrightflag;

unsignedintsecond3;

unsignedintaa;

unsignedintbb;

bitalarmflag;

bitexchangeflag;

unsignedintcc;

unsignedintdd;

bitokflag;

unsignedcharoka;

unsignedcharokb;

voidmain(void)

{ 

unsignedchari,j; 

P2=dispcode[digitcount]; 

TMOD=0x01; 

TH0=(65536-500)/256; 

TL0=(65536-500)%6; 

TR0=1; 

ET0=1; 

EA=1; 

while(1)  

 {     

if(cmpflag==0)       

{         

if(P3_6==0)//functionkey          

 {             

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

for(j=248;j>0;j--);     

        if(P3_6==0)               

{               

  if(hibitflag==0)      

             {    

                 funcount++; 

                    if(funcount==pslen+2)

                       { 

                        funcount=0;

                         cmpflag=1;

                        }

                      P1=dispcode[funcount];

                   }

                   else

                     {

                        second3=0;

                     } 

                while(P3_6==0);

               }

           }

         if(P3_7==0)//digitkey

           {

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

             for(j=248;j>0;j--);

             if(P3_7==0)

               {

                 if(hibitflag==0)

                   {

                     digitcount++; 

                 if(digitcount==10)

                       {

                         digitcount=0;

                       }

                     P2=dispcode[digitcount];

                     if(funcount==1)

                       {

                         pslen=digitcount;                         

templen=pslen;

                       }

                       elseif(funcount>1)

                         { 

                          psbuf[funcount-2]=digitcount;

                         }

                   }

                   else

                     {

                       second3=0;

                     }

                 while(P3_7==0);

               }

           }

       } 

      else

         {

           cmpflag=0;

           for(i=0;i

             { 

              if(ps[i]!=psbuf[i])

                 {

                   hibitflag=1;

                   i=pslen;

                   errorflag=1;

                   rightflag=0;

                   cmpflag=0;

                   second3=0;

                   gotoa; 

                }

             }  

         cc=0; 

          errorflag=0; 

          rightflag=1;

           hibitflag=0;

a:   cmpflag=0;

         }

}

}

voidt0(void)

interrupt1using0{ TH0=(65536-500)/256; 

TL0=(65536-500)%6; 

if((errorflag==1)&&(rightflag==0)) 

{

     bb++;

     if(bb==800)

       {

         bb=0;

         alarmflag=~alarmflag;

       }

     if(alarmflag==1)

       {

         P0_0=~P0_0;

       }

     aa++;

     if(aa==800)

       {

         aa=0;

         P0_1=~P0_1;

       }

     second3++;

     if(second3==6400)

       {

         second3=0;

         hibitflag=0;

         errorflag=0;

         rightflag=0;

         cmpflag=0;

         P0_1=1; 

        alarmflag=0;

         bb=0; 

        aa=0; 

      }

   }

 if((errorflag==0)&&(rightflag==1))

   {

     P0_1=0;

     cc++;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(cc<1000)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=1;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elseif(cc<2000)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errorflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rightflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hibitflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmpflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_1=1;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc=0;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=0;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=1;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(okflag==1)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka++;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(oka==2)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=~P0_0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb++;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(okb==3)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=~P0_0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;}

}

⑥ 51單片機四路搶答器畢業論文 只要四路

第一章 緒論設計的四路數字搶答器,每路設計一搶答按鈕供選手使 用,並設置一個系統清除和搶答控制總開關 S,該開關由主持 人控制。 搶答器具有限時搶答功能,每一輪的限時搶答時間設定為 30 秒。主持人啟動"開始"鍵後,在設定的時間內,參賽選手 進行搶答有效,否則無效。 搶答器具有鎖存與顯示功能。選手搶答成功則顯示相應 的編號,此時其他選手無法搶答。優先搶答選手的編號一直 保持到主持人將系統清除為止。用計時器數碼管顯示當前剩 余的答題時間, 當答題剩餘時間為 5 秒時,小燈閃爍提示;當答題時間結束 時,蜂鳴器發出響聲,提示答題者答題時間到。 本課題我們主要採用單片機電路來實現的,主要設計思 路是:在主持人下達命令之後,若選手在 30s 內沒有閉合開 關,就進入下一環節;若有選手閉合開關,主機就能夠准確 判斷出第一搶答信號並將其鎖存,同時將其餘輸入信號封鎖, 使其它搶答無效,此時主持人根據屏幕上顯示的號碼判斷是 哪位選手可以做答,此時最先閉合開關的選手開始進入答題 倒計時,若在 60s 內答題則視為有效;否則無效。 程序流程圖如圖 1-1.1-2 所示: 選手發送圖: 開始 初始化:P0.P2 口清零 定時器 T1 方式選擇;串列口發送方式選 擇;啟動定時器 1 並裝入初值 判斷搶答是否成功 向主機發送選手號 顯示答題倒計時 圖 1-1 主持人接受圖:開始 初始化: P0.P1.P2.口清零, 串列口接受方式選擇,T1 接收方 式選擇,啟動計數器 T1,並裝入初值,開總中斷和串列口 中斷 總開關是否按下 允許接收,並顯示搶答時間倒計時 是否接受到搶答信號 顯示優先按下鍵的選手號碼, 並屏蔽其他選手 號碼 圖 1-2 系統方案論證 第二章 系統方案論證方案一:如圖 2-1,採用一個單片機,一個計時器,一個 數碼管,選手通過按下開關作為輸入信號,完成搶答輸入信 號的觸發。主持人根據選手的輸入信號准確判斷出最先按下 開關的選手,並屏蔽其他搶答信號,讓優先按鍵的選手開始 作答,同時計時器開始計時倒計時。電路主要運用了定時器 和計數器,該電路的優點是電路圖比較簡單,缺點是抗干擾 能力差,缺乏實際利用價值。 圖 2-1 方案二:採用五個單片機,五個計時器,一個數碼管, 電路主要運用串列口中斷和定時器計數器的工作原理。接通 電源後, 主持人將開關撥到"清零"狀態, 搶答器處於禁止狀態, 編號顯示器滅燈,主持人將開關置開始"狀態,宣布"開始"搶 答器工作,開始搶答時間倒計時,如果在搶答時間倒計時內 無人搶答,則直接進入下一環節,若有人在這時間內優先搶 答,則其開始作答,與此同時搶答倒計時,改換成作答倒計 時,當倒計時到 5s 時,信號燈閃爍提醒作答選手,當計時結 束時,蜂鳴器發出報警聲響提示選手。選手搶答實行優先鎖 存,優先搶答,選手的編號一直保持到裁判將系統清零為止。 該電路的缺點是電路復雜,優點是便於每位選手觀看倒計時, 實用性較好,在實際生活中應用較多。 通過以上兩個方案的比較,我們不難發現第二個電路增 加了一些控制電路,控制起來比較容易一些,效果和實用性 比第一個好,故本實驗採用第二個原理圖。 系統圖各位選手通過按鍵發送請求信號告知主持人,主持人通 過數碼管上號碼告訴哪位選手可以答題,如圖 2-2 1號 4號 主 持 人 2號 3號 圖 2-2 第三章 理論分析本課題的電路採用單片機 AT89C51 作為控制晶元, 分別是 主持人和每位參賽選手都有自己的控制器。每位選手的控制 晶元 P0 和 P2 口上都接一個共陰極的數碼管作為答題倒計時 的顯示。P1^4 口接一按鍵,按鍵的另一端接地,供選手搶答 使用。 P1^6 接音頻放大電路, 並在其輸出端接一個喇叭,作 為答題剩餘時間提醒。當選手按下按鍵搶答成功時,它就會 通過控制晶元上的串列口發送自己的選手號,同時也啟動了 答題倒計時,當答題時間只剩下 5 秒時,喇叭就會發出「叮 咚」提醒選手抓緊時間答題。 主持人的控制晶元的 P0 . P1 和 P2 口都接一共陰極的數碼 管,其中 P1 口的數碼管用來顯示搶答成功選手的號碼。P1 和 P2 口的數碼管開始時用來顯示允許搶答的時間限制,當有 選手搶答成功時,就轉為顯示搶答時間倒計時。P3^7 接開關 和指示燈,當開關按下指示燈亮時才允許選手們進行搶答。當 有一號選手搶答成功,則通過軟體關閉串列口中斷屏蔽其他 的選手。 選手向主持人發送自己的選手號碼是採用串列口單工通 訊的原理。 每個控制晶元內部都有一個功能強大的全雙工的 非同步通信串列口, 其內部有兩個物理上獨立的接收. 發送緩沖 期 SBUF,可同時發送. 接收數據。每次串列口的使用,串列 口需初始化後, 才能完成數據的輸入、輸出。其初始化過程如 下: (1) 按選定串列口的操作模式設定 SCON 的 SM0、SM1 兩 位二進制編碼。(2) 對於操作模式 2 或 3, 應根據需要在 TB8 中寫入待發送的第 9 位數據。(3) 若選定的操作模式不 是模式 0, 還需設定接收/發送的波特率。設定 SMOD 的狀態, 以控制波特率是否加倍。 若選定操作模式 1 或 3, 則應對定 時器 T1 進行初始化以設定其溢出率。 這些初始化須通過軟體 編程來實現。 本設計採用的是模式 2--9 位數據非同步通訊方式。 其工作原理為: (1).一幀為 11 位:9 位數據位,1 個起始位(0),1 個停 止位(1)。第 9 位數據位在 TB8/RB8 中,常用作校驗位和多機 通訊標識位(2).RXD:接收數據端,TXD:發送數據端。(3). 波特率: 方式 2:B=(2SMOD/64)×fosc ,本設計用定時器 1 來產生。(4).發送:先裝入 TB8,寫入 SBUF 並啟動發送, 發送結束,TI=1。接收:REN=1,允許接收。接收完一幀,若 RI=0 且第 9 位為 1 (或 SM2=0),將接收數據裝入接收 SBUF, 第 9 位裝入 RB8,使 RI=1;否則丟棄接收數據,不置位 RI。 原理圖如下: 圖3 試驗及數據分析 第四章 試驗及數據分析 1. 實驗環境在實驗室里用 proteus 模擬,用 keil 編程,最後得到模擬 結果。 2. 數據(1)主機工作 ) 主持人閉和開關後,數碼管顯示零,計時器顯示搶答倒 計時,從 30s 開始倒計時。如圖 4-2-1: 圖 4-2-1 (2)選手一搶答 ) 在搶答倒計時時間內,選手一閉合開關,主機數碼管上 顯示」1」,選手一旁邊的發光二極體亮,與此同時,主持人和選 手一的計時器開始顯示答題倒計時,時間在 60s 內,如圖 4-2-2: 圖 4-2-2 (3)選手二搶答 ) 在搶答倒計時時間內,選手二閉合開關,主機數碼管上 顯示」2」,選手二旁邊的發光二極體亮,與此同時,主持人和選 手二的計時器開始顯示答題倒計時,時間在 60s 內,如圖 4-2-3: 圖 4-2-3 (4)選手三搶答 ) 在搶答倒計時時間內,選手三閉合開關,主機數碼管上 顯示」3」,選手三旁邊的發光二極體亮,與此同時,主持人和選 手三的計時器開始顯示答題倒計時,時間在 60s 內,如圖 4-2-4: 圖 4-2-4 (5)選手四搶答 ) 在搶答倒計時時間內,選手四閉合開關,主機數碼管上 顯示」4」,選手四旁邊的發光二極體亮,與此同時,主持人和選 手四的計時器開始顯示答題倒計時,時間在 60s 內,如圖 4-2-5: 圖 4-2-5 3. 分析搶答器由單片機以及外圍電路組成,由於採用單片機, 使得外圍電路非常簡單,有如下功能搶答限時、選手答題計 時搶答自鎖,燈光指示、暫停復位、電子音樂報聲;搶答規 定時限 0-30 秒可調; 面板上設有組號與計時窗口, 顯示清晰, 同步顯示,互不幹擾集搶答器、數顯倒計時器於一機; 可設 定搶答、答題兩種倒計時時間;搶答器具有鎖存與顯示功能。 即選手按動按鈕, 鎖存相應的編號, 並在 LED 數碼管上顯示; 搶答器具有定時搶答功能,且一次搶答的時間由主持人設定, 本次時間設定為 30 秒,當主持人啟動"開始"鍵後,定時器進 行減計時等等,總之搶答器很有實用價值。 第五章 心得體會今年參加了全國大學生電子設計大賽培訓,培訓過程中 的艱辛只有親身經歷過才知道裡面的酸甜苦辣,我相信這段 時間會給我們留下美好的回憶。在經歷了艱苦的培訓之後, 我們組只有一個信念,就是無論如何也要盡我們最大的努力, 讓老師選上我們,只有選上了,我們的夢想才真的開始了, 否則前面的付出就付諸東流了。 我們做的是搶答器。我們本來很快就有思路了,但給老 師一看的時候,他說太沒難度了,會影響我們的選拔分,沒 辦法,我們只好把難度往上提了,這一提難度我們可就連續 整了 3 天,在這 3 天我們除下吃飯和睡覺的時間不在外,其 余時間通通泡在實驗室內,最終通過我們的集體努力,我們 的實驗也算有所成果吧。 通過參加這次培訓,發現有了很多的體會和收獲:首先 是學習能力的加強。這種學習能力包括獲取資料的能力、理 解前人思路的能力、系統設計能力、動手能力、分析排除故 障能力、表達能力等多方面,電子設計競賽的賽制就決定了 上述能力缺一不可。其次是團隊精神的培養。電子設計競賽 要求三人組隊參賽,集體計算成績,這就使得三個人必須互 相信任、互相配合、分工合作。在順境時要相互提醒保持冷 靜,逆境時要相互鼓勵共度難關,不能相互埋怨。 我們組永遠忘不了這次經歷,永遠忘不了和我們一起奮 斗的老師和學哥,我們永遠堅信我們組是最棒的! 參 考 文 獻 [1] 余發山, 單片機原理及應用技術 ,中國礦業大學出版社, 2003; [2]王衛東,基於單片機的最簡連線搶答器的設計與製作,1999; [3]李朝青.2001.單片機原理與介面技術.北京:北京航空航天 大學出版社.94-103,339-348; [4] 沈慶陽、郭庭吉 版社; [5]李朝青主編,《單片機原理與介面技術》,北京航天航空大學 出版社,1994; [6]何立民主編,《單片機應用與設計》,北京航天航空大學出版 社,1990; 8051 單片機實踐與應用 清華大學出

電子科協競賽項目報告書 參賽作品: 單片機的 參賽作品:基於 51 單片機的四路電子搶答器 作品 小 組 成 員: TH XZ 專 業 班 級: 電信 1005 班 報告提交日期: 2011 報告提交日期: 2011 年 3 月 16 日 日期 目錄 1 設計要求與功能 ........................................................................................................... 4 1.1 設計基本要求…………………………………………………………………...4 2 硬體設計 ...................................................................................................................... 4 2.1 控制系統及所需元件…………………………………………………………. 4 2.2 搶答器顯示模塊………………………………………………………………...5 2.3 電源方案的選擇 ............................................................................................... 6 2.4 搶答器鍵盤的選擇 ........................................................................................... 6 2.5 蜂鳴器模塊 ........................................................................................................ 7 2.6 外部振盪電路 .................................................................................................... 7 3 程序設計 ...................................................................................................................... 7 3.1 程序流程圖 ........................................................................................................ 7 3.2 系統的調試…… ………………………………….. …………………………9 3.3 焊接的問題及解決……………………………………………………… …10 4 總結 ............................................................................................................................. 10 附錄 C 程序 ................................................................................................................... 11 II 一設計要求與功能 1.1 設計基本要求(1)搶答器同時供 4 名選手或 4 個代表隊比賽使用,分別用 4 個按鈕 K1~ K4 表示。 (2)設置裁判開關 k5 和清零開關 k6,該開關由主持人控制,當主持人按 下 k6,系統復位,預備搶答,當主持人按下總控制控制開關 k5,開始搶答; (3) 搶答器具有定時搶答功能, 搶答時間為倒計時 15 秒。 當主持人啟動 「開 始」鍵後,定時器進行減計時,同時揚聲器發出短暫的提示聲響,聲響持續的時 間 0.5 秒左右,當計時小於 5 秒後,每減少一秒,便報警一次以提示選手。 (4)搶答器具有鎖存功能,參賽選手在設定的時間內進行搶答,搶答有效, 蜂鳴器發聲,計時停止,數碼管上顯示選手的編號和時間,選手相應的信號燈被 點亮,其他選手再搶答時無效。 (5)如果定時時間已到,無人搶答,本次搶答無效,系統報警並禁止搶答。 等待下一輪搶答。 。 二 硬體設計 2.1 控制系統及所需元件控制系統主要由單片機應用電路、存儲器介面電路、顯示介面電路組成。其 中單片機 STC89C52 是系統工作的核心,它主要負責控制各個部分協調工作。 所需元件:該系統的核心器件是 STC89C52。各口功能: P0.0-P0.3 是數碼管的位選口; P2.0-P2.7 是數碼管的段選口,為其傳送段選信號; P1.0-P1.3 是 4 組搶答信號的輸入口; P1.4、P1.5 由裁判控制,分別是搶答開始\復位功能鍵; P1.6 為蜂鳴器的控制口; P3.4-P3.7 為選手信號燈輸出口; 在其外圍接上電復位電路、數碼管電路、LED 發光二極體、按鍵電路及揚聲 器電路。 電子搶答器用單片機來設計製作完成的, 由於其功能的實現主要是通過軟體 3 編程來完成的,所以採用單片機 STC89C52,它是一個低電壓,高性能 CMOS 8 位 單片機,片內含 8k bytes 的可反復擦寫的 Flash 只讀程序存儲器和 512 bytes 的隨機存取數據存儲器(RAM) ,器件採用 ATMEL 公司的高密度、非易失性存儲技 術生產,兼容標准 MCS-51 指令系統,片內置通用 8 位中央處理器和 Flash 存儲 單元,功能強大的 STC89C52 單片機可為您提供許多較復雜系統控制應用場合。 下圖為其 I/O 口引腳圖: STC89C52 管腳圖 2.2. 搶答器顯示模塊顯示模塊分為數碼管模塊和 LED 信號燈模塊 分別採用四位一體共陰極數碼管和四個發光二極體,體積小,功耗低,故障 率低,程序編譯容易,資源佔用較少。 (見圖 1,圖 2) 圖1 4 圖2 2.3 電源方案的選擇系統需要 5V 電源來驅動單片機 STC89C52。 利用電腦的 USB 介面可以提供 5V 電壓來驅動單片機。 2.4 搶答器鍵盤的選擇鍵盤是單片機不可缺少的輸入設備,是實現人機對話的紐帶。鍵盤按結構形 式可以分為非編碼鍵盤和編碼鍵盤,前者用軟體方法產生鍵碼,而後者則用硬體 方法來產生鍵碼。 在單片機中使用的都是非編碼鍵盤, 因為非編碼鍵盤結構簡單, 成本低廉,非編碼鍵盤的類型很多,常用的有獨立式鍵盤,行列式鍵盤等。 本設計採用獨立式鍵盤。 鍵盤介面中使用多少根 I/O 線,鍵盤中就有幾個按鍵,鍵盤介面使用了 6 根 I/O 口線,該鍵盤就有 6 個按鍵,這種類型的鍵盤,其按鍵比較少,且鍵盤中 各按鍵的工作互不幹擾。因此可以根據實際需要對鍵盤中的按鍵靈活的編碼。如 圖所示。 最簡單的編碼方式就是根據 I/O 輸入口所直接反映的相應按鍵, 按下的狀態 進行編碼,稱按鍵直接狀態碼,對於這樣編碼的獨立式鍵盤,CPU 可以通過直接 讀取 I/O 口的狀態來獲取按鍵的直接狀態編碼值,根據這個值直接進行按鍵識 別,這樣形式的鍵盤結構簡單,按鍵識別容易。 5 獨立式鍵盤的缺點是需要佔用比較多的 I/O 口線, 當單片機應用系統鍵盤中 需要的按鍵比較少或 I/O 口線比較富餘時,可以採用這樣類型的鍵盤。 其模塊電路圖如圖 4 所示。採用六個 BUTTON 按鈕作為搶答的選擇按鈕,與 STC89C52 的 P1.0-P1.5 相連。 圖 4 鍵盤模塊 2.5 蜂鳴器模塊蜂鳴器是一種一體化結構的電子訊響器,採用直流電壓供電,廣泛應用於計 算機、列印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等 電子產品中作發聲器件,其圖形如圖所示. 6 2.6 外部振盪電路外部振盪電路單片機必須在 AT89C52 的驅動下才能工作.在單片機內部有一個 時鍾振盪電路,只需要外接一個振盪源就能產生一定的時鍾信號送到單片機內部 的各個單元,外部振盪電路見圖所示。 三 程序設計 3.1 程序流程圖: 程序流程圖:開始 初始化部分 N K5= =0 Y 啟動中斷,數碼管開始倒計時 N 若有選手搶答 Y 中斷停止,數碼管顯示選手的標號並點亮信號燈 結束搶答器主程序流程圖 7 定時器 0 中斷 N 1 秒時間到? Y 秒加 1 數碼管顯示秒值 中斷返回 搶答器定時器中斷流程圖 掃 描 鍵 盤 Y K0 鍵按下 N Y K1 鍵按下 N Y K2 鍵按下 N K3 鍵按下 N 與 K2 鍵對應的發光二極體亮及數碼管顯示 與 K1 鍵對應的發光二極體亮及數碼管顯示 與 K0 鍵對應的發光二極體亮及數碼管顯示 Y 與 K3 鍵對應的發光二極體亮及數碼管顯示 掃描停止 鍵盤掃描流程圖 主程序我們組所設計的搶答器的程序採用的是 C 程序設計,C 語言的顯著特點是用 二進制來編寫程序,程序的各個部分除了必要的信息交流外彼此之間相互獨立。 8 這種結構化方式可使程序層次清晰, 便於使用、維護以及調試。C 語言是以函數 形式提供給用戶的,這些函數可方便的調用,並具有多種循環、 條件語句控製程序 流向,從而使程序完全結構化。雖然 C 語言也是強類型語言,但它的語法比較靈 活,允許程序編寫者有較大的自由度。本次設計的主程序中包括時鍾設計程序, 定時器中斷子程序,LED 顯示程序以及按鍵控制子程序,具體程序見附件。 3.2 系統的調試系統調試包括硬體調試和軟體調試,而且兩者是密不可分的。我們設計好的 硬體電路和軟體程序,只有經過聯合調試,才能驗證其正確性;軟硬體的配人情 況以及是否達到設計任務的要求,也只有經過調試,才能發現問題並加以解決、 完善,最終開發成實用產品。 硬體調試分單元電路調試和聯機調試, 單元電路試驗在硬體電路設計時已經 進行,這里的調試只是將其製成印刷電路板後試驗電路是否正確,並排除一些加 工工藝性錯誤(如錯線、開路、短路等) 。這種調試可單獨模擬進行,也可通過 開發裝置由軟體配合進行。硬體聯機調試則必須在系統軟體的配合下進行。 軟體調試一般包括分塊調試和聯機調試兩個階段。 程序的分塊調試一般在單 片機開發裝置上進行, 可根據所調程序功能塊的入口參量初值編制一個特殊的程 序段,並連同被調程序功能塊一起在開發裝置上運行;也可配合對應硬體電路單 獨運行某程序功能塊,然後檢查是否正確,如果執行結果與預想的不一致,可以 通過單步運行或設置斷點的方法, 查出原因並加以改正, 直到運行結果正確為止。 這時該 程序功能塊已調試完畢,可去掉附加程序段。其它程序功能塊可按此法 進行調試。 程序聯機調試就是將已調試好的各程序功能塊按總體結構聯成一個完 整程序,在所研製的硬體電路上運行。從而試驗程序整體運行的完整性、正確性 和與硬體電路的配合情況。在聯調中可能會有某些支路上的程序、功能塊因受條 件制約而得不到相應的輸入參數,這時,調試人員應創造條件進行模擬調試。在 聯調中如發現硬體問題也應及時修正,直到單片機系統的軟體、硬體全部調試成 功為止。系統調試完成後,還要進行一段時間的試運行,從而檢驗系統的穩定性 和抗干擾能力,驗證系統功能是否達到設計要求,是否達到預期的效果。 9 3.3 焊接的問題及解決一般來說,造成硬體問題的首要問題就是焊接了,也就是說焊接的好與壞直 接響產品的正常運行。 造成焊接質量不高的常見原因是:①焊錫用量過多,形成焊 點的錫堆積;焊錫過少,不足以包裹焊點。②冷焊。焊接時烙鐵溫度過低或加熱 時間不足,焊錫未完全熔化、浸潤、焊錫表面不光亮(不光滑),有細小裂紋(如同 豆腐渣一樣!)。 ③夾松香焊接,焊錫與元器件或印刷板之間夾雜著一層松香,造成 電連接不良。若夾雜加熱不足的松香,則焊點下有一層黃褐色松香膜;若加熱溫 度太高,則焊點下有一層碳化松香的黑色膜。對於有加熱不足的松香膜的情況, 可以用烙鐵進行補焊。 對於已形成黑膜的,則要"吃"凈焊錫,清潔被焊元器件或印 刷板表面,重新進行焊接才行。④焊錫連橋。指焊錫量過多,造成元器件的焊點之 間短路。這在對超小元器件及細小印刷電路板進行焊接時要尤為注意。⑤焊劑過 量,焊點明圍松香殘渣很多。當少量松香殘留時,可以用電烙鐵再輕輕加熱一下, 讓松香揮發掉,也可以用蘸有無水酒精的棉球,擦去多餘的松香或焊劑。 ⑥焊點表 面的焊錫形成尖銳的突尖。這多是由於加熱溫度不足或焊劑過少,以及烙鐵離開 焊點時角度不當浩成的內。 。 總 結 經過近半個月的努力,在我們合作下,我們較好的完成了這次設計項目,通 過此次電子製作比賽,我們重新認識到了自學的重要性,以及學以致用的道理。 我們在圖書館和網上查閱了大量的資料,同時也認識到了圖書館的重要作用。 通過此次的搶答器的設計,讓我們更加重視到專業知識的重要性及動手能力的 必要性,在整個製作過程中,我們出現很多問題,但我們並沒有因此而放棄, 在不斷調試和失敗中,我們不僅學到了專業知識,更是磨煉了我們的心智,讓 我們受益匪淺。任何事情只要去做,多多去嘗試,努力的要以自己去做為前提 的心態,那麼任何事情即使做的不好,也會受益很多,不是有句話叫做:心態 決定的成敗的話嗎,實在是有理。無論做什麼事情都不可能一帆風順,碰到阻 礙不要舍棄,不要踟躕不前,不經歷風雨,怎麼見彩虹! 在今後的學習過程中,應該多到圖書館看一些專業方面的書籍,比如 protel 畫圖,proteus 模擬軟體,以豐富自己的知識,掌握更多的硬體與軟體設計技巧, 使我們在今後的製作中提高效率。 這次設計任務也使我們加深了對單片機及介面 10 技術的理解和應用,由於知識水平的局限,設計中可能會存在著一些不足,我們 真誠的接受老師和同學的批評和指正.。 附錄( 程序) 附錄(C 程序) #include<reg52.h> #define uchar unsigned char #define uint unsigned int Uchar code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰數碼管 0~9 編碼 uint i,j,time,num; uchar ge,shi; bit flag,flag1; sbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2; sbit k4=P1^3;sbit k5=P1^4;sbit k6=P1^5; //k1~k4 為選手按鍵,k5 為主持人開關,k6 為復位鍵 sbit beep=P1^6;//定義蜂鳴器的埠 sbit wei1=P0^0;sbit wei2=P0^1; sbit wei3=P0^2;sbit wei4=P0^3;//定義數碼管的位選埠 sbit led1=P3^4;sbit led2=P3^5; sbit led3=P3^6;sbit led4=P3^7;//定義 LED 燈的埠 void delay(uint a)//延時函數 { uint i,j; for(i=a;i>0;i--) for(j=110;j>0;j--); } 11 void display()//顯示函數 { shi=time/10; ge=time%10; P2=table[num];//顯示選手編號 wei1=0;delay(1); wei1=1; P2=table[shi]; wei3=0; delay(1); wei3=1; P2=table[ge]; wei4=0; delay(1); wei4=1; } void keyscan() { if(k1==0)//按鍵按下 { delay(10);//延時去抖動 if(k1==0) { num=1;led1=0;flag=1;TR0=~TR0;TR1=0;//開定時器 0,關定時器 1 beep=1;delay(500);beep=0;//蜂鳴器響 500 毫秒 while(!k1);//等待按鍵釋放 } } if(k2==0) { delay(10); if(k2==0) //顯示時間 12 { num=2;led2=0;flag=1;TR0=~TR0;TR1=0; beep=1;delay(500);beep=0; while(!k2); } } if(k3==0) { delay(10); if(k3==0) { num=3;led3=0;flag=1;TR0=~TR0;TR1=0; beep=1;delay(500);beep=0; while(!k3); } } if(k4==0) { delay(10); if(k4==0) { num=4;led4=0;flag=1;TR0=~TR0;TR1=0; beep=1;delay(500);beep=0; while(!k4); } } display();//顯示選手編號和時間 if(time==0) { TR0=0; TR1=0; flag=1;//關計時器 0 和 1 13 } if(time==6) TR1=1; } void init() { TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1;ET0=1;ET1=1; beep=0;//作品上蜂鳴器是賦高電平響,開始置低關閉 } void main() { init();//初始化 while(1) { display(); if(k6==0) { delay(10); if(k6==0) { P3=0xff;//關閉所有 LED 燈 flag1=k6; time=15; wei1=0; num=0; P2=table[num]; 14 while(!flag1) { if(k5==0) { delay(10); if(k5==0) { flag1=1;flag=k5; TR0=1; beep=1;delay(500);beep=0; while(!k5); while(!flag) keyscan();//掃描鍵盤 } } } } } } } void time0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; i++; if(i==20) { i=0; time--; } } 15 void time1() interrupt 3 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; j++; if(j==10) { j=0; beep=~beep; } } 16

閱讀全文

與單片機課設方案論證相關的資料

熱點內容
未編譯此類問題怎麼解決 瀏覽:245
建行數字人民幣app哪裡下載 瀏覽:506
搞笑程序員漫畫 瀏覽:155
數控立車偏心圓編程實例 瀏覽:164
android默認不彈出鍵盤 瀏覽:731
加密空投信息網站 瀏覽:317
阧陰短視頻app在哪裡找 瀏覽:402
vue預編譯部分頁面 瀏覽:882
linux批量解壓gz 瀏覽:580
論文中的演算法描述 瀏覽:815
增量背離量指標源碼 瀏覽:512
安卓手機為什麼切屏 瀏覽:278
加密市場介紹 瀏覽:606
手機解壓神器小游戲 瀏覽:531
android彈出列表 瀏覽:311
androidwear軟體 瀏覽:988
單片機輸入版 瀏覽:496
哪裡找橫屏圖片素材app 瀏覽:850
linuxifcfgeth0沒有 瀏覽:1000
光遇光遇伺服器已滿怎麼解決 瀏覽:747