2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  XXXXXXX學院</b></p><p><b>  課程設計報告</b></p><p>  ( 2011 -- 2012年度第一學期)</p><p>  名 稱: 單片機與嵌入式系統設計 </p><p>  題 目:基于ATmega16的比

2、賽專用秒表設計</p><p>  學 號: </p><p>  學生姓名: </p><p>  指導教師: </p><p>  成 績:

3、 </p><p>  日期:2011年12月25日</p><p>  基于單片機ATmega16的比賽專用秒表設計</p><p>  摘要:近幾年來,人們越來越重視體育事業(yè)的發(fā)展,發(fā)展體育事業(yè)既可以促進本國人民練就強健體魄,又可以作為各國之間的競爭手段,體現各國實力。為了創(chuàng)造公平公正的體育競爭環(huán)境,必須對各種比賽項目的結果進行準確的

4、記錄。本文論述了基于AVR單片機的體育比賽專用秒表的設計與實現。該系統以AVR單片機ATmega16為硬件核心,通過內部計時器進行準確的計時,采用LCD顯示屏作為輔助顯示模塊,顯示記錄的比賽成績,當按下記錄按鍵,會記錄成績,按下停止按鍵會顯示記錄的成績。文中重點講述系統的軟硬件結構和功能特點,著重闡述了單片機及擴展電路的設計思路和實現方法。在目前的使用中,該系統能夠可靠、穩(wěn)定、準確的記錄比賽時間,具有推廣應用價值。</p>

5、<p>  關鍵詞:AVR單片機;計時器;按鍵;LCD顯示屏</p><p>  Design of the Competition Dedicated Stopwatch on ATmega16 AVR Microcontroller</p><p>  Abstract: In recent years, there is growing emphasis on sport

6、s development, sports development both for its own people trained to physical fitness, but also as a means of competition between countries, reflecting the national strength. In order to create a fair and just competitiv

7、e sports environment, must be the result of a variety of events accurate records. This article discusses the AVR-based microcontroller dedicated sports stopwatch design and implementation. The system for the AVR microco&

8、lt;/p><p><b>  目 錄</b></p><p><b>  摘要I</b></p><p>  第1章 緒 論1</p><p>  1.1 課題目的及意義1</p><p>  1.2 系統設計內容1</p><p>

9、  第2章 系統概述3</p><p>  2.1 系統設計主要原理3</p><p>  2.2 系統硬件設計方案3</p><p>  2.2.1 微控制器的選擇3</p><p>  2.2.2 顯示方案的確定4</p><p>  2.3 系統軟件設計方案5</p><

10、;p>  2.3.1 微控器軟件設計方案6</p><p>  第3章 系統硬件設計實現9</p><p>  3.1 主控制器最小系統9</p><p>  3.1.1 ATmega16簡介[7]9</p><p>  3.1.2 引腳圖及引腳介紹10</p><p>  3.1.3 單片

11、機最小系統電路設計11</p><p>  3.1.3.1 電源設計11</p><p>  3.1.3.2 復位電路設計12</p><p>  3.1.3.3 晶振電路設計13</p><p>  3.1.3.4 串口通信電路設計14</p><p>  3.2 LCD顯示屏的顯示電路設計15

12、</p><p>  第4章 系統軟件設計實現17</p><p>  4.1 總體軟件設計17</p><p><b>  總 結19</b></p><p><b>  參考文獻20</b></p><p>  附錄1 ATmega16的引腳圖21<

13、;/p><p>  附錄2 系統設計部分程序22</p><p>  第1章 緒 論</p><p>  本章主要介紹本次設計的研究背景、目的與作用,以及在本次設計的主要內容和設計技術指標。</p><p>  1.1 課題目的及意義</p><p>  近年來隨著計算機在社會領域的滲透,單片機的應用正在不斷地

14、走向深入,同時帶動傳統控制檢測日新月益更新。在實時檢測和自動控制的單片機應用系統中,單片機往往是作為一個核心部件來使用,僅單片機方面知識是不夠的,還應根據具體硬件結構,以及針對具體應用對象特點的軟件結合,以作完善。目前AVR單片機滲透到我們生活的各個領域,幾乎很難找到哪個領域沒有單片機的蹤跡。導彈的導航裝置,飛機上各種儀表的控制,計算機的網絡通訊與數據傳輸,工業(yè)自動化過程的實時控制和數據處理,廣泛使用的各種智能IC卡,民用豪華轎車的安全

15、保障系統,錄象機、攝象機、全自動洗衣機的控制,以及程控玩具、電子寵物等等,這些都離不開單片機。更不用說自動控制領域的機器人、智能儀表、醫(yī)療器械了。AVR單片機廣泛應用于儀器儀表、家用電器、醫(yī)用設備、航空航天、專用設備的智能化管理及過程控制等領域,AVR單片機的應用如此廣泛而又潛力,因而也不用質疑其生命力[1]。</p><p>  本課題需要完成一個完整系統的設計,涉及到電子技術、計算機應用等多學科知識,是一個硬

