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

下載本文檔

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

文檔簡介

1、<p><b>  接口技術(shù) </b></p><p><b>  課程設(shè)計報告書</b></p><p><b>  專業(yè)班級 </b></p><p><b>  學(xué)生姓名 </b></p><p><b>  指導(dǎo)教師 <

2、/b></p><p><b>  日 期</b></p><p><b>  一、設(shè)計目的</b></p><p>  1.融會貫通教材各章的內(nèi)容,通過知識的綜合運用,加深對基本接口芯片的工作原理及與CPU互連的認(rèn)識,以進一步掌握常見接口的用法。</p><p>  2.學(xué)習(xí)設(shè)計和調(diào)試

3、嵌入式系統(tǒng)開發(fā)的基本步驟和方法,培養(yǎng)科學(xué)研究的獨立工作能力,取得工程設(shè)計和調(diào)試的實踐和經(jīng)驗。</p><p><b>  二、設(shè)計環(huán)境</b></p><p>  PC機一臺( Windows操作系統(tǒng)并安裝ADT2000),JXARM9-2410-1實驗箱及配件一套。</p><p><b>  二、設(shè)計任務(wù)</b><

4、;/p><p>  1)時鐘顯示功能,能夠以十進制顯示“時”、“分”、“秒”。</p><p>  2)具有調(diào)節(jié)時、分、秒的功能。</p><p>  3)整點自動報時,在整點時,便自動發(fā)出鳴叫聲,時長1s。</p><p><b>  三、設(shè)計內(nèi)容</b></p><p><b>  1.

5、硬件電路原理圖</b></p><p>  一個具有計時、調(diào)時、報時、顯示等基本功能的數(shù)字鐘主要由振蕩器、分頻器、計數(shù)器、譯碼器、顯示器、校時電路、報時電路等七部分組成。振蕩器產(chǎn)生的信號經(jīng)過分頻器得到秒脈沖,秒脈沖送入計數(shù)器計數(shù),計數(shù)結(jié)果通過“時”、“分”、“秒”譯碼器譯碼,并通過顯示器顯示時間。</p><p><b>  整體邏輯框圖如下:</b>&l

6、t;/p><p><b>  硬件電路圖如下:</b></p><p>  2.程序流程圖及代碼</p><p><b>  程序如下:</b></p><p>  #include "def.h"</p><p>  #include "2410l

7、ib.h"</p><p>  #include "option.h"</p><p>  #include "2410addr.h"</p><p>  #include "interrupt.h"</p><p>  unsigned char segtable[10]

8、 = { 0xc0, 0xf9, 0xa4, </p><p>  0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, };</p><p>  void Delay0(int time) {</p><p><b>  int i;</b></p><p>

9、;  int delayLoopCount=1000;</p><p>  for(;time>0;time--);</p><p>  for(i=0;i<delayLoopCount;i++);</p><p><b>  }</b></p><p>  int r_BCDHOUR ;</p>

10、<p>  int r_BCDMIN ;</p><p>  int r_BCDSEC ;</p><p>  /* 表示日期、時間的數(shù)據(jù)結(jié)構(gòu)*/</p><p>  typedef struct ST_DATE</p><p><b>  {</b></p><p>  short

11、 year; // 年</p><p>  charmon; // 月</p><p>  charday; // 日</p><p>  charweek_day; // 星期</p><p>  charhour; // 時</p><p>  ch

12、armin; // 分</p><p>  charsec; // 秒</p><p>  } st_date;</p><p>  int led_index = 0;</p><p>  int ext0_count = 0;</p><p>  void rtc_tick_isr(

13、void) __attribute__ ((interrupt("IRQ")));;</p><p>  void rtc_int_isr(void) __attribute__ ((interrupt("IRQ")));;</p><p>  void rtc_set_date(st_date* p_date)</p><p&g

