2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  ARM課程設(shè)計(jì)</b></p><p><b>  可調(diào)控萬(wàn)年歷時(shí)鐘</b></p><p>  1.初始化并運(yùn)行RTC,然后讀取時(shí)間值通過(guò)串口向上位機(jī)發(fā)送,并把秒的值輸出到教學(xué)實(shí)驗(yàn)開(kāi)發(fā)平臺(tái)上的LED1~LED4進(jìn)行顯示。</p><p>  2.分析。萬(wàn)年歷顯示時(shí)間包括年、月、日、星期、時(shí)、

2、分和秒,利用EasyARM.exe仿真軟件把結(jié)果發(fā)送到上位機(jī)上顯示。通過(guò)按鍵進(jìn)行上述的顯示調(diào)節(jié),其中月是1~12,日是1~31,星期是1~7,時(shí)是00~23,分是00~59,秒是00~59?,F(xiàn)在時(shí)間顯示2009年5月11日星期一15:23:30。</p><p><b>  3.程序</b></p><p>  #include "config.h"

3、;</p><p>  #include "stdio.h"</p><p>  #include "math.h"</p><p>  uint8 time[4];</p><p>  /*按鍵 GPIO口*/</p><p>  #definekey1 1<&

4、lt;16</p><p>  #definekey2 1<<17</p><p>  #definekey3 1<<18</p><p>  #definekey4 1<<19</p><p>  #definekey5 1<<20</p><

5、;p>  #definekey6 1<<21 </p><p>  #define HC595_CS (1 << 29) // P0.29口為74HC595的片選</p><p>  typedef struct UartMode // 定義串口模式設(shè)置的數(shù)據(jù)結(jié)構(gòu)</p><p

6、><b>  {</b></p><p>  uint8 datab; // 字長(zhǎng)度 5/6/7/8</p><p>  uint8 stopb; // 停止位 1/2</p><p>  uint8 parity; // 奇

7、偶校驗(yàn) 0-無(wú)校驗(yàn), 1-奇校驗(yàn), 2-偶校驗(yàn)</p><p><b>  }</b></p><p><b>  UARTMODE;</b></p><p>  uint8 rcv_buf[6]; // UART0數(shù)據(jù)接收緩沖區(qū)</p><p>  volatile

8、 uint8 rcv_new; // 接收新數(shù)據(jù)標(biāo)志</p><p>  /**********************************************************************</p><p>  ** 函數(shù)名稱 :DelayNS()</p><p>  ** 函數(shù)功能 :長(zhǎng)軟件延時(shí)</p&

9、gt;<p>  ** 入口參數(shù) :dly延時(shí)參數(shù),值越大,延時(shí)越久</p><p>  ** 出口參數(shù) :無(wú)</p><p>  ********************************************************************/</p><p>  void DelayNS (uint32 dly)</

10、p><p><b>  {</b></p><p><b>  uint32 m;</b></p><p>  for ( ; dly>0; dly--)</p><p>  for (m=0; m<5000; m++);</p><p><b>  }&l

11、t;/b></p><p>  void MSPI_Init(void)</p><p><b>  { </b></p><p>  //PINSEL0 = (PINSEL0 & 0xFFFF00FF) | 0x00005500;// 設(shè)置管腳連接SPI</p><p>  PINSEL0 = (P

12、INSEL0 & (~(0xFF << 8))) | (0x55 << 8) ;</p><p>  SPCCR = 0x52; // 設(shè)置SPI時(shí)鐘分頻</p><p>  SPCR = (0 << 3) |// CPHA = 0, 數(shù)據(jù)在SCK 的第一個(gè)時(shí)鐘沿采樣</p><p> 

13、 (1 << 4) |// CPOL = 1, SCK 為低有效</p><p>  (1 << 5) |// MSTR = 1, SPI 處于主模式</p><p>  (0 << 6) |// LSBF = 0, SPI 數(shù)據(jù)傳輸MSB (位7)在先</p><p>  (0 << 7);

14、// SPIE = 0, SPI 中斷被禁止</p><p><b>  }</b></p><p>  /**************************************************************************** 函數(shù)名稱:MSPI_SendData()</p><p>  ** 函數(shù)功能:

15、向SPI總線發(fā)送數(shù)據(jù)。</p><p>  ** 入口參數(shù):data 待發(fā)送的數(shù)據(jù)</p><p>  ** 出口參數(shù):返回值為讀取的數(shù)據(jù)</p><p>  *************************************************************************/</p><p>  uint8