16、軟件相結合的設計性題目。本課題融知識性與趣味性于一體,提供了一個有力的了解小家電設計技術的平臺,能提高檢索文獻資料的能力、電子系統設計的能力、實際動手的能力。而且可以通過這次設計,很好的掌握系統設計的工作流程、開發(fā)步驟;熟悉單片機開發(fā)的通用編程語言。</p><p>  1.2 系統設計內容</p><p>  本設計的題目是“基于單片機ATMega16的體育比賽專用秒表設計”。選擇AT

17、Mega16單片機為系統的主控芯片,采用內部單片機計時器進行計時,通過按鍵進行控制記錄數據和停止顯示數據。</p><p>  系統設計詳細任務如下:</p><p> ?。?)整體方案的確定:包括單片機的選型,用AVR單片機作為主控器,分析ATmegal16單片機與計時器等部件實現軟、硬件接口的技術以及數據顯示方案:熟悉濕度傳感器工作原理,確定其與AVR單片機的接口設計方案。</p

18、><p> ?。?)數據顯示模塊設計:系統使用LCD顯示,能夠顯示時間變化,并在按下停止先后顯示出8組記錄的數據。</p><p>  (3)AVR單片機最小系統的設計。</p><p>  實現所有的硬件、軟件設計、系統整體調試、形成可以正常運行的產品為本次設計的最終目標。</p><p>  論文將從系統的設計總體方案;硬件、軟件的設計實現等

19、方面進行介紹。</p><p><b>  第2章 系統概述</b></p><p>  本章分為三個部分,主要介紹本次設計的系統的主要設計原理,給出硬件選擇以及軟件設計的最終方案。</p><p>  2.1 系統設計主要原理</p><p>  秒表是體育競技中很重要的部分,根據采用的計時元件和記錄方法的不同,其

20、精度也不同,因而對時間數據采集的精度也不同,這樣就給比賽的現場測試帶來了很大的不便,我們在對計時器的研究和設計過程中查閱了大量的資料和成果,提出了能夠實現精確測量并記錄時間的系統設計方案。</p><p>  系統由單片機內部計時器進行計時,通過按鍵控制開始、記錄數據和停止并顯示數據,數據結果通過LCD顯示屏進行顯示,結果記錄完之后可以選擇清零重新計時。</p><p>  2.2 系統

21、硬件設計方案</p><p>  2.2.1 微控制器的選擇</p><p>  目前,再電子系統研究與設計中,常用的微控器有MC51單片機、PIC單片機、AVR單片機和ARM芯片。</p><p>  方案一:采用ARM作為微控器</p><p>  ARM 微處理器已遍及工業(yè)控制、消費類電子產品、通信系統、網絡系統、無線系統等各類產品市

22、場,基于ARM技術的微處理器應用約占據了32位RISC微處理器75%以上的市場份額。但是,ARM技術往往需要第三方工具、軟件的支持,且ARM系列處理器很少集成片上硬件資源,實際產品成本方面,ARM配置外設價格較高,PCB版也好設計,往往還需要考慮信號的完整性等,因此,對于初學者來說,使用起來不是很方便。</p><p>  方案二:采用PIC單片機作為微控器</p><p>  PIC單片

23、機速度快,片內資源豐富,抗干擾能力強,價格便宜。但沒有地址總線,不適宜做大系統,而且只能使用匯編指令,雖然筒單,但不適合寫大程序。CPU采用RISC結構,分別僅有33,35,58條指令,采用Harvard雙總線結構,運行速度快,低工作電壓,低功耗,較大的輸入輸出直接驅動能力,一次性編程,小體積,適用于用量大、檔次低、價格敏感的產品。</p><p>  方案三:采用AVR單片機作為微控器[3]</p>

24、<p>  AVR單片機采用的RISC優(yōu)先選取使用頻率最高的簡單指令,避免復雜指令:并固定指令寬度,減少指令格式和尋址方式的種類,從而縮短指令周期,提高運行速度。AVR單片機的程序存儲器和數據存儲器是分離的,并且可對具有相同地址的程序存儲器和數據存儲器進行獨立的尋址。在AVR單片機中,CPU執(zhí)行當前指令時取出將要執(zhí)行的下一條指令放入寄存器中,從而可以避免傳統 MCS51系列單片機中多指令周期的出現。傳統的MCS51系列單片

25、機所有的數據處理都是基于一個累加器的,因此累加器與程序存儲器、數據存儲器之間的數據轉換就成了單片機的瓶頸;在AVR單片機中,寄存器由32個通用工作寄存器組成,并且任何一個寄存器都可以充當累加器,從而有效地避免了累加器的瓶頸效應,提高了系統的性能。</p><p>  綜上所述,AVR單片機與51單片機、PIC單片機相比運行效率高很多、芯片內部的Flsah、EEPROM、SRAM容量較大、全部支持在線編程擦寫、每個