14、t;<b>  {</b></p><p>  rRTCCON = 0x01;</p><p>  rBCDYEAR = p_date->year;</p><p>  rBCDMON = p_date->mon;</p><p>  rBCDDAY = p_date->day;</p&g

15、t;<p>  rBCDDATE = p_date->week_day;</p><p>  rBCDHOUR = p_date->hour;</p><p>  rBCDMIN = p_date->min;</p><p>  rBCDSEC = p_date->sec;</p><p>  rRT

16、CCON = 0x00;</p><p><b>  }</b></p><p>  void rtc_get_date(st_date* p_date)</p><p><b>  {</b></p><p>  rRTCCON = 0x01;</p><p>  

17、p_date->year= rBCDYEAR ;</p><p>  p_date->mon= rBCDMON ;</p><p>  p_date->day= rBCDDAY ;</p><p>  p_date->week_day= rBCDDATE ;</p><p>  p_date-&g

18、t;hour= rBCDHOUR ;</p><p>  p_date->min= rBCDMIN ;</p><p>  p_date->sec= rBCDSEC ;</p><p>  rRTCCON = 0x00;</p><p><b>  }</b></p>&

19、lt;p>  void rtc_tick_init( char tick )</p><p><b>  {</b></p><p>  Irq_Request(IRQ_TICK, rtc_tick_isr);</p><p>  rRTCCON = 0x0; //No reset[3], Merge BCD c

20、ounters[2], BCD clock select XTAL[1], RTC Control disable[0]</p><p>  rTICNT = (tick&0x7f)|0x80;/*TICK 中斷使能,周期為(1+tick)/128秒*/ </p><p>  Irq_Enable(IRQ_TICK); </p><p><

21、;b>  }</b></p><p>  void rtc_alarm_set(st_date* p_date, unsigned char mode)</p><p><b>  {</b></p><p>  Irq_Request(IRQ_RTC, rtc_int_isr);</p><p>  

22、rRTCCON = 0x01;</p><p>  rALMYEAR = p_date->year;</p><p>  rALMMON = p_date->mon;</p><p>  rALMDATE = p_date->day;</p><p>  rALMHOUR = p_date->hour;</

23、p><p>  rALMMIN = p_date->min;</p><p>  rALMSEC = p_date->sec;</p><p>  rRTCALM = mode;</p><p>  rRTCCON = 0x00;</p><p>  Irq_Enable(IRQ_RTC); &l

24、t;/p><p><b>  }</b></p><p>  void Main(void)</p><p><b>  {</b></p><p>  int old_index ;</p><p>  st_date m_date;</p><p> 

25、 /* 配置系統(tǒng)時鐘*/</p><p>  ChangeClockDivider(1,1); // 1:2:4 </p><p>  ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz </p><p>  /* 中斷初始化*/</p><p>  Isr_Init

26、();</p><p>  /* 初始化端口*/</p><p>  Port_Init();</p><p>  /* 初始化串口*/</p><p>  Uart_Init(0,115200);</p><p>  Uart_Select(0);</p><p>  /* 打印提示信息*/&

27、lt;/p><p>  PRINTF("\n---實時時鐘測試程序---\n");</p><p>  PRINTF("\n請將UART0與PC串口進行連接,然后啟動超級終端程序(115200, 8, N, 1)\n");</p><p>  PRINTF("\n實時時鐘測試開始\n");</p>

28、<p>  /* 采用BCD編碼,如年需要設(shè)置的值為x2004 */</p><p>  m_date.year= 0x2000+0x04 ;</p><p>  m_date.mon= 0x03 ;</p><p>  m_date.day= 0x02 ;</p><p>  m_date.week_day=

29、 0x02 ;</p><p>  m_date.hour= 0xc5 ;</p><p>  m_date.min= 0x40 ;</p><p>  m_date.sec= 0x00 ;</p><p>  /* 修改當(dāng)前日期和時間*/</p><p>  rtc_set_date(&m

30、_date);</p><p>  m_date.sec= 0x05 ;</p><p>  /* 設(shè)置告警的時間及方式,x41表示使能RTC告警,以及使能秒時鐘告警*/</p><p>  rtc_alarm_set(&m_date, 0x41);</p><p>  rtc_tick_init(127);</p>

31、<p>  old_index = led_index;</p><p>  PRINTF("\r\n\r\n"); </p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if(old_index !=

32、led_index)/* 每隔一秒更新一次數(shù)據(jù)*/</p><p>  { rtc_get_date(&m_date);</p><p>  old_index = led_index;</p><p>  r_BCDHOUR =m_date.hour;</p><p>  r_BCDMIN =m_date.min;&

33、lt;/p><p>  r_BCDSEC =m_date.sec;</p><p>  PRINTF(/* 時鐘數(shù)據(jù)為BCD碼格式,以進制顯示*/</p><p>  "\b\b\b\b\b\b\b\b%02x:%02x:%02x", m_date.hour, m_date.min, m_date.sec);</p><p&g

34、t;<b>  }</b></p><p>  *((U8*) 0x10000006) = 0xdf;</p><p>  *((U8*) 0x10000004) = segtable[(r_BCDHOUR/16)%16]; </p><p>  Delay0(5);</p><p>  *((U8*) 0x

35、10000006) = 0xef;</p><p>  *((U8*) 0x10000004) = segtable[r_BCDHOUR%16]; </p><p>  Delay0(5);</p><p>  *((U8*) 0x10000006) = 0xf7;</p><p>  *((U8*) 0x10000004)

36、 = segtable[ (r_BCDMIN/16)%16];</p><p>  Delay0(5);</p><p>  *((U8*) 0x10000006) = 0xfb;</p><p>  *((U8*) 0x10000004) = segtable[ r_BCDMIN%16];</p><p>  Delay0(5);&l

37、t;/p><p>  *((U8*) 0x10000006) = 0xfd;</p><p>  *((U8*) 0x10000004) = segtable[(r_BCDSEC/16)%16];</p><p>  Delay0(5);</p><p>  *((U8*) 0x10000006) = 0xfe;</p><

38、;p>  *((U8*) 0x10000004) = segtable[r_BCDSEC%16];</p><p>  Delay0(1); </p><p>  int ch=Key_GetKeyPoll();</p><p><b>  int j;</b></p><p>  if(ch!=0) <

39、/p><p>  { // PRINTF("\r'%c'鍵按下",ch);</p><p>  if(ch=='1') //1鍵按下,修改小時數(shù)</p><p>  { int R[2];</p><p><b>  int i=0;</b

40、></p><p>  for(;i<2;)</p><p><b>  {</b></p><p>  j=Key_GetKeyPoll();</p><p><b>  if(j!=0)</b></p><p>  {R[i]=j;i++;}</p>

41、;<p><b>  }</b></p><p>  int m_date.hour=(R[0]-30)*10+(R[1]-30);</p><p>  rtc_set_date(&m_date);</p><p><b>  }</b></p><p>  if(ch==&#

42、39;2') //2鍵按下,修改分鐘數(shù)</p><p><b>  {</b></p><p><b>  int Q[2];</b></p><p><b>  int i=0;</b></p><p>  for(;i<2

43、;)</p><p><b>  {</b></p><p>  j=Key_GetKeyPoll();</p><p><b>  if(j!=0)</b></p><p>  {Q[i]=j;i++;}</p><p><b>  }</b><

44、/p><p>  int m_date.min=(Q[0]-30)*10+(Q[1]-30);</p><p>  rtc_set_date(&m_date);</p><p><b>  }</b></p><p>  if(ch=='3') //3鍵按下,修改

