標(biāo)題: 具有實時時鐘顯示的自行車?yán)锍瘫淼恼n程設(shè)計論文 [打印本頁]

作者: 51黑電子迷    時間: 2017-7-28 02:58
標(biāo)題: 具有實時時鐘顯示的自行車?yán)锍瘫淼恼n程設(shè)計論文

智能測控系統(tǒng)原理課程大作業(yè)

作業(yè)題目具有實時時鐘顯示的自行車?yán)锍瘫淼脑O(shè)計

學(xué)院名稱電氣工程學(xué)院

專業(yè)班級測控1303

學(xué)生姓名   劉*濤

學(xué)230*319

   完成時間: 2016-6            

任課教師

自評分:87

智能測控系統(tǒng)大作業(yè)任務(wù)書

學(xué)生姓名
劉帥濤
專業(yè)班級
測控1303班
學(xué)號
201323030319

具有實時時鐘顯示的自行車?yán)锍瘫淼脑O(shè)計

完成時間
2016 年 6月26日
主要功能

實現(xiàn)以下功能:
  • 自行車的速度里程的計算顯示
  • 當(dāng)前環(huán)境溫度測量與顯示
  • 按鍵調(diào)整自行車半徑
  • 具有實時時間顯示
設(shè)計要求

  • 能夠?qū)崿F(xiàn)速度的測量,里程的計算與顯示,并且能夠修改自行車的半徑
  • 能夠顯示溫度,當(dāng)前時間
  • 設(shè)計總體的硬件連接
  • 設(shè)計MCU測控源程序并完成調(diào)試。
  • 畫出相關(guān)的子程序流程圖及其實現(xiàn)的C語言代碼;


目  錄

摘要
1 設(shè)計需求分析
1.1 設(shè)計目的
1.2 市場需求分析
1.3 主要功能
2 特色與創(chuàng)新
2.1 超低功耗微控制器
2.2 彩屏顯示
3 功能規(guī)劃
3.1 溫度測量
3.2 時間顯示
3.3 自行車半徑的調(diào)整
3.4 速度里程的計算
4 硬件組成
4.1 硬件組成框圖
4.2 整體原理圖
4.3  ds18b20溫度傳感器
4.4  DS3231時鐘模塊
4.5 霍爾傳感器
4.6 TFT彩屏
5 軟件架構(gòu)和開發(fā)環(huán)境
5.1 程序流程圖
5.2 速度測量的原理
5.3 程序調(diào)試
總結(jié)
參考文獻(xiàn)
附錄一 元件清單
附錄二 源程序
附錄三 實物展示

摘要
隨著居民生活水平的不斷提高、低碳生活的提出,自行車不再僅僅是普通的運(yùn)輸、代步的工具,而是成為人們娛樂、休閑、鍛煉的首選,騎自行車出行越來成為人們出行的首要選擇,自行車?yán)锍瘫砟軌驖M足人們最基本的需求,讓人們能清楚地知道當(dāng)前的速度、里程等物理量。但是目前我們買的自行車好多都沒有速度里程表,我們無法知道騎行的速度和已經(jīng)騎行的里程數(shù);因此就有了這樣的想法:能不能自己設(shè)計一個自行車?yán)锍瘫,既?jīng)濟(jì)又實用。剛好我們這學(xué)期開設(shè)了智能測控系統(tǒng)這門課程,學(xué)了MSP430g2553這款微控制器,于是就想利用這款單片機(jī)來設(shè)計一個自行車?yán)锍瘫。其實原理也是比較簡單,通過傳感器采集自行車輪在規(guī)定時間內(nèi)轉(zhuǎn)的圈數(shù),然后通過單片機(jī)進(jìn)行處理,最后用LCD顯示屏將想要得到的數(shù)據(jù)顯示出來,就可以實現(xiàn)自行車的測速,因此需要我們選擇合適的傳感器,編寫相應(yīng)的程序來處理數(shù)據(jù)。本設(shè)計所選的是霍爾傳感器和1.44寸TFT彩屏模塊來實現(xiàn)自行車的測速和顯示的。                  