16、 MSPI_SendData(uint8 data)</p><p><b>  { </b></p><p>  IOCLR = HC595_CS; // 片選74HC595</p><p>  SPI_SPDR = data;</p><p>  while( 0 == (SPI_SPSR &

17、amp; 0x80));// 等待SPIF置位,即等待數(shù)據(jù)發(fā)送完畢</p><p>  IOSET = HC595_CS;</p><p>  return(SPI_SPDR);</p><p><b>  }</b></p><p>  /* 此表為L(zhǎng)ED0~F以及L、P的字模 */</p><p

18、>  uint8 const DISP_TAB[19] = {</p><p>  0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,</p><p>  0x88, 0x83, 0xC6, 0xA1,0x86, 0x8E,</p><p><b>  };</b></p>

19、<p>  /**************************************************************************** 函數(shù)名稱:main()</p><p>  ** 函數(shù)功能:使用硬件SPI,74HC595驅(qū)動(dòng)控制7段數(shù)碼管顯示。 </p><p>  ** 先顯示0~F的字模,然后顯示LPC2131字樣。</

20、p><p>  **************************************************************************/</p><p>  uint8 rcv_data; </p><p>  /***************************************************************

21、*******</p><p>  ** 函數(shù)名稱 :UART0_Init()</p><p>  ** 函數(shù)功能 :初始化串口:設(shè)置工作模式和波特率。</p><p>  ** 入口參數(shù) : baud波特率</p><p>  ** set模式設(shè)置(UARTMODE數(shù)據(jù)結(jié)構(gòu))</p><p>  

22、** 出口參數(shù):返回1表示成功,0表示參數(shù)出錯(cuò)。</p><p>  ********************************************************************/</p><p>  uint8 UART0_Init (uint32 baud, UARTMODE set)</p><p><b>  {<

23、;/b></p><p>  uint32 bak;</p><p><b>  /* 參數(shù)過(guò)濾*/</b></p><p>  if ((0 == baud) || (baud > 115200))return (0);</p><p>  if ((set.datab < 5) || (set.d

24、atab > 8))return (0);</p><p>  if ((0 == set.stopb) || (set.stopb > 2)) return (0);</p><p>  if (set.parity > 4)return (0);</p><p>  /* 設(shè)置串口波特率*/</p><p>  U0

25、LCR = 0x80;// DLAB=1</p><p>  bak = (Fpclk >> 4) / baud;</p><p>  U0DLM = bak >> 8;</p><p>  U0DLL = bak & 0xff;</p><p>  /* 設(shè)置串口模式*/</p><p

26、>  bak = set.datab - 5;</p><p>  if (2 == set.stopb)bak |= 0x04;</p><p>  if (0 != set.parity)</p><p><b>  {</b></p><p>  set.parity = set.parity - 1;&

27、lt;/p><p>  bak |= 0x08;</p><p><b>  }</b></p><p>  bak |= set.parity << 4;</p><p>  U0LCR = bak;</p><p>  return (1);</p><p>&

28、lt;b>  }</b></p><p>  /**********************************************************************</p><p>  ** 函數(shù)名稱 :SendByte()</p><p>  ** 函數(shù)功能 :向串口UART0發(fā)送字節(jié)數(shù)據(jù),并等待發(fā)送完畢。</p&g

29、t;<p>  ** 入口參數(shù) :data要發(fā)送的數(shù)據(jù)</p><p>  ** 出口參數(shù) :無(wú)</p><p>  ********************************************************************/</p><p>  void SendByte (uint8 data)</p>