45、秒數(shù)</p><p><b>  {</b></p><p><b>  int W[2];</b></p><p><b>  int i=0;</b></p><p>  for(;i<2;)</p><p><b>  {</

46、b></p><p>  j=Key_GetKeyPoll();</p><p><b>  if(j!=0)</b></p><p>  {W[i]=j;i++;}</p><p><b>  }</b></p><p>  int m_date.min=(W[0]-

47、30)*10+W[1]-30);</p><p>  rtc_set_date(&m_date);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b

48、>  }</b></p><p>  void rtc_tick_isr(void)</p><p><b>  {</b></p><p>  Irq_Clear(IRQ_TICK); </p><p>  led_index++;</p><p><b>

49、;  }</b></p><p>  void rtc_int_isr(void)</p><p><b>  {</b></p><p>  Irq_Clear(IRQ_RTC); /*清除RTC中斷*/</p><p>  ext0_count++;</p>&

50、lt;p>  PRINTF("\r\nAlarm\r\n ");</p><p><b>  }</b></p><p>  #include "def.h"</p><p>  #include "option.h"</p>&l

51、t;p>  #include "2410addr.h"</p><p>  #include "2410lib.h"</p><p>  #include "2410slib.h" </p><p>  #include "interrupt.h"</p><p

52、>  #include <stdarg.h></p><p>  #include <string.h></p><p>  #include <stdlib.h></p><p>  #include <stdio.h></p><p>  #include <ctype.h>

