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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  課程設計報告</b></p><p>  題 目: 自動滴灌系統設計 </p><p>  課程名稱: 單片機原理及應用 </p><p>  學 院: 信息工程學院 </p><p>  專 業:

2、 計算機科學與技術 </p><p>  班 級: 2014 級計本 1 班 </p><p><b>  目錄</b></p><p>  第一章 系統概要2</p><p><b>  1.1系統背景2</b></p><p>&

3、lt;b>  1.2系統功能2</b></p><p><b>  1.3設計要求2</b></p><p>  第二章 系統硬件原理3</p><p>  2.1AW60主要模塊和特點3</p><p>  2.2 LCD模塊3</p><p>  2.3 LED模

4、塊4</p><p>  第三章 系統軟件設計6</p><p><b>  3.1系統流程6</b></p><p>  3.2主程序(main.c)7</p><p>  3.2中斷處理程序(isr.c)7</p><p><b>  3.3構件組成9</b>

5、</p><p>  第四章 系統測試27</p><p>  4.1測試結果27</p><p>  第五章 總結展望31</p><p><b>  5.1總結31</b></p><p><b>  5.2展望31</b></p>&l

6、t;p><b>  參考文獻32</b></p><p><b>  第一章 系統概要</b></p><p><b>  1.1系統背景</b></p><p>  隨著科學技術的發展電子技術產業結構調整,單片機開始迅速發展,由于單片機本身的易于控制,精度高,自動化全面,市場對于智能控制系統

7、的需求也越來越大。 自動滴灌系統,就是在單片機程序的控制下實現濕度監測、滴灌控制的設備。單片機系統座位一種典型的嵌入式系統,其系統設計包括硬件設計和軟件設計編程設計兩個方面,其調試過程一般分為軟件調試,硬件調試,系統調試。自動滴灌系統需要實現濕度采集,A/D轉換,濕度顯示,工作狀態顯示,電機驅動的功能。</p><p><b>  1.2系統功能</b></p>&l

8、t;p>  首先要進行濕度監測,每隔固定的時間就采集一次濕度,在內部轉換后與標準值進行比較如果濕度值低于給定值的話就切換至工作狀態,滴灌結束時自動切換至結束模式,繼續監測濕度。</p><p>  仿真狀態下濕度監測采用軟件模擬實現,采集濕度信息使用LED顯示,每隔5s采集一次。 工作狀態由LCD顯示。分別有滴灌開始(“Drip-irrigation is starting..”),和滴灌結束(“Drip-

9、irrigation has ended..”)。滴灌時間為5s。結束后切換至結束模式。</p><p><b>  1.3設計要求</b></p><p>  學生在設計中可以引用所需的參考資料,避免重復工作,加快設計進程,但必須和題目的要求相符合,保證設計的正確。學生要在老師的指導下制定好自己各環節的詳細設計進程計劃,按給定的時間計劃保質保量的完成個階段的設計任務

10、。設計中可邊設計,邊修改,軟件設計與硬件設計可交替進行,問題答疑與調試和方案修改相結合,提高設計的效率,保證按時完成設計工作并交出合格的設計報告。</p><p>  第二章 系統硬件原理</p><p>  2.1AW60主要模塊和特點</p><p>  AW60系列主要常規模塊和特點: </p><p> ?。?)最高達40MHz的

11、CPU工作頻率和20MHz的內部總線工作頻率;時鐘源選項包括晶振,諧振器,外部時鐘或,內部產生的時鐘。 </p><p> ?。?)相比HC08CPU指令集,S08CPU增加了BGND指令。 </p><p> ?。?)單線后臺調試模式接口:增強的斷點能力,允許單一的斷點設置在線調試(在片內調試模塊增加了多于兩個的斷點)。 </p><p> ?。?)內含32

