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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  本科畢業(yè)設(shè)計</b></p><p> 基于單片機的多功能數(shù)字時鐘</p><p>  摘 要</p><p>  隨著數(shù)字集成電路的發(fā)展和石英晶體與振蕩器的廣泛應(yīng)用,數(shù)字時鐘的精度遠遠超過了老式鐘表,而且能夠方便地擴展鐘表原先的報時功能,滿足人們?nèi)粘?yīng)用的各種需求,數(shù)字時鐘不管在性能還是功能上都遠遠

2、超過了傳統(tǒng)的鐘表。</p><p>  本設(shè)計中的多功能數(shù)字時鐘采用基于ARM Cortex-M3核心的32 位微控制器STM32F103RCT6作為控制系統(tǒng)的核心,采用內(nèi)置晶振、具有標準I2C接口的實時時鐘芯片SD2403API計算當前的秒、分、時、日、月、年,可保證時鐘精度為+5ppm(在25℃±1℃下),通過編程配合芯片內(nèi)置的數(shù)字化時間精度調(diào)整電路還可以進一步提高時鐘精度,通過2.2寸TFT液晶屏

3、的友好人機界面將結(jié)果直觀地呈現(xiàn)給用戶。為具有更高的實用價值,利用數(shù)字溫濕度傳感器DHT11獲取溫濕度,增加了溫濕度顯示功能;移植Fatfs文件系統(tǒng)讀取SD卡的文件,增加了數(shù)碼相框功能;通過陽歷轉(zhuǎn)陰歷算法,實現(xiàn)了陰歷顯示;此外,還增加了紅外遙控、鬧鐘、電子掛歷、節(jié)日提醒、備忘錄等功能。</p><p>  關(guān)鍵詞:Cortex-M3 STM32F103RCT6 數(shù)字時鐘</p><p>

4、  The Multifunctional Digital Clock Based On Single Chip Microcomputer</p><p>  Fu Dongqiang</p><p>  (College of Engineering, South China Agricultural University, Guangzhou 510642, China)</p

5、><p>  Abstract: With the development and wide application of digital integrated circuits and quartz crystal oscillators , precision digital clock is far more than the old-fashioned clocks, watches and clocks,

6、and can easily extend the original timekeeping features to meet the diverse needs of everyday applications , digital clock regardless of performance or features are far more than the traditional watches .</p><

7、p>  The design of the multi-function digital clock based on ARM Cortex-M3 core, 32-bit microcontrollers STM32F103RCT6 as the core of the control system, with built-in crystal oscillator , with a standard I2C interface

8、, real-time clock chip SD2403API calculate the current seconds , minutes, hours, day, month , year, can guarantee that the clock accuracy of +5 ppm ( at 25 ℃ ± 1 ℃), adjustment circuit programmed with chip built-in

9、digital time accuracy can be further improved clock accuracy , by 2.2 -i</p><p>  Key words: Cortex-M3 STM32F103RCT6 digital clock目 錄</p><p><b>  1 前言1</b></p><p

10、>  1.1 設(shè)計意義1</p><p>  1.2 設(shè)計內(nèi)容1</p><p>  2 總體方案確定2</p><p>  2.1 主控芯片方案2</p><p>  2.2 顯示方案3</p><p>  2.3 實時時鐘方案3</p><p>  2.4 溫濕度傳感器方案

11、4</p><p>  2.5 圖片存儲方案4</p><p>  3 硬件電路設(shè)計5</p><p>  3.1 系統(tǒng)總體框圖5</p><p>  3.2 STM32F103RCT6最小系統(tǒng)設(shè)計5</p><p>  3.3 SD2403電路圖設(shè)計6</p><p>  3.4

12、DHT11電路圖設(shè)計7</p><p>  3.5 TFT顯示電路設(shè)計8</p><p>  3.6 SD存儲卡電路設(shè)計8</p><p>  3.7 紅外接收電路設(shè)計9</p><p><b>  4 程序設(shè)計9</b></p><p>  4.1 系統(tǒng)初始化流程10</p&g

13、t;<p>  4.1.1 SD卡初始化介紹10</p><p>  4.1.2 Fatfs文件系統(tǒng)介紹11</p><p>  4.2 時間調(diào)整程序設(shè)計13</p><p>  4.3 日期調(diào)整程序設(shè)計14</p><p>  4.4 鬧鐘處理程序設(shè)計15</p><p>  4.5 節(jié)日提醒

14、程序設(shè)計16</p><p>  5 調(diào)試與調(diào)試結(jié)果17</p><p>  5.1 硬件調(diào)試17</p><p>  5.2 調(diào)試結(jié)果17</p><p><b>  6 結(jié)論17</b></p><p><b>  參考文獻19</b></p>

15、<p><b>  附錄20</b></p><p>  附錄A 設(shè)計主要電路圖20</p><p>  附錄B 主要設(shè)計程序21</p><p><b>  致謝78</b></p><p>  xx農(nóng)業(yè)大學本科生畢業(yè)設(shè)計成績評定表</p><p><

16、;b>  1 前言</b></p><p><b>  1.1 設(shè)計意義</b></p><p>  自1975年美國德州儀器公司第一塊微型計算機芯片TMS-1000問世以來,在短短的20年間,單片機技術(shù)已發(fā)展成為計算機領(lǐng)域一個非常有前途的分之,它有自己的技術(shù)特征、規(guī)范和應(yīng)用領(lǐng)域。單片機是自動控制系統(tǒng)的核心部件,主要用于工業(yè)控制、智能化儀器儀表、家用