53、;</p><p>  void HaltUndef(void);</p><p>  void HaltSwi(void);</p><p>  void HaltPabort(void);</p><p>  void HaltDabort(void);</p><p>  void Isr_Init(void)&

54、lt;/p><p><b>  {</b></p><p>  pISR_UNDEF = (unsigned)HaltUndef;</p><p>  pISR_SWI = (unsigned)HaltSwi;</p><p>  pISR_PABORT = (unsigned)HaltPabort;</p&g

55、t;<p>  pISR_DABORT = (unsigned)HaltDabort;</p><p>  rINTMOD = 0x0; //All=IRQ mode</p><p>  rINTMSK = BIT_ALLMSK; //All interrupt is masked.</p

56、><p>  rINTSUBMSK = BIT_SUB_ALLMSK; //All sub-interrupt is masked. <- April 01, 2002 SOP</p><p><b>  }</b></p><p>  void Irq_Request(int irq_no, void* irq_rout

57、ine)</p><p><b>  {</b></p><p>  if(irq_no >= IRQ_MIN && irq_no <= IRQ_MAX)</p><p>  *(unsigned int*)((irq_no - 1) * sizeof(unsigned int) + (unsigned int)(_

58、ISR_STARTADDRESS+0x20)) = (unsigned int)irq_routine;</p><p><b>  }</b></p><p>  void Irq_Enable(int irq_no)</p><p><b>  {</b></p><p>  if(irq_no

59、 >= IRQ_MIN && irq_no <= IRQ_MAX)</p><p>  rINTMSK &= ~(1 << (irq_no - 1));</p><p><b>  }</b></p><p>  void Irq_Disable(int irq_no)</p>&l

60、t;p><b>  {</b></p><p>  if(irq_no >= IRQ_MIN && irq_no <= IRQ_MAX)</p><p>  rINTMSK |= (1 << (irq_no - 1));</p><p><b>  }</b></p>