30、<p><b>  {</b></p><p>  U0THR = data;</p><p>  while ((U0LSR & 0X20) == 0); // 等待數(shù)據(jù)發(fā)送</p><p><b>  }</b></p><p>  /*****************

31、*****************************************************</p><p>  ** 函數(shù)名稱 :PC_DispChar()</p><p>  ** 函數(shù)功能 :向PC機(jī)發(fā)送顯示字符。</p><p>  ** 入口參數(shù) :no顯示位置</p><p>  ** char顯示的字符

32、,不能為ff</p><p>  ** 出口參數(shù):無(wú)</p><p>  ********************************************************************/</p><p>  void PC_DispChar (uint8 no, uint8 chr)</p><p><b&g

33、t;  {</b></p><p>  SendByte(0xff);</p><p>  SendByte(0x81);</p><p>  SendByte(no);</p><p>  SendByte(chr);</p><p>  SendByte(0x00);</p><p&

34、gt;<b>  }</b></p><p>  uint8 const SHOWTABLE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p><b>  /*</b></p><p>  *************************

35、********************************************</p><p>  ** 函數(shù)名稱 :SendTimeRtc()</p><p>  ** 函數(shù)功能 :讀取RTC的時(shí)間值,并將讀出的時(shí)分秒值通過(guò)串口送到上位機(jī)顯示。</p><p>  ** 入口參數(shù) :無(wú)</p><p>  ** 出口參數(shù) :無(wú)&l

36、t;/p><p>  ********************************************************************/</p><p>  void SendTimeRtc (void)</p><p><b>  {</b></p><p>  uint32 datas;</

37、p><p>  uint32 times;</p><p>  uint32 bak;</p><p>  times = CTIME0; // 讀取完整的時(shí)鐘寄存器</p><p>  datas = CTIME1;</p><p>  bak = (datas >> 16) &

38、amp; 0xfff; // 獲取 年</p><p>  PC_DispChar(0, SHOWTABLE[bak / 1000]);</p><p>  bak = bak % 1000;</p><p>  PC_DispChar(1, SHOWTABLE[bak / 100]);</p><p>  bak = bak %

39、100;</p><p>  PC_DispChar(2, SHOWTABLE[bak / 10]);</p><p>  PC_DispChar(3, SHOWTABLE[bak % 10]);</p><p>  bak = (datas >> 8) & 0x0f; // 獲取 月</p><p>  PC_

40、DispChar(4, SHOWTABLE[bak / 10]);</p><p>  PC_DispChar(5, SHOWTABLE[bak % 10]);</p><p>  bak = datas & 0x1f; // 獲取 日</p><p>  PC_DispChar(6, SHOWTABLE[bak / 10]);</p>

41、;<p>  PC_DispChar(7, SHOWTABLE[bak % 10]);</p><p>  bak = (times >> 24) & 0x07; // 獲取 星期</p><p>  PC_DispChar(8, SHOWTABLE[bak]);</p><p>  bak = (times >>

42、; 16) & 0x1f; // 獲取 小時(shí)</p><p>  PC_DispChar(9, SHOWTABLE[bak / 10]);</p><p>  PC_DispChar(10, SHOWTABLE[bak % 10]);</p><p>  bak = (times >> 8) & 0x3f; // 獲取 分

43、鐘</p><p>  PC_DispChar(11, SHOWTABLE[bak / 10]);</p><p>  PC_DispChar(12, SHOWTABLE[bak % 10]);</p><p>  bak = times & 0x3f; // 獲取 秒鐘</p><p>  PC_DispChar(13,

44、 SHOWTABLE[bak / 10]);</p><p>  PC_DispChar(14, SHOWTABLE[bak % 10]);</p><p><b>  }</b></p><p>  /**********************************************************************&

45、lt;/p><p>  ** 函數(shù)名稱 :RTCInit()</p><p>  ** 函數(shù)功能 :初始化實(shí)時(shí)時(shí)鐘</p><p>  ** 入口參數(shù) :無(wú)</p><p>  ** 出口參數(shù) :無(wú)</p><p>  ****************************************************

46、****************/</p><p>  void RTCInit (void)</p><p><b>  {</b></p><p>  PREINT = Fpclk / 32768 - 1; // 設(shè)置基準(zhǔn)時(shí)鐘分頻器</p><p>  PREFRAC = Fpclk - (Fpclk / 3

47、2768) * 32768;</p><p>  CCR = 0x00; // 禁止時(shí)間計(jì)數(shù)器 </p><p>  YEAR = 2009; //設(shè)置時(shí)鐘初值</p><p>  MONTH = 5;</p><p>  DOM = 11;</p>

48、<p>  DOW = 1; </p><p>  HOUR = 15;</p><p>  MIN = 23;</p><p>  SEC = 30;</p><p>  CIIR = 0x01; // 設(shè)置秒值的增量產(chǎn)生一次中斷</p><p>

49、;  ILR = 0x03;// 清除RTC增量和報(bào)警中斷標(biāo)志</p><p>  CCR = 0x01; // 啟動(dòng)RTC</p><p><b>  }</b></p><p>  /*************************************************************

50、*********</p><p>  ** 函數(shù)名稱 :IRQ_UART0()</p><p>  ** 函數(shù)功能 :串口0接收中斷服務(wù)程序</p><p>  ** 入口參數(shù) :無(wú)</p><p>  ** 出口參數(shù) :無(wú)</p><p>  ************************************