26、I/O口都可以以推換驅動的方式輸出高、低電平,驅動能力強、內部資源豐富,一般都集成AD、DA模數轉換器;PWM;SPI、USART、TWI、I2C通信口;豐富的中斷源等?,F在比較流行的型號是ATmega8/16。所以,本設計選用ATmega16單片機作為主控芯片。</p><p>  2.2.2 顯示方案的確定</p><p>  LED和LCD是目前普遍采用的兩種顯示技術。</p

27、><p>  方案一:采用LED顯示技術</p><p>  LED是發(fā)光二極管(Light Emitting Diode)的英文縮寫,是一種固態(tài)的半導體器件,它可以直接把電轉化為光。LED應用可分為兩大類:一是LED單管應用,包括背光源LED,紅外線LED等;另外就是LED顯示屏。目前,中國在LED基礎材料制造方面與國際還存在著一定的差距,但就LED顯示屏而言,中國的設計

28、和生產技術水平基本與國際同步。LED顯示屏是由發(fā)光二極管排列組成的一顯示器件。它采用低電壓掃描驅動,具有耗電少、使用壽命長、成本低、亮度高、故障少、視角大、可視距離遠等特點。</p><p>  方案二:采用LCD顯示技術</p><p>  LCD是液晶顯示屏的全稱,主要有TFT、UFB、TFD、STN等幾種類型的液晶顯示屏。其主要特點是:低壓應用,低驅動電壓,固體化使用安全性和可靠性提

29、高;平板化,又輕薄,節(jié)省了大量原材料和使用空間;低功耗,節(jié)省了大量的能源;品種多樣,使用方便靈活、維修、更新、升級容易等許多特點。顯示范圍覆蓋了從1英寸至40英寸范圍內的所有顯示器的應用范圍以及投影大平面,是全尺寸顯示終端;顯示質量從最簡單的單色字符圖形到高分辨率,高彩色保真度,高亮度,高對比度,高響應速度的各種規(guī)格型號的視頻顯示器;顯示方式有直視型,投影型,透視式,也有反射式。環(huán)保特性好,無輻射、無閃爍,對使用者的健康無損害。   

30、簡單地說,LCD與LED是兩種不同的顯示技術,LCD是由液態(tài)晶體組成的顯示屏,而LED則是由發(fā)光二極管組成的顯示屏。LCD顯示器與LED顯示器相比,LCD在亮度、功耗、重量等多方面,都更具優(yōu)勢。所以,在本設計中,采用LCD顯示技術[5]。</p><p>  2.3 系統軟件設計方案</p><p>  系統軟件就是單片機應用軟件。單片機應用軟件主要實現時間的技術、按鍵的控制、LCD顯示

31、屏的顯示等功能。</p><p>  系統軟件部分的設計主要包括主程序和中斷服務程序。其中主程序的功能是完成系統的初始化、按鍵的查詢控制。中斷服務程序根據中斷源來編寫需要執(zhí)行的內容。系統的主程序流程圖如下圖圖2-1所示:</p><p>  2.3.1 微控器軟件設計方案</p><p>  常用的單片機編程語言是匯編和C語言。</p><p&

32、gt;  方案一:使用匯編語言</p><p>  匯編語言(Assembly Language)是面向機器的程序設計語言。在匯編語言中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變成了匯編語言。匯編語言是面向具體機型的,它離不開具體計算機的指令系統,因此,對于不同型號的計算機,有著不同的結構的匯編語言,而且,對于同

33、一問題所編制的匯編語言程序在不同種類的計算機間是互不相通的。匯編語言像機器指令一樣,是硬件操作的控制信息,因而仍然是面向機器的語言,使用起來還是比較繁瑣費時,通用性也差。</p><p>  匯編語言能夠直接訪問與硬件相關的存儲器或I/O端口; 能夠不受編譯器的限制,對生成的二進制代碼進行完全的控制;能夠根據特定的應用對代碼做最佳的優(yōu)化,提高運行速度; 能夠最大限度地發(fā)揮硬件的功能。但是還應該認識到,匯編語言是一

34、種層次非常低的語言,它僅僅高于直接手工編寫二進制的機器指令碼,因此不可避免地存在一些缺點:編寫的代碼非常難懂,不好維護; 很容易產生Bug,難于調試;只能針對特定的體系結構和處理器進行優(yōu)化;開發(fā)效率很低,時間長且單調;兼容性不好,與硬件關系非常緊密。因而不是很適合初學者的應用。</p><p><b>  方案二:使用C語言</b></p><p>  C語言的語法限

35、制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等[6]。指針是C語言的一大特色,可以說C語言優(yōu)于其它高級語言的一個重要原因就是因為它有指針操作可以直接進行靠近硬件的操作,但是C的指針操作也給它帶來了很多不安全的因素。</p><p>  但是對于本次設計來還說,C語言具有以下優(yōu)點:</p><p> ?。?)簡潔緊湊、靈活方便</p><p

36、>  C語言一共只有32個關鍵字,9種控制語句,程序書寫自由,主要用小寫字母表示。它把高級語言的基本結構和語句與低級語言的實用性結合起來。C語言可以象匯編語言一樣對位、字節(jié)和地址進行操作,而這三者是計算機最基本的工作單元。</p><p><b> ?。?)運算符豐富</b></p><p>  C的運算符包含的范圍很廣泛,共有34個運算符。C語言把括號、賦值、