61、;<p>  void Irq_Clear(int irq_no)</p><p><b>  {</b></p><p>  rSRCPND = (1 << (irq_no - 1));/*清除RTC中斷*/</p><p>  rINTPND = (1 << (irq_no - 1

62、));</p><p><b>  rINTPND;</b></p><p>  void HaltUndef(void)</p><p><b>  {</b></p><p>  Uart_Printf("Undefined instruction exception.\n"

63、);</p><p><b>  while(1);</b></p><p><b>  }</b></p><p>  void HaltSwi(void)</p><p><b>  {</b></p><p>  Uart_Printf("

64、;SWI exception.\n");</p><p><b>  while(1);</b></p><p><b>  }</b></p><p>  void HaltPabort(void)</p><p><b>  {</b></p>&l

65、t;p>  Uart_Printf("Pabort exception.\n");</p><p><b>  while(1);</b></p><p><b>  }</b></p><p>  void HaltDabort(void)</p><p><b&g

66、t;  {</b></p><p>  Uart_Printf("Dabort exception.\n");</p><p><b>  while(1);</b></p><p><b>  }</b></p><p>  #include <string.

67、h></p><p>  #include "2410addr.h"</p><p>  #include "2410lib.h"</p><p>  #include "timer.h"</p><p>  #include "interrupt.h"&l

68、t;/p><p>  #define RECV_CMD_MAX_BUF 2048</p><p>  char recv_buf[RECV_CMD_MAX_BUF];</p><p>  int recv_read = 0;</p><p>  int recv_write = 0;</p><p>  char ke

69、y_recv_buf[RECV_CMD_MAX_BUF];</p><p>  int key_recv_read = 0;</p><p>  int key_recv_write = 0;</p><p>  int timer1_count = 0;</p><p>  enum KEYBOARD_SCAN_STATUS</

70、p><p><b>  {</b></p><p>  KEYBOARD_SCAN_FIRST,</p><p>  KEYBOARD_SCAN_SECOND,</p><p>  KEYBOARD_SCAN_THIRD,</p><p>  KEYBOARD_SCAN_FOURTH</p>

71、;<p><b>  };</b></p><p>  int row = 0;</p><p>  extern unsigned char output_0x10000000;</p><p>  unsigned char ascii_key, input_key[4], input_key1[4], key_mask =

72、 0x0F;</p><p>  unsigned char*keyboard_port_scan = (unsigned char*)0x10000000;</p><p>  unsigned char*keyboard_port_value = (unsigned char*)0x10000002;</p><p>  int k

73、eyboard_scan_status[4] = {</p><p>  KEYBOARD_SCAN_FIRST,</p><p>  KEYBOARD_SCAN_FIRST,</p><p>  KEYBOARD_SCAN_FIRST,</p><p>  KEYBOARD_SCAN_FIRST</p><p>&l

74、t;b>  };</b></p><p>  char key_get_char(int row, int col)</p><p><b>  {</b></p><p>  char key = 0;</p><p>  switch( row )</p><p><b

75、>  {</b></p><p><b>  case 0:</b></p><p>  if((col & 0x01) == 0) key = '0'; </p><p>  else if((col & 0x02) == 0) key = 'A'; </p>&

76、lt;p>  else if((col & 0x04) == 0) key = 'B'; </p><p>  else if((col & 0x08) == 0) key = 'F'; </p><p><b>  break;</b></p><p><b>  case 1:

77、</b></p><p>  if((col & 0x01) == 0) key = '7'; </p><p>  else if((col & 0x02) == 0) key = '8'; </p><p>  else if((col & 0x04) == 0) key = '9

78、9;;</p><p>  else if((col & 0x08) == 0) key = 'E';</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  if((col & 0x01) == 0)

79、 key = '4'; </p><p>  else if((col & 0x02) == 0) key = '5'; </p><p>  else if((col & 0x04) == 0) key = '6'; </p><p>  else if((col & 0x08) == 0)

80、key = 'D'; </p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  if((col & 0x01) == 0) key = '1'; </p><p>  else if((col

81、& 0x02) == 0) key = '2'; </p><p>  else if((col & 0x04) == 0) key = '3'; </p><p>  else if((col & 0x08) == 0) key = 'C'; </p><p><b>  break

82、;</b></p><p><b>  default:</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  return key;</p><p><b>  }&

83、lt;/b></p><p>  void recv_key(int key)</p><p><b>  {</b></p><p>  key_recv_buf[key_recv_write] = key;</p><p>  key_recv_write ++;</p><p>  i

84、f(key_recv_write >= RECV_CMD_MAX_BUF)</p><p>  key_recv_write = 0;</p><p>  if(key_recv_write == key_recv_read)</p><p><b>  {</b></p><p><b>  // 緩沖

85、區(qū)以滿</b></p><p>  key_recv_read ++;</p><p>  if(key_recv_read >= RECV_CMD_MAX_BUF)</p><p>  key_recv_read = 0;</p><p><b>  }</b></p><p>

86、;<b>  }</b></p><p>  void Kbd_Scan(void)</p><p><b>  {</b></p><p>  int loopcnt = row, bexit = 0;</p><p><b>  int temp;</b></p>

87、;<p><b>  // 鍵盤掃描</b></p><p>  for( loopcnt = row; loopcnt < row + 4; loopcnt ++)</p><p><b>  {</b></p><p>  if(loopcnt >= 4)</p><p&g

88、t;  temp = loopcnt - 4;</p><p><b>  else</b></p><p>  temp = loopcnt;</p><p>  switch(keyboard_scan_status[temp])</p><p><b>  {</b></p>&

89、lt;p>  case KEYBOARD_SCAN_FIRST:</p><p>  *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<temp)); /*將row列置低電平*/</p><p>  keyboard_scan_status[temp] = KEYBOARD_SCAN_

90、SECOND;</p><p>  bexit = 1;</p><p><b>  break;</b></p><p>  case KEYBOARD_SCAN_SECOND:</p><p>  input_key[temp] = (*keyboard_port_value) & key_mask;/*并

91、獲取第一次掃描值*/</p><p>  if(input_key[temp] == key_mask)</p><p>  keyboard_scan_status[temp] = KEYBOARD_SCAN_FIRST;/* 沒有按鍵,回到開始狀態(tài)*/</p><p><b>  else</b></p><

92、p><b>  {</b></p><p>  keyboard_scan_status[temp] = KEYBOARD_SCAN_THIRD;/* 有按鍵*/</p><p>  bexit = 1;</p><p><b>  }</b></p><p><b>  b

93、reak;</b></p><p>  case KEYBOARD_SCAN_THIRD:</p><p>  if (((*keyboard_port_value) & key_mask) != input_key[temp]) </p><p>  keyboard_scan_status[temp] = KEYBOARD_SCAN_FIRS

94、T;</p><p><b>  else</b></p><p><b>  {</b></p><p>  ascii_key = key_get_char(temp, input_key[temp]);</p><p>  keyboard_scan_status[temp] = KEYB

95、OARD_SCAN_FOURTH;</p><p>  *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<temp)); /*將row列置低電平*/</p><p>  bexit = 1;</p><p><b>  }</b></p&g

96、t;<p><b>  break;</b></p><p>  case KEYBOARD_SCAN_FOURTH:</p><p>  input_key1[temp] = (*keyboard_port_value) & key_mask;/*并獲取第一次掃描值*/</p><p>  if(input_key1[

97、temp] == key_mask)</p><p><b>  {</b></p><p>  // get a key</p><p>  recv_key(ascii_key);</p><p>  keyboard_scan_status[temp] = KEYBOARD_SCAN_FIRST;<

98、;/p><p><b>  }else</b></p><p><b>  {</b></p><p>  *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<temp)); /*將row列置低電平*/</p>&l