17、電器等機器中。它具有體積小、性能突出可靠性高、價格低廉等優(yōu)點,并且其應(yīng)用領(lǐng)域不斷擴大,除了工業(yè)控制、智能化儀表、通信、家用電器外,在智能化的高檔電子玩具產(chǎn)品中也大量采用單片機芯片作為核心控制部件,已經(jīng)滲入到人們工作和生活的每個角落,有力地推動了各行業(yè)的技術(shù)改造和產(chǎn)品的更新?lián)Q代,前景廣闊。這多功能數(shù)字鐘具備單片機最小系統(tǒng)的基本組成,對于我們了解單片機有很大的幫助。</p><p>  當今社會是一個追求快速、高效的

18、社會,時間就是金錢因此準確的掌握時間和分配時間對人們來說至關(guān)重要。在飛速發(fā)展的單片機技術(shù)的推動下,現(xiàn)代的電子產(chǎn)品幾乎滲透到了社會的各個領(lǐng)域,人們對時間計量的精度要求越來越高,應(yīng)用越來越廣。時鐘不僅要更好、更方便、更精確的顯示時間,還要有其它的一些實用的附加功能,這就要求人們不斷設(shè)計研發(fā)出新型的時鐘。所以一個能夠精確計時以及有其他多種用途的時鐘是對人們的生活工作是非常具有現(xiàn)實意義的。 由于數(shù)字集成電路的發(fā)展和石英晶體與振蕩器的廣泛應(yīng)用,使

19、得數(shù)字時鐘的精度遠遠超過老式鐘表,而且能夠方便地擴展鐘表原先的報時功能,數(shù)字時鐘不管在性能還是功能上都遠遠超過了傳統(tǒng)的鐘表,給人們的生活帶來了極大的便利。因此,對多功能數(shù)字鐘進行研究有著非?,F(xiàn)實的意義。 而且本設(shè)計還實現(xiàn)了電子掛歷功能,在日常生活當中,一般掛歷都用紙做成的,對于現(xiàn)今世界的環(huán)保問題有不少壞處,雖然也有一些是用可再循環(huán)的材料,但是一般的掛歷基本上都是用完就扔掉,但是電子掛歷則可以一直用,既能支持環(huán)保又能跟上時代。</p

20、><p><b>  1.2 設(shè)計內(nèi)容</b></p><p>  多功能數(shù)字時鐘的基本功能就是時鐘顯示時分秒,年月日,鬧鐘。另外還根據(jù)人們?nèi)粘I钚枨髷U展了以下幾種功能:陰歷、萬年歷、溫濕度顯示、紅外遙控、數(shù)碼相框、節(jié)日提醒。本設(shè)計以單片機STM32F103RCT6作為數(shù)字時鐘的核心控制器;采用實時時鐘芯片SD2403API計算當前的秒、分、時、日、月、年;通過數(shù)字溫濕

21、度傳感器DHT11獲取環(huán)境溫濕度;使用SPI接口配合文件系統(tǒng)Fatfs讀取SD卡文件實現(xiàn)數(shù)碼相框和備忘錄功能;并且通過軟件編寫,實現(xiàn)電子掛歷、節(jié)日提醒等功能。</p><p><b>  2 總體方案確定</b></p><p>  2.1 主控芯片方案</p><p>  方案一:STC89C52是一種低功耗、高性能CMOS8位微控制器,具有

22、 8K 在系統(tǒng)可編程Flash 存儲器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標準功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線, 看門狗定時器,內(nèi)置4KB EEPROM,MAX810復位電路,三個16 位 定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工 串行口。另外 STC89X52 可降至0Hz 靜態(tài)邏輯

23、操作,支持2種 軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié), 單片機一切工作停止,直到下一個中斷或硬件復位為止。最高運作頻率35MHz,6T/12T可選。</p><p>  方案二:選用意法半導體公司推出的基于ARM CORTEX-M3內(nèi)核的STM32F103RCT6微控制器。STM32系列基于專為要求高性能、

24、低成本、低功耗的嵌入式應(yīng)用專門設(shè)計的ARM Cortex-M3內(nèi)核。按性能分成兩個不同的系列:STM32F103“增強型”系列和STM32F101“基本型”系列。增強型系列時鐘頻率達到72MHz,是同類產(chǎn)品中性能最高的產(chǎn)品;基本型時鐘頻率為36MHz,以16位產(chǎn)品的價格得到比16位產(chǎn)品大幅提升的性能,是16位產(chǎn)品用戶的最佳選擇。兩個系列都內(nèi)置32K到128K的閃存,不同的是SRAM的最大容量和外設(shè)接口的組合。時鐘頻率72MHz時,從閃存

25、執(zhí)行代碼,STM32功耗36mA,是32位市場上功耗最低的產(chǎn)品,相當于0.5mA/MHz。STM32F103RCT6屬于“增強型”,其包含256KB閃存和48KB RAM,時鐘頻率可達72MHz,指令速度可接近80MIPS,且集成了豐富的片內(nèi)外設(shè)。在芯片功耗方面,已接近MSP430超低功耗單片機水平,而且芯片價格便宜。</p><p>  方案三:采用S3C2410A作為嵌入式處理芯片實現(xiàn)TFT液晶顯示。S3C2

26、410A的CPU內(nèi)核采用的是ARM公司設(shè)計的16/32為ARM920T RISC處理器,該處理器提供了一組完整的系統(tǒng)外圍設(shè)備,從而大大減少了整個系統(tǒng)的成本,省去了為系統(tǒng)配置額外器件的開銷。</p><p>  方案比較:STC89C52的片上ROM和RAM較少,而本設(shè)計的軟件程序較大,需要外擴ROM和RAM;而且STC89C52的運行速度較慢,用戶體驗效果不好?;赟3C2410A的系統(tǒng)硬件構(gòu)建比較復雜,成本也

27、較高。相比之下,STM32F103RCT6的系統(tǒng)構(gòu)建比較簡單,成本較低,再結(jié)合本設(shè)計對于硬件資源、功耗等方面的需求,選用方案二更合適。</p><p><b>  2.2 顯示方案</b></p><p>  方案一:采用LED數(shù)碼管動態(tài)掃描。LED數(shù)碼管價格便宜,對于顯示數(shù)字最合適,但功耗較大,占用體積大,且顯示容量不夠。</p><p> 