37、強制類型轉換等都作為運算符處理。從而使C的運算類型極其豐富表達式類型多樣化。</p><p><b> ?。?)數據結構豐富</b></p><p>  C的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據類型的運算。</p><p>  (4)C是結構式語言</p><

38、p>  結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便于使用、維護以及調試。C語言是以函數形式提供給用戶的,這些函數可方便的調用,并具有多種循環(huán)、條件語句控制程序流向,從而使程序完全結構化。</p><p> ?。?)C語法限制不太嚴格,程序設計自由度大</p><p>  雖然C語言也是強類型語言,但它的語

39、法比較靈活,允許程序編寫者有較大的自由度。</p><p> ?。?)C語言允許直接訪問物理地址,可以直接對硬件進行操作</p><p>  因為既具有高級語言的功能,又具有低級語言的許多功能,能夠象匯編語言一樣對位、字節(jié)和地址進行操作,可以用來寫系統軟件。</p><p>  (7)C語言程序生成代碼質量高,程序執(zhí)行效率高</p><p>

40、  一般只比匯編程序生成的目標代碼效率低10へ20%。</p><p>  綜合比較之后,本次設計采用方案二,即使用C語言作為微控制器的編程語言。</p><p>  第3章 系統硬件設計實現</p><p>  硬件是系統的載體與執(zhí)行結構,硬件設計是本次設計的重點,主要設計傳感器信號放大、采集、處理,顯示處理,聲光報警,執(zhí)行電路設計,系統供電等多個部分。本章分為

41、2節(jié)介紹系統的硬件設計實現。</p><p>  3.1 主控制器最小系統</p><p>  3.1.1 ATmega16簡介[7]</p><p>  ATmega16單片機是1997年由ATMEL公司研發(fā)出的增強型內置Flash的RISC精簡指令集高速8位單片機。該單片機具有AVR高性能、低功耗RISC結構,工作在8MHz時具有8MIPS的性能,同時片內1

42、6KB的在線可編程FLASH存儲器,可擦除1000次以上,并且集成了512B的SRAM 和512 B在線可編程EEPROM。另一個顯著的特點是自帶8通道10位高精度的逐次逼近式A/D轉換器,A/D引腳與PA口的引腳兩者復用,可以通過程序指定來加以區(qū)別應用。另外,它還擁有很寬的工作電壓范圍,可以在2.7~6V之間正常運行,具備很強的適應性。</p><p>  AVR單片機具有良好的集成性能,采用低功率、非揮發(fā)的C

43、MOS工藝制造,除具有低功耗、高密度的特點外,還支持低電壓的聯機Flash,EEPROM寫入功能。AVR單片機還支持 Basic、C等高級語言編程。采用高級語言對單片機系統進行開發(fā)是單片機應用的發(fā)展趨勢。對單片機用高級語言編程可很容易地實現系統移植,并加快軟件的開發(fā)過程。</p><p>  ATmega16的主要性能參數及特性如下:</p><p>  ● 16K 字節(jié)可重擦寫Flash

44、閃存存儲器,擦寫壽命為10000次;</p><p>  ● 在16MHZ頻率下速度為16MIPS的8位RISC結構單片機,內含硬件乘法器;</p><p>  ● 32個可編程的I/O口,40引腳PDIP封裝,32個通用寄存器;</p><p><b>  ● 全靜態(tài)工作;</b></p><p>  ● 8通道10位

45、AD轉換器,支持單端和雙端差分信號輸入,內帶增益可編程運算放大器;</p><p>  ● 2個8位定時/計數器,1個16位定時/計數器,帶捕捉、比較功能;</p><p>  ● 通過JTAG接口實現對Flash、EEPROM、熔絲位和鎖定位的編程;</p><p>  ● 兩個可編程的串行USART,可工作于主機/ 從機模式的SPI 串行接口。</p>

46、;<p>  ATmega16可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式:空閑方式停止CPU的工作,但允許RAM、定時/計數器、串行通信口及中斷系統繼續(xù)工作;掉電方式保存RAM中的內容,但是振蕩器停止工作并禁止其他所有部件工作到下一個硬件復位。</p><p>  3.1.2 引腳圖及引腳介紹</p><p>  ATmega16的引腳圖見附錄1。<

47、/p><p>  VCC 電源正 </p><p><b>  GND 電源地</b></p><p>  端口A(PA7~PA0) 端口A作為A/D 轉換器的模擬輸入端。端口A為8位雙向I/O口,具有可編程的內部上拉電阻。其輸出緩沖器具有對稱的驅動特性,可以輸出和吸收大電流。作為輸入使用時,若內部上拉電阻使能,端口被外部電路拉低時