12、個中斷/復位源;內含2KB的片內RAM;內含60KB的片內在線可編程的Flash存儲器,帶有 塊保護和安全選項。 </p><p> ?。?)可選的計算機正常操作(COP)復位;低電壓檢測與復位或中斷;非法操作碼檢測與復位;非法地址檢測與復位。 </p><p> ?。?)ADC:多達16個通道,10個A/D轉換器與動動比較功能;兩個串行通信接口SCI模塊與可選的13位中斷;一個串行外

13、設接口SPI模塊;集成電路互聯總線IIC模塊運行高達100kbps的最高總線負載;8引腳鍵盤中斷KBI模塊。 </p><p> ?。?)Timers:1個2 通道和一個6通道16位定時器/脈沖寬度調制器模塊。既有輸入捕獲,輸出比較,脈寬調制功能。AW子系列MCU的4種封裝形式只是引腳數量和形式有所區別,其他方面是一致的。</p><p><b>  2.2 LCD模塊</

14、b></p><p>  LCD作為電子信息產品的主要顯示器件,相對于其他類型的顯示器件來說有其自身的特點,主要包括: </p><p> ?。?)低電壓,低功耗;</p><p> ?。?)平板型結構; </p><p> ?。?)使用壽命長; </p><p><b>

15、 ?。?)被動顯示; </b></p><p> ?。?)顯示信息量大且易于彩色化; </p><p> ?。?)無電磁輻射。 </p><p>  點陣字符型LCD是專門用于顯示數字,字母,圖形符號及少量自定義符號的液晶顯示器。這類顯示器把LCD控制器,點陣驅動器,字符存儲器,顯示體及少量的阻容元件等集成一個液晶顯示模板。

16、鑒于字符型液晶顯示模塊目前在國際上已經規范化,其電特性及接口特性是統一的,只要設計出一種型號的接口電路,在指令上稍加修改即可使用各種規格的字符型液晶顯示器模塊。</p><p>  字符型液晶顯示器模塊的特點如下: </p><p> ?。?)液晶顯示屏是以若干5*8或5*11點陣塊等組成的顯示字符群。每個點陣塊塊為一個字符位,字符間距和行間距都是一個點的寬度。 <

17、;/p><p> ?。?)主控制電路為HD44780(HITACHI及其他公司的兼容電路。從程序員的角度來看LCD顯示接口與編程是面向HD44780的,只要了解HD44780的編程結構即可進行LCD的顯示編程。 </p><p> ?。?)內部具有字符發生器ROM,可顯示192種字符。 </p><p> ?。?)具有64字節的字符發生器RAM,可以

18、定義8個5*8點陣字符或4個5*11的點陣字符。 </p><p> ?。?)具有64字節的數據顯示RAM,供顯示器編程使用。 (6)標準接口特性,與MC9S08系列的MCU容易接口。 (7)模塊結構緊湊,輕巧,裝配容易。 </p><p> ?。?)單+5V電源供電(寬溫型需要加-7V驅動電源)。 (9)低功耗,高可靠性。</p&g

19、t;<p><b>  2.3 LED模塊</b></p><p>  LED發光二極管分為共陰極和共陽極數碼管,若為共陰極數碼管則公共端接地,若為共陽極數碼管則公共端接電源正極。如圖1:</p><p><b>  圖1</b></p><p>  實際應用中是多個LED共同使用,MCU通過一個稱為數據口的

20、8位數據端口來控制位段而原來8段數碼管的公共端,原來接到公共電平,現在接MCU的一個引腳,由MCU來控制,通常叫做位選信號,這樣MCU的8個端口就可以控制8連排的數碼管了。若要控制更多數碼管則需加一個譯碼芯片。每個時刻只讓一個數碼管有效,由于人的視覺暫留效應(100ms)可以達到同時顯示的效果。</p><p>  圖2是MCU與4排8段數碼管的連接:</p><p><b> 

21、 圖2</b></p><p>  第三章 系統軟件設計</p><p><b>  3.1系統流程</b></p><p><b>  圖3</b></p><p>  圖3是系統流程圖,開始時先初始化各個部件,LCD顯示結束滴灌信息,LED顯示為全零。后每隔五秒采集一次濕度數據用LE