1 設(shè)計需求分析1.1 設(shè)計目的
隨著低碳環(huán)保理念的提出,自行車越來越受人們的歡迎,雖然市面上也有好多自行車?yán)锍瘫,但是自己剛好學(xué)了430微處理器,因此就像能不能用430做一款自行車?yán)锍瘫,不僅可以更好的學(xué)習(xí)這門課程,而且還可以吧學(xué)到的理論知識用到實踐中去,是一次很好的機(jī)會,并且,如果自己做的好的話這也是一個很大的市場。
自世界上第一輛自行車問世至今已有200多年的歷史了。18世紀(jì)末,法國人西夫拉克發(fā)明了最早的自行車。這輛最早的自行車是木制的,其結(jié)構(gòu)比較簡單。世界上第一批真正實用型的自行車出現(xiàn)于19世紀(jì)初。在20世紀(jì),自行車在中國獲得了前所未有的普及和發(fā)展。從某種意義上來說,中國是一個自行車的王國。每天清晨和落日時分,滾滾車流在中國的城市中碾動,這是最為壯觀的一道風(fēng)景,這是一條現(xiàn)代中國流動的長城。
隨著居民生活水平的不斷提高,自行車不再僅僅是普通的運(yùn)輸、代步的工具,而是成為人們娛樂、休閑、鍛煉的首選。因此,人們希望自行車的功用更強(qiáng)大,能給人們帶來更多的方便。自行車?yán)锍瘫碜鳛樽孕熊嚨囊淮筝o助工具也正是隨著這個要求而迅速發(fā)展的,其功能也逐漸從單一的里程顯示發(fā)展到速度、時間顯示,甚至有的還具有測量騎車人的心跳、顯示騎車人熱量消耗等功能。本設(shè)計采用了MSP430系列單片機(jī)設(shè)計一種體積小、操作簡單的便攜式自行車?yán)锍瘫,它能自動地顯示當(dāng)前自行車行走的距離、運(yùn)行的速度、當(dāng)前的時間、實時的溫度等。

1.2 市場需求分析
隨著自行車越來越多的被人們使用,自己如果能設(shè)計一款功耗低、成本低,既經(jīng)濟(jì)又實用的自行的自行車?yán)锍瘫,也是非常有市場前景的,只是后期的話再對自己的作品加以改進(jìn),更加的完善就行。目前好多城市都有刷卡租自行車的裝置,我們學(xué)校在今年也開始實施,這說明自行車在未來一段時間應(yīng)該還是非常流行的,人們之所以現(xiàn)在又開始這么喜歡使用自行車,我感覺主要有以下幾方面的原因:
  • 現(xiàn)在私家車越來越多,我們會經(jīng)常聽說,上班早高峰、下班晚高峰,開車的還沒有走路的快,交通擁堵人們也許早已習(xí)以為常了,因此人們就又開始重視自行車的使用。
  • 人們現(xiàn)在缺少鍛煉,職業(yè)病越來越多,騎自行車不僅可以給人們的上班提供方便,還可以鍛煉身體,一舉兩得。
  • 低碳生活的提出人們越來越重視環(huán)境保護(hù)。
1.3 主要功能
本設(shè)計主要實現(xiàn)的是自行車的測速、里程的計算,另外還加入了實時時間的顯示,還可以通過按鍵調(diào)整自行車的半徑,可以滿足各種規(guī)格的自行車,又多增加了溫度顯示,當(dāng)我們外出時可以給我們提提供實時的環(huán)境溫度信息。通過里程表,可以給我們騎車出行實時提供騎行的一些速度里程溫度等信息。供電采用的5V供電,供電電源比較常見。