28、 方案二:采用TFT液晶屏幕,響應(yīng)速度快,一般是在40MS以下,色彩豐富有過渡感,工作穩(wěn)定,除了可以顯示數(shù)字和漢字外,還能顯示真彩圖像。</p><p>  方案比較:本設(shè)計中的顯示內(nèi)容較多,包括了數(shù)字、漢字、圖片,顯然TFT液晶屏幕更符合本設(shè)計的需求,因此選擇方案二。</p><p>  2.3 實時時鐘方案</p><p>  方案一:利用STM32的RTC模塊

29、實現(xiàn),RTC模塊擁有一組連續(xù)計數(shù)的計數(shù)器,在相應(yīng)軟件配置下,可提供時鐘日歷的功能。修改計數(shù)器的值可以重新設(shè)置系統(tǒng)當前的時間和日期。RTC模塊和時鐘配置系統(tǒng)(RCC_BDCR寄存器)是在后備區(qū)域,即在系統(tǒng)復位或從待機模式喚醒后RTC的設(shè)置和時間維持不變。當我們需要在掉電之后,又需要RTC時鐘正常運行的話,單片機的VBAT腳需外接3.3V的鋰電池。當我們重新上電的時候,主電源給VBAT供電,當系統(tǒng)掉電之后VBAT給RTC時鐘工作,RTC中的

30、數(shù)據(jù)都會保持在后備寄存器當中。</p><p>  方案二:采用常用的DS1302芯片。DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31×8的用于臨時性存放數(shù)

31、據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時提供了對后備電源進行涓細電流充電的能力。</p><p>  方案三:采用內(nèi)置晶振、具有標準I2C接口的高精度國產(chǎn)實時時鐘芯片SD2403API。SD2403API是一種內(nèi)置晶振、具有標準IIC接口的實時時鐘芯片,CPU可使用該接口通過5位地址尋址來讀寫片內(nèi)32字節(jié)寄存器的數(shù)據(jù)(包括時間寄存器、報警

32、寄存器、控制寄存器、通用SRAM寄存器);內(nèi)置晶振,該芯片可保證時鐘精度為±5ppm(在25℃±1℃下),即年誤差小于2.5分鐘;具有一個后備電池輸入腳VBAT,當芯片檢測到主電源VDD掉到后備電池電壓以下,芯片會自動轉(zhuǎn)為由接在VBAT的后備電池供電。</p><p>  方案比較:STM32的RTC模塊工作時不穩(wěn)定,受外部晶振的影響較大。DS1302的時鐘精度易受外加晶振和電容的影響,而高精

33、度的晶振和電容價格較貴。而SD2403API不需要外加晶振和電容,而且內(nèi)置時鐘精度數(shù)字調(diào)整功能,不需要太多設(shè)置就能保證很高的精度,因此選擇方案三。</p><p>  2.4 溫濕度傳感器方案</p><p>  方案一:采用常用的溫度傳感器DS18B20加濕度傳感器HS1101/HS1100。DS18B20,常用的溫度傳感器,具有體積小,硬件開銷低,抗干擾能力

34、強,精度高的特點。HS1101是法國Humirel公司推出的一款電容式相對濕度傳感器。該傳感器可廣泛應(yīng)用于辦公室、家庭、汽車駕駛室、和工業(yè)過程控制系統(tǒng)等,對空氣濕度進行檢測。</p><p>  方案二:采用由瑞士Sensirion推出的SHT10數(shù)字溫度傳感器。SHT10體積微小、響應(yīng)迅速、低能耗、可浸沒、抗干擾能力強、溫濕一體,兼有露點測量,性價比高,使該產(chǎn)品能夠適用于多種場合的應(yīng)用。</p>

35、<p>  方案三:采用常用的溫濕度傳感器DHT11。DHT11數(shù)字溫濕度傳感器是一款含有已校準數(shù)字信號輸出的溫濕度復合傳感器,它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性和卓越的長期穩(wěn)定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強、性價比極高等優(yōu)點。</p><p>  方案比較:采用溫濕

36、一體的傳感器可以簡化電路,節(jié)約成本。DHT11的價格便宜,電路簡單,測量精度: 濕度±5%RH, 溫度±2℃,既能滿足本設(shè)計的需求,性價比又高,因此選擇方案三。</p><p>  2.5 圖片存儲方案</p><p>  方案一:通過取模軟件將圖片的點陣信息和顏色信息提取出來并以數(shù)組形式保存,把這些數(shù)組直接放在主控芯片的片上ROM上,這樣就可以不用添加外部存儲器。&

37、lt;/p><p>  方案二:將圖片直接保存在SD卡上,由主控芯片從SD卡中讀取圖片數(shù)據(jù)并完成解碼,然后送往TFT液晶屏進行顯示。</p><p>  方案比較:雖然方案一更容易實現(xiàn),但是只能顯示特定的幾張圖片,而且需要更換圖片時就必須要進行重新進行取模、修改代碼、燒錄程序等操作,缺乏靈活性。而方案二更換圖片時只需要更換SD卡內(nèi)的圖片,不涉及程序改動,更具靈活性,因此選擇方案二。</p

38、><p><b>  3 硬件電路設(shè)計</b></p><p>  3.1 系統(tǒng)總體框圖</p><p>  圖 1 系統(tǒng)總體框圖</p><p>  3.2 STM32F103RCT6最小系統(tǒng)設(shè)計</p><p>  STM32F103RCT6最小系統(tǒng)包括晶振電路、復位電路、啟動模式選擇電路、SWJ

