版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計報告</b></p><p> 題 目: 自動滴灌系統(tǒng)設(shè)計 </p><p> 課程名稱: 單片機原理及應(yīng)用 </p><p> 學(xué) 院: 信息工程學(xué)院 </p><p> 專 業(yè):
2、 計算機科學(xué)與技術(shù) </p><p> 班 級: 2014 級計本 1 班 </p><p><b> 目錄</b></p><p> 第一章 系統(tǒng)概要2</p><p><b> 1.1系統(tǒng)背景2</b></p><p>&
3、lt;b> 1.2系統(tǒng)功能2</b></p><p><b> 1.3設(shè)計要求2</b></p><p> 第二章 系統(tǒng)硬件原理3</p><p> 2.1AW60主要模塊和特點3</p><p> 2.2 LCD模塊3</p><p> 2.3 LED模
4、塊4</p><p> 第三章 系統(tǒng)軟件設(shè)計6</p><p><b> 3.1系統(tǒng)流程6</b></p><p> 3.2主程序(main.c)7</p><p> 3.2中斷處理程序(isr.c)7</p><p><b> 3.3構(gòu)件組成9</b>
5、</p><p> 第四章 系統(tǒng)測試27</p><p> 4.1測試結(jié)果27</p><p> 第五章 總結(jié)展望31</p><p><b> 5.1總結(jié)31</b></p><p><b> 5.2展望31</b></p>&l
6、t;p><b> 參考文獻32</b></p><p><b> 第一章 系統(tǒng)概要</b></p><p><b> 1.1系統(tǒng)背景</b></p><p> 隨著科學(xué)技術(shù)的發(fā)展電子技術(shù)產(chǎn)業(yè)結(jié)構(gòu)調(diào)整,單片機開始迅速發(fā)展,由于單片機本身的易于控制,精度高,自動化全面,市場對于智能控制系統(tǒng)
7、的需求也越來越大。 自動滴灌系統(tǒng),就是在單片機程序的控制下實現(xiàn)濕度監(jiān)測、滴灌控制的設(shè)備。單片機系統(tǒng)座位一種典型的嵌入式系統(tǒng),其系統(tǒng)設(shè)計包括硬件設(shè)計和軟件設(shè)計編程設(shè)計兩個方面,其調(diào)試過程一般分為軟件調(diào)試,硬件調(diào)試,系統(tǒng)調(diào)試。自動滴灌系統(tǒng)需要實現(xiàn)濕度采集,A/D轉(zhuǎn)換,濕度顯示,工作狀態(tài)顯示,電機驅(qū)動的功能。</p><p><b> 1.2系統(tǒng)功能</b></p>&l
8、t;p> 首先要進行濕度監(jiān)測,每隔固定的時間就采集一次濕度,在內(nèi)部轉(zhuǎn)換后與標(biāo)準(zhǔn)值進行比較如果濕度值低于給定值的話就切換至工作狀態(tài),滴灌結(jié)束時自動切換至結(jié)束模式,繼續(xù)監(jiān)測濕度。</p><p> 仿真狀態(tài)下濕度監(jiān)測采用軟件模擬實現(xiàn),采集濕度信息使用LED顯示,每隔5s采集一次。 工作狀態(tài)由LCD顯示。分別有滴灌開始(“Drip-irrigation is starting..”),和滴灌結(jié)束(“Drip-
9、irrigation has ended..”)。滴灌時間為5s。結(jié)束后切換至結(jié)束模式。</p><p><b> 1.3設(shè)計要求</b></p><p> 學(xué)生在設(shè)計中可以引用所需的參考資料,避免重復(fù)工作,加快設(shè)計進程,但必須和題目的要求相符合,保證設(shè)計的正確。學(xué)生要在老師的指導(dǎo)下制定好自己各環(huán)節(jié)的詳細(xì)設(shè)計進程計劃,按給定的時間計劃保質(zhì)保量的完成個階段的設(shè)計任務(wù)
10、。設(shè)計中可邊設(shè)計,邊修改,軟件設(shè)計與硬件設(shè)計可交替進行,問題答疑與調(diào)試和方案修改相結(jié)合,提高設(shè)計的效率,保證按時完成設(shè)計工作并交出合格的設(shè)計報告。</p><p> 第二章 系統(tǒng)硬件原理</p><p> 2.1AW60主要模塊和特點</p><p> AW60系列主要常規(guī)模塊和特點: </p><p> ?。?)最高達40MHz的
11、CPU工作頻率和20MHz的內(nèi)部總線工作頻率;時鐘源選項包括晶振,諧振器,外部時鐘或,內(nèi)部產(chǎn)生的時鐘。 </p><p> ?。?)相比HC08CPU指令集,S08CPU增加了BGND指令。 </p><p> ?。?)單線后臺調(diào)試模式接口:增強的斷點能力,允許單一的斷點設(shè)置在線調(diào)試(在片內(nèi)調(diào)試模塊增加了多于兩個的斷點)。 </p><p> ?。?)內(nèi)含32
12、個中斷/復(fù)位源;內(nèi)含2KB的片內(nèi)RAM;內(nèi)含60KB的片內(nèi)在線可編程的Flash存儲器,帶有 塊保護和安全選項。 </p><p> ?。?)可選的計算機正常操作(COP)復(fù)位;低電壓檢測與復(fù)位或中斷;非法操作碼檢測與復(fù)位;非法地址檢測與復(fù)位。 </p><p> (6)ADC:多達16個通道,10個A/D轉(zhuǎn)換器與動動比較功能;兩個串行通信接口SCI模塊與可選的13位中斷;一個串行外
13、設(shè)接口SPI模塊;集成電路互聯(lián)總線IIC模塊運行高達100kbps的最高總線負(fù)載;8引腳鍵盤中斷KBI模塊。 </p><p> ?。?)Timers:1個2 通道和一個6通道16位定時器/脈沖寬度調(diào)制器模塊。既有輸入捕獲,輸出比較,脈寬調(diào)制功能。AW子系列MCU的4種封裝形式只是引腳數(shù)量和形式有所區(qū)別,其他方面是一致的。</p><p><b> 2.2 LCD模塊</
14、b></p><p> LCD作為電子信息產(chǎn)品的主要顯示器件,相對于其他類型的顯示器件來說有其自身的特點,主要包括: </p><p> ?。?)低電壓,低功耗;</p><p> ?。?)平板型結(jié)構(gòu); </p><p> ?。?)使用壽命長; </p><p><b>
15、 ?。?)被動顯示; </b></p><p> ?。?)顯示信息量大且易于彩色化; </p><p> (6)無電磁輻射。 </p><p> 點陣字符型LCD是專門用于顯示數(shù)字,字母,圖形符號及少量自定義符號的液晶顯示器。這類顯示器把LCD控制器,點陣驅(qū)動器,字符存儲器,顯示體及少量的阻容元件等集成一個液晶顯示模板。
16、鑒于字符型液晶顯示模塊目前在國際上已經(jīng)規(guī)范化,其電特性及接口特性是統(tǒng)一的,只要設(shè)計出一種型號的接口電路,在指令上稍加修改即可使用各種規(guī)格的字符型液晶顯示器模塊。</p><p> 字符型液晶顯示器模塊的特點如下: </p><p> ?。?)液晶顯示屏是以若干5*8或5*11點陣塊等組成的顯示字符群。每個點陣塊塊為一個字符位,字符間距和行間距都是一個點的寬度。 <
17、;/p><p> (2)主控制電路為HD44780(HITACHI及其他公司的兼容電路。從程序員的角度來看LCD顯示接口與編程是面向HD44780的,只要了解HD44780的編程結(jié)構(gòu)即可進行LCD的顯示編程。 </p><p> ?。?)內(nèi)部具有字符發(fā)生器ROM,可顯示192種字符。 </p><p> ?。?)具有64字節(jié)的字符發(fā)生器RAM,可以
18、定義8個5*8點陣字符或4個5*11的點陣字符。 </p><p> (5)具有64字節(jié)的數(shù)據(jù)顯示RAM,供顯示器編程使用。 (6)標(biāo)準(zhǔn)接口特性,與MC9S08系列的MCU容易接口。 (7)模塊結(jié)構(gòu)緊湊,輕巧,裝配容易。 </p><p> (8)單+5V電源供電(寬溫型需要加-7V驅(qū)動電源)。 (9)低功耗,高可靠性。</p&g
19、t;<p><b> 2.3 LED模塊</b></p><p> LED發(fā)光二極管分為共陰極和共陽極數(shù)碼管,若為共陰極數(shù)碼管則公共端接地,若為共陽極數(shù)碼管則公共端接電源正極。如圖1:</p><p><b> 圖1</b></p><p> 實際應(yīng)用中是多個LED共同使用,MCU通過一個稱為數(shù)據(jù)口的
20、8位數(shù)據(jù)端口來控制位段而原來8段數(shù)碼管的公共端,原來接到公共電平,現(xiàn)在接MCU的一個引腳,由MCU來控制,通常叫做位選信號,這樣MCU的8個端口就可以控制8連排的數(shù)碼管了。若要控制更多數(shù)碼管則需加一個譯碼芯片。每個時刻只讓一個數(shù)碼管有效,由于人的視覺暫留效應(yīng)(100ms)可以達到同時顯示的效果。</p><p> 圖2是MCU與4排8段數(shù)碼管的連接:</p><p><b>
21、 圖2</b></p><p> 第三章 系統(tǒng)軟件設(shè)計</p><p><b> 3.1系統(tǒng)流程</b></p><p><b> 圖3</b></p><p> 圖3是系統(tǒng)流程圖,開始時先初始化各個部件,LCD顯示結(jié)束滴灌信息,LED顯示為全零。后每隔五秒采集一次濕度數(shù)據(jù)用LE
22、D顯示濕度。判斷濕度值是否低于設(shè)定值,低于設(shè)定值的話立即啟動滴灌,此時濕度上升,結(jié)束滴灌。若沒有低于設(shè)定值的話,則繼續(xù)監(jiān)測。LED不斷刷新顯示當(dāng)前濕度值。</p><p> 3.2主程序(main.c)</p><p> #include "includes.h" //包涵總頭文件</p><p> int main(void)<
23、/p><p><b> {</b></p><p><b> work = 0;</b></p><p> shidu = 75;</p><p> enter_critical();</p><p> LEDInit();
24、 //LED初始化</p><p> LCDInit(); //LCD初始化</p><p> tpm_init(TPM0,TPM_CLKSRC_PLL,1000); //初始化TPM模塊,1ms中斷一次</p><p> light_init(LIGHT_
25、PORT, LIGHT_PIN_RED, LIGHT_OFF); </p><p> light_init(LIGHT_PORT, LIGHT_PIN_GREEN, LIGHT_OFF); </p><p> tpm_enable_int(0);</p><p> init_critical();</p><p><b
26、> for(;;)</b></p><p><b> {</b></p><p><b> } </b></p><p><b> return 0;</b></p><p><b> }</b></p>&l
27、t;p> 3.2中斷處理程序(isr.c)</p><p> //================================================================</p><p> //文件名稱:isr.c</p><p> //功能概要: 中斷底層驅(qū)動構(gòu)件源文件</p><p> //版權(quán)所有
28、:蘇州大學(xué)飛思卡爾嵌入式中心(sumcu.suda.edu.cn)</p><p> //================================================================</p><p> #include "includes.h"</p><p> void tpm0_isr(void)&l
29、t;/p><p><b> {</b></p><p> static uint_32 TPMCounter = 0; //計時器</p><p> static uint_8 LEDindex=0; //位選口聲明</p><p> uint_8 LEDDataBuffer[4];
30、 //LED顯示緩沖區(qū)</p><p> changeCode(shidu,LEDDataBuffer);//將濕度值轉(zhuǎn)化為對應(yīng)字符輸出</p><p><b> uint_8 i;</b></p><p> uint_8 * working;</p><p> uint_8 * stop; </p>
31、;<p> working = (uint_8 *)"Drip-irrigation is starting......";</p><p> stop = (uint_8 *)"Drip-irrigation has ended......";</p><p> if((TPM_SC_REG(TPM0_BASE_PTR) &am
32、p; TPM_SC_TOF_MASK) == TPM_SC_TOF_MASK)</p><p><b> {</b></p><p> TPMCounter++;</p><p><b> }</b></p><p> BSET(TPM_SC_TOF_SHIFT,TPM_SC_REG(TP
33、M0_BASE_PTR)); //中斷置標(biāo)志位寫1清0 </p><p> LEDindex++; //位選位+1</p><p> if (LEDindex>=4) LEDindex=0; //大于4位選口置0</p><p> i=LEDchan
34、geCode(LEDDataBuffer[LEDindex]-'0'); //轉(zhuǎn)碼</p><p> LEDshow1(LEDindex,i); </p><p> if(TPMCounter>5000)</p><p><b> {</b></p><p
35、> shidu = sdmn(shidu);</p><p> if(shidu <= 65)</p><p><b> {</b></p><p> changeState(&work);//改變工作狀態(tài)</p><p><b> }</b></p>&
36、lt;p> if(work == 0)</p><p><b> {</b></p><p> LCDShow(stop); </p><p> TPMCounter = 0;</p><p> light_control(LIGHT_PORT, LIGHT_PIN_RED, LIGHT_ON); <
37、;/p><p> light_control(LIGHT_PORT, LIGHT_PIN_GREEN, LIGHT_OFF); </p><p><b> }</b></p><p> if(work == 1)</p><p><b> {</b></p><p>
38、LCDShow(working);</p><p> TPMCounter = 0;</p><p> shidu = 80;</p><p> light_control(LIGHT_PORT, LIGHT_PIN_GREEN, LIGHT_ON);</p><p> light_control(LIGHT_PORT, LIGHT_
39、PIN_RED, LIGHT_OFF);</p><p> changeState(&work);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><
40、b> 3.3構(gòu)件組成</b></p><p><b> 1、TPM構(gòu)件:</b></p><p> //=================================================================</p><p> //文件名稱:tpm.c</p><p>
41、 //功能概要:tpm底層驅(qū)動構(gòu)件源文件</p><p> //版權(quán)所有:蘇州大學(xué)飛思卡爾嵌入式中心(sumcu.suda.edu.cn)</p><p> //====================================================================</p><p> #include "tpm.h&
42、quot;</p><p> //定時器模塊0,1,2地址映射</p><p> Const TPM_MemMapPtr</p><p> TPM_ARR[]={TPM0_BASE_PTR,TPM1_BASE_PTR,TPM2_BASE_PTR};</p><p> //================================
43、====================================</p><p> //函數(shù)名稱:tpm_enable_int </p><p> //功能概要:使能tpm模塊中斷。
44、 </p><p> //參數(shù)說明:tpmModule:模塊號:0、1、2 </p><p><b> //函數(shù)返回:無</b></p><p> //============
45、========================================================</p><p> void tpm_enable_int(uint_8 tpmModule)</p><p><b> {</b></p><p> enable_irq(tpm0_irq_no + tpmModule);&l
46、t;/p><p><b> }</b></p><p> //====================================================================</p><p> //函數(shù)名稱:tpm_disable_int
47、 </p><p> //功能概要:禁止tpm模塊初始化。 </p><p> //參數(shù)說明:tpmModule:模塊號:0、1、2
48、 </p><p><b> //函數(shù)返回:無</b></p><p> //====================================================================</p><p> void tpm_disable_int(uint_8 tpmModule)</p
49、><p><b> {</b></p><p> disable_irq(tpm0_irq_no + tpmModule);</p><p><b> }</b></p><p> //=======================================================
50、=============</p><p> //函數(shù)名稱:tpm_init </p><p> //功能概要:初始化tpm模塊. </p><p> //參數(shù)說明:tpmModule
51、:模塊號:0、1、2 </p><p> //clk_src_sel:時鐘源選擇:1:PLL/FLL(推薦)、2:晶振、3:內(nèi)部參考時鐘。1,2可用</p><p> // int_us:中斷毫秒數(shù),中斷時間間隔,單位為毫秒,10ms=10000</p><p> //函數(shù)返回:函數(shù)執(zhí)行狀態(tài):0=正常;非0=異常</p><
52、;p> //====================================================================</p><p> uint_8 tpm_init (uint_8 tpmModule,uint_8 clk_src_sel,uint_32 int_us)</p><p><b> {</b></p&g
53、t;<p> if(tpmModule>2)//防止越界值</p><p><b> {</b></p><p> tpmModule=2;</p><p><b> }</b></p><p> //開啟SIM時鐘門</p><p> BSE
54、T(SIM_SCGC6_TPM0_SHIFT+tpmModule,SIM_SCGC6); //使能TPM時鐘</p><p> //中斷時間計算:(48000/8)*10000/1000=0x7530 10ms中斷一次</p><p> switch(clk_src_sel)</p><p><b> {</b></p>
55、<p> case 1: //MCGPLL/2或者MCGFLL作為時鐘源</p><p> BSET(SIM_SOPT2_PLLFLLSEL_SHIFT,SIM_SOPT2);//使能PLL為時鐘源</p><p> int_us=(48000/8)*int_us/1000;</p><p><b> break; <
56、;/b></p><p> case 2: //晶振作為時鐘源</p><p> int_us=(8000/8)*int_us/1000;</p><p> OSC0_CR|=OSC_CR_ERCLKEN_MASK;//開啟晶振輸出時鐘</p><p><b> break; </b></p&g
57、t;<p> case 3: //內(nèi)部參考時鐘,由MCG決定</p><p> break; </p><p><b> default:</b></p><p> return 1; //傳參錯誤,返回</p><p><b> }</b></p>
58、<p> SIM_SOPT2 |= SIM_SOPT2_TPMSRC(clk_src_sel);//使能時鐘選擇</p><p> TPM_ARR[tpmModule]->CNT=0x00;</p><p> TPM_ARR[tpmModule]->MOD=int_us;</p><p> //TOF寫1清0,TOIE中斷使能,CM
59、OD選擇每次時鐘加1,PS=0x011 選擇8分頻;</p><p> TPM_ARR[tpmModule]->SC=TPM_SC_TOF_MASK|TPM_SC_TOIE_MASK|TPM_SC_CMOD(1)|TPM_SC_PS(3);</p><p><b> return 0;</b></p><p><b> }
60、</b></p><p> //====================================================================</p><p> //函數(shù)名稱:tpm_stop </p><p>
61、//功能概要:禁止tpm模塊。 </p><p> //參數(shù)說明:tpmModule:模塊號:0、1、2 </p><p><b> //函
62、數(shù)返回:無</b></p><p> //====================================================================</p><p> void tpm_stop(uint_8 tpmModule)</p><p><b> {</b></p><
63、;p> TPM_ARR[tpmModule]->SC&=~TPM_SC_CMOD(3);</p><p><b> }</b></p><p><b> Tpm.h</b></p><p> //==================================================
64、==================</p><p> //文件名稱:tpm.c</p><p> //功能概要:tpm底層驅(qū)動構(gòu)件源文件</p><p> //版權(quán)所有:蘇州大學(xué)飛思卡爾嵌入式中心(sumcu.suda.edu.cn)</p><p> //======================================
65、==============================</p><p> #ifndef TPM_H</p><p> #define TPM_H</p><p> #include "common.h"</p><p> #include "sysinit.h"</p>&
66、lt;p><b> //中斷號</b></p><p> #define tpm0_irq_no 17</p><p> #define tpm1_irq_no 18</p><p> #define tpm2_irq_no 19</p><p><b> //時鐘選擇</b><
67、;/p><p> #define TPM_CLKSRC_PLL 1</p><p> #define TPM_CLKSRC_OSC 2</p><p> #define TPM_CLKSRC_IRC 3</p><p><b> //模塊號</b></p><p> #define T
68、PM0 0</p><p> #define TPM1 1</p><p> #define TPM2 2</p><p> //====================================================================</p><p> //函數(shù)名稱:tpm_enable_int
69、 </p><p> //功能概要:使能tpm模塊中斷。 </p><p> //參數(shù)說明:tpmModule:模塊號:0、1、2
70、 </p><p><b> //函數(shù)返回:無</b></p><p> //====================================================================</p><p> vo
71、id tpm_enable_int(uint_8 tpmModule);</p><p> //====================================================================</p><p> //函數(shù)名稱:tpm_disable_int
72、 </p><p> //功能概要:禁止tpm模塊初始化。 </p><p> //參數(shù)說明:tpmModule:模塊號:0、1、2
73、 </p><p><b> //函數(shù)返回:無</b></p><p> //====================================================================</p><p> void tpm_disable_int(uint_8 tpmModule);</p>
74、<p> //====================================================================</p><p> //函數(shù)名稱:tpm_init </p><p> //功能概要:初始化tpm模塊.
75、 </p><p> //參數(shù)說明:tpmModule:模塊號:0、1、2 </p><p> //clk_src_sel:時鐘源選擇:1:PLL/FLL(推薦)、2:晶振、3:內(nèi)部參考時鐘。1,2可用</p><p> // int_us:中斷毫秒數(shù),中斷時間間隔,單位為毫秒,10
76、ms=10000</p><p> //函數(shù)返回:函數(shù)執(zhí)行狀態(tài):0=正常;非0=異常</p><p> //====================================================================</p><p> uint_8 tpm_init (uint_8 tpmModule,uint_8 clk_src_
77、sel,uint_32 int_us);</p><p> //====================================================================</p><p> //函數(shù)名稱:tpm_stop </p>&
78、lt;p> //功能概要:禁止tpm模塊。 </p><p> //參數(shù)說明:tpmModule:模塊號:0、1、2 </p><p><b&g
79、t; //函數(shù)返回:無</b></p><p> //====================================================================</p><p> void tpm_stop(uint_8 tpmModule);</p><p><b> #endif</b>&l
80、t;/p><p><b> 2、LED構(gòu)件</b></p><p> //===================================================================</p><p> // 文件名稱:led.c
81、 </p><p> // 功能概要:led構(gòu)件源文件</p><p> // 版權(quán)所有: 蘇州大學(xué)飛思卡爾嵌入式中心(sumcu.suda.edu.cn) </p><p> //====================================================================</p&g
82、t;<p> #include "led.h" //led位選端口</p><p> struct GPIO led_cs[4]=</p><p><b> {</b></p><p> {LED_CS0_PORT,LED_CS0},</p><p> {LED_
83、CS1_PORT,LED_CS1},</p><p> {LED_CS2_PORT,LED_CS2},</p><p> {LED_CS3_PORT,LED_CS3},</p><p> };//led數(shù)據(jù)端口</p><p> struct GPIO led_d[8]=</p><p><b>
84、{</b></p><p> {LED_D1_PORT,LED_D1},</p><p> {LED_D2_PORT,LED_D2},</p><p> {LED_D3_PORT,LED_D3},</p><p> {LED_D4_PORT,LED_D4},</p><p> {LED_D5_PO
85、RT,LED_D5},</p><p> {LED_D6_PORT,LED_D6},</p><p> {LED_D7_PORT,LED_D7},</p><p> {LED_D8_PORT,LED_D8},</p><p><b> };</b></p><p> //========
86、============================================================</p><p> //函數(shù)名稱:LEDInit</p><p><b> //函數(shù)返回:無</b></p><p> //參數(shù)說明:無 </p><p> //功能概要:LED初始化。<
87、;/p><p> //====================================================================</p><p> void LEDInit()</p><p><b> { </b></p><p> uint_8 i = 0;</p>&
88、lt;p> //定義8根數(shù)據(jù)線為輸出 ,初始輸出0</p><p> for(i = 0;i < 8;i++)</p><p> gpio_init (led_d[i].gpio_port, led_d[i].gpio_pin, 1, 0);</p><p> //定義4位選線定義為輸出 ,初始輸出0</p><p>
89、for(i = 0;i < 4;i++)</p><p> gpio_init (led_cs[i].gpio_port, led_cs[i].gpio_pin, 1, 0);</p><p><b> }</b></p><p> //================================================
90、====================</p><p> //函數(shù)名稱:LEDshow1</p><p><b> //函數(shù)返回:無</b></p><p> //參數(shù)說明:i:指定LED哪一位顯示,c:顯示的內(nèi)容 </p><p> //功能概要:指定LED的第i位顯示c。</p><p&
91、gt; //====================================================================</p><p> void LEDshow1(uint_8 i, uint_8 c)</p><p><b> {</b></p><p> uint_8 temp;</p>
92、<p><b> uint_8 j;</b></p><p> //位選全部置0 </p><p> for (j=0;j<=3;j++)</p><p> gpio_set (led_cs[j].gpio_port, led_cs[j].gpio_pin, 0);</p><p> //數(shù)
93、據(jù)上線 </p><p> for (j=0;j<=7;j++)</p><p><b> { </b></p><p> temp = (c>>j) & 0x01;</p><p> gpio_set (led_d[j].gpio_port, led_d[j].g
94、pio_pin, temp);</p><p><b> }</b></p><p><b> //選擇的位選置1</b></p><p> gpio_set (led_cs[i].gpio_port, led_cs[i].gpio_pin, 1); </p><p><b>
95、}</b></p><p><b> //顯示碼表</b></p><p> const uint_8 Dtable[24] =</p><p> // 0 1 2 3 4 5 6 7 8 9</p><p> {0x3F,0x06,0x5B
96、,0x4F,0x66, 0x6D,0x7D,0x07,0x7F,0x6F,</p><p> // 11 12 13 14 15 16 17 18 19 20</p><p> // 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.</p><p> 0xBF,0x8
97、6,0xDB,0x4F,0x66, 0x6D,0x7D,0x07,0xFF,0x6F,</p><p> // 21 22 23(全亮)24(全滅) </p><p> // E F </p><p> 0x79,0x71, 0xFF, 0x00};</p><p> //==============
98、======================================================</p><p> //函數(shù)名稱:LEDchangeCode</p><p> //函數(shù)返回:返回數(shù)據(jù)num對應(yīng)的顯示碼</p><p> //參數(shù)說明:num:需要轉(zhuǎn)換成顯示碼的數(shù)字</p><p> //功能概要:數(shù)字轉(zhuǎn)成顯
99、示碼</p><p> //===================================================================</p><p> uint_8 LEDchangeCode(uint_8 num)</p><p><b> {</b></p><p> retu
100、rn Dtable[num]; </p><p><b> }</b></p><p><b> LED.h</b></p><p> //====================================================================</p><p
101、> // 文件名稱:led.h </p><p> // 功能概要:led構(gòu)件頭文件</p><p> // 版權(quán)所有: 蘇州大學(xué)飛思卡爾嵌入式中心(sumcu.suda.edu.cn)</p><p> //================
102、====================================================</p><p> #ifndef led_H //防止重復(fù)定義(開頭)</p><p> #define led_H</p><p> #include "GPIOapp.h" </p><p&
103、gt; //LED數(shù)據(jù)口分別接PORTB的{11,10,9,8,3,2,1,0}引腳</p><p> #define LED_D1_PORT PORTB </p><p> #define LED_D1 11 </p><p> #define LED_D2_PORT PORTB</p><p> #def
104、ine LED_D2 10</p><p> #define LED_D3_PORT PORTB</p><p> #define LED_D3 9</p><p> #define LED_D4_PORT PORTB</p><p> #define LED_D4 8</p><p> #defi
105、ne LED_D5_PORT PORTB</p><p> #define LED_D5 3</p><p> #define LED_D6_PORT PORTB</p><p> #define LED_D6 2</p><p> #define LED_D7_PORT PORTB</p><p>
106、 #define LED_D7 1</p><p> #define LED_D8_PORT PORTB</p><p> #define LED_D8 0</p><p> //LED位選口分別接PORTB的{19,18,17,16}引腳</p><p> #define LED_CS0_PORT PORTB
107、</p><p> #define LED_CS0 19 </p><p> #define LED_CS1_PORT PORTB</p><p> #define LED_CS1 18</p><p> #define LED_CS2_PORT PORTB</p><p
108、> #define LED_CS2 17</p><p> #define LED_CS3_PORT PORTB</p><p> #define LED_CS3 16</p><p> //====================================================================</p&g
109、t;<p> //函數(shù)名稱:LEDInit</p><p><b> //函數(shù)返回:無</b></p><p> //參數(shù)說明:無 </p><p> //功能概要:LED初始化。</p><p> //==============================================
110、======================</p><p> void LEDInit();</p><p> //====================================================================</p><p> //函數(shù)名稱:LEDshow1</p><p><b>
111、; //函數(shù)返回:無</b></p><p> //參數(shù)說明:i:指定LED哪一位顯示,c:顯示的內(nèi)容 </p><p> //功能概要:指定LED的第i位顯示c。</p><p> //====================================================================</p>
112、<p> void LEDshow1(uint_8 i, uint_8 c);</p><p> //====================================================================</p><p> //函數(shù)名稱:LEDchangeCode</p><p> //函數(shù)返回:返回數(shù)據(jù)num對應(yīng)
113、的顯示碼</p><p> //參數(shù)說明:num:需要轉(zhuǎn)換成顯示碼的數(shù)字</p><p> //功能概要:數(shù)字轉(zhuǎn)成顯示碼</p><p> //====================================================================</p><p> uint_8 LEDchangeCo
114、de(uint_8 num);</p><p> #endif //防止重復(fù)定義(結(jié)尾)</p><p><b> 3、LCD構(gòu)件</b></p><p> //====================================================================</p><p&
115、gt; // 文件名稱:lcd.c </p><p> // 功能概要:lcd構(gòu)件頭文件</p><p> // 版權(quán)所有: 蘇州大學(xué)飛思卡爾嵌入式中心(sumcu.suda.edu.cn) </p><p> //==============
116、======================================================</p><p> #include "lcd.h"//lcd控制位和數(shù)據(jù)位端口及引腳號</p><p> struct GPIO LCD[11]=</p><p><b> {</b></p>&
117、lt;p> {LCD_RS_PORT,LCD_RS},</p><p> {LCD_RW_PORT,LCD_RW},</p><p> {LCD_E_PORT,LCD_E},</p><p> {LCD_D0_PORT,LCD_D0},</p><p> {LCD_D1_PORT,LCD_D1},</p><
118、;p> {LCD_D2_PORT,LCD_D2},</p><p> {LCD_D3_PORT,LCD_D3},</p><p> {LCD_D4_PORT,LCD_D4},</p><p> {LCD_D5_PORT,LCD_D5},</p><p> {LCD_D6_PORT,LCD_D6},</p><
119、;p> {LCD_D7_PORT,LCD_D7},</p><p> };//內(nèi)部函數(shù)原型說明</p><p> extern void LCDCommand(uint_8 cmd);</p><p> //====================================================================</
120、p><p> //函數(shù)名稱:LCDInit</p><p><b> //函數(shù)返回:無</b></p><p><b> //參數(shù)說明:無</b></p><p> //功能概要:LCD初始化。</p><p> //==========================
121、==========================================</p><p> void LCDInit()</p><p><b> {</b></p><p> uint_32 i = 0; //定義數(shù)據(jù)口和控制口為輸出 </p><p> for(i = 0;i <
122、; 11;i++)</p><p><b> {</b></p><p> gpio_init(LCD[i].gpio_port, LCD[i].gpio_pin, 1,0);</p><p><b> }</b></p><p> //設(shè)置指令,RS,R/W = 00, 寫指令代碼 <
123、;/p><p> gpio_set (LCD[0].gpio_port, LCD[0].gpio_pin, 0);</p><p> gpio_set (LCD[1].gpio_port, LCD[1].gpio_pin, 0); </p><p><b> //功能設(shè)置- </b></p><p><b>
124、; //設(shè)置指令</b></p><p> LCDCommand(0x38); //5*7點陣模式,2行顯示,8位數(shù)據(jù)總線</p><p> LCDCommand(0x08); //關(guān)顯示,關(guān)光標(biāo)顯示,不閃爍</p><p> LCDCommand(0x01); //清屏</p><p&g
125、t; for (i=0; i<40000; i++)asm("NOP"); //延時</p><p> LCDCommand(0x06);</p><p> LCDCommand(0x14); //光標(biāo)右移一個字符位,AC自動加1</p><p> LCDCommand(0x0C); //開顯示,關(guān)光標(biāo)顯示,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計---自動打系統(tǒng)
- 單片機自動打鈴課程設(shè)計
- 單片機課程設(shè)計之自動打鈴系統(tǒng)
- 單片機課程設(shè)計報告---單片機秒表系統(tǒng)設(shè)計
- 課程設(shè)計-基于單片機的自動打鈴系統(tǒng)設(shè)計
- 單片機課程設(shè)計---農(nóng)田自動灌溉系統(tǒng)
- 課程設(shè)計-基于單片機的自動打鈴系統(tǒng)設(shè)計
- 基于單片機自動取款機系統(tǒng)課程設(shè)計
- 單片機課程設(shè)計-單片機課程設(shè)計---電子時鐘
- 單片機課程設(shè)計---基于單片機溫度測量系統(tǒng)設(shè)計
- 單片機課程設(shè)計---單片機病房呼叫系統(tǒng)
- 單片機課程設(shè)計--單片機轉(zhuǎn)速測量系統(tǒng)
- 自動化單片機課程設(shè)計
- 單片機課程設(shè)計-自動循跡小車
- 單片機課程設(shè)計---時鐘系統(tǒng)設(shè)計
- 51單片機自動供料課程設(shè)計---基于單片機的自動控制供料系統(tǒng)
- 單片機課程設(shè)計--基于單片機的秒表系統(tǒng)設(shè)計
- 課程設(shè)計---單片機打鈴系統(tǒng)
- 單片機課程設(shè)計系統(tǒng)的設(shè)計
- 單片機課程設(shè)計
評論
0/150
提交評論