2 特色與創(chuàng)新2.1 超低功耗微控制器
本款自行車?yán)锍瘫聿捎玫氖荰I公司的MSP430g2553微控制器,MSP430 單片機(jī)之所以有超低的功耗,是因為其在降低芯片的電源電壓和靈活而可控的運(yùn)行時鐘方面都有其獨(dú)到之處。
首先,MSP430 系列單片機(jī)的電源電壓采用的是1.8-3.6V 電壓。因而可使其在1MHz 的時鐘條件下運(yùn)行時,芯片的電流最低會在165μA左右,RAM保持模式下的最低功耗只有0.1μA。
其次,獨(dú)特的時鐘系統(tǒng)設(shè)計。在 MSP430 系列中有兩個不同的時鐘系統(tǒng):基本時鐘系統(tǒng)、鎖頻環(huán)(FLL 和FLL+)時鐘系統(tǒng)和DCO數(shù)字振蕩器時鐘系統(tǒng)?梢灾皇褂靡粋晶體振蕩器(32.768kHz)DT-26 OR DT-38,也可以使用兩個晶體振蕩器。由系統(tǒng)時鐘系統(tǒng)產(chǎn)生 CPU 和各功能所需的時鐘。并且這些時鐘可以在指令的控制下,打開和關(guān)閉,從而實現(xiàn)對總體功耗的控制。
由于系統(tǒng)運(yùn)行時開啟的功能模塊不同,即采用不同的工作模式,芯片的功耗有著顯著的不同。在系統(tǒng)中共有一種活動模式(AM)和五種低功耗模式(LPM0~LPM4)。在實時時鐘模式下,可達(dá)2.5μA ,在RAM 保持模式下,最低可達(dá)0.1μA 。
2.2 彩屏顯示
這款自行車?yán)锍瘫聿捎玫氖?.44寸的128*128分辨率的TFT彩屏顯示,可以顯示16*16的漢字8行8列,足夠顯示各種想要的信息,并且是24位真彩屏,不僅實用,而且好看,價格也比較便宜。
3 功能規(guī)劃3.1 溫度測量
溫度采用DS18B20數(shù)字溫度傳感器,不用再進(jìn)行模數(shù)裝換,使用方便,溫度測量誤差小,連接簡單,價格便宜,多種特點綜合分析后決定采用該數(shù)字溫度傳感器。
3.2 時間顯示
時鐘模塊采用DS3231,DS3231內(nèi)部集成了TCXO、RTC和32.768kHz晶體,并采用低成本、標(biāo)準(zhǔn)型、16引腳SOIC封裝。在-40℃至+85℃溫度范圍內(nèi),計時精度為±2分鐘/年。這一出色性能使DS3231成為當(dāng)前要求高計時精度應(yīng)用的最佳解決方案。因此本設(shè)計采用了該時鐘模塊,價格便宜,、精度高。
3.3 自行車半徑的調(diào)整
由于每種自行車的半徑不一樣,在進(jìn)行速度和里程的計算的時候需要用到自行車的半斤,從而計算出速度和里程,因此,為了使里程變能夠適應(yīng)各種規(guī)格的自行車,在安裝的調(diào)試的時候需要對半徑進(jìn)行修改,而如果不加按鍵調(diào)整的話,每次修改半徑都要在程序中輸入對應(yīng)規(guī)格型號的自行車半斤,這樣可移植性就差了,不能量化生產(chǎn),
3.4 速度里程的計算
速度計算原理是用的微處理器的計數(shù)器,大概原理:首先計數(shù)器清零,開始計數(shù),延時一秒,停止計數(shù),讀取計數(shù)器中的數(shù)值,計數(shù)值即是測得的頻率,通過機(jī)械結(jié)構(gòu)來得到轉(zhuǎn)速,通過半徑計算出速度和里程。
4 硬件組成4.1 硬件組成框圖
本設(shè)計設(shè)計的自行車?yán)锍瘫淼挠布M成框圖如圖4.1-1所示:
圖4.1-1 硬件組成框圖
4.2 整體原理圖
4.3 ds18b20溫度傳感器4.3.1 DS18B20功能特點
①采用單總線技術(shù),與單片機(jī)通信只需要一根I/O線,在一根線上可以掛接多個DS18B20。
②每只DS18B20具有一個獨(dú)有的,不可修改的64位序列號,根據(jù)序號訪問對應(yīng)的器件。
③低壓供電,電源范圍從3.0~5.5V,可以本地供電,也可以直接從數(shù)據(jù)線竊取電源(寄生電源方式)。
④測溫范圍為-55℃~+125℃,在-10℃~+85℃范圍內(nèi)誤差為±0.5℃。
⑤可編輯分辨率為9~12位,對應(yīng)的可分辨溫度分別為0.5℃,0.25℃,0.125℃和0.0625℃,可實現(xiàn)高精度測溫。
⑥用戶可自設(shè)定報警上下限溫度。
⑦報警搜索命令可識別和尋址超過程序限定溫度(溫度報警條件)的器件。
⑧DS18B20的分辨率由用戶通過EEPROM設(shè)置為9~12位。
⑨DS18B20可將檢測到溫度值直接轉(zhuǎn)化為數(shù)字量,并通過串行通信的方式與主控制器進(jìn)行數(shù)據(jù)通信。
⑩負(fù)電壓特性,電源極性接反時,溫度計不會因為發(fā)熱而燒毀,只是不能正常工作。
在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。
4.3.2 工作原理
DS18B20在出廠時默認(rèn)配置為12位,其中最高位為符號位,即溫度值共11位,單片機(jī)在讀取數(shù)據(jù)時,一次會讀2字節(jié)共16位,讀完后將低11位的二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù)后再乘以0.0625便為所測的實際溫度值。另外,還需要判斷溫度的正負(fù)。前5個數(shù)字為符號位,這5位同時變化,我們只需要判斷11位就可以了。前5位為1時,讀取的溫度為負(fù)值,且測到的數(shù)值需要取反加1再乘以0.0625才可以得到世紀(jì)的溫度值。前5位為0時,讀取的溫度為正值,且溫度為正值時,只需要將測得的數(shù)值乘以0.0625即可得到實際的溫度值。
DS18B20部分溫度值對應(yīng)的二進(jìn)制溫度表示數(shù)據(jù)
4.4 DS3231時鐘模塊
DS3231內(nèi)部集成了TCXO、RTC和32.768kHz晶體,并采用低成本、標(biāo)準(zhǔn)型、16引腳SOIC封裝。在-40℃至+85℃溫度范圍內(nèi),計時精度為±2分鐘/年。這一出色性能使DS3231成為當(dāng)前要求高計時精度應(yīng)用的最佳解決方案。而RTC的其它集成功能也擴(kuò)展了系統(tǒng)應(yīng)用領(lǐng)域,適合那些對計時精度要求極高的應(yīng)用。應(yīng)用包括:服務(wù)器、電表、安防及門禁控制系統(tǒng)、車隊管理、遠(yuǎn)程信息處理系統(tǒng)、GPS導(dǎo)航裝置、POS終端以及ATM。DS3231是低成本、高精度I2C實時時鐘(RTC),具有集成的溫補(bǔ)晶振(TCXO)和晶體。該器件包含電池輸入端,斷開主電源時仍可保持精確的計時。集成晶振提高器件的長期精確度,并減少了生產(chǎn)線的元件數(shù)量。
DS3231的引腳功能說明如下:32kHz是32kHz頻率輸出;VCC用于主電源的DC引腳;INT/SQW為低電平有效中斷或方波輸出;RST是低電平有效復(fù)位引腳;NC表示無連接,外部必須接地;GND為地;VBAT為備用電源輸入;SDA為串行數(shù)據(jù)輸入、輸出;SCL為串行時鐘輸入。
RTC保存秒、分、時、星期、日期、月和年信息。少于31天的月份,將自動調(diào)整月末的日期,包括閏年的修正。時鐘的工作格式可以是24小時或帶AM/PM指示的12小時格式。提供兩個可設(shè)置的日歷鬧鐘和一個可設(shè)置的方波輸出。DS3231采用I2C總線與系統(tǒng)微控制器進(jìn)行通信,I2C總線是由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備,由于接口直接在組件之上,因此I2C總線占用空間少,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本。它支持多主控,任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主總線。一個主控能夠控制信號的傳輸和時鐘頻率。I2C總線通過兩根連線(串行時鐘線SCL和雙向傳送SDA)實現(xiàn)半雙工同步數(shù)據(jù)傳輸,確保兩器件之間地址和數(shù)據(jù)信息的雙向傳輸。它采用器件地址的硬件設(shè)置方法(即每個器件具有一個確定的ID),通過軟件尋址,從而避免器件的片選信號線尋址,使硬件系統(tǒng)擴(kuò)展靈活簡便。為保證通信正常,必須保證I2C總線上的數(shù)據(jù)能夠順利傳送。在數(shù)據(jù)開始傳送前,首先讓I2C接口進(jìn)行初始化。DS3231的I2C接口的初始化操作可通過微控制器在總線上發(fā)送一個有效START條件來實現(xiàn),因為微控制器產(chǎn)生的START信號能夠終止DS3231的I2C接口當(dāng)前的數(shù)據(jù)收、發(fā)過程,并將該接口置于START條件后的待命狀態(tài)。但要發(fā)送一個有效的START條件,必須在DS3231釋放SDA數(shù)據(jù)線時才能實現(xiàn)。如果SDA數(shù)據(jù)線處于低電平狀態(tài),這時,可以讓系統(tǒng)微控制器產(chǎn)生一個附加的SCL脈沖來迫使DS3231接口送出下一位數(shù)據(jù)。假設(shè)下一位數(shù)據(jù)仍然為邏輯“0”,就繼續(xù)產(chǎn)生附加的SCL脈沖,經(jīng)過多個SCL脈沖后,DS3231就會釋放SDA數(shù)據(jù)總線。完成I2C總線的初始化后,接著進(jìn)行控制和狀態(tài)寄存器的初始化設(shè)置,確定正確的數(shù)據(jù)范圍,就可以運(yùn)行相應(yīng)的測控程序。
除計時精度高之外,DS3231還其有一些其它功能,這些功能擴(kuò)展了系統(tǒng)主機(jī)的附加功能和選擇范圍。該器件內(nèi)部集成了一個非常精確的數(shù)字溫度傳感器,可通過I2C接口對其進(jìn)行訪問(如同時間一樣)。這個溫度傳感器的精度為±3℃。片上控制電路可實現(xiàn)自動電源檢測,并管理主電源和備用電源(即低壓電池)之間的電源切換。如果主電源掉電,該器件仍可繼續(xù)提供精確的計時和溫度,性能不受影響。
4.5 霍爾傳感器
霍爾傳感器是對磁敏感的傳感元件,由磁鋼、霍耳元件等組成。測量系統(tǒng)的轉(zhuǎn)速傳感器選用CS3144的霍爾傳感器,其響應(yīng)頻率為250KHz,額定電壓為4.5-24(V)、檢測距離為10(mm)。其在大電流磁場或磁鋼磁場的作用下,能測量高頻、工頻、等各種波形電流。該傳感器具有測量精度高、電壓范圍寬、功耗小、輸出功率大等優(yōu)點,廣泛應(yīng)用在高速計數(shù)、測頻率、測轉(zhuǎn)速等領(lǐng)域。輸出電壓4.5~24V,直流電源要有足夠的濾波電容,測量極性為S極。安裝時將一非磁性圓盤固定在電動機(jī)的轉(zhuǎn)軸上,將磁鋼粘貼在圓盤邊緣,磁鋼采用永久磁鐵,其磁力較強(qiáng),霍爾元件固定在距圓盤1-10mm處。當(dāng)磁鋼與霍爾元件相對位置發(fā)生變化時,通過霍爾元件周圍磁場強(qiáng)度就會發(fā)生變化。圓盤轉(zhuǎn)動,磁鋼靠近霍爾元件,穿過霍爾元件的磁場較強(qiáng),霍爾傳感器輸出低電平;當(dāng)磁場減弱時,輸出高電平,從而使得在圓盤轉(zhuǎn)動過程中,霍爾元件輸出連續(xù)脈沖信號。霍爾電壓隨磁場強(qiáng)度的變化而變化,磁場越強(qiáng),電壓越高,磁場越弱,電壓越低,霍爾電壓值很小,通常只有幾個毫伏,但經(jīng)集成電路中的放大器放大,就能使該電壓放大到足以輸出較強(qiáng)的信號。若使霍爾集成電路起傳感作用,需要用機(jī)械的方法來改變磁感應(yīng)強(qiáng)度。下圖所示的方法是用一個轉(zhuǎn)動的葉輪作為控制磁通量的開關(guān),當(dāng)葉輪葉片處于磁鐵和霍爾集成電路之間的氣隙中時,磁場偏離集成片,霍爾電壓消失。霍爾效應(yīng)傳感器屬于被動型傳感器,它要有外加電源才能工作,這一特點使它能檢測轉(zhuǎn)速低的運(yùn)轉(zhuǎn)情況。模塊的原理圖如圖4.4-1所示:
圖4.4-1 霍爾傳感器模塊原理圖
4.6 TFT彩屏
TFT(Thin Film Transistor)即薄膜場效應(yīng)晶體管。所謂薄膜晶體管,是指液晶顯示器上的每一液晶象素點都是由集成在其后的薄膜晶體管來驅(qū)動。TFT液晶為每個像素都設(shè)有一個半導(dǎo)體開關(guān),每個像素都可以通過點脈沖直接控制,因而每個節(jié)點都相對獨(dú)立,并可以連續(xù)控制,不僅提高了顯示屏的反應(yīng)速度,同時可以精確控制顯示色階,所以TFT液晶的色彩更真;驹砗芎唵危猴@示屏由許多可以發(fā)出任意顏色的光線的象素組成,只要控制各個象素顯示相應(yīng)的顏色就能達(dá)到目的了。在TFT LCD中一般采用背光技術(shù),為了能精確地控制每一個象素的顏色和亮度就需要在每一個象素之后安裝一個類似百葉窗的開關(guān),當(dāng)“百葉窗”打開時光線可以透過來,而“百葉窗”關(guān)上后光線就無法透過來。
本設(shè)計采用的是最基本的TFT彩屏,平時我們做實驗的時候可以學(xué)習(xí)學(xué)習(xí)用一用,分辨率是128*128像素的,顏色是24位真彩色,響應(yīng)速度快,可以顯示16*16的漢字64個,用在本設(shè)計中剛好可以顯示各種想要的功能。