99、t;p>  bexit = 1;</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  if(bexit)</b></p>&

100、lt;p><b>  break;</b></p><p><b>  }</b></p><p>  row = temp;</p><p><b>  }</b></p><p>  char Key_GetKey()</p><p><

101、;b>  {</b></p><p><b>  char ch;</b></p><p>  if(key_recv_write == key_recv_read)</p><p><b>  {</b></p><p>  /* no key found */</p>

102、;<p><b>  ch = 0;</b></p><p><b>  }else</b></p><p><b>  {</b></p><p>  ch = key_recv_buf[key_recv_read];</p><p>  key_recv_re

103、ad ++;</p><p>  if(key_recv_read >= RECV_CMD_MAX_BUF)</p><p>  key_recv_read = 0;</p><p><b>  }</b></p><p>  return ch;</p><p><b>  }&

104、lt;/b></p><p>  char Key_GetKeyPoll()</p><p>  { int row;</p><p>  unsigned char ascii_key, input_key, input_key1, key_mask = 0x0F;</p><p>  for( row = 0; row &l

105、t; 4; row++)</p><p><b>  {</b></p><p>  *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<row)); /*將row列置低電平*/</p><p>  Delay(1);/*延時

106、*/</p><p>  input_key = (*keyboard_port_value) & key_mask;/*并獲取第一次掃描值*/</p><p>  if(input_key == key_mask)continue;/* 沒有按鍵*/</p><p>  /* 延時,再次獲取掃描值,如果兩次的值不等,則認(rèn)為是一個干擾

107、*/</p><p><b>  Delay(1);</b></p><p>  if (((*keyboard_port_value) & key_mask) != input_key) continue;</p><p><b>  // 等待按鍵松開</b></p><p>&l

