第一篇:51單片機語音回放系統課程設計報告
課 程 設 計 報 告
.語音存儲與回放系統
摘要
基于微控制器的語音存儲與回放系統具有錄制方便、回放靈活、無磨損、可靠性強等優點,在實際生活中得到了廣泛的應用,如公共設備、智能儀器儀表、小家電等。
語音存儲與回放系統的實現具有多種方式,一種是利用單片集成的語音存儲與回放芯片,如美國ISD公司的ISD1420等;一種是以微控制器為核心,輔以A./D轉換、D/A轉換以及大容量的存儲器。單片集成的語音存儲與回放芯片一般智能性較差,不容易解決音量的問題,同時存放錄制時間有限,不能靈活的變化。因此,在多數需要語音存儲與回放的場合中,采用了微控制器的語音存儲與回放系統。
一、系統總體描述和設計
1.1 系統描述 1.1.1 系統功能簡介
語音存儲與回放系統能夠將語音先行錄制,然后再回放,適合應用在一些需要語音播報功能的設備上,如公交車報站器、智能小家電、智能玩具等。
在一些實際應用中,一般錄制是在產品出廠時,由專業人員進行錄制,而在實際應用中只需要播放,如公交車報站器。但在一些實際應用中,則需要用戶既能隨意錄制,也能隨意播放,如智能玩具。
語音存儲與回放系統比較重要的兩個指標是語音的最大錄制時間和語音回放的質量。語音的最大錄制時間是由語音存儲與回放系統的存儲設備的容量來決定的,一般采用RAM,即為系統的存儲容量。在一般的單片機系統中,RAM的容量非常有限,需要擴展一定容量的RAM。而語音回放的質量主要由系統中A/D以及D/A來決定,A/D與D/A的精度越高,語音的質量越好,同時系統的噪聲抑制能力,如帶通濾波器的優劣等,也會影響到語音的質量。1.1.2 系統總體設計
語音存儲與回放系統的總體原理圖如圖1-1所示。
語音存儲與回放系統
麥克風前置放大器帶通濾波器A/D鍵盤控制微控制器外擴存儲器喇叭后置放大器帶通濾波器D/A
圖1 語音存儲與回放系統總體原理
語音存儲與回放系統主要包括微控制器、系統供電電源、鍵盤、麥克風、前置放大器、A/D、外擴存儲器、D/A、后置放大器和喇叭。下面將介紹各個部分的總體設計與選型。
1.微控制器
微控制器主要負責錄音、回放中對外部命令的響應,同時需要對存儲器進行讀寫操作。本語音存儲與回放系統采用51系列單片機,負責控制與協調其他各個模塊的工作,并進行簡單的數字信號處理。在整個語音存儲與回放系統中,微控制器是系統的控制中心,其工作效率的高低關系到系統效率的高低以及系統運行的穩定性。而51系列單片機具有成本低,穩定性好,且運行速度基本能滿足該系統的要求。在本系統中,將采用Atmel公司的AT89S52。
2.鍵盤
在語音存儲與回放系統中,需要采用鍵盤對語音的錄制以及回放進行控制。在分段錄制與播放中,同時還需要段號的輸入等。在本系統中需要的按鍵數量比較多,可以采用鍵盤管理芯片ZLG728。
3.麥克風
麥克風的選擇對語音質量影響比較明顯。麥克風的作用是將語音信號轉化成電信號。考慮到駐極體話筒的靈敏度較高,方向性差,若采用單端放大,會有比較大的噪音,因此采用兩只(配對)話筒分別接入差分放大器的正負端,可以較好的抑制背景噪聲。
4.前置放大器
通常情況下,拾音器輸出的是微弱的電信號,因此在拾音器的后端需要將該信號進行放大處理,能完成此功能的電路稱為前置放大器。一般情況下,拾音器的輸出為毫伏級的電壓信號,需要進行放大到伏級的電壓信號。在本系統中,采用運算放大器NE5532。
語音存儲與回放系統
5.A/D 由奈奎斯特采樣定理可知,A/D的采樣頻率必須滿足信號的最高頻率的2倍以上,即滿足如下關系:
fs?fH(1)其中,fs為采樣頻率,fH為被采樣信號的最高頻率。
一般語音信號的最高頻率為3.4kHz,因此在語音存儲與回放系統中,A/D的采樣頻率fs必須滿足:
fs?2fH?2?3.4kHz?6.8kHz(2)
因此我們可以選用ADC0809,ADC0809轉換器的分辨率為8位,典型轉換時間為100μs,單5V電源供電。
6.外擴存儲器
在語音存儲與回放系統中,需要錄制10s以上的語音,假設采樣頻率為8kHz,分辨率為8位,那么1秒鐘的時間至少需要8kB的存儲空間,而單片機的內置存儲器無法滿足要求,需要外擴存儲器。
外擴存儲器可以選用256k*8位的SRAM,這樣就可以錄制至少30s的語音。也可以采用多片32k*8位的SRAM,但是需要分頁存儲技術來擴展容量。
7.D/A 語音的回放需要將存儲的數字化信號進行D/A轉換,恢復為模擬信號才能進行播放。我們可以選用DAC0832來完成數字信號到模擬信號的轉換,DAC0832的分辨率為8位,其輸出穩定時間為1μs,滿足系統要求。
8.后置放大器
D/A輸出的信號經過后置帶通濾波器后,其輸出通常情況下不能滿足喇叭對功率的要求。完成D/A輸出到喇叭的功率驅動的放大電路稱為后置放大器,即為一個功率放大器,我們可以采用低電壓音頻功率放大器LM386來實現。
9.喇叭
喇叭是語音播放回路的最后輸出階段,喇叭質量的好壞也會關系到語音輸出的質量,因此,喇叭的選擇也是很重要的一個方面。我們可以選用8歐姆,0.5W的普通喇叭。
如圖3所示。1.主控制器設計
三、單元電路設計
二、系統硬件設計
成的后置功率放大電路,以及狀態指示等。
語音存儲與回放系統
圖2 語音存儲與回放系統的總體硬件框圖
系統的總體硬件框圖如圖2所示,主要有AT89S52單片機系統,DC/DC、7812等組成的系統供電電源電路,NE5532組成的前置放大器,NE5532與R、C組成的前置/后置帶通濾波器,ADC0809組成的A/D轉換電路,IS61LV2568組成的數據存取電路,DAC0832組成的D/A轉換電路,LM386組主控制器即為一個51系列單片機最小系統,單片機選擇了Atmel公司的89S52,主控制電路
語音存儲與回放系統
2.前置放大電路設計
由一級電壓跟隨器和一級同相放大器組成。
3.后置功率放大設計
語音頻率的范圍一般為300Hz~3.4kHz,因此需要在輸入與輸出回路中設計帶通濾波器來濾除語音頻率范圍以外的頻率成分,以便進一步提高語音回放的質量。
其由運算放大器NE5532與R、C組成,采用的是一級低通濾波器和一級高通濾波器的級聯。由于帶通濾波器的通頻帶范圍為300Hz~3.4kHz,因此低通濾波器的上限截止頻率為3.4kHz,高通濾波器的下限截止頻率為300Hz。
語音存儲與回放系統
4.A/D采樣電路設計
5.數據存取電路設計(62256兩片)
語音存儲與回放系統
6.D/A轉換電路設計
語音存儲與回放系統
開始初始化是否錄音?啟動AD程序,并存儲語音。是否放音?啟動DA程序,并循環放音結束8
四、軟件設計
1、流程圖
語音存儲與回放系統
2、時序圖
ADC0809時序圖:
語音存儲與回放系統
DAC0832時序圖: 存儲器62256時序圖:
讀數據:
語音存儲與回放系統
寫數據:
五、結束語
1.所設計的系統基本要求:
(1)放大器1的增益為46dB,放大器2的增益為40dB,增益均可調;
(2)帶通濾波器:通帶為300Hz~3.4kHz ;
(3)ADC:采樣頻率f s=8kHz,字長=8位;
(4)語音存儲時間≥10秒;
(5)DAC:變換頻率f c=8kHz,字長=8位;
(6)回放語音質量良好。
語音存儲與回放系統
2.實驗心得體會: 對于這種動手性很強的電路設計和焊接實驗,覺得與平時必修課的實驗很不同。必修課的實驗都是一些經典實驗,條件成熟且被反復驗證,只要按照講義的步驟去做,便會順利得到預期的結果。但動手性實驗,沒有老師的監督和強迫,全靠我們自覺完成。動手性實驗就像為我們打開了一扇窺探科研之路的門,讓我們學到了許多在經典實驗中無法學到的知識和思維方式。
我們首先查閱了芯片手冊,了解了關于電路各模塊的原理的結構。對這個課題有了基本了解后,我們又查閱了關于如何實現芯片具體功能的方法,并結合我們的目標物,制訂了嘗試方案。在實驗過程中,我們碰到了許多以前在經典實驗中不曾出現的問題。后來向老師了解到,其實是原理圖和實物并不相對應。我們才發現,講義上給我們做的經典實驗,條件都是很成熟的,基本不會出現什么偏差,而我們所要探索的問題是很難達到這種理想效果的。由于我們的知識是有限的,所以我們遇到的困難比較多,正因為如此,我也收獲良多。
首先我們明白到團結合作的重要性。由于我們組只有兩個人,而所作的工作又較多,所以對我們來說時間是緊迫的,而且團結也顯得尤為重要,同時加上有老師的熱心幫助和提點,我們的實驗進度也大大加快了。
其次我們學會了科研的思維方式。在實驗過程中,我們會遇到各種各樣意想不到的問題,這時必須靜下心來分析可能出錯的步驟,可能出現的故障,逐步排除,直到找出真正的原因,再對癥下藥,解決問題。另外,以我們現在的知識,也許不可能一下子就創造出一個前無古人的大發明,但我們可以在已有的儀器設備或實驗方法上做一些改善工作,使其更方便、更完善。通過這些小設計或創新,可以培養和提高我們的能力。
這一次的動手性實驗不但鍛煉了我們的實驗能力,培養了我們的科研思維,而且讓我們體會到科研當中的辛苦與快樂。我們會把這一次的寶貴經驗運用到以后的科研工作中,為電子事業貢獻自己的一份力量。
語音存儲與回放系統
六、參考文獻
[1] 郭天祥。新概念51單片機C語言教程——入門、提高、開發、拓展。北京:電子工業出版社,2009-1-1。
附錄
程序設計代碼: #include
#define mdata XBYTE[0x0000] #define adnum 32768 sbit we=P3^6;sbit cs=P3^2;sbit flag1=P3^1;//錄音控制鍵 sbit flag2=P3^0;//放音控制鍵 sbit eoc=P3^3;sbit start=P3^4;sbit oe=P3^5;int temp=0;int luyinstop = 0;int fangyinstop = 0;
語音存儲與回放系統
uchar buffer=0;uchar xdata *pt,*pt1;unsigned char sum;sbit ck = P2^7;void Timer0_Init();void main(){ unsigned char addr[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};pt=&ramaddress;//首地址
pt1 = pt;//定義存放首地址
P1=0xff;//打開P1口
ck = 0;//打來62256片選
Timer0_Init();//定時器初始化
while(1){
if(luyinstop>adnum)
{
pt=&ramaddress;
luyinstop = 0;
}
if(fangyinstop>adnum)
{
pt1=&ramaddress;
fangyinstop = 0;}
} cs=1;
語音存儲與回放系統
}
void Timer0_Init()//定時器初始化 { TMOD|=0x01;TH0=(65536-3)/256;TL0=(65536-3)%256;EA=1;;ET0=1;TR0=1;}
void timer_0()interrupt 1 {
TH0=(65536-3)/256;TL0=(65536-3)%256;if(flag2==1 && flag1==0)//錄音
{
if(luyinstop { start=0;//ad初始化 start=1; start=0; while(!eoc);//等待空閑 cs=0;//打開da片選 語音存儲與回放系統 we=0;//打開62256位選 buffer=P1; *pt=buffer;//數據放入軟件寄存器 pt++; luyinstop++; } } if(flag2==0 && flag1==1)//放音 { if(fangyinstop { start=0;//停止ad buffer=*pt1;//數據放入軟件寄存器 P1=buffer; pt1++; fangyinstop++; } } } 《單片機課程設計》報告格式 一、封面(注明:單片機課程設計報告、課題名稱、班級、姓名、指導教師、日期) 二、摘要(課題簡要說明) 三、課題設計目標(功能、性能指標)、方案論證(要求作兩種以上方案比較) 四、設計過程(關鍵電路工作原理、元器件參數選用、程序流程圖、程序) 五、軟硬件的安裝、調試方法 六、完整電路圖、性能參數測試 七、存在的問題和改進方向 八、參考文獻資料 單片機課程設計報告格式要求 統一的A4紙打印。每頁約44行,每行約34字;打印正文用宋體小四號字;版面頁邊距上空2.5cm,下空2cm,左空2.5cm,右空2cm;頁碼用小五號字,底端居中。 A、封面;B、課程設計任務書;C、摘要; D、目錄; E、正文;F、參考文獻;G、附錄(源程序代碼);H、有關圖紙(系統的總體原理圖) 摘要(內容提要) 摘要是論文內容的簡要陳述,應盡量反映主要信息,內容包括研究目的、方法、成果和結論,不含圖表,不加注釋,具有獨立性和完整性,?摘要?字樣位置居中。 目錄 目錄按三級標題編寫,要求層次清晰,且要與正文標題一致。主要包括緒論、正文主體、結論、主要參考文獻及附錄等。 題序層次大致有以下幾種格式: 1、緒論 1.1課題背景 ˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ 1.2交會對接技術發展概況 ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ 1.2.1俄羅斯空間交會對接發展概況 ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ 1.2.2美國空間交會對接發展概況 ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ 2、空間飛行器 2.1引言 ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ 結論 ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ 主要參考文獻 為了反映報告的科學依據和作者尊重他人研究成果的嚴肅態度,同時向讀者提供有關信息的出處,正文之后一般應列出主要參考文獻(只限于那些作者親自閱讀過的,最重要的且發表在公開出版物上的文獻或網上下載的資料)。報告中被引用的參考文獻序號置于所引用部分的右上角。參考文獻所列著作按報告中引用順序排列,著作按如下格式著錄:序號、著作者、書名、出版地、出版社、出版日期。 例1(著作):1.宋尚桂.大學通識教育的理論和模式.青島:中國海洋大學出版社,2007年9月 例2(文章):2.朱曉剛.以人為本----美國大學通識教育理念和實踐的解讀.民辦教育研究,2005(5) 設計報告裝訂順序 (一)課程設計封面 (二)課程設計任務書 (三)摘要 (四)目錄 例: 1、緒論ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ 11.1課題背景ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ1 1.2交會對接技術發展概況ˉˉˉˉˉˉˉˉˉˉˉˉˉ 31.2.1俄羅斯空間交會對接發展概況ˉˉˉˉˉˉˉˉˉ 51.2.2美國空間交會對接發展概況ˉˉˉˉˉˉˉˉˉˉ72、空間飛行器ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ20 2.1引言ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ20 2.2空間飛行器姿態表示ˉˉˉˉˉˉˉˉˉˉˉˉˉˉ23 結論ˉˉˉˉˉˉˉˉˉˉˉˉ ˉˉˉˉˉˉˉˉˉˉ50 主要參考文獻ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ 51(五)正文 (六)參考文獻 (七)附錄 (八)有關圖紙 撰寫設計報告的幾點要求 1、文字 設計中漢字應采用《簡化漢字總表》規定的簡化字,并嚴格執行漢字的規范,所有文字字面清晰,不得涂改。 第一層次(章)題序和標題居中放置,其余各層次(節、條、款)題序和標題一律沿版面左側邊線頂格排列。第一層次(章)題序和標題距下文雙倍行距。段落開始后縮兩個字。行與行之間,段落和層次標題以及各段落之間均為單倍行距。 第一層次(章)題序和標題用小二號黑體字。題序和標題之間空兩個字,不加標點,下同。 第二層次(節)題序和標題用小三號黑體字。 第三層次(條)題序和標題用四號黑體字。 第四層次及以下層次題序及標題一律用小四號黑體字。 結論(結束語)作為單獨一章排列,但標題前不加?第XXX?字樣。結論是整個設計的總結,應以簡練的文字說明所做的工作。 2、表格 設計中的表格可以統一編序,也可以逐章單獨編序,方式應與插圖及公式的編序方式統一。表序必須連續,不得重復或跳躍。表格的結構應簡潔,各欄都應標注量和相應的單位。表格內數字須上下對齊,相鄰欄內的數值相同時,不能用‘同上’、‘同左’和其它類似用詞,應一一重新標注。表序和表題置于表格上方中間位置,無表題的表序置于表格的左上方或右上方(同一篇論文位置應一致)。 3、插圖 插圖要精選,圖序可以連續編序,也可以逐章單獨編序,方式應與表格、公式的編序方式統一,圖序必須連續,不得重復或跳躍。僅有一圖時,在圖題前加‘附圖’字樣。設計中的插圖以及圖中文字符號應打印,無法打印時一律用鋼筆繪制和標出。由若干個分圖組成的插圖,分圖用a,b,c,……標出。圖序和圖題置于圖下方中間位置。 4、公式 設計中重要的或者后文中須重新提及的公式應注序號并加圓括號,序號一律用阿拉伯數字連續編序或逐章編序,序號排在版面右側,且距右邊距相等。公式與序號之間不加虛線。 5、數字用法 公歷世紀、年代、年、月、日、時間和各種計數、計量,均用阿拉伯數字。年份不能簡寫(如1999年不能寫成99年)。數值的有效數字應全部寫出,如:0.50∶20.0不能寫作0.5∶20。 6、軟件 軟件流程圖和原程序清單要按軟件文檔格式附在報告后面,特殊情況可在答辯時展示,不附在報告內。 7、計量單位的定義和使用方法按國家計量標準執行。 《單片機原理與接口技術》 課程設計報告 設計題目: 基于80C51單片機系統實驗板的制作 與程序設計 專 業:應用電子專業 班 級: 11應電班 姓 名: 丁文俊 指導教師: 余靜老師 2013 年 5 月20 日 目錄 前 言………………………………………………………………… 2 課程設計的目的及要求…………………………………………… 3 硬件電路設計……………………………………………………… 4 軟件程序設計…………………………………………………… 5 小結……………………………………………………………… 參考文獻 附錄A 電路總圖 附錄B 程序清單 基于80C51單片機系統實驗板的制作與程序設計 1.前言 2、課程設計的目的及要求 2.1課程設計目的 2.2課程設計要求 3、系統主要硬件電路設計 3.1 STC89C51單片機簡介 MCS-51是美國Intel公司生產的一系列單片機的總稱,包括多個品種,如8031、8051、8751、8032、80C52、8752等。其中8051是最典型的產品,其他單片機都是在其基礎上進行功能增減而來的,所以人們習慣于用8051來稱呼MCS-51系列單片機。Intel公司將MCS-51的核心技術授權給了多家公司,這些廠家生產的單片機在功能上或多或少有些改變,以滿足不同的需求,其中美國的ATMEL公司生產的AT89C51是曾經在我國非常流行的51單片機。當前AT89C51/52已經停產,其替代產品為AT89S51/52。深圳宏晶公司出品的STC89C51可以直接代替傳統的AT89S51和AT89C51芯片,也可以代替菲利普、華幫等其他公司的89C51,由于時代的發展,工藝的進步,STC89C51功能更強,壽命更長(4K字節Flash存儲器、128字節片內RAM、支持ISP下載編程) 圖2.1 STC89c51單片機 單片機的時鐘信號用來提供單片機片內各種微操作的時間基準,時鐘信號通常用兩種電路形式得到:內部振蕩和外部振蕩。MCS-51單片機內部有一個用于構成振蕩器的高增益反向放大器,引腳XTALl和XTAL2分別是此放大電器的輸入端和輸出端,由于采用內部方式時,電路簡單,所得的時鐘信號比較穩定,實際使用中常采用這種方式,如圖2-2所示在其外接晶體振蕩器(簡稱晶振)或陶瓷諧振器就構成了內部振蕩方式,片內高增益反向放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起可構成一個自激振蕩器并產生振蕩時鐘脈沖。 圖2-2中外接晶體以及電容C2和C1構成并聯諧振電路,它們起穩定振蕩頻率、快速起振的作用,其值均為30P左右,晶振頻率選11.0592MHz。 為了初始化單片機內部的某些特殊功能寄存器,必須采用復位的方式,復位后可使CPU及系統各部件處于確定的初始狀態,并從初始狀態開始正常工作。單片機的復位是靠外電路來實現的,在正常運行情況下,只要RST引腳上出現兩個機器周期時間以上的高電平,即可引起系統復位,但如果RST引腳上持續為高電平,單片機就處于循環復位狀態。復位后系統將輸入/輸出(1/0)端口寄存器置為FFH,堆棧指針SP置為07H, SBUF內置為不定值,其余的寄存器全部清0,內部RAM的狀態不受復位的影響,在系統上電時RAM的內容是不定的。復位操作有兩種情況,即上電復位和手動(開關)復位。本系統采用上電復位方式。圖2-2中R9和Cl組成上電復位電路,其值R取為10K, C取為10μF.4 圖2.2 最小系統結構圖 3.2 電平轉換電路 3.3 4、軟件程序設計 5、小結 參考文獻 [1] 張偉,《單片機原理及應用》,機械工業出版社,2005(這是格式) 附錄 江西工業職業技術學院電子與信息工程系 課程設計指導教師評語 班級: 學生姓名: 學號: 指導教師評語(包括工作態度,遵守紀律;基本理論、知識、技能;獨立工作能力和分析解決問題的能力;完成任務情況及水平): 學生成績(五級分制): 指導教師簽名: ****年**月**日 課程設計報告 題 目: 自動滴灌系統設計 課程名稱: 單片機原理及應用 學 院: 信息工程學院 專 業: 計算機科學與技術 班 級: 2014 級計本 1 班 學生姓名: *** 學 號: 201403031 指導教師: 巫 宗 賓 成 績: 開課時間: 2016~2017 學年 2 學期 目錄 第一章 系統概要.........................................................................................................................2 1.1系統背景............................................................................................................................2 1.2系統功能............................................................................................................................2 1.3設計要求............................................................................................................................2 第二章 系統硬件原理...............................................................................................................3 2.1AW60主要模塊和特點........................................................................................................3 2.2 LCD模塊............................................................................................................................3 2.3 LED模塊............................................................................................................................4 第三章 系統軟件設計.................................................................................................................6 3.1系統流程............................................................................................................................6 3.2主程序(main.c)............................................................................................................7 3.2中斷處理程序(isr.c)..................................................................................................7 3.3構件組成............................................................................................................................9 第四章 系統測試.......................................................................................................................27 4.1測試結果..........................................................................................................................27 第五章 總結展望........................................................................................................................31 5.1總結..................................................................................................................................31 5.2展望..................................................................................................................................31 參考文獻.....................................................................................................................................32 第一章 系統概要 1.1系統背景 隨著科學技術的發展電子技術產業結構調整,單片機開始迅速發展,由于單片機本身的易于控制,精度高,自動化全面,市場對于智能控制系統的需求也越來越大。自動滴灌系統,就是在單片機程序的控制下實現濕度監測、滴灌控制的設備。單片機系統座位一種典型的嵌入式系統,其系統設計包括硬件設計和軟件設計編程設計兩個方面,其調試過程一般分為軟件調試,硬件調試,系統調試。自動滴灌系統需要實現濕度采集,A/D轉換,濕度顯示,工作狀態顯示,電機驅動的功能。 1.2系統功能 首先要進行濕度監測,每隔固定的時間就采集一次濕度,在內部轉換后與標準值進行比較如果濕度值低于給定值的話就切換至工作狀態,滴灌結束時自動切換至結束模式,繼續監測濕度。 仿真狀態下濕度監測采用軟件模擬實現,采集濕度信息使用LED顯示,每隔5s采集一次。工作狀態由LCD顯示。分別有滴灌開始(“Drip-irrigation is starting..”),和滴灌結束(“Drip-irrigation has ended..”)。滴灌時間為5s。結束后切換至結束模式。 1.3設計要求 學生在設計中可以引用所需的參考資料,避免重復工作,加快設計進程,但必須和題目的要求相符合,保證設計的正確。學生要在老師的指導下制定好自己各環節的詳細設計進程計劃,按給定的時間計劃保質保量的完成個階段的設計任務。設計中可邊設計,邊修改,軟件設計與硬件設計可交替進行,問題答疑與調試和方案修改相結合,提高設計的效率,保證按時完成設計工作并交出合格的設計報告。1 第二章 系統硬件原理 2.1AW60主要模塊和特點 AW60系列主要常規模塊和特點: (1)最高達40MHz的CPU工作頻率和20MHz的內部總線工作頻率;時鐘源選項包括晶振,諧振器,外部時鐘或,內部產生的時鐘。 (2)相比HC08CPU指令集,S08CPU增加了BGND指令。 (3)單線后臺調試模式接口:增強的斷點能力,允許單一的斷點設置在線調試(在片內調試模塊增加了多于兩個的斷點)。 (4)內含32個中斷/復位源;內含2KB的片內RAM;內含60KB的片內在線可編程的Flash存儲器,帶有 塊保護和安全選項。 (5)可選的計算機正常操作(COP)復位;低電壓檢測與復位或中斷;非法操作碼檢測與復位;非法地址檢測與復位。 (6)ADC:多達16個通道,10個A/D轉換器與動動比較功能;兩個串行通信接口SCI模塊與可選的13位中斷;一個串行外設接口SPI模塊;集成電路互聯總線IIC模塊運行高達100kbps的最高總線負載;8引腳鍵盤中斷KBI模塊。 (7)Timers:1個2 通道和一個6通道16位定時器/脈沖寬度調制器模塊。既有輸入捕獲,輸出比較,脈寬調制功能。AW子系列MCU的4種封裝形式只是引腳數量和形式有所區別,其他方面是一致的。 2.2 LCD模塊 LCD作為電子信息產品的主要顯示器件,相對于其他類型的顯示器件來說有其自身的特點,主要包括: (1)低電壓,低功耗;(2)平板型結構; (3)使用壽命長; (4)被動顯示; (5)顯示信息量大且易于彩色化; 1 (6)無電磁輻射。 點陣字符型LCD是專門用于顯示數字,字母,圖形符號及少量自定義符號的液晶顯示器。這類顯示器把LCD控制器,點陣驅動器,字符存儲器,顯示體及少量的阻容元件等集成一個液晶顯示模板。鑒于字符型液晶顯示模塊目前在國際上已經規范化,其電特性及接口特性是統一的,只要設計出一種型號的接口電路,在指令上稍加修改即可使用各種規格的字符型液晶顯示器模塊。 字符型液晶顯示器模塊的特點如下: (1)液晶顯示屏是以若干5*8或5*11點陣塊等組成的顯示字符群。每個點陣塊塊為一個字符位,字符間距和行間距都是一個點的寬度。 (2)主控制電路為HD44780(HITACHI及其他公司的兼容電路。從程序員的角度來看LCD顯示接口與編程是面向HD44780的,只要了解HD44780的編程結構即可進行LCD的顯示編程。 (3)內部具有字符發生器ROM,可顯示192種字符。 (4)具有64字節的字符發生器RAM,可以定義8個5*8點陣字符或4個5*11的點陣字符。 (5)具有64字節的數據顯示RAM,供顯示器編程使用。(6)標準接口特性,與MC9S08系列的MCU容易接口。(7)模塊結構緊湊,輕巧,裝配容易。 (8)單+5V電源供電(寬溫型需要加-7V驅動電源)。(9)低功耗,高可靠性。 2.3 LED模塊 LED發光二極管分為共陰極和共陽極數碼管,若為共陰極數碼管則公共端接地,若為共陽極數碼管則公共端接電源正極。如圖1: 1 圖1 實際應用中是多個LED共同使用,MCU通過一個稱為數據口的8位數據端口來控制位段而原來8段數碼管的公共端,原來接到公共電平,現在接MCU的一個引腳,由MCU來控制,通常叫做位選信號,這樣MCU的8個端口就可以控制8連排的數碼管了。若要控制更多數碼管則需加一個譯碼芯片。每個時刻只讓一個數碼管有效,由于人的視覺暫留效應(100ms)可以達到同時顯示的效果。 圖2是MCU與4排8段數碼管的連接: 圖2 1 第三章 系統軟件設計 3.1系統流程 開始初始化土壤濕度數據采集顯示濕度N小于設定值Y顯示滴灌開始計時結束,結束滴灌顯示滴灌結束 圖3 圖3是系統流程圖,開始時先初始化各個部件,LCD顯示結束滴灌信息,LED顯示為全零。后每隔五秒采集一次濕度數據用LED顯示濕度。判斷濕度值是否低于設定值,低于設定值的話立即啟動滴灌,此時濕度上升,結束滴灌。若沒有低于設定值的話,則繼續監測。LED不斷刷新顯示當前濕度值。1 3.2主程序(main.c) #include “includes.h” //包涵總頭文件 int main(void){ work = 0;shidu = 75;enter_critical();LEDInit();//LED初始化 LCDInit();//LCD初始化 tpm_init(TPM0,TPM_CLKSRC_PLL,1000);//初始化TPM模塊,1ms中斷一次 light_init(LIGHT_PORT, LIGHT_PIN_RED, LIGHT_OFF);light_init(LIGHT_PORT, LIGHT_PIN_GREEN, LIGHT_OFF);tpm_enable_int(0);init_critical();for(;;){ } } return 0;3.2中斷處理程序(isr.c) //================== //文件名稱:isr.c //功能概要: 中斷底層驅動構件源文件 //版權所有:蘇州大學飛思卡爾嵌入式中心(sumcu.suda.edu.cn)1 //================== #include “includes.h” void tpm0_isr(void){ static uint_32 TPMCounter = 0;//計時器 static uint_8 LEDindex=0;//位選口聲明 uint_8 LEDDataBuffer[4];//LED顯示緩沖區 changeCode(shidu,LEDDataBuffer);//將濕度值轉化為對應字符輸出 uint_8 i;uint_8 * working;uint_8 * stop;working =(uint_8 *)“Drip-irrigation is starting......”;stop =(uint_8 *)“Drip-irrigation has ended......”;if((TPM_SC_REG(TPM0_BASE_PTR)TPM_SC_TOF_MASK){ TPMCounter++; & TPM_SC_TOF_MASK) == } BSET(TPM_SC_TOF_SHIFT,TPM_SC_REG(TPM0_BASE_PTR));//中斷置標志位寫1清0 LEDindex++;//位選位+1 if(LEDindex>=4)LEDindex=0;//大于4位選口置0 i=LEDchangeCode(LEDDataBuffer[LEDindex]-'0');//轉碼 LEDshow1(LEDindex,i);if(TPMCounter>5000){ shidu = sdmn(shidu);if(shidu <= 65){ 1 } changeState(&work);//改變工作狀態 if(work == 0) { LCDShow(stop);TPMCounter = 0;light_control(LIGHT_PORT, LIGHT_PIN_RED, LIGHT_ON);light_control(LIGHT_PORT, LIGHT_PIN_GREEN, LIGHT_OFF);} if(work == 1){ LCDShow(working); TPMCounter = 0;shidu = 80;light_control(LIGHT_PORT, LIGHT_PIN_GREEN, LIGHT_ON);light_control(LIGHT_PORT, LIGHT_PIN_RED, LIGHT_OFF);changeState(&work);} } } 3.3構件組成 1、TPM構件: //=================== //文件名稱:tpm.c //功能概要:tpm底層驅動構件源文件 1 //版權所有:蘇州大學飛思卡爾嵌入式中心(sumcu.suda.edu.cn)//====================== #include “tpm.h” //定時器模塊0,1,2地址映射 Const TPM_MemMapPtr TPM_ARR[]={TPM0_BASE_PTR,TPM1_BASE_PTR,TPM2_BASE_PTR};//====================== //函數名稱:tpm_enable_int //功能概要:使能tpm模塊中斷。 //參數說明:tpmModule:模塊號:0、1、2 //函數返回:無 //====================== void tpm_enable_int(uint_8 tpmModule){ } //====================== //函數名稱:tpm_disable_int //功能概要:禁止tpm模塊初始化。enable_irq(tpm0_irq_no + tpmModule);//參數說明:tpmModule:模塊號:0、1、2 //函數返回:無 //====================== void tpm_disable_int(uint_8 tpmModule){ } //====================== //函數名稱:tpm_init //功能概要:初始化tpm模塊.1 disable_irq(tpm0_irq_no + tpmModule); //參數說明:tpmModule:模塊號:0、1、2 //clk_src_sel:時鐘源選擇:1:PLL/FLL(推薦)、2:晶振、3:內部參考時鐘。1,2可用 // int_us:中斷毫秒數,中斷時間間隔,單位為毫秒,10ms=10000 //函數返回:函數執行狀態:0=正常;非0=異常 //====================== uint_8 tpm_init(uint_8 tpmModule,uint_8 clk_src_sel,uint_32 int_us){ if(tpmModule>2)//防止越界值 { } //開啟SIM時鐘門 tpmModule=2;BSET(SIM_SCGC6_TPM0_SHIFT+tpmModule,SIM_SCGC6);//使能TPM時鐘 //中斷時間計算:(48000/8)*10000/1000=0x7530 10ms中斷一次 switch(clk_src_sel){ case 1: //MCGPLL/2或者MCGFLL作為時鐘源 BSET(SIM_SOPT2_PLLFLLSEL_SHIFT,SIM_SOPT2); //使能PLL為時鐘源 int_us=(48000/8)*int_us/1000;break;case 2: //晶振作為時鐘源 int_us=(8000/8)*int_us/1000;OSC0_CR|=OSC_CR_ERCLKEN_MASK;//開啟晶振輸出時鐘 break;case 3: //內部參考時鐘,由MCG決定 break; default: 1 } return 1;//傳參錯誤,返回 SIM_SOPT2 |= SIM_SOPT2_TPMSRC(clk_src_sel);//使能時鐘選擇 TPM_ARR[tpmModule]->CNT=0x00;TPM_ARR[tpmModule]->MOD=int_us;//TOF寫1清0,TOIE中斷使能,CMOD選擇每次時鐘加1,PS=0x011 選擇8分頻;TPM_ARR[tpmModule]->SC=TPM_SC_TOF_MASK|TPM_SC_TOIE_MASK|TPM_SC_CMOD(1)|TPM_SC_PS(3);return 0;} //====================== //函數名稱:tpm_stop //功能概要:禁止tpm模塊。 //參數說明:tpmModule:模塊號:0、1、2 //函數返回:無 //====================== void tpm_stop(uint_8 tpmModule){ } Tpm.h //====================== //文件名稱:tpm.c //功能概要:tpm底層驅動構件源文件 //版權所有:蘇州大學飛思卡爾嵌入式中心(sumcu.suda.edu.cn)//====================== #ifndef TPM_H 1 TPM_ARR[tpmModule]->SC&=~TPM_SC_CMOD(3); #define TPM_H #include “common.h” #include “sysinit.h” //中斷號 #define tpm0_irq_no 17 #define tpm1_irq_no 18 #define tpm2_irq_no 19 //時鐘選擇 #define TPM_CLKSRC_PLL 1 #define TPM_CLKSRC_OSC 2 #define TPM_CLKSRC_IRC 3 //模塊號 #define TPM0 0 #define TPM1 1 #define TPM2 2 //====================== //函數名稱:tpm_enable_int //功能概要:使能tpm模塊中斷。 //參數說明:tpmModule:模塊號:0、1、2 //函數返回:無 //====================== void tpm_enable_int(uint_8 tpmModule);//====================== //函數名稱:tpm_disable_int //功能概要:禁止tpm模塊初始化。 //參數說明:tpmModule:模塊號:0、1、2 //函數返回:無 1 //====================== void tpm_disable_int(uint_8 tpmModule);//====================== //函數名稱:tpm_init //功能概要:初始化tpm模塊.//參數說明:tpmModule:模塊號:0、1、2 //clk_src_sel:時鐘源選擇:1:PLL/FLL(推薦)、2:晶振、3:內部參考時鐘。1,2可用 // int_us:中斷毫秒數,中斷時間間隔,單位為毫秒,10ms=10000 //函數返回:函數執行狀態:0=正常;非0=異常 //====================== uint_8 tpm_init(uint_8 tpmModule,uint_8 clk_src_sel,uint_32 int_us);//====================== //函數名稱:tpm_stop //功能概要:禁止tpm模塊。 //參數說明:tpmModule:模塊號:0、1、2 //函數返回:無 //====================== void tpm_stop(uint_8 tpmModule);#endif 2、LED構件 //===================== // 文件名稱:led.c // 功能概要:led構件源文件 // 版權所有: 蘇州大學飛思卡爾嵌入式中心(sumcu.suda.edu.cn)//====================== #include “led.h” //led位選端口 struct GPIO led_cs[4]= 1 { {LED_CS0_PORT,LED_CS0}, {LED_CS1_PORT,LED_CS1}, {LED_CS2_PORT,LED_CS2}, {LED_CS3_PORT,LED_CS3}, };//led數據端口 struct GPIO led_d[8]= { {LED_D1_PORT,LED_D1}, {LED_D2_PORT,LED_D2}, {LED_D3_PORT,LED_D3}, {LED_D4_PORT,LED_D4}, {LED_D5_PORT,LED_D5}, {LED_D6_PORT,LED_D6}, {LED_D7_PORT,LED_D7}, {LED_D8_PORT,LED_D8}, }; //====================== //函數名稱:LEDInit //函數返回:無 //參數說明:無 //功能概要:LED初始化。 //====================== void LEDInit(){ uint_8 i = 0;//定義8根數據線為輸出,初始輸出0 for(i = 0;i < 8;i++)gpio_init(led_d[i].gpio_port, led_d[i].gpio_pin, 1, 0);1 //定義4位選線定義為輸出,初始輸出0 for(i = 0;i < 4;i++)gpio_init(led_cs[i].gpio_port, led_cs[i].gpio_pin, 1, 0);} //====================== //函數名稱:LEDshow1 //函數返回:無 //參數說明:i:指定LED哪一位顯示,c:顯示的內容 //功能概要:指定LED的第i位顯示c。 //====================== void LEDshow1(uint_8 i, uint_8 c){ uint_8 temp;uint_8 j;//位選全部置0 for(j=0;j<=3;j++)gpio_set(led_cs[j].gpio_port, led_cs[j].gpio_pin, 0);//數據上線 for(j=0;j<=7;j++){ temp =(c>>j)& 0x01; gpio_set(led_d[j].gpio_port, led_d[j].gpio_pin, temp);} //選擇的位選置1 gpio_set(led_cs[i].gpio_port, led_cs[i].gpio_pin, 1);} //顯示碼表 const uint_8 Dtable[24] = 1 // 0 1 2 3 4 5 6 7 8 9 {0x3F,0x06,0x5B,0x4F,0x66, 0x6D,0x7D,0x07,0x7F,0x6F, // 11 12 13 14 15 16 17 18 19 20 // 0.1.2.3.4.5.6.7.8.9.0xBF,0x86,0xDB,0x4F,0x66, 0x6D,0x7D,0x07,0xFF,0x6F, // 21 22 23(全亮)24(全滅)// E F 0x79,0x71, 0xFF, 0x00};//====================== //函數名稱:LEDchangeCode //函數返回:返回數據num對應的顯示碼 //參數說明:num:需要轉換成顯示碼的數字 //功能概要:數字轉成顯示碼 //===================== uint_8 LEDchangeCode(uint_8 num){ return Dtable[num];} LED.h //====================== // 文件名稱:led.h // 功能概要:led構件頭文件 // 版權所有: 蘇州大學飛思卡爾嵌入式中心(sumcu.suda.edu.cn)//====================== #ifndef led_H //防止重復定義(開頭)#define led_H #include “GPIOapp.h” //LED數據口分別接PORTB的{11,10,9,8,3,2,1,0}引腳 1 #define LED_D1_PORT PORTB #define LED_D1 11 #define LED_D2_PORT PORTB #define LED_D2 10 #define LED_D3_PORT PORTB #define LED_D3 9 #define LED_D4_PORT PORTB #define LED_D4 8 #define LED_D5_PORT PORTB #define LED_D5 3 #define LED_D6_PORT PORTB #define LED_D6 2 #define LED_D7_PORT PORTB #define LED_D7 1 #define LED_D8_PORT PORTB #define LED_D8 0 //LED位選口分別接PORTB的{19,18,17,16}引腳 #define LED_CS0_PORT PORTB #define LED_CS0 19 #define LED_CS1_PORT PORTB #define LED_CS1 18 #define LED_CS2_PORT PORTB #define LED_CS2 17 #define LED_CS3_PORT PORTB #define LED_CS3 16 //====================== //函數名稱:LEDInit //函數返回:無 //參數說明:無 1 //功能概要:LED初始化。 //====================== void LEDInit();//====================== //函數名稱:LEDshow1 //函數返回:無 //參數說明:i:指定LED哪一位顯示,c:顯示的內容 //功能概要:指定LED的第i位顯示c。 //====================== void LEDshow1(uint_8 i, uint_8 c);//====================== //函數名稱:LEDchangeCode //函數返回:返回數據num對應的顯示碼 //參數說明:num:需要轉換成顯示碼的數字 //功能概要:數字轉成顯示碼 //====================== uint_8 LEDchangeCode(uint_8 num);#endif //防止重復定義(結尾) 3、LCD構件 //====================== // 文件名稱:lcd.c // 功能概要:lcd構件頭文件 // 版權所有: 蘇州大學飛思卡爾嵌入式中心(sumcu.suda.edu.cn)//====================== #include “lcd.h”//lcd控制位和數據位端口及引腳號 struct GPIO LCD[11]= { {LCD_RS_PORT,LCD_RS}, 1 {LCD_RW_PORT,LCD_RW}, {LCD_E_PORT,LCD_E}, {LCD_D0_PORT,LCD_D0}, {LCD_D1_PORT,LCD_D1}, {LCD_D2_PORT,LCD_D2}, {LCD_D3_PORT,LCD_D3}, {LCD_D4_PORT,LCD_D4}, {LCD_D5_PORT,LCD_D5}, {LCD_D6_PORT,LCD_D6}, {LCD_D7_PORT,LCD_D7}, };//內部函數原型說明 extern void LCDCommand(uint_8 cmd);//====================== //函數名稱:LCDInit //函數返回:無 //參數說明:無 //功能概要:LCD初始化。 //====================== void LCDInit(){ uint_32 i = 0; //定義數據口和控制口為輸出 for(i = 0;i < 11;i++){ gpio_init(LCD[i].gpio_port, LCD[i].gpio_pin, 1,0);} //設置指令,RS,R/W = 00, 寫指令代碼 gpio_set(LCD[0].gpio_port, LCD[0].gpio_pin, 0);gpio_set(LCD[1].gpio_port, LCD[1].gpio_pin, 0);1 //功能設置-//設置指令 LCDCommand(0x38);//5*7點陣模式,2行顯示,8位數據總線 LCDCommand(0x08);//關顯示,關光標顯示,不閃爍 LCDCommand(0x01);//清屏 for(i=0;i<40000;i++)asm(“NOP”);//延時 LCDCommand(0x06);LCDCommand(0x14);//光標右移一個字符位,AC自動加1 LCDCommand(0x0C);//開顯示,關光標顯示,不閃爍 } //====================== //函數名稱:LCDShow //函數返回:無 //參數說明:需要顯示的數據 //功能概要:液晶顯示data中的數據。 //====================== void LCDShow(uint_8 data[32]){ uint_8 i;LCDInit();//LCD初始化 //顯示第1行16個字符 gpio_set(LCD[0].gpio_port, LCD[0].gpio_pin, 0);gpio_set(LCD[1].gpio_port, LCD[1].gpio_pin, 0);//后7位為DD RAM地址(0x00)LCDCommand(0x80);//寫16個數據到DD RAM gpio_set(LCD[0].gpio_port, LCD[0].gpio_pin, 1);gpio_set(LCD[1].gpio_port, LCD[1].gpio_pin, 0);//將要顯示在第1行上的16個數據逐個寫入DD RAM中 1 for(i = 0;i < 16;i++){ } //顯示第2行16個字符 gpio_set(LCD[0].gpio_port, LCD[0].gpio_pin, 0);gpio_set(LCD[1].gpio_port, LCD[1].gpio_pin, 0);//后7位為DD RAM地址(0x40)LCDCommand(0xC0);gpio_set(LCD[0].gpio_port, LCD[0].gpio_pin, 1);gpio_set(LCD[1].gpio_port, LCD[1].gpio_pin, 0);//將要顯示在第2行上的16個數據逐個寫入DD RAM中 for(i = 16;i < 32;i++){ } } //====================== //函數名稱:LCDCommand //函數返回:無 //參數說明:cmd:待執行的命令 //功能概要:執行給定的cmd命令,且延時。 //====================== void LCDCommand(uint_8 cmd){ uint_8 i;uint_16 j;uint_8 temp;LCDCommand(data[i]);LCDCommand(data[i]);//等待延遲防止重復調用此函數而LCD卡死 1 for(j=0;j<1600;j++);asm(“NOP”);//數據送到LCD的數據線上 for(i = 3;i < 11;i++){ gpio_set(LCD[i].gpio_port, LCD[i].gpio_pin, 0);} for(i = 3;i < 11;i++){ temp = 0x01 &(cmd>>(i-3));gpio_set(LCD[i].gpio_port, LCD[i].gpio_pin, temp);} //給出E信號的下降沿(先高后低),使數據寫入LCD gpio_set(LCD[2].gpio_port, LCD[2].gpio_pin, 1);for(j=0;j<25;j++)asm(“NOP”);gpio_set(LCD[2].gpio_port, LCD[2].gpio_pin, 0);} LCD.h //====================== // 文件名稱:lcd.h // 功能概要:lcd構件頭文件 // 版權所有: 蘇州大學飛思卡爾嵌入式中心(sumcu.suda.edu.cn)// 版本更新: 2013-03-17 V1.2 //====================== #ifndef LCD_H #define LCD_H #include “GPIOapp.h” //LCD寄存器選擇信號引腳 #define LCD_RS_PORT PORTD #define LCD_RS 7 //LCD讀寫信號引腳 1 #define LCD_RW_PORT PORTD #define LCD_RW 6 //LCD讀寫信號引腳 #define LCD_E_PORT PORTD #define LCD_E 5 //LCD數據引腳 #define LCD_D0_PORT PORTD #define LCD_D0 4 #define LCD_D1_PORT PORTD #define LCD_D1 3 #define LCD_D2_PORT PORTD #define LCD_D2 2 #define LCD_D3_PORT PORTD #define LCD_D3 1 #define LCD_D4_PORT PORTD #define LCD_D4 0 #define LCD_D5_PORT PORTC #define LCD_D5 17 #define LCD_D6_PORT PORTC #define LCD_D6 16 #define LCD_D7_PORT PORTC #define LCD_D7 13 //====================== //函數名稱:LCDInit //函數返回:無 //參數說明:無 //功能概要:LCD初始化。 //====================== extern void LCDInit();1 //====================== //函數名稱:LCDShow //函數返回:無 //參數說明:data[32]:需要顯示的數組 //功能概要:LCD顯示數組的內容。 //====================== extern void LCDShow(uint_8 data[32]);#endif //防止重復定義(結尾) 4、輔助函數 /* * qzh.h * * Created on: Jun 5, 2017 * Author: administrator */ #ifndef QZH_H_ #define QZH_H_ #include “GPIOapp.h” void changeState(int*);//改變工作狀態函數 int sdmn(int);//濕度變化模擬函數 void changeCode(int,uint_8 s[4]);//LED顯示轉碼函數 #endif /* QZH_H_ */ /* * fun.c * * Created on: Jun 5, 2017 1 * Author: administrator */ #include“qzh.h” void changeState(int *a){ } int sdmn(int a){ } void changeCode(int a,uint_8 s[4]){ } 1 if(*a == 0){ } else { } *a = 0;*a = 1;return a-=5;uint_8 c[10] = {'0','1','2','3','4','5','6','7','8','9'};s[3] = c[a%10];s[2] = c[a/10];s[1] = c[a/100];s[0] = c[a/1000]; 第四章 系統測試 4.1測試結果 圖4 圖4 是開始是濕度顯示是72%,工作狀態顯示為停止。1 圖5 圖5 是第二次采集濕度顯示為69%,工作狀態顯示為停止。1 圖6 圖6 是第三次采集濕度顯示為66%度,已經逼近設定值65%,此時工作狀態顯示為停止。1 圖7 再次采集時濕度低于65%,滴灌立即開始,濕度上升至75%。1 第五章 總結展望 5.1總結 通過本次課程設計,對中斷處理有了更加深入的理解。對于計時器,LED和LCD的工作原理也有了更深的認識。LCD在試驗中遇到的問題不大,主要問題在于中斷處理函數的編寫和LED顯示上,LED顯示是每次中斷顯示一個數,所以要每次中斷顯示,才能使得四個值看起來是同時顯示的且沒有閃爍效果。 其次LED的顯示是要求是字符,所以在顯示濕度是加上了轉碼函數加以轉換。這里又涉及到了參數為數組的函數的寫法,因為學過好幾種語言,其傳遞方式偶所不同所以在這里也出現了不少問題。 通過此次課程設計不僅對單片機應用有了很好的實踐經驗,而且也幫助鞏固了以前的知識。 5.2展望 1、滴灌系統可以增加通信模塊,使得所有者可以實時監測農作物生長環境,也可以遠程操控進行滴灌等功能。 2、滴灌系統可以增加溫度監測,土壤酸堿性監測,空氣CO2濃度監測,并配套處理設備使得對農作物的管理更加智能化。 1 參考文獻 [1] 王宜懷、張書奎、王林、吳瑾著.嵌入式技術基礎與實踐(第3版),北京:清華大學 出版社,2011.[2] 田澤.嵌入式系統開發與應用.北京:北京航天航空大學出版社,[3] 王宜懷、陳建明、蔣銀珍著.基于32位ColdFire構建嵌入式系統.北京:電子工業出 版社,2006.[4] 王粉花、王志良.嵌入式系統與單片機實踐教程.北京:清華大學出版社,2010.32 1第二篇:單片機課程設計報告格式
第三篇:單片機課程設計報告格式
第四篇:單片機課程設計報告
第五篇:單片機課程設計報告