5 軟件架構(gòu)和開發(fā)環(huán)境5.1 程序流程圖
所有硬件搭建完成后就是軟件的編程與調(diào)試,現(xiàn)在的硬件電路基本上都要通過軟件編程來控制,基本的程序流程圖如圖5.1-1所示:
5.1-1 程序流程圖

5.2 速度測量的原理
要得到自行車的速度,首先我們應(yīng)該知道自行車在一秒內(nèi)轉(zhuǎn)了多少圈,比如一秒內(nèi)轉(zhuǎn)了10圈,周長為1m,那么自行車的速度就是10m/s;這樣就得到了自行車的速度了,為了得到較為準(zhǔn)確的結(jié)果,我們可以在自行車的輪子上面安裝盡可能多的磁鐵,加入安裝了12個磁鐵,那么自行車轉(zhuǎn)一圈我們就可以檢測到12個脈沖信號,轉(zhuǎn)速n和頻率f的關(guān)系為 ,只要得到轉(zhuǎn)速我們就可以通過半徑計算出自行車的速度了。
對于里程的計算:速度的計算是每隔一秒計算一次,里程是一個累加的過程,將每秒走的路程累加起來,就可以得到里程。
5.3 程序調(diào)試
程序調(diào)試主要有精確延時1s的函數(shù)編寫;用標(biāo)準(zhǔn)的方波信號測試看看顯示的頻率與示波器實際讀到的數(shù)值誤差有多大;測量電機(jī)的轉(zhuǎn)速,模擬自行車。
1s延時函數(shù)主要是通過控制一個燈的亮或滅來測量,用示波器觀察燈亮滅的周期,從而改變循環(huán)的值,得到精確延時1s的函數(shù);然后用函數(shù)信號發(fā)生器產(chǎn)生一個100Hz的方波,通過實驗發(fā)現(xiàn),在100Hz以內(nèi)誤差為1左右,在200Hz左右誤差為4左右,頻率越高誤差越大,但是考慮到實際情況,自行車在走的時候不會太快,因此測量的還是比較準(zhǔn)確的;最后用測量電機(jī)的轉(zhuǎn)速。