39、接口電路、供電電路,如圖2所示:</p><p>  圖 2 STM32F103RCT6最小系統(tǒng)電路圖</p><p>  3.3 SD2403電路圖設(shè)計</p><p>  SD2403API內(nèi)置晶振,不需要外加晶振和電容作為振蕩電路,只需要為IIC引腳加上上拉電阻,并添加主電源VDD和后背電源VBAT電路。在電源設(shè)計方面,需要注意,當VDD=3.3V時 ,VB

40、AT接3V電池會有一些問題:通常標稱3V的電池在剛開始使用時電壓會達到3.3V或更多,這是芯片會進入VBAT模式而讀不出數(shù)據(jù)。要解決此問題,應(yīng)將VBAT腳接地,電池和主電源均通過二極管向芯片的VDD供電,如圖3所示:</p><p>  圖 3 SD2403API電路圖</p><p>  3.4 DHT11電路圖設(shè)計</p><p>  主控芯片STM32F10

41、3RCT6通過單總線方式和DHT11進行通信,從而獲取到溫濕度信息,如圖4所示:</p><p>  圖 4 DHT11電路圖</p><p>  3.5 TFT顯示電路設(shè)計</p><p>  本設(shè)計采用一塊2.2寸的TFT液晶屏,該液晶屏采用ILI9340作為主控芯片,采用SPI通信協(xié)議,最少只需要4個IO口驅(qū)動,只需要把液晶屏的SPI引腳與主控芯片STM32

42、F103RCT6對應(yīng)的硬件SPI引腳相連即可,如圖5所示:</p><p>  圖 5 TFT顯示電路圖</p><p>  3.6 SD存儲卡電路設(shè)計</p><p>  SD卡有兩種讀取模式:SD方式和SPI方式。本設(shè)計中采用的是SPI方式,這樣只需要把SD卡的SPI引腳與主控芯片STM32F103RCT6對應(yīng)的硬件SPI引腳相連即可,如圖6所示:</p

43、><p>  圖 6 SD存儲卡電路圖</p><p>  3.7 紅外接收電路設(shè)計</p><p>  本設(shè)計采用紅外一體化接收頭VS1838接收來自遙控器的調(diào)制信號,VS1838將調(diào)制信號轉(zhuǎn)化為脈沖信號后傳輸給主控芯片,再由主控芯片進行軟件解碼,電路圖如圖7所示:</p><p>  圖 7 紅外接收電路</p><p

44、><b>  4 程序設(shè)計</b></p><p>  本設(shè)計的程序設(shè)計主要包括以下幾個部分:1、系統(tǒng)初始化流程;2、時間調(diào)整程序設(shè)計;3、日期調(diào)整程序設(shè)計;4、鬧鐘處理程序設(shè)計; 5、節(jié)日提醒程序設(shè)計。下面會對這幾個部分的程序設(shè)計進行解析并附有相應(yīng)的流程圖。</p><p>  4.1 系統(tǒng)初始化流程</p><p>  系統(tǒng)初始化主要

45、完成一下幾個工作:1、主控芯片STM32F103RCT6引腳配置、中斷和片上外設(shè)的初始化;2、TFT液晶屏幕的初始化;3、SD卡的初始化;4、Fatfs文件系統(tǒng)的初始化;5、主界面初始化。</p><p><b>  流程圖如下所示:</b></p><p>  圖 8 系統(tǒng)初始化流程圖</p><p>  4.1.1 SD卡初始化介紹<

46、;/p><p>  SD卡的初始化對于后續(xù)的Fatfs文件系統(tǒng)初始化和圖片的顯示是非常重要的,只有進行了正確的初始化,才能進行后面的各項操作。在初始化過程中,SPI的時鐘不能太快(400KHz以下),否則會初始化失敗。初始化成功后再提升SPI的時鐘速率,以提高讀取文件的速度。初始化步驟如下:</p><p> ?。?)延時至少74個時鐘,等待SD卡內(nèi)部操作完成,在MMC協(xié)議中有明確說明。<

47、;/p><p> ?。?)CS低電平選中SD卡。</p><p>  (3)發(fā)送CMD0,需要返回0x01,進入Idle狀態(tài)。</p><p> ?。?)為了區(qū)別SD卡是2.0還是1.0,或是MMC卡,這里根據(jù)協(xié)議向上兼容的原理,首先發(fā)送只有SD2.0才有的命令CMD8,如果CMD8返回無錯誤,則初步判斷為2.0卡,進一步發(fā)送命令循環(huán)發(fā)送CMD55+ACMD41,直到返

48、回0x00,確定SD2.0卡初始化成功,進入Ready狀態(tài),再發(fā)送CMD58命令來判斷是HCSD還是SCSD,到此SD2.0卡初始化成功。如果CMD8返回錯誤則進一步判斷為1.0卡還是MMC卡,循環(huán)發(fā)送CMD55+ACMD41,返回無錯誤,則為SD1.0卡,到此SD1.0卡初始成功,如果在一定的循環(huán)次數(shù)下,返回為錯誤,則進一步發(fā)送CMD1進行初始化,如果返回無錯誤,則確定為MMC卡,如果在一定的次數(shù)下,返回為錯誤,則不能識別該卡,初始結(jié)

49、束。</p><p><b> ?。?)CS拉高。</b></p><p> ?。?)SPI設(shè)置到高速模式。</p><p>  4.1.2 Fatfs文件系統(tǒng)介紹</p><p>  Fatfs是一個通用的文件系統(tǒng)模塊,用于在小型嵌入式系統(tǒng)中實現(xiàn)FAT文件系統(tǒng)。Fatfs的編寫遵循ANSI C,因此不依賴于硬件平臺。它

50、可以嵌入到便宜的微控制器中,如 8051, PIC, AVR, SH, Z80, H8, ARM 等等,不需要做任何修改。</p><p>  FatFs 提供下面的函數(shù): </p><p>  f_mount - 注冊/注銷一個工作區(qū)域(Work Area) </p><p>  f_open - 打開/創(chuàng)建一個文件f_close - 關(guān)閉一個文件 </p&