51、********************************/</p><p>  void __irq IRQ_UART0 (void)</p><p><b>  {</b></p><p><b>  uint8 i;</b></p><p>  if ((U0IIR & 0x0F

52、) == 0x04)</p><p>  rcv_new = 1; // 設(shè)置接收到新的數(shù)據(jù)標(biāo)志</p><p>  for (i=0; i<14; i++)</p><p><b>  {</b></p><p>  rcv_buf[i] = U0RBR; // 讀取FIFO的數(shù)據(jù),并

53、清除中斷</p><p><b>  }</b></p><p>  /*再次初始化時(shí)鐘*/</p><p>  CCR = 0x00; // 禁止時(shí)間計(jì)數(shù)器</p><p>  YEAR =(rcv_buf[0]-0x30)*1000+(rcv_buf[1]-0x30)*100+

54、(rcv_buf[2]-0x30)*10+(rcv_buf[3]-0x30);</p><p>  MONTH =(rcv_buf[4]-0x30)*10+(rcv_buf[5]-0x30); </p><p>  DOM =(rcv_buf[6]-0x30)*10+(rcv_buf[7]-0x30

55、); </p><p>  DOW =(rcv_buf[8]-0x30); </p><p>  HOUR =(rcv_buf[9]-0x30)*10+(rcv_buf[1]-0x30); </p>

56、<p>  MIN =(rcv_buf[11]-0x30)*10+(rcv_buf[3]-0x30); </p><p>  SEC =(rcv_buf[13]-0x30)*10+(rcv_buf[5]-0x30); </p

57、><p>  CIIR = 0x01; // 設(shè)置秒值的增量產(chǎn)生1次中斷</p><p>  CCR = 0x01; // 啟動(dòng)RTC</p><p>  VICVectAddr = 0x00; // 中斷處理結(jié)束</p><p><b>  }</b&

