第一篇:單片機課程設計報告
單片機課程設計報告
? 課程名稱:單片機原理及接口課程設計
? 題目:基于
? 學院:電氣信息學院
? 專業班級:測控技術與儀器
? 姓名:江讓
? 學號:
? 指導老師:劉升老師
? 時間:
C51單片機的ADC0809數模轉換103班1090640772013/1/16
第二篇:單片機課程設計報告格式
《單片機課程設計》報告格式
一、封面(注明:單片機課程設計報告、課題名稱、班級、姓名、指導教師、日期)
二、摘要(課題簡要說明)
三、課題設計目標(功能、性能指標)、方案論證(要求作兩種以上方案比較)
四、設計過程(關鍵電路工作原理、元器件參數選用、程序流程圖、程序)
五、軟硬件的安裝、調試方法
六、完整電路圖、性能參數測試
七、存在的問題和改進方向
八、參考文獻資料
第三篇:單片機課程設計報告格式
單片機課程設計報告格式要求
統一的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