51、gt;<p>  f_read - 讀文件f_write - 寫文件 </p><p>  f_lseek - 移動文件讀/寫指針 </p><p>  f_truncate - 截斷文件 </p><p>  f_sync - 沖洗緩沖數(shù)據(jù) Flush Cached Data </p><p>  f_opendir - 打開

52、一個目錄 </p><p>  f_readdir - 讀取目錄條目 </p><p>  f_getfree - 獲取空閑簇 Get Free Clusters </p><p>  f_stat - 獲取文件狀態(tài) </p><p>  f_mkdir - 創(chuàng)建一個目錄 </p><p>  f_unlink - 刪

53、除一個文件或目錄 </p><p>  f_chmod - 改變屬性(Attribute) </p><p>  f_utime - 改變時間戳(Timestamp) </p><p>  f_rename - 重命名/移動一個文件或文件夾 </p><p>  f_mkfs - 在驅(qū)動器上創(chuàng)建一個文件系統(tǒng) </p><p

54、>  f_forward - 直接轉(zhuǎn)移文件數(shù)據(jù)到一個數(shù)據(jù)流 Forward file data to the stream directly </p><p>  f_gets - 讀一個字符串 </p><p>  f_putc - 寫一個字符 </p><p>  f_puts - 寫一個字符傳 </p><p>  f_print

55、f - 寫一個格式化的字符磁盤I/O接口</p><p><b>  Fatfs的移植:</b></p><p> ?。?)定義數(shù)據(jù)類型,修改integer.h ,使其中定義的數(shù)據(jù)類型與相應(yīng)的MCU相匹配。</p><p> ?。?)配 置 ff.h,用戶可以對應(yīng)于不同的文件系統(tǒng)的配置,在相應(yīng)的地方進行修改,ff.h文件中有詳細注釋,用戶可以根

56、據(jù)具體情況進行修改。</p><p>  (3)最關(guān)鍵的一步,底層函數(shù)的修改。本系統(tǒng)有6個底層函數(shù)需要用戶根據(jù)具體情況進行修改:</p><p>  DSTATUS disk_initialize磁盤初始化,如果SD卡設(shè)置正常,直接返回0或者其他狀態(tài)。</p><p>  DSTATUS disk_status磁盤狀態(tài)監(jiān)測,可以返回0或者其他狀態(tài)。</

57、p><p>  DRESULT disk_read磁盤讀函數(shù),調(diào)用SPI讀單個或多個區(qū)塊的函數(shù)。 </p><p>  DRESULT disk_write磁盤寫函數(shù),調(diào)用SPI寫單個或多個區(qū)塊的函數(shù)。 </p><p>  DRESULT disk_ioctl僅在磁盤格式化時需要,如不需要可返回0。 </p><p>  DWORD

58、get_fattime RCT時間獲得,具體格式可以參考具體的文獻說明。</p><p>  此外還需要配置4個底層函數(shù),函數(shù)分別是主控芯片使用SPI讀/寫一個sector和讀/寫多個sector的函數(shù)。</p><p>  4.2 時間調(diào)整程序設(shè)計</p><p>  時間調(diào)整的主要調(diào)整程序流程為:首先按下設(shè)置鍵進行狀態(tài)轉(zhuǎn)換,進入時間設(shè)置狀態(tài)(此時屏幕在時間下會

59、出現(xiàn)下劃線),然后通過左右鍵,就可以進行移位調(diào)整,依次能夠利用上下鍵調(diào)整秒、分、時。當調(diào)整完所有時間后,就可以通過設(shè)置鍵退出時間設(shè)置狀態(tài),或者系統(tǒng)檢測無輸入按鍵狀態(tài)超時后自動退出時間設(shè)置狀態(tài),接著就把新設(shè)置的時間更新到SD2403中。流程圖如下所示:</p><p>  圖 9 時間調(diào)整流程圖</p><p>  4.3 日期調(diào)整程序設(shè)計</p><p>  日期

60、調(diào)整的主要調(diào)整程序流程為:首先按下設(shè)置鍵進行狀態(tài)轉(zhuǎn)換,進入日期設(shè)置狀態(tài)(此時屏幕在日期下會出現(xiàn)下劃線),然后通過左右鍵,就可以進行移位調(diào)整,依次能夠利用上下鍵調(diào)整日、月、年。當調(diào)整完所有日期后,就可以通過設(shè)置鍵退出日期設(shè)置狀態(tài),或者系統(tǒng)檢測無輸入按鍵狀態(tài)超時后自動退出日期設(shè)置狀態(tài),接著就把新設(shè)置的日期更新到SD2403中。流程圖如下所示:</p><p>  圖 10 日期調(diào)整流程圖</p>&l

61、t;p>  4.4 鬧鐘處理程序設(shè)計</p><p>  鬧鐘處理的主要程序流程為:首先按下設(shè)置鍵進行狀態(tài)轉(zhuǎn)換,進入鬧鐘設(shè)置狀態(tài),可以設(shè)置鬧鐘的開關(guān)狀態(tài)和鬧鐘時間。系統(tǒng)每過一分鐘,就取當前時間與鬧鐘時間比較,當兩者一致并且鬧鐘處于開啟狀態(tài)時,鬧鐘響起,按任意鍵取消鬧鐘鈴響,或者等待鬧鐘鈴響時間超時后自動關(guān)閉鈴響。流程圖如下所示:</p><p>  圖 11 鬧鐘處理流程圖<