48、將輸出電流。在復位過程中,即使系統時鐘還未起振,端口A 處于高阻狀態(tài)。</p><p>  端口B(PB7~PB0) 端口B為8位雙向I/O口,具有可編程的內部上拉電阻。其輸出緩沖器具有對稱的驅動特性,可以輸出和吸收大電流。作為輸入使用時,若內部上拉電阻使能,端口被外部電路拉低時將輸出電流。在復位過程中,即使系統時鐘還未起振,端口B處于高阻狀態(tài)。</p><p>  端口C(PC7~PC

49、0) 端口C為8位雙向I/O口,具有可編程的內部上拉電阻。其輸出緩沖器具有對稱的驅動特性,可以輸出和吸收大電流。作為輸入使用時,若內部上拉電阻使能,端口被外部電路拉低時將輸出電流。在復位過程中,即使系統時鐘還未起振,端口C 處于高阻狀態(tài)。如果JTAG接口使能,即使復位出現引腳PC5(TDI)、PC3(TMS)與PC2(TCK)的上拉電阻被激活。</p><p>  端口D(PD7~PD0) 端口D為8位雙向I

50、/O 口,具有可編程的內部上拉電阻。其輸出緩沖器具有對稱的驅動特性,可以輸出和吸收大電流。作為輸入使用時,若內部上拉電阻使能,則端口被外部電路拉低時將輸出電流。在復位過程中,即使系統時鐘還未起振,端口D處于高阻狀態(tài)。</p><p>  RESET 復位輸入引腳。持續(xù)時間超過最小門限時間的低電平將引起系統復位。持續(xù)時間小于門限間的脈沖不能保證可靠復位。</p><p>  XTAL1

51、反向振蕩放大器與片內時鐘操作電路的輸入端。</p><p>  XTAL2 反向振蕩放大器的輸出端。</p><p>  AVCC AVCC是端口A與A/D轉換器的電源。不使用ADC時,該引腳應直接與VCC連接。使用ADC時應通過一個低通濾波器與VCC 連接。</p><p>  AREF A/D的模擬基準輸入引腳。</p><p>

52、;  3.1.3 單片機最小系統電路設計</p><p>  在單片機硬件最小系統中,沒有任何信號線的連接,只有電源到主板的電源連接,在判斷的過程中通過電源指示燈及工作狀態(tài)指示燈來判斷這一核心組成部分是否可正常工作。ATmega16單片機的最小系統如下圖圖3-3所示。</p><p>  圖3-3 單片機最小系統</p><p>  3.1.3.1 電源設計&

53、lt;/p><p>  單片機是一個電子器件,一個電子器件能夠工作的第一個前提就是要有電源電源是一切電子器件工作的前提,對于單片機系統也不例外。AVR單片機最常用的電源電壓是5V。</p><p>  ATmega16的電源電路設計如上圖圖3-4所示。</p><p>  3.1.3.2 復位電路設計</p><p>  ATmega16有5個

54、復位源[8]:</p><p><b>  (1)上電復位</b></p><p>  電源電壓低于上電復位門限VPOT時,MCU復位。上電復位(POR)脈沖由片內檢測電路產生,POR電路保證器件在上電時復位。VCC達到上電門限電壓后觸發(fā)延遲計數器。在計數器溢出之前器件一直保持為復位狀態(tài)。當VCC下降時,只要低于檢測門限,RESET信號立即生效。</p>

55、<p><b> ?。?)外部復位</b></p><p>  引腳RESET上的低電平持續(xù)時間大于最小脈沖寬度時MCU復位。外部復位由外加于RESET引腳的低電平產生。當復位低電平持續(xù)時間大于最小脈沖寬度時即觸發(fā)復位過程,即使此時并沒有時鐘信號在運行。當外加信號達到復位門限電壓VRST(上升沿)時,tTOUT延時周期開始。延時結束后MCU即啟動。</p><

56、p><b> ?。?)看門狗復位</b></p><p>  看門狗使能并且看門狗定時器溢出時復位發(fā)生??撮T狗定時器溢出時將產生持續(xù)時間為1個CK周期的復位脈沖。在脈沖的下降沿,延時定時器開始對tTOUT記數。</p><p><b> ?。?)掉電檢測復位</b></p><p>  掉電檢測復位功能使能,且電源電

57、壓低于掉電檢測復位門限VBOT時MCU即復位。BOD電路的開關由熔絲位BODEN控制。當BOD使能后(BODEN被編程),一旦VCC下降到觸發(fā)電平以下(VBOT-,Figure 19),BOD復位立即被激發(fā)。當VCC上升到觸發(fā)電平以上時(VBOT+,Figure19),延時計數器開始計數,一旦超過溢出時間tTOUT,MCU即恢復工作。</p><p> ?。?)JTAG AVR復位</p><

58、p>  復位寄存器為1時MCU復位。JTAG通過復位寄存器mcur,復位寄存器為1時MCU復位。通過JTAG指令AVR_RESET可以使JTAG復位寄存器置位,并引發(fā)MCU復位,并使 JTRF 置位。上電復位將使其清零,也可以通過寫“0”來清除。</p><p>  本設計選用了最直接的復位形式,由于AVR單片機本身內部帶有復位電路的優(yōu)勢,只需要接一個10K上拉電阻就可以完成復位電路的設計。為了可靠,可以加