58、gt;</p><p>  /**********************************************************************</p><p>  ** 函數(shù)名稱 :SET_TIME()</p><p>  ** 函數(shù)功能 :設(shè)置時(shí)間</p><p>  ** 入口參數(shù) :無(wú)</p>

59、<p>  ** 出口參數(shù) :無(wú)</p><p>  ********************************************************************/</p><p>  void SET_TIME (void)</p><p>  { </p><p>  while (

60、(IO0PIN & key1) == 0) // 等待發(fā)送信號(hào)</p><p><b>  { </b></p><p>  DelayNS(2);</p><p>  if ((IO0PIN & key1) == 0)</p><p><b>  { <

61、;/b></p><p>  YEAR=YEAR+1;</p><p>  time[0,1,2,3]=YEAR;</p><p>  loop1: while ((IO0PIN & key1) != 0);</p><p>  DelayNS(2);</p><p>  if ((IO0PIN &am

62、p; key1) == 0) goto loop1; // 等待按鍵恢復(fù)</p><p><b>  }</b></p><p><b>  } </b></p><p>  while ((IO0PIN & key2) == 0) // 等待發(fā)送信號(hào)</p&g

63、t;<p><b>  { </b></p><p>  DelayNS(2);</p><p>  if ((IO0PIN & key2) == 0)</p><p><b>  { </b></p><p>  if(MONTH>11)</p><

64、p><b>  MONTH=1;</b></p><p>  else MONTH=MONTH+1;</p><p>  time[4,5]=MONTH;</p><p>  loop2: while ((IO0PIN & key2) != 0);</p><p>  DelayNS(1);</p

65、><p>  if ((IO0PIN & key2) == 0) goto loop2; // 等待按鍵恢復(fù)</p><p><b>  }</b></p><p>  } </p><p>  while ((IO0PIN & key3) == 0)

66、 // 等待發(fā)送信號(hào)</p><p><b>  { </b></p><p>  DelayNS(2);</p><p>  if ((IO0PIN & key3) == 0)</p><p><b>  { </b></p><p>  if(DOM&

67、gt;29)</p><p><b>  DOM=0;</b></p><p><b>  else</b></p><p>  DOM=DOM+1;</p><p>  time[6,7]=DOM;</p><p>  loop3: while ((IO0PIN &

68、; key3) != 0);</p><p>  DelayNS(1);</p><p>  if ((IO0PIN & key3) == 0) goto loop3; // 等待按鍵恢復(fù)</p><p><b>  }</b></p><p><b>  } </b></

69、p><p>  while ((IO0PIN & key4) == 0) // 等待發(fā)送信號(hào)</p><p><b>  { </b></p><p>  DelayNS(2);</p><p>  if ((IO0PIN & key4) == 0)</p>

70、<p><b>  { </b></p><p><b>  if(DOW>5)</b></p><p><b>  DOW=0;</b></p><p><b>  else</b></p><p>  DOW=DOW+1;</p&

71、gt;<p>  time[8]=DOW;</p><p>  loop4: while ((IO0PIN & key4) != 0);</p><p>  DelayNS(2);</p><p>  if ((IO0PIN & key4) == 0) goto loop4; // 等待按鍵恢復(fù)</p><

72、p><b>  }</b></p><p><b>  } </b></p><p>  while ((IO0PIN & key5) == 0) // 等待發(fā)送信號(hào)</p><p><b>  { </b></p><p&g

73、t;  DelayNS(2);</p><p>  if ((IO0PIN & key5) == 0)</p><p><b>  { </b></p><p>  if(HOUR>22)</p><p><b>  HOUR=0;</b></p><p>&l

74、t;b>  else</b></p><p>  HOUR=HOUR+1;</p><p>  time[9,10]=HOUR;</p><p>  loop5: while ((IO0PIN & key5) != 0);</p><p>  DelayNS(2);</p><p>  if

75、 ((IO0PIN & key5) == 0) goto loop5; // 等待按鍵恢復(fù)</p><p><b>  }</b></p><p><b>  }</b></p><p>  while ((IO0PIN & key6) == 0) // 等待發(fā)送

76、信號(hào)</p><p><b>  { </b></p><p>  DelayNS(2);</p><p>  if ((IO0PIN & key6) == 0)</p><p><b>  { </b></p><p>  if(MIN>58)</p&g

77、t;<p><b>  MIN=0;</b></p><p><b>  else</b></p><p>  MIN=MIN+1;</p><p>  time[11,12]=MIN;</p><p>  loop6: while ((IO0PIN & key6) != 0

78、);</p><p>  DelayNS(2);</p><p>  if ((IO0PIN & key6) == 0) goto loop6; // 等待按鍵恢復(fù)</p><p><b>  }</b></p><p><b>  }</b></p><p&g

79、t;<b>  }</b></p><p>  /************************************************************************ 函數(shù)名稱 :main()</p><p>  ** 函數(shù)功能 :讀取實(shí)時(shí)時(shí)鐘的值,通過(guò)串口發(fā)送出去。</p><p>  **************

80、******************************************************/</p><p>  int main (void)</p><p>  { uint8 i; </p><p>  UARTMODE uart0_set;</p><p>  PINSEL0 = 0x00000005;

81、 // 連接IO到串口UART0</p><p>  PINSEL1 = 0x00000000;</p><p>  PINSEL2 = PINSEL2 & (~0x08); // P1[25:16]連接GPIO</p><p>  //PINSEL1 = 0x00005500; // 設(shè)置S

82、PI管腳連接</p><p>  //PINSEL2 = 0x00000000;</p><p>  IODIR = HC595_CS;</p><p>  uart0_set.datab = 8;</p><p>  uart0_set.stopb = 1;</p><p>  uart0_set.parity =

83、0;</p><p>  UART0_Init(115200, uart0_set);</p><p>  U0FCR = 0xc1;// 使能FIFO,并設(shè)置觸發(fā)點(diǎn)為8字節(jié)</p><p>  U0IER = 0x01;// 允許RBR中斷,即接收中斷</p><p>  MSPI_Init();</p>

84、<p>  RTCInit();</p><p>  IRQEnable();// 使能IRQ中斷</p><p>  /* 使能UART0中斷 */</p><p>  VICIntSelect = 0x00000000;// 設(shè)置所有的通道為IRQ中斷</p><p>  VICVectCntl0 = 0x

85、20 | 0x06;// UART0分配到IRQ slot0,即最高優(yōu)先級(jí)</p><p>  VICVectAddr0 = (uint32)IRQ_UART0;// 設(shè)置UART0向量地址</p><p>  VICIntEnable = 1 << 0x06;// 使能UART0中斷</p><p><b>  while (1

86、)</b></p><p><b>  {</b></p><p>  while (0 == (ILR & 0x01)); // 等待RTC增量中斷</p><p>  ILR = 0x01;</p><p>  for(i=1; i<8; i++)</p><p

87、>  {if(DOW==i)</p><p>  rcv_data = MSPI_SendData(DISP_TAB[i]);// 發(fā)送顯示數(shù)據(jù)</p><p>  } // 清除中斷標(biāo)志</p><p>  SET_TIME();</p><p>  SendTimeRtc();<

溫馨提示

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

評(píng)論

0/150

提交評(píng)論