總結(jié)
通過這門課程的學(xué)習(xí),感覺自己學(xué)到了很多的知識,我很慶幸自己能當(dāng)上組長,每一次老師布置的作業(yè)自己在下面都是花費(fèi)了大量的時間去研究它,因為要給組員講,所以自己學(xué)的是非常的努力,并且每個程序都會遇到各種各樣的問題,我覺得學(xué)習(xí)就是不斷遇到問題和解決問題的過程,如果學(xué)習(xí)中什么問題都沒遇到,那么我們是不可能學(xué)好的。自己也是在下面看各種資料、例程,問別的同學(xué),一起進(jìn)步,共同學(xué)習(xí),再加上給他們講自己的印象更是深刻。我感覺這種教學(xué)方法真的是挺好的,從實際的操作出發(fā),不再只是老師一個人的教,而是同學(xué)們自主的學(xué),只有這樣同學(xué)們才能學(xué)到知識。如果只是讓老師講的話,我們很容易養(yǎng)成惰性,因為這種課程本來就枯燥無味,聽著聽著就不想聽了,或者上課也聽懂了,但是自己不練習(xí)的話還是跟沒學(xué)一樣。最后 ,通過這個課程設(shè)計大作業(yè),感覺真是學(xué)到了不少,在制作的過程中,通過自己給別人的講解,也是一種學(xué)習(xí)的最佳方法,因為每個人的都不太一樣,所以要想給他們講清楚,首先自己得搞明白,這個過程中,正是學(xué)習(xí)的最佳時機(jī),感覺收獲還是挺多的,不僅我們組的人問,別的組的有的也問我,這樣一來自己學(xué)習(xí)的知識就更多了?傊腋杏X學(xué)習(xí)就應(yīng)該這樣,要敢于去給別人講,要喜歡去給別人講,這樣別人不僅感激你,更重要的是自己能學(xué)到很多課本上和課堂上你學(xué)不到的知識,這才叫學(xué)習(xí)。