59、上一只0.1uF的電容以消除干擾和雜波,如下圖圖3-5所示:</p><p>  3.1.3.3 晶振電路設計</p><p>  單片機內部的各種功能電路絕大多數是由數字電路構成的。數字電路的工作過程,尤其是時序邏輯電路的工作過程,離不開時鐘脈沖信號,即時間基準信號,每一步細微的動作都是在一個共同的時間基準信號驅動之下完成的。作為時基發(fā)生器的時鐘振蕩電路,為整個單片機芯片內部各個部分電

60、路的工作提供系統時鐘信號,也在為單片機與其他外接芯片之間的通信以及與其他數字系統或者計算機系統之間通信,提供可靠的同步時鐘信號。</p><p>  AVR單片機設計了4種類型的時基振蕩方式可供選擇:標準的晶體振蕩器/陶瓷諧振器振蕩方式XT;高頻的晶體振蕩器/陶瓷諧振器振蕩方式HS(4MHz)以上;低頻的晶體振蕩器/陶瓷諧振器振蕩方式LP(32.768kHz);外接電容元件的阻容振蕩方式RC。在本設計中,由于需要

61、考慮到通信時的波特率的設置,所以選用能產生較精確時鐘的晶體振蕩器(7.3728MHz)。晶振電路與單片機內部結構關系圖如下圖圖3-6所示。</p><p>  為了由外部源驅動器件,當XTAL1被驅動時,XTAL2不能連接,如下圖圖3-7所示。</p><p>  圖3-6 晶振電路設計 圖3-7 外部時鐘驅動設置</p><p&

62、gt;  3.1.3.4 串口通信電路設計</p><p>  使用串口的時候,需要連接跳線JP2,當1和2連接,3和4連接的時候處于PC與單片機通訊狀態(tài),當1和3連接,2和4不連接的時候,串口調試助手發(fā)什么數據,就能返回什么數據。</p><p>  3.2 LCD顯示屏的顯示電路設計</p><p>  設計中加入了LCD顯示屏顯示模塊,用來實時顯示相關數據

63、的大小,以達到一個更加直觀的效果。本設計采用了單片機直接驅動的方式來完成對測試數據的顯示處理。</p><p>  LCD顯示屏的顯示電路設計電路圖如下圖圖3-11所示:</p><p>  單片機I/O口輸出引腳是PB口,為復用端口,在很大程度上節(jié)約了I/ O資源,簡化了硬件的設計,使系統具有較高的集成度。</p><p>  第4章 系統軟件設計實現</

64、p><p>  系統軟件包括單片機應用軟件和PC機應用軟件。單片機應用軟件主要實現定時數據采集、數字信號處理、存儲、顯示、通信處理等功能;PC機應用軟件主要是進一步處理下位機傳輸過來的數據,提供友好的監(jiān)測界面,并進行數據的保存和歷史查詢等。</p><p>  4.1 總體軟件設計</p><p>  系統軟件設計總體流程框圖如下圖圖4-1所示。</p>

65、<p>  系統語言采用C語言編制,包括主程序和中斷服務子程序。主程序的功能是完成系統的初始化、信號采集及處理、顯示、濕度超限報警以及與上位機之間的通信。根據系統工作特點,程序采用結構化的軟件設計方法。</p><p><b>  總 結</b></p><p>  本文論述了基于AVR單片機的比賽專用秒表的設計,實現了對時間的檢測及記錄存儲。該設計有效

66、地利用AVR單片機的內部資源,很好地把計時器模塊、LCD顯示模塊組織起來,使得整個系統運行可靠,操作方便,測量誤差在5%以內。實現了低功耗,高可靠性,操作方便。在目前的試用中,對該設計反映很好,它能夠可靠、穩(wěn)定、安全的記錄時間,具有推廣應用價值。</p><p>  從開始對整個題目的分析,到最后的設計完成整個系統的過程中,我對單片機技術和測控系統的原理及設計有了更深刻的認識。以ATmega16單片機為核心,結合

67、接口電路理論和C語言知識設計出了本系統。</p><p>  在確定方案之后,對部分電路采取了試驗版焊接測試,保證以后的電路可以實現聯調。在基本確定了電路圖之后,我們開始了對電路板的設計,考慮到整個產品要具良好的的集成性,我們將整個系統安置在一塊板子上,并著重考慮了布局的設計、走線方式。</p><p>  在程序設計方面并沒有遇到很大的問題,采取的是C語言完成所有的程序。但是在聯機調試時

68、仍遇到較大的問題,因為測試時僅對部分電路進行了測試,整機聯調時并沒有想象中的那么輕松。每個模塊都單獨編寫程序進行調試,發(fā)現其中的硬件和軟件問題,之后才進行修改、完善;當所有模塊基本調試完成后,將所有的程序合成后進行整機聯調。這樣的調試是很費時間,加重了工作量,但是卻保證了調試的質量。經過幾個月的努力,雖然設計最終基本成功,但是整個系統也還有一些需要改進的地方。</p><p>  在設計過程中,我感覺學到了許多東