62、/p><p>  4.5 節(jié)日提醒程序設(shè)計</p><p>  節(jié)日提醒的主要程序流程為:系統(tǒng)中有一個預先設(shè)置的節(jié)日表,這個表記錄各個節(jié)日的日期和名稱。系統(tǒng)日期每更新一次(手動設(shè)置或者一天時間到),就遍歷這個節(jié)日表,檢測明天和今天是否某個節(jié)日的日期,如果是就更新顯示,屏幕顯示相關(guān)節(jié)日提醒的信息。流程圖如下所示:</p><p>  圖 12 節(jié)日提醒流程圖</p

63、><p><b>  5 調(diào)試與調(diào)試結(jié)果</b></p><p><b>  5.1 硬件調(diào)試</b></p><p>  在沒通電之前,先用萬用表檢查線路的正確性,并核對元器件的型號、規(guī)格是否符合要求。首要檢查的電源的正負極有沒有接反以及電源之間有沒有短路,各電源之間需要共VCC并且所有的地線需要共地。然后再檢查各個模塊的線

64、路是否有短路、斷路的情況出現(xiàn),另外晶體振蕩器和電容應(yīng)盡可能靠近單片機芯片安裝,以減少寄生電容,更好是保證振蕩器穩(wěn)定和可靠地工作。經(jīng)過仔細全面的排查,本設(shè)計確保了電路的正確的焊接,能為接下來的通電調(diào)試提供很大的方便。</p><p>  接上+5V電源后,分別測量各點電位是否正常。在斷電的情況下,除單片機以外,用仿真插頭將所連接電路與單片機仿真器的仿真接口相連,為軟件調(diào)試做好準備。</p><p

65、>  在硬件調(diào)試的過程中,存在的主要問題是,為了增加設(shè)計的可重用性和可維護性,很多器件都做成了可插拔的形式,有些器件可能會存在接觸不好的情況,影響了電路的調(diào)試。</p><p><b>  5.2 調(diào)試結(jié)果</b></p><p>  首先調(diào)試出TFT液晶顯示,方便觀看其他各項調(diào)試結(jié)果。其次調(diào)試SD2403模塊、DHT11溫濕度模塊、SD存儲卡模塊、紅外模塊,保

66、證這些模塊能夠被正常初始化成功,與主控芯片間的通信正常。最后再逐一對各個功能進行調(diào)試,通過TFT液晶顯示查看實際效果是否與預期的一樣。經(jīng)過調(diào)試,發(fā)現(xiàn)各個硬件模塊都能正常工作,各個功能的實際效果與預期的一致,并且在TFT液晶顯示屏中顯示出來,實現(xiàn)了設(shè)計所要功能,</p><p><b>  6 結(jié)論</b></p><p>  本次畢業(yè)設(shè)計收獲良多,完成了畢業(yè)設(shè)計的要求

67、,利用SD2403API時鐘芯片實現(xiàn)了時間顯示時、分、秒,年、月、日與星期的基本功能,并且能夠進行時間調(diào)整,同時根據(jù)我們中國人的使用習慣,增加了陰歷的顯示。另外還外加了一些擴展功能,比如:電子掛歷、溫濕度顯示、紅外遙控、數(shù)碼相框、節(jié)日提醒、備忘錄等,大大增加了設(shè)計的實用性。</p><p>  本設(shè)計雖然完成了基本功能,且有擴展,但是還有許多可以完善的地方。如可以增加語音報時,用于定點報時,更加方便人們對時間的掌

68、握;如可以增加MP3播放功能,用于設(shè)置鬧鈴類型或者平時聽音樂,更加方便于日常生活。</p><p><b>  參 考 文 獻</b></p><p>  王衛(wèi)星,鄧小玲,代芬,等.單片機原理與應(yīng)用開發(fā)技術(shù)[M].北京:中國水利水電出版社,2013:1-14.</p><p>  羅建軍,朱丹軍,顧剛,等.C++程序設(shè)計教程[M].北京:高等教

69、育出版社,2007:110-114.</p><p>  劉火良,楊森.STM32庫開發(fā)實戰(zhàn)指南[M].北京:機械工業(yè)出版社,2013:240-277.</p><p>  [英] Joseph Yiu. ARM Cortex-M3權(quán)威指南[M].北京: 北京航空航天大學出版社,2013:132-134.</p><p>  張濤,左謹平,馬華玲.FatFs在32位

70、微控制器STM32上的移植[J].電子技術(shù),2013,3:25-26.</p><p>  徐建功, 趙捷,李偉,等.基于STM32F103XX微處理器的Micro SD卡讀寫[J].現(xiàn)代電子技術(shù),2013,20:26-28.</p><p>  楊河理,熊曉東.電子萬年歷中公歷農(nóng)歷互換算法研究[J].長江大學學報(自科版)理工卷,2013,4:86-88.</p><

71、p>  凌志斌,鄧超平,鄭益慧,等.紅外遙控技術(shù)及其解碼方案[J].微處理機,2013,6:59-63.</p><p>  郭小芳,佘明輝.基于單片機的多功能數(shù)字鐘系統(tǒng)設(shè)計與分析[J].電子技術(shù),2012,6:35-40.</p><p>  附 錄</p><p>  附錄A 設(shè)計主要電路圖</p><p>  附錄B

72、 主要設(shè)計程序</p><p>  --******************************文件開始******************************</p><p>  ** 文件名稱: Main.c</p><p>  ** 最后修改日期: 2014/4/28</p><p>  ** 功能描述:

73、 主函數(shù)</p><p>  *******************************************************************--</p><p>  #include "stm32f10x.h"</p><p>  #include "GPIO_Config.h"</p&

74、gt;<p>  #include "SPI.h"</p><p>  #include "NVIC_Config.h"</p><p>  #include "TIM67.H"</p><p>  #include "SysTick_Delay_Period.h"<

75、/p><p>  #include "./GUI/TFTSPI.h"</p><p>  #include "./Time/Time.h"</p><p>  #include "./Calendar/Calendar.h"</p><p>  #include "./Cale