108、t;b>  while(1)</b></p><p><b>  {</b></p><p>  *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<row)); /*將row列置低電平*/</p><p><b>  

109、Delay(1);</b></p><p>  input_key1 = (*keyboard_port_value) & key_mask;/*并獲取第一次掃描值*/</p><p>  if(input_key1 == key_mask)break;/* 沒有按鍵*/</p><p><b>  }</b>

110、;</p><p>  ascii_key = key_get_char(row, input_key);/* 查表*/</p><p>  return ascii_key;/* 顯示結(jié)果*/</p><p><b>  }</b></p><p><b>  return 0;&

111、lt;/b></p><p><b>  }</b></p><p>  #include "def.h"</p><p>  #include "2410lib.h"</p><p>  #include "option.h"</p>&l

112、t;p>  #include "2410addr.h"</p><p>  #include "interrupt.h"</p><p>  #include <stdarg.h></p><p>  #include <string.h></p><p>  #inclu

113、de <stdlib.h></p><p>  #include <stdio.h></p><p>  #include <ctype.h></p><p>  extern char Image_RW_Limit[];</p><p>  void *mallocPt=Image_RW_Limit;&l

114、t;/p><p>  static int delayLoopCount = FCLK/10000/10;</p><p>  void Delay(int time)</p><p><b>  {</b></p><p>  int i,adjust=0;</p><p>  if(time==0

115、)</p><p><b>  {</b></p><p>  time = 200;</p><p>  adjust = 1;</p><p>  delayLoopCount = 400;</p><p>  rWTCON = ((PCLK/1000000-1)<<8)|(2

116、<<3); </p><p>  rWTDAT = 0xffff; //for first update</p><p>  rWTCNT = 0xffff; //resolution=64us @any PCLK </p><p>  r

117、WTCON = ((PCLK/1000000-1)<<8)|(2<<3)|(1<<5); //Watch-dog timer start</p><p><b>  }</b></p><p>  for(;time>0;time--)</p><p>  for(i=0;i<delayLoopC

118、ount;i++);</p><p>  if(adjust==1)</p><p><b>  {</b></p><p>  rWTCON = ((PCLK/1000000-1)<<8)|(2<<3); //Watch-dog timer stop</p><p>  i = 0xffff

119、 - rWTCNT; //1count->64us, 200*400 cycle runtime = 64*i us</p><p>  delayLoopCount = 8000000/(i*64); //200*400:64*i=1*x:100 -> x=80000*100/(64*i) </p><p><

120、b>  }</b></p><p><b>  }</b></p><p>  void Port_Init(void)</p><p><b>  {</b></p><p>  rGPACON = 0x7fffff; </p><p>  rGPBCON

121、 = 0x044555;</p><p>  rGPBUP = 0x7ff; // The pull up function is disabled GPB[10:0]</p><p>  rGPCCON = 0xaaaaaaaa; </p><p>  rGPCUP = 0xffff; // The pull up function

122、 is disabled GPC[15:0] </p><p>  rGPDCON = 0xaaaaaaaa; </p><p>  rGPDUP = 0xffff; // The pull up function is disabled GPD[15:0]</p><p>  rGPECON = 0xaaaaaaaa; </

123、p><p>  rGPEUP = 0xffff; // The pull up function is disabled GPE[15:0]</p><p>  rGPFCON = 0x55aa;</p><p>  rGPFUP = 0xff; // The pull up function is disabled GPF[7:0]</p&g

124、t;<p>  #if 0 </p><p>  rGPGCON = 0xff95ffba;</p><p>  rGPGUP = 0xffff; // The pull up function is disabled GPG[15:0]</p><p>  #else </p><p>  rGPGC

125、ON = 0xff055555;</p><p>  rGPGUP = 0xfffff;</p><p><b>  #endif</b></p><p>  rGPHCON = 0x2afaaa;</p><p>  rGPHUP = 0x7ff; // The pull up function is dis

126、abled GPH[10:0]</p><p>  rEXTINT0 = 0x22222222; // EINT[7:0]</p><p>  rEXTINT1 = 0x22222222; // EINT[15:8]</p><p>  rEXTINT2 = 0x22222222; // EINT[23:16]</p><p&g

127、t;  }static int whichUart=0;</p><p>  void Uart_Init(int pclk,int baud)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  if(pclk == 0)</p>