69、西,并且把一些以前學的不好的知識又重新鞏固了一遍,而且還加深了理解與認識。由于要查閱很多文獻資料,還使我開闊了眼界,拓展了思路。實踐中,更加熟練的掌握了Protel、Office等應用軟件。通過完成設計,我初步明白了怎樣把所學的知識運用到實踐中來,終于能夠做到學以致用,而且也使我的動手能力和實踐能力有了很大的提高。 </p><p><b>  參考文獻</b></p>&l

70、t;p>  [1] 李泓. AVR單片機入門與實踐[M]. 北京:北京航空航天大學出版社,2008:145-167.</p><p>  [2] 譚浩強. C程序設計(第三版)[M]. 北京:清華大學出版社,2005:37-55.</p><p>  [3] 丁化成. AVR單片機應用設計[M]. 北京:北京航空航天大學出版社,2002:24-31.</p><p

71、>  [4] 趙亮. 單片機從入門到精通系列講座(一)——單片機最小系統及I/O應用[J]. 電子制作,2008(2):75-78.</p><p>  [5] 張軍. AVR單片機-C語言程序設計實例精粹[M]. 北京:電子工業(yè)出版社,2009:65-69.</p><p>  [6] 李廣軍. 微機系統原理與接口技術[M]. 成都:電子科技大學出版社,2005:87-101.&l

72、t;/p><p>  [7] 劉斌儒,戴勇. 基于AVR單片機Mega16的電子時鐘設計[J]. 國外電子元器件,2008(7):18-19.</p><p>  附錄1 ATmega16的引腳圖</p><p>  附錄2 系統設計部分程序</p><p>  /***************************************

73、******************* </p><p>  * 函數名稱:void display() </p><p>  * 功 能:將時、分、秒等的數字裝換為字符串并顯示在LCD中 </p><p>  * 入口參數:無

74、 </p><p>  * 出口參數:無 </p><p>  **********************************************************/ </p><p>  voi

75、d display() //將時、分、秒等的數字裝換為字符串并顯示在LCD中</p><p><b>  { </b></p><p>  itoa(hour,str); strcat(time,str);strcatf(time,":"); //時間字符串中串上小時和':' </p><

76、;p>  itoa(minu,str);strcat(time,str);strcatf(time,":"); //時間字符串中串上分鐘和':'</p><p>  itoa(sec,str);strcat(time,str);strcatf(time,":"); //時間字符串中串上秒數和':'</p><p

77、>  itoa(t,str);strcat(time,str); //時間字符串中串上中斷次數</p><p>  lcd_clear(); //清屏</p><p>  lcd_gotoxy(y1,x1);</p><p>  lcd_puts(time); //LCD上顯示時間</p>

78、<p>  strcpyf(time,""); // 清除本次時間,以備下次使用。 </p><p><b>  }</b></p><p>  /********************************************************** </p><p>  * 中斷名稱:計時器

79、T/C0比較匹配清零中斷 </p><p>  * 功 能:時間控制 </p><p>  **********************************************************/