76、ndar/Gregorian2Lunar.h"</p><p>  #include "./Calendar/HolidayRemind.h"</p><p>  #include "./DHT11/DHT11.H"</p><p>  #include "./FatFS_R0.10/ff.h"&

77、lt;/p><p>  #include "./spi_sd/stm32_eval_spi_sd.h"</p><p>  #include "./Infrared/Infrared.h"</p><p>  #include "./Control/Control.h"</p><p>

78、  #include "./SD2403/SD2403.H"</p><p>  #include <string.h></p><p>  /* Global variables ---------------------------------------------------------*/</p><p>  uint8_t

79、 strTime[] = "23:59:55";</p><p>  uint8_t strDate[] = "2014-04-13";</p><p>  uint8_t strAlarm[] = "*12:30";</p><p>  uint8_t Key_Value; //按鍵值和紅外

80、接收碼</p><p>  uint8_t u8NumOfPic; //可供顯示的圖片數(shù)量</p><p>  extern uint32_t uiSetStatusTimes; //統(tǒng)計設(shè)置狀態(tài)處于設(shè)定狀態(tài)卻沒有按鍵輸入的時間</p><p>  extern uint8_t uiTempSecLow;//如果這個變量和時間的秒低位不同,

81、則說明一秒鐘時間到</p><p>  extern uint8_t uiTempMinuteLow; //如果這個變量和時間的分鐘低位不同,則說明一分鐘時間到</p><p>  extern uint8_t uiTempBCDDay;//如果這個變量BCD_Day不同,則說明一天時間到</p><p>  extern uint8_t uiAlarm

82、OnOff;//0-鬧鐘響,1-鬧鐘沒響</p><p>  extern uint32_t uiAlarmTimes;//統(tǒng)計鬧鐘已經(jīng)響的時間</p><p>  extern enum {SET_IDLE,SET_TIME,SET_DATE,SET_ALARM}eSetStatus;</p><p>  extern enum {SET_TIMEIDL

83、E,SET_SECOND,SET_MINUTE,SET_HOUR}eSetTimeStatus;</p><p>  extern enum {SET_YEAR,SET_MONTH,SET_DAY}eSetDateStatus;</p><p>  int main()</p><p><b>  {</b></p><p&

84、gt;  SD_Error status;</p><p><b>  FATFS fs;</b></p><p>  FILINFO finfo;</p><p><b>  DIR dir;</b></p><p>  FRESULT res;</p><p>  uin

85、t8_t uiGetTemHumTime;//保存上一次獲取溫濕度的分鐘值,默認每分鐘更新一次</p><p>  /* Vector Table is in RAM at 0x0 */</p><p>  // NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);</p><p>  NVIC_Config();<

86、/p><p>  GPIO_Config();</p><p>  SPI1_Config();</p><p>  SysTick_Conf();</p><p>  TFTSPI_Init();</p><p>  TFTSPI_Clear(LCD_COLOR_MAGENTA);</p><p>

87、;  TIM67_Conf();</p><p>  /*初始化通用定時器TIM2作為PWM輸出,并啟動定時器2*/</p><p>  TIMx_PWMOutConf();</p><p>  TIM_Cmd(TIM2,ENABLE);</p><p>  /*禁止輸出PWM*/</p><p>  TIM_CCxC

88、md(TIM2,TIM_Channel_3,DISABLE);</p><p>  /*初始化SD卡配置*/</p><p>  status = SD_Init();</p><p>  if(status != SD_RESPONSE_NO_ERROR)</p><p><b>  {</b></p>

89、<p>  //while(1);</p><p>  TFTSPI_SetFont(&Font12x12);</p><p>  TFTSPI_SetColors(LCD_COLOR_RED,LCD_COLOR_WHITE);</p><p>  TFTSPI_Write_CharString(XPOS_HOLIDAYREMIND,YPOS_HO

90、LIDAYREMIND_TODAY,"SD Error");</p><p><b>  }</b></p><p>  /*設(shè)置到高速模式*/</p><p>  SD_SPI_SetSpeed(SPI_SPEED_4);</p><p>  /*初始化文件系統(tǒng)環(huán)境*/</p><

91、;p>  res = f_mount(&fs ,"0:", 0);</p><p>  if(res != FR_OK)</p><p><b>  {</b></p><p>  //while(1);</p><p>  TFTSPI_SetFont(&Font12x12);

92、</p><p>  TFTSPI_SetColors(LCD_COLOR_RED,LCD_COLOR_WHITE);</p><p>  TFTSPI_Write_CharString(XPOS_HOLIDAYREMIND,YPOS_HOLIDAYREMIND_TODAY,"Fatfs Error");</p><p><b>  }

93、</b></p><p>  /*統(tǒng)計可供顯示的圖片數(shù)量,要求Pic文件夾下只能存放符合規(guī)格的圖片*/</p><p>  u8NumOfPic = 0;</p><p>  if(f_opendir(&dir,"/Pic") == FR_OK) //打開文件夾</p><p><b&

94、gt;  {</b></p><p>  while (f_readdir(&dir, &finfo) == FR_OK) //按照順序讀文件夾</p><p><b>  {</b></p><p>  if(0==finfo.fname[0]) break; //如果文件名為0,結(jié)束</

95、p><p>  if(finfo.fattrib == AM_ARC) //判斷文件屬性,只處理非文件夾</p><p><b>  {</b></p><p>  u8NumOfPic++;</p><p><b>  }</b></p><p><b

96、>  }</b></p><p><b>  }</b></p><p><b>  /*變量初始化*/</b></p><p>  DHT11_GetResult();//開機先獲取溫濕度</p><p>  SD2403_Read_Date();//開機先獲取SD2403存儲的