128、;<p>  pclk = PCLK;</p><p>  rUFCON0 = 0x0; //UART channel 0 FIFO control register, FIFO disable</p><p>  rUFCON1 = 0x0; //UART channel 1 FIFO control register, FIFO disable</p&

129、gt;<p>  rUFCON2 = 0x0; //UART channel 2 FIFO control register, FIFO disable</p><p>  rUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disable</p><p>  rUMCON1 = 0x0; //U

130、ART chaneel 1 MODEM control register, AFC disable</p><p>  rULCON0 = 0x3; //Line control register : Normal,No parity,1 stop,8 bits</p><p>  rUCON0 = 0x245; // Control r

131、egister</p><p>  rUBRDIV0=( (int)(pclk/16./baud) -1 ); //Baud rate divisior register 0</p><p>  rULCON1 = 0x3;</p><p>  rUCON1 = 0x245;</p><p>  rUBRDIV1=( (int)(pcl

132、k/16./baud) -1 );</p><p>  rULCON2 = 0x3;</p><p>  rUCON2 = 0x245;</p><p>  rUBRDIV2=( (int)(pclk/16./baud) -1 ); </p><p>  for(i=0;i<100;i++);</p><p&

133、gt;<b>  }</b></p><p>  void Uart_Select(int ch)</p><p><b>  {</b></p><p>  whichUart = ch;</p><p><b>  }</b></p><p>  v

134、oid Uart_TxEmpty(int ch)</p><p><b>  {</b></p><p><b>  if(ch==0)</b></p><p>  while(!(rUTRSTAT0 & 0x4)); //Wait until tx shifter is empty.</p><

135、;p>  else if(ch==1)</p><p>  while(!(rUTRSTAT1 & 0x4)); //Wait until tx shifter is empty.</p><p>  else if(ch==2)</p><p>  while(!(rUTRSTAT2 & 0x4)); //Wait until tx shif

136、ter is empty.</p><p><b>  }</b></p><p>  char Uart_Getch(void)</p><p><b>  {</b></p><p>  if(whichUart==0)</p><p><b>  {

137、 </b></p><p>  while(!(rUTRSTAT0 & 0x1)); //Receive data ready</p><p>  return RdURXH0();</p><p><b>  }</b></p><p>  else if(whichUart==1)</p&

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論