80、 </p><p>  interrupt [TIM0_COMP] void timer0_comp_isr(void)</p><p><b>  {</b></p><p>  // Place your code here</p><p>  if(++time_counter==10)</p>&

81、lt;p><b>  {</b></p><p>  time_counter=0;</p><p>  key_stime_ok = 1; // 到10ms</p><p>  if(++t==100) {sec++;t=0;} //定時時間為10ms,進100次中斷為1s</p><p>  

82、if(sec==60) {minu++;sec=0;} //秒數到60時,分鐘數增1,秒數清零</p><p>  if(minu==60) {hour++;minu=0;} //分鐘數到60時,小時數增1,分鐘數清零 </p><p>  display(); //在LCD上顯示計時時間</p><p><b>  }</b></p

83、><p><b>  }</b></p><p>  /********************************************************** </p><p>  * 中斷名稱:外部中斷INT0 </p><p>  * 功 能:

84、記錄數據 </p><p>  **********************************************************/</p><p>  interrupt [EXT_INT0] void ext_int0_isr(void) /

85、/INT0 用于按鍵記錄8組數據 S3</p><p><b>  {</b></p><p><b>  count++;</b></p><p>  if(count==1)</p><p><b>  {</b></p><p>  itoa(

86、hour,str1); strcat(timecunchu1,str1);strcatf(timecunchu1,":"); //時間字符串中串上小時和':'</p><p>  itoa(minu,str1);strcat(timecunchu1,str1);strcatf(timecunchu1,":"); //時間字符串中串上分鐘和':&#

87、39;</p><p>  itoa(sec,str1);strcat(timecunchu1,str1);strcatf(timecunchu1,":"); //時間字符串中串上秒數和':'</p><p>  itoa(t,str1);strcat(timecunchu1,str1);</p><p><b> 

88、 }</b></p><p>  else if(count==2)</p><p><b>  {</b></p><p>  itoa(hour,str1); strcat(timecunchu2,str1);strcatf(timecunchu2,":"); //時間字符串中串上小時和':'

89、;</p><p>  itoa(minu,str1);strcat(timecunchu2,str1);strcatf(timecunchu2,":"); //時間字符串中串上分鐘和':'</p><p>  itoa(sec,str1);strcat(timecunchu2,str1);strcatf(timecunchu2,":&quo

90、t;); //時間字符串中串上秒數和':'</p><p>  itoa(t,str1);strcat(timecunchu2,str1);</p><p><b>  }</b></p><p>  else if(count==3)</p><p><b>  {</b>&l

91、t;/p><p>  itoa(hour,str1); strcat(timecunchu3,str1);strcatf(timecunchu3,":"); //時間字符串中串上小時和':'</p><p>  itoa(minu,str1);strcat(timecunchu3,str1);strcatf(timecunchu3,":"

92、;); //時間字符串中串上分鐘和':'</p><p>  itoa(sec,str1);strcat(timecunchu3,str1);strcatf(timecunchu3,":"); //時間字符串中串上秒數和':'</p><p>  itoa(t,str1);strcat(timecunchu3,str1);</

93、p><p><b>  }</b></p><p>  else if(count==4)</p><p><b>  {</b></p><p>  itoa(hour,str1); strcat(timecunchu4,str1);strcatf(timecunchu4,":")

94、; //時間字符串中串上小時和':'</p><p>  itoa(minu,str1);strcat(timecunchu4,str1);strcatf(timecunchu4,":"); //時間字符串中串上分鐘和':'</p><p>  itoa(sec,str1);strcat(timecunchu4,str1);strca

95、tf(timecunchu4,":"); //時間字符串中串上秒數和':'</p><p>  itoa(t,str1);strcat(timecunchu4,str1);</p><p><b>  }</b></p><p>  else if(count==5)</p><p&g

96、t;<b>  {</b></p><p>  itoa(hour,str1); strcat(timecunchu5,str1);strcatf(timecunchu5,":"); //時間字符串中串上小時和':'</p><p>  itoa(minu,str1);strcat(timecunchu5,str1);strcat

97、f(timecunchu5,":"); //時間字符串中串上分鐘和':'</p><p>  itoa(sec,str1);strcat(timecunchu5,str1);strcatf(timecunchu5,":"); //時間字符串中串上秒數和':'</p><p>  itoa(t,str1);strc

98、at(timecunchu5,str1);</p><p><b>  }</b></p><p>  else if(count==6)</p><p><b>  {</b></p><p>  itoa(hour,str1); strcat(timecunchu6,str1);strcatf(

99、timecunchu6,":"); //時間字符串中串上小時和':'</p><p>  itoa(minu,str1);strcat(timecunchu6,str1);strcatf(timecunchu6,":"); //時間字符串中串上分鐘和':'</p><p>  itoa(sec,str1);strc

100、at(timecunchu6,str1);strcatf(timecunchu6,":"); //時間字符串中串上秒數和':'</p><p>  itoa(t,str1);strcat(timecunchu6,str1);</p><p><b>  }</b></p><p>  else if(co

101、unt==7)</p><p><b>  {</b></p><p>  itoa(hour,str1); strcat(timecunchu7,str1);strcatf(timecunchu7,":"); //時間字符串中串上小時和':'</p><p>  itoa(minu,str1);strca

102、t(timecunchu7,str1);strcatf(timecunchu7,":"); //時間字符串中串上分鐘和':'</p><p>  itoa(sec,str1);strcat(timecunchu7,str1);strcatf(timecunchu7,":"); //時間字符串中串上秒數和':'</p>&l

103、t;p>  itoa(t,str1);strcat(timecunchu7,str1);</p><p><b>  } </b></p><p>  else if(count==8)</p><p><b>  {</b></p><p>  itoa(hour,str1); strc

104、at(timecunchu8,str1);strcatf(timecunchu8,":"); //時間字符串中串上小時和':'</p><p>  itoa(minu,str1);strcat(timecunchu8,str1);strcatf(timecunchu8,":"); //時間字符串中串上分鐘和':'</p>&

105、lt;p>  itoa(sec,str1);strcat(timecunchu8,str1);strcatf(timecunchu8,":"); //時間字符串中串上秒數和':'</p><p>  itoa(t,str1);strcat(timecunchu8,str1);</p><p><b>  }</b><

106、/p><p><b>  }</b></p><p>  /********************************************************** </p><p>  * 中斷名稱:外部中斷INT1 </p><p>  * 功

107、能:數據清零 </p><p>  **********************************************************/</p><p>  interrupt [EXT_INT1] void ext_int1_isr(void)

108、//INT1 用于按鍵清零 S4</p><p><b>  {</b></p><p>  // Place your code here</p><p>  TCCR0=0x08; //關閉T/C0</p><p>  hour=0,minu=0,sec=0,t=0; //時間值清零<

109、/p><p>  lcd_clear();</p><p>  lcd_gotoxy(y1,x1);</p><p>  lcd_putsf("0:0:0:0");</p><p><b>  flag=0; </b></p><p><b>  }</b>&

溫馨提示

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

評論

0/150

提交評論