97、時間</p><p>  strTime[SECOND_LOW] = (BCD_Second&0x0F)+'0';</p><p>  strTime[SECOND_HIGH] = ((BCD_Second&0xF0)>>4)+'0';</p><p>  strTime[MINUTE_LOW] = (BC

98、D_Minute&0x0F)+'0';</p><p>  strTime[MINUTE_HIGH] = ((BCD_Minute&0xF0)>>4)+'0';</p><p>  strTime[HOUR_LOW] = (BCD_Hour&0x0F)+0x30;</p><p>  strTime

99、[HOUR_HIGH] = ((BCD_Hour&0x70)>>4)+'0';</p><p>  strDate[DAY_LOW] = (BCD_Day&0x0F)+'0';</p><p>  strDate[DAY_HIGH] = ((BCD_Day&0xF0)>>4)+'0';</

100、p><p>  strDate[MONTH_LOW] = (BCD_Month&0x0F)+'0';</p><p>  strDate[MONTH_HIGH] = ((BCD_Month&0xF0)>>4)+'0';</p><p>  strDate[YEAR0] = (BCD_Year&0x0F)

101、+'0';</p><p>  strDate[YEAR1] = ((BCD_Year&0xF0)>>4)+'0';</p><p>  uiYear = 2000+((BCD_Year&0xF0)>>4)*10+(BCD_Year&0x0F);</p><p>  uiMonth =

102、((BCD_Month&0xF0)>>4)*10+(BCD_Month&0x0F);</p><p>  uiDay = ((BCD_Day&0xF0)>>4)*10+(BCD_Day&0x0F);</p><p>  if(2==uiMonth)</p><p><b>  {</b>&

103、lt;/p><p>  uiMaxDay = iDaysOfYear[uiMonth-1]+is_leapyear(uiYear);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>

104、<p>  uiMaxDay = iDaysOfYear[uiMonth-1];</p><p><b>  }</b></p><p>  uiUnderline = 0;</p><p>  uiLengthPreUnderline = 0;</p><p>  Key_Value = 0;</p&g

105、t;<p>  uiAlarmOnOff = 0;</p><p>  uiAlarmTimes = 0;</p><p>  uiTempSecLow = strTime[SECOND_LOW];</p><p>  uiTempMinuteLow = strTime[MINUTE_LOW];</p><p>  uiTemp

106、BCDDay = BCD_Day;</p><p><b>  /*顯示掛歷*/</b></p><p>  print_year_month(uiYear,uiMonth);</p><p>  week_of_today(iWeekOfMonth,uiDay);</p><p>  Dis_Calendar_Pic

107、= 0;</p><p>  /*填充時間、日期、星期、農(nóng)歷、溫度和濕度的背景色(統(tǒng)一為白色背景)*/</p><p>  Fill_Rect(XPOS_STRTIME-2,YPOS_STRTIME-2,XPOS_STRALARM+12*6,YPOS_STRWEEK+16+2,LCD_COLOR_BLACK,MAIN_BACK_COLOR);</p><p>  /

108、*顯示時間和日期*/</p><p>  TFTSPI_SetFont(&Font16x24);</p><p>  TFTSPI_SetColors(LCD_COLOR_BLACK,LCD_COLOR_WHITE);</p><p>  TFTSPI_Write_CharString(XPOS_STRTIME,YPOS_STRTIME,strTime);&

109、lt;/p><p>  TFTSPI_Write_CharString(XPOS_STRDATE,YPOS_STRDATE,strDate);</p><p><b>  /*顯示周幾*/</b></p><p>  TFTSPI_SetColors(LCD_COLOR_BLACK,LCD_COLOR_WHITE);</p><

110、p>  TFTSPI_SetArea(XPOS_STRWEEK,YPOS_STRWEEK);</p><p>  TFTSPI_Draw_ChFont((uint8_t *)GB_Font16x16_MyChFontTable+(MyChFont_Zhou)*16*2);//顯示“周”字</p><p>  TFTSPI_SetArea(XPOS_STRWEEK+16,YPOS_ST

111、RWEEK);</p><p>  TFTSPI_Draw_ChFont((uint8_t *)GB_Font16x16_MyChFontTable+(MyChFont_Zero+iWeekOfToday%7)*16*2);//顯示“周(幾)”字</p><p><b>  /*顯示農(nóng)歷*/</b></p><p>  Conversion(s

112、trDate[YEAR3]-'0'-1,((strDate[YEAR1]-'0')<<4) | (strDate[YEAR0]-'0'),((strDate[MONTH_HIGH]-'0')<<4) | (strDate[MONTH_LOW]-'0'),((strDate[DAY_HIGH]-'0')<<4

113、) | (strDate[DAY_LOW]-'0'));</p><p>  Print_Lunar(month_moon,day_moon);</p><p>  /*顯示溫度和濕度*/</p><p>  Print_Tem_Hum(DHT11_Temp,DHT11_Hump);</p><p>  uiGetTemHum

114、Time = strTime[MINUTE_LOW];//保存上一次獲取溫濕度的分鐘值,默認每分鐘更新一次</p><p><b>  /*顯示鬧鐘*/</b></p><p>  TFTSPI_SetFont(&Font12x12);</p><p>  TFTSPI_SetColors(LCD_COLOR_BLACK,LCD_C

115、OLOR_WHITE);</p><p>  TFTSPI_Write_CharString(XPOS_STRALARM,YPOS_STRALARM,strAlarm);</p><p><b>  /*節(jié)日提醒*/</b></p><p>  holiday_remind();</p><p>  /*使能TIM6計數(shù)

116、*/</p><p>  TIM_Cmd(TIM6,ENABLE);</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  /*檢測是否一秒時間已經(jīng)到了*/</p><p>  if(uiTempSecLow !=

117、strTime[SECOND_LOW])</p><p><b>  {</b></p><p>  uiTempSecLow = strTime[SECOND_LOW];</p><p><b>  /*顯示時間*/</b></p><p>  TFTSPI_SetFont(&Font16

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論