參考文獻(xiàn)
[1] 王智, 潘強(qiáng), 邢濤. MSP430系列超低功耗16位單片機(jī)原理與應(yīng)用[D].電子工業(yè)出版社. 2009.
[2] 閻石.數(shù)字電子技術(shù)基礎(chǔ).北京:高等教育出版社,2009.
[3]  楊家成.單片機(jī)原理與應(yīng)用及C51程序設(shè)計.北京:清華大學(xué)出版社,2007
[4]  賽爾吉?dú)W.佛朗格著,劉樹棠等譯;谶\(yùn)算放大器和模擬集成電路的電路設(shè)計(第三版).西安交通大學(xué)出版,2009.2

附錄一 元件清單
名稱
規(guī)格/型號
數(shù)量
單片機(jī)
MSP430g2553
1
穩(wěn)壓芯片
AMS1117-3.3
1
瓷片電容
105
1
22pF
1
103
4
電解電容
10uF
2
電阻
1K
4
溫度傳感器
DS18B20
1
時鐘模塊
DS3231
1
TFT彩屏
1
霍爾傳感器
3114
1


附錄二 源程序
  1. #include
  2. #include
  3. #include "font.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "ds18b20.h"
  7. #include"ds3231.h"
  8. extern uchar nian,yue,ri,shi,fen,miao;
  9. float  d = 40.0, per;
  10. void CLK_Init(void)                                                                       //時鐘配置
  11. {
  12.     if (CALBC1_16MHZ ==0xFF || CALDCO_16MHZ == 0xFF)
  13.     {
  14.         while(1);                                   // If calibration constants erased
  15.                                                                                                                         // do not load, trap CPU!!
  16.     }
  17.     DCOCTL=0;
  18.     BCSCTL1 = CALBC1_16MHZ;                       // Set range
  19.     DCOCTL = CALDCO_16MHZ;                        // Set DCO step + modulation
  20.     BCSCTL2 |= 0X06;                               //SMCLK為DCO的8分頻,2M
  21. }
  22. void showjiemian()                                                                         //界面顯示
  23. {
  24.               LCD_Fill(0,0,128,20,GBLUE);                                          //在指定區(qū)域填充顏色
  25.               showhanzi1(13,2,0,RED,GBLUE);
  26.               showhanzi1(30,2,1,RED,GBLUE);
  27.               showhanzi1(47,2,2,RED,GBLUE);
  28.               showhanzi1(64,2,3,RED,GBLUE);
  29.               showhanzi1(81,2,4,RED,GBLUE);
  30.               showhanzi1(98,2,5,RED,GBLUE);                            //自行車?yán)锍瘫?br />
  31.               showhanzi1(2,24,16,BLUE,YELLOW);              //溫
  32.               showhanzi1(18,24,17,BLUE,YELLOW);              //度
  33.               LCD_ShowChar(34,24,':',1);
  34.               LCD_Fill(42,23,86,40,WHITE);                            //在指定區(qū)域填充顏色
  35.               showhanzi1(89,24,18,BLUE,YELLOW);              //℃
  36.               showhanzi1(2,48,8,BLUE,YELLOW);
  37.               showhanzi1(18,48,9,BLUE,YELLOW);
  38.               LCD_ShowChar(34,48,':',1);
  39.               LCD_Fill(42,47,86,65,WHITE);                            //在指定區(qū)域填充顏色
  40.               LCD_ShowString(88,48,"km/h");                            //速度km/h
  41.               showhanzi1(2,72,10,BLUE,YELLOW);
  42.               showhanzi1(18,72,11,BLUE,YELLOW);
  43.               LCD_ShowChar(34,72,':',1);
  44.               LCD_Fill(42,71,86,89,WHITE);                            //在指定區(qū)域填充顏色
  45.               LCD_ShowString(88,72,"km");                                          //里程km:
  46.               LCD_Fill(0,96,128,128,WHITE);                            //在指定區(qū)域填充顏色
  47.               showhanzi1(24,104,25,BLUE,WHITE);//月
  48.               showhanzi1(56,104,26,BLUE,WHITE);//日
  49.               LCD_ShowChar(96,104,':',1);
  50. }
  51. int main(void)
  52. {
  53.               u16 tem, a, b, c;
  54.               u16 f;
  55.               float v, l = 0.0;
  56.               WDTCTL = WDTPW + WDTHOLD;                                          //停止看門狗
  57.               P1DIR |= BIT1;
  58.               P1OUT |= BIT1;
  59.     P2DIR |= 0x1f;                                                                                    //設(shè)置P2為輸出方式輸出方式
  60.     P2OUT |= 0X1f;
  61. /************************配置P1.5,P1.6引腳為輸入***************************
  62.   *****按下與P1.5連接的按鍵半徑增加,按下與P1.6連接的按鍵半徑減小***********/
  63.               P1DIR &= ~(BIT5+BIT6);
  64.               P1REN |= BIT5+BIT6;
  65. /************************頻率測量信號輸入引腳TACLK配置**********************/
  66.     P1SEL |= BIT0;                                                                          //設(shè)置P1.0引腳為外圍功能模塊引腳
  67.     P1DIR &= ~BIT0;                                                                         //設(shè)置P1.0引腳為輸入引腳
  68. /***************實現(xiàn)頻率測量的定時/計數(shù)器A(Timer_A)配置*********************/
  69.     TACTL |=TASSEL_0;                                                           //計數(shù)信號選擇TACLK
  70.     TACTL |= ID_0;                                                              //計數(shù)信號分頻選擇1
  71.     LCD_ShowNum(48,48,0,3);
  72.     //BACK_COLOR=WHITE;                                                           //背景色,
  73.     //POINT_COLOR=BLUE;                                                           //畫筆色
  74.     CLK_Init();
  75.     Lcd_Init();
  76.     LCD_Clear(YELLOW);
  77.     /**************時間初始化**************/
  78. #if 0
  79.     ModifyTime(16,5,6,17,34,00);
  80.     LCD_Show2Num(8,104,5,2);//月
  81.     LCD_Show2Num(40,104,6,2);//日
  82.     LCD_Show2Num(80,104,16,2);//時
  83.     LCD_Show2Num(104,104,12,2);//分
  84. #endif
  85.     /**************中斷按鍵P1.4的配置**************/
  86.     P1OUT|=BIT4;//選擇上拉方式
  87.     P1REN=BIT4;//使能上拉電阻
  88.     P1IE|=BIT4;//使能按鍵S2管腳中斷
  89.     P1IES=0x00;//中斷觸發(fā)方式為上升沿
  90.     P1IFG=0x00;//清除中斷標(biāo)志
  91.     _EINT();//使能總中斷
  92.     showjiemian();
  93.               BACK_COLOR=WHITE;                                                          //背景色
  94.               POINT_COLOR=BLUE;                                             //畫筆色
  95.               P1OUT ^=BIT6;
  96.     while(1)
  97.     {
  98.                   /**************得到時間數(shù)值并顯示**************/
  99.                   GetAllTime();
  100.         LCD_Show2Num(8,104,yue,2);//月
  101.         LCD_Show2Num(40,104,ri,2);//日
  102.         LCD_Show2Num(80,104,shi,2);//時
  103.         LCD_Show2Num(104,104,fen,2);//分
  104.         //LCD_Show2Num(72,104,miao,2);//秒
  105.         /**************得到溫度值值并顯示**************/
  106.                   tem = Read_Temp();
  107.                   a = tem/1000;
  108.                   b = tem%1000/100;
  109.                   c = tem%100/10;
  110.                   //d = tem%10;            
  111.                   LCD_ShowNum(51,24,a,1);                                          //顯示溫度十位
  112.                   LCD_ShowNum(59,24,b,1);                                          //顯示溫度個位
  113.                   LCD_ShowChar(67,24,'.',0);                            //顯示"."
  114.                   LCD_ShowNum(75,24,c,1);                                          //顯示溫度十分位
  115.                   //LCD_ShowNum(83,24,d,1);                            //顯示溫度百分位
  116.                   /**************測量信號的頻率**************/
  117.                   TAR = 0x0000;                                                                      //計數(shù)寄存器內(nèi)部清零
  118.                   TACTL |= MC_2;                                                          //啟動計數(shù),計數(shù)終值0xffff
  119.                   delay_s(1);                                                                        //產(chǎn)生1s計數(shù)閘門
  120.                   TACTL |= MC_0;                                                          //停止計數(shù)
  121.                   f = TAR;                                                                                     //讀頻率測量值
  122.                   per = 3.14*(d/100.0);
  123.                   v = per*(f/16.0)*3.6+0.5;
  124.                   l += (1.5*(f/16.0))/1000.0;
  125.                   LCD_ShowNum(48,48,(u16)v,3);              //顯示速度
  126.                   LCD_ShowNum(48,72,(u16)f,3);              //顯示里程
  127.     }
  128. }
  129. #pragma vector=PORT1_VECTOR
  130. __interrupt void PORT1_key3(void)
  131. {
  132.               if(P1IFG & BIT4)
  133.               {
  134.                             P1DIR &= ~BIT4;
  135.                             P1REN |= BIT4;
  136.                             LCD_Fill(0,96,128,128,MAGENTA);//在指定區(qū)域填充顏色
  137.                             showhanzi1(4,104,30,WHITE,MAGENTA);
  138.                             showhanzi1(20,104,31,WHITE,MAGENTA);
  139.                             showhanzi1(36,104,32,WHITE,MAGENTA);
  140.                             showhanzi1(52,104,33,WHITE,MAGENTA);
  141.                             LCD_ShowChar(68,104,':',1);
  142.                             LCD_ShowChar(104,104,'c',1);
  143.                             LCD_ShowChar(112,104,'m',1);
  144.                             LCD_Fill(78,102,102,120,WHITE);//在指定區(qū)域填充顏色
  145.                             while(1)
  146.                             {
  147.                                           BACK_COLOR=WHITE;                                                          //背景色
  148.                                           POINT_COLOR=BLUE;                                             //畫筆色
  149.                                 if(!(P1IN & BIT5))
  150.                                 {
  151.                                               delay_ms(50);
  152.                                               if(!(P1IN & BIT5))
  153.                                               {
  154.                                                             //while(!(P1IN & BIT5));
  155.                                                             delay_ms(150);
  156.                                                                           d++;
  157.                                                             if(d>90)
  158.                                                             {
  159.                                                                           d = 40;
  160.                                                             }
  161.                                               }
  162.                                 }
  163.                                 else if(!(P1IN & BIT6))
  164.                                 {
  165.                                               delay_ms(50);
  166.                                               if(!(P1IN & BIT6))
  167.                                               {
  168.                                                             delay_ms(150);
  169.                                                             d--;
  170.                                                             if(d<40)
  171.                                                             {
  172.                                                                d = 90;
  173.                                                             }
  174.                                               }
  175.                                 }
  176.                                 if(!(P1IN & BIT4))
  177.                                 {
  178.                                               while(!(P1IN & BIT4));
  179.                                               LCD_Fill(0,96,128,128,WHITE);                            //在指定區(qū)域填充顏色
  180.                                               showhanzi1(24,104,25,BLUE,WHITE);//月
  181.                                               showhanzi1(56,104,26,BLUE,WHITE);//日
  182.                                               LCD_ShowChar(96,104,':',1);
  183.                                     P1OUT|=BIT4;//LED配置為高電平,S2選擇上拉方式
  184.                                     P1REN=BIT4;//使能上拉電阻0000 1000
  185.                                     P1IE|=BIT4;//使能按鍵S2所在P1.3管腳中斷
  186.                                     P1IES=0x00;//中斷觸發(fā)方式為上升沿
  187.                                               break;
  188.                                 }
  189.                                           LCD_ShowNum(82,104,d,2);
  190.                             }
  191.                             P1IFG = 0x00;
  192.               }
  193. }
復(fù)制代碼


附錄三 實物展示

完整論文下載(word格式 可編輯):
http://www.torrancerestoration.com/bbs/dpj-82279-1.html




作者: luozhao    時間: 2019-12-26 08:39
謝謝樓主分享




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1