22、D顯示濕度。判斷濕度值是否低于設定值,低于設定值的話立即啟動滴灌,此時濕度上升,結束滴灌。若沒有低于設定值的話,則繼續監測。LED不斷刷新顯示當前濕度值。</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>  //功能概要: 中斷底層驅動構件源文件</p><p>  //版權所有

28、:蘇州大學飛思卡爾嵌入式中心(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顯示緩沖區</p><p>  changeCode(shidu,LEDDataBuffer);//將濕度值轉化為對應字符輸出</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)); //中斷置標志位寫1清0 </p><p>  LEDindex++; //位選位+1</p><p>  if (LEDindex>=4) LEDindex=0; //大于4位選口置0</p><p>  i=LEDchan

34、geCode(LEDDataBuffer[LEDindex]-'0'); //轉碼</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);//改變工作狀態</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構件組成</b></p><p><b>  1、TPM構件:</b></p><p>  //=================================================================</p><p>  //文件名稱:tpm.c</p><p>

41、  //功能概要:tpm底層驅動構件源文件</p><p>  //版權所有:蘇州大學飛思卡爾嵌入式中心(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>  //函數名稱:tpm_enable_int </p><p>  //功能概要:使能tpm模塊中斷。

44、 </p><p>  //參數說明:tpmModule:模塊號:0、1、2 </p><p><b>  //函數返回:無</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>  //函數名稱:tpm_disable_int

47、 </p><p>  //功能概要:禁止tpm模塊初始化。 </p><p>  //參數說明:tpmModule:模塊號:0、1、2

48、 </p><p><b>  //函數返回:無</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>  //函數名稱:tpm_init </p><p>  //功能概要:初始化tpm模塊. </p><p>  //參數說明:tpmModule

51、:模塊號:0、1、2 </p><p>  //clk_src_sel:時鐘源選擇:1:PLL/FLL(推薦)、2:晶振、3:內部參考時鐘。1,2可用</p><p>  // int_us:中斷毫秒數,中斷時間間隔,單位為毫秒,10ms=10000</p><p>  //函數返回:函數執行狀態: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: //內部參考時鐘,由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>  //函數名稱:tpm_stop </p><p>  

61、//功能概要:禁止tpm模塊。 </p><p>  //參數說明:tpmModule:模塊號:0、1、2 </p><p><b>  //函

62、數返回:無</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底層驅動構件源文件</p><p>  //版權所有:蘇州大學飛思卡爾嵌入式中心(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>  //函數名稱:tpm_enable_int

69、 </p><p>  //功能概要:使能tpm模塊中斷。 </p><p>  //參數說明:tpmModule:模塊號:0、1、2

70、 </p><p><b>  //函數返回:無</b></p><p>  //====================================================================</p><p>  vo

71、id tpm_enable_int(uint_8 tpmModule);</p><p>  //====================================================================</p><p>  //函數名稱:tpm_disable_int

72、 </p><p>  //功能概要:禁止tpm模塊初始化。 </p><p>  //參數說明:tpmModule:模塊號:0、1、2

73、 </p><p><b>  //函數返回:無</b></p><p>  //====================================================================</p><p>  void tpm_disable_int(uint_8 tpmModule);</p>

74、<p>  //====================================================================</p><p>  //函數名稱:tpm_init </p><p>  //功能概要:初始化tpm模塊.

75、 </p><p>  //參數說明:tpmModule:模塊號:0、1、2 </p><p>  //clk_src_sel:時鐘源選擇:1:PLL/FLL(推薦)、2:晶振、3:內部參考時鐘。1,2可用</p><p>  // int_us:中斷毫秒數,中斷時間間隔,單位為毫秒,10

76、ms=10000</p><p>  //函數返回:函數執行狀態: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>  //函數名稱:tpm_stop </p>&

78、lt;p>  //功能概要:禁止tpm模塊。 </p><p>  //參數說明:tpmModule:模塊號:0、1、2 </p><p><b&g

79、t;  //函數返回:無</b></p><p>  //====================================================================</p><p>  void tpm_stop(uint_8 tpmModule);</p><p><b>  #endif</b>&l

80、t;/p><p><b>  2、LED構件</b></p><p>  //===================================================================</p><p>  // 文件名稱:led.c

81、 </p><p>  // 功能概要:led構件源文件</p><p>  // 版權所有: 蘇州大學飛思卡爾嵌入式中心(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數據端口</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>  //函數名稱:LEDInit</p><p><b>  //函數返回:無</b></p><p>  //參數說明:無 </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根數據線為輸出 ,初始輸出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>  //函數名稱:LEDshow1</p><p><b>  //函數返回:無</b></p><p>  //參數說明:i:指定LED哪一位顯示,c:顯示的內容 </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>  //數

93、據上線 </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>  //函數名稱:LEDchangeCode</p><p>  //函數返回:返回數據num對應的顯示碼</p><p>  //參數說明:num:需要轉換成顯示碼的數字</p><p>  //功能概要:數字轉成顯

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構件頭文件</p><p>  // 版權所有: 蘇州大學飛思卡爾嵌入式中心(sumcu.suda.edu.cn)</p><p>  //================

102、====================================================</p><p>  #ifndef led_H //防止重復定義(開頭)</p><p>  #define led_H</p><p>  #include "GPIOapp.h" </p><p&

103、gt;  //LED數據口分別接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>  //函數名稱:LEDInit</p><p><b>  //函數返回:無</b></p><p>  //參數說明:無 </p><p>  //功能概要:LED初始化。</p><p>  //==============================================

110、======================</p><p>  void LEDInit();</p><p>  //====================================================================</p><p>  //函數名稱:LEDshow1</p><p><b>

111、;  //函數返回:無</b></p><p>  //參數說明:i:指定LED哪一位顯示,c:顯示的內容 </p><p>  //功能概要:指定LED的第i位顯示c。</p><p>  //====================================================================</p>

112、<p>  void LEDshow1(uint_8 i, uint_8 c);</p><p>  //====================================================================</p><p>  //函數名稱:LEDchangeCode</p><p>  //函數返回:返回數據num對應

113、的顯示碼</p><p>  //參數說明:num:需要轉換成顯示碼的數字</p><p>  //功能概要:數字轉成顯示碼</p><p>  //====================================================================</p><p>  uint_8 LEDchangeCo

114、de(uint_8 num);</p><p>  #endif //防止重復定義(結尾)</p><p><b>  3、LCD構件</b></p><p>  //====================================================================</p><p&

115、gt;  // 文件名稱:lcd.c </p><p>  // 功能概要:lcd構件頭文件</p><p>  // 版權所有: 蘇州大學飛思卡爾嵌入式中心(sumcu.suda.edu.cn) </p><p>  //==============

116、======================================================</p><p>  #include "lcd.h"//lcd控制位和數據位端口及引腳號</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>  };//內部函數原型說明</p><p>  extern void LCDCommand(uint_8 cmd);</p><p>  //====================================================================</

120、p><p>  //函數名稱:LCDInit</p><p><b>  //函數返回:無</b></p><p><b>  //參數說明:無</b></p><p>  //功能概要:LCD初始化。</p><p>  //==========================

121、==========================================</p><p>  void LCDInit()</p><p><b>  {</b></p><p>  uint_32 i = 0; //定義數據口和控制口為輸出 </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>  //設置指令,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>  //功能設置- </b></p><p><b>

124、;  //設置指令</b></p><p>  LCDCommand(0x38); //5*7點陣模式,2行顯示,8位數據總線</p><p>  LCDCommand(0x08); //關顯示,關光標顯示,不閃爍</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); //光標右移一個字符位,AC自動加1</p><p>  LCDCommand(0x0C); //開顯示,關光標顯示,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論