2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩20頁(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>  《單片機(jī)原理及接口技術(shù)》課程設(shè)計(jì)</p><p>  題目: 簡(jiǎn)易計(jì)算器設(shè)計(jì) </p><p>  班 級(jí): 電子1547 </p><p>  姓 名: </p>

2、<p>  學(xué) 號(hào): </p><p>  指導(dǎo)教師: </p><p>  時(shí) 間: 2013年12月 </p><p><b>  目錄</b></p><p>  一、選題的背景和意義-------

3、------------1</p><p>  1.1選題的背景-------------------------------------1</p><p>  1.2選題的意義-------------------------------------1</p><p>  二、總體設(shè)計(jì)-------------------------------1</p&g

4、t;<p>  2.1設(shè)計(jì)任務(wù)---------------------------------------1</p><p>  2.2方案選擇---------------------------------------1</p><p>  三、硬件設(shè)計(jì)-------------------------------2</p><p>  3.1

5、元器件名稱--------------------------------------------------------2</p><p>  3.2 計(jì)算器按鍵介紹--------------------------------------------------2</p><p>  3.3硬件系統(tǒng)框圖、單元電路--------------------------3</p>

6、;<p>  四、軟件設(shè)計(jì)-------------------------------3</p><p>  4.1 軟件調(diào)試步驟-----------------------------------------------------3</p><p>  4.2軟件設(shè)計(jì)流程圖------------------------------------------------

7、---4</p><p>  五、結(jié)束語(yǔ)------------------------------------5</p><p>  六、參考文獻(xiàn)--------------------------------5</p><p>  七、附錄---------------------------------------6</p><p>&

8、lt;b>  一、背景和意義</b></p><p>  1.1、選題的背景:</p><p>  當(dāng)今時(shí)代,是一個(gè)新技術(shù)層出不窮的時(shí)代。在電子領(lǐng)域,尤其是自動(dòng)化智能控制領(lǐng)域,傳統(tǒng)的分立元件或數(shù)字邏輯電路構(gòu)成的控制系統(tǒng)正以前所未見(jiàn)的速度被單片機(jī)智能控制系統(tǒng)所取代。單片機(jī)具有體積小、功能強(qiáng)、成本低、應(yīng)用面廣等優(yōu)點(diǎn),可以說(shuō),智能控制與自動(dòng)控制的核心就是單片機(jī)。目前,一個(gè)學(xué)習(xí)與

9、應(yīng)用單片機(jī)的高潮正在工廠、學(xué)校及企事業(yè)單位大規(guī)模地興起。過(guò)去習(xí)慣于傳統(tǒng)電子領(lǐng)域的工程師、技術(shù)員正面臨著全新的挑戰(zhàn),如不能在較短時(shí)間內(nèi)學(xué)會(huì)單片機(jī),勢(shì)必會(huì)被時(shí)代所遺棄,只有勇敢地面對(duì)現(xiàn)實(shí),挑戰(zhàn)自我,加強(qiáng)學(xué)習(xí),爭(zhēng)取在較短的時(shí)間內(nèi)將單片機(jī)技術(shù)融會(huì)貫通,才能跟上時(shí)代的步伐。</p><p>  1.2、選題的意義:</p><p>  單片機(jī)課程設(shè)計(jì)是單片機(jī)原理課程的實(shí)踐性環(huán)節(jié)。是在我們學(xué)習(xí)了《單片

10、機(jī)原理》等課程的基礎(chǔ)上進(jìn)行的綜合性訓(xùn)練,我們組這次訓(xùn)練的課題是基于單片機(jī)簡(jiǎn)易計(jì)算器。此次進(jìn)行的綜合性訓(xùn)練,不僅培養(yǎng)了我如何合理運(yùn)用課本中所學(xué)到的理論知識(shí)與實(shí)踐緊密結(jié)合,獨(dú)立解決實(shí)際問(wèn)題的能力。</p><p><b>  二、總體設(shè)計(jì)</b></p><p>  本設(shè)計(jì)主要是依據(jù)單片機(jī)的原理來(lái)進(jìn)行簡(jiǎn)易計(jì)算器的設(shè)計(jì),設(shè)計(jì)采用了80C51單片機(jī)作為計(jì)算器的主控制器,LM0

11、20 L作為顯示器,4×4 keypad-smallcalc鍵盤作為輸入按鍵,通過(guò)軟硬件相結(jié)合,來(lái)實(shí)現(xiàn)整數(shù)的“加”、“減”、“乘”、“除”運(yùn)算。</p><p><b>  2.1設(shè)計(jì)任務(wù) </b></p><p>  本設(shè)計(jì)主要通過(guò)單片機(jī)的原理和應(yīng)用,以電子技術(shù)基礎(chǔ)的基本理論為指導(dǎo),利用Protues仿真軟件和Keil編程軟件來(lái)設(shè)計(jì)簡(jiǎn)易計(jì)算器。&

12、lt;/p><p>  其主要設(shè)計(jì)要求有: </p><p>  1、對(duì)計(jì)算器硬件系統(tǒng)的設(shè)計(jì); </p><p>  2、運(yùn)用keil進(jìn)行計(jì)算器軟件系統(tǒng)的設(shè)計(jì); </p><p>  3、在protues仿真平臺(tái)上,對(duì)軟件進(jìn)行調(diào)試及仿真;    </p><

13、p>  4、軟硬件結(jié)合之后,進(jìn)行整體電路的調(diào)試與測(cè)試。</p><p><b>  2.2 方案選擇</b></p><p><b> ?。?)方案一 </b></p><p>  根據(jù)功能和指標(biāo)要求,本系統(tǒng)選用MCS-51系列單片機(jī)AT89C51為主控機(jī)。通過(guò)擴(kuò)展必要的外圍接口電路,實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì)。計(jì)

14、算器電路包括三個(gè)部分:顯示電路、4*4鍵掃描電路、單片機(jī)微控制電路。用七段數(shù)碼管作為顯示電路,矩陣鍵盤作為輸入電路。</p><p><b> ?。?)方案二 </b></p><p>  根據(jù)計(jì)算器的功能要求,選擇AT89C51為主控機(jī),通過(guò)擴(kuò)展必要的外圍接/口電路,實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì)。外部主要由4*4矩陣鍵盤和一個(gè)液晶顯示屏構(gòu)成,內(nèi)部由一塊AT89C51

15、單片機(jī)構(gòu)成。計(jì)算器電路包括四個(gè)部分:選用LCD作為顯示部分,矩陣鍵盤作為輸入部分,運(yùn)算模塊,單片機(jī)控制部分。</p><p><b>  最終選擇方案二。</b></p><p><b>  三、硬件設(shè)計(jì)</b></p><p><b>  3.1 元器件名稱</b></p><p

16、>  (1)80C51.BUS</p><p><b>  (2)74LS00</b></p><p>  (3)74LS373</p><p><b>  (4)6264</b></p><p><b>  (5)7407</b></p><p>

17、;  (6)KEYPAD-SMALLCALC</p><p>  3.2 計(jì)算器按鍵介紹</p><p>  計(jì)算器所需按鍵有:數(shù)字鍵:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’     功能鍵:’+’, ’-‘ , ’*’, ’/ ’ ,

18、60;’ = ’, ’ C( 清零)’ 共計(jì)16個(gè)按鍵,采用4*4矩陣鍵盤,鍵盤的行和列之間都有公共端相連,四行和四列的8個(gè)公共端分別接P1.0~P1.7,這樣掃描P1口就可以完成對(duì)矩陣鍵盤的掃描,通過(guò)對(duì)16個(gè)按鍵進(jìn)行編碼,從而得到鍵盤的口地址,對(duì)比P1口的掃描結(jié)果和各按鍵的地址,我們就可以得到是哪個(gè)鍵按下,從而完成鍵盤掃描的功能。鍵盤電路設(shè)計(jì) 鍵盤輸入采用4*4的矩陣鍵盤。4

19、*4鍵盤分別與PC0~PC7相連。PC0~PC3作為輸入口(回送線),PC4~PC7作為輸出口(掃描線)。16個(gè)按鍵分別用于控制數(shù)字“0~9”以及數(shù)學(xué)運(yùn)算符號(hào)“+、-、*、/”。</p><p>  3.3硬件系統(tǒng)框圖、單元電路</p><p><b>  軟件設(shè)計(jì)</b></p><p>  4.1 軟件調(diào)試步驟 </p>

20、<p>  1)打開(kāi)軟件后,在Project菜單中選擇New Project命令,打開(kāi)一個(gè)新項(xiàng)目。保存此項(xiàng)目,輸入工程文件名后,并保存工程文件的目錄。</p><p>  2)為項(xiàng)目文件選擇一個(gè)目標(biāo)器件,即選擇8051的類型。在Data base 列表框中選擇“ATML 89C51”,確定。 </p><p>  上述設(shè)置好后,創(chuàng)建源程序文件并輸入程序代碼。輸入好代碼后點(diǎn)擊“文

21、件/保存”。</p><p>  4)把源文件添加到項(xiàng)目中,用鼠標(biāo)指在目標(biāo)工作區(qū)的目標(biāo)1,點(diǎn)擊右鍵在彈出的菜單中選擇添加文件到源代碼組,在彈出的添加文件框中,選擇需要添加到項(xiàng)目中的文件。 </p><p>  5)開(kāi)始編譯,對(duì)項(xiàng)目文件進(jìn)行編譯。若沒(méi)有錯(cuò)誤后進(jìn)行硬件調(diào)試。</p><p>  4.2軟件設(shè)計(jì)流程圖</p><p><b&g

22、t;  五、結(jié)束語(yǔ)</b></p><p>  課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn)、提出、分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程。隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域, 在生活中可以說(shuō)得是無(wú)處不在。因此作為電子信息工程專業(yè)的學(xué)生來(lái)說(shuō)掌握單片機(jī)的開(kāi)發(fā)技術(shù)是十分重要的。 </p>&l

23、t;p>  我的題目是簡(jiǎn)易計(jì)算器,對(duì)于我們這些實(shí)踐中的新手來(lái)說(shuō),這是一次考驗(yàn)。怎么才能找到課堂所學(xué)與實(shí)際應(yīng)用的最佳結(jié)合點(diǎn)?怎樣讓自己的業(yè)余更接近專業(yè)?怎樣讓自己的計(jì)劃更具有序性,而不會(huì)忙無(wú)一用?這都是我們所要考慮和努力的。這次課程設(shè)計(jì)我學(xué)到很多很多的東西,學(xué)會(huì)了怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過(guò)程中怎么樣去克服心理上的不良情緒。不僅鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí),掌握了一種系

24、統(tǒng)的研究方法,可以進(jìn)行一些簡(jiǎn)單的編程。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,對(duì)單片機(jī)匯編語(yǔ)言掌握得不夠好。     這次課程設(shè)計(jì)通過(guò)我們小

25、組的努力終于順利完成了,在設(shè)計(jì)中遇到了很多編程問(wèn)題,最后在老師的辛勤指導(dǎo)下,終于迎刃而解,在此我表示感謝!同時(shí),對(duì)給過(guò)我?guī)椭乃型瑢W(xué)和指導(dǎo)老師再次表示忠心的感謝!</p><p><b>  六、參考文獻(xiàn)</b></p><p>  1、《典型模塊設(shè)計(jì)實(shí)例導(dǎo)航》編著:求是科技</p><p>  2、《基于Proteus的8051單片機(jī)實(shí)例教

26、程》主編:李學(xué)禮</p><p>  3、《單片機(jī)c語(yǔ)言程序設(shè)計(jì)實(shí)訓(xùn)100例》主編:彭偉</p><p>  4、《單片機(jī)實(shí)訓(xùn)教程》主編:貢雪梅</p><p>  5、《Proteus教程》主編:朱清慧</p><p>  6、《單片機(jī)技術(shù)“做中學(xué)”案例教程》主編:陳石勝</p><p><b>  七、附

27、錄</b></p><p><b>  儀器名稱及數(shù)量</b></p><p><b>  顯示、乘法、除法</b></p><p><b>  加法、減法</b></p><p><b>  c語(yǔ)言程序編程</b></p>&l

28、t;p>  #include <reg51.h></p><p>  #include <ctype.h></p><p>  #include "calc.h" </p><p>  static data long lvalue; </p><p>  static data long r

29、value;</p><p>  static data char currtoken;</p><p>  static data char lasttoken; </p><p>  static data char lastpress; </p><p>  static xdata char outputbuffer[MAX_DIS

30、PLAY_CHAR];//輸出緩沖</p><p>  //----------------------------------------------</p><p>  //主程序 //------------- </p><p>  void main()</p><p><b>  { </b></p&g

31、t;<p><b>  //變量初始化 </b></p><p>  lvalue=0; </p><p>  rvalue=0; </p><p>  currtoken='='; </p><p>  lasttoken='='; </p><

32、p><b>  //初始化LCD </b></p><p>  initialise(); </p><p>  calc_putput(OK); </p><p>  calc_evaluate();</p><p><b>  } </b></p><p> 

33、 //----------------------------------------- </p><p>  //獲取按鍵值并進(jìn)行計(jì)算處理 </p><p>  //-----------------------------------------</p><p>  void calc_evaluate() </p><p><b&

34、gt;  { </b></p><p>  char data key; </p><p>  int data i; </p><p>  char xdata number[MAX_DISPLAY_CHAR]; </p><p>  char xdata *bufferptr; </p><p>

35、<b>  //清除緩沖 </b></p><p>  for(i=0;i<=MAX_DISPLAY_CHAR;i++) number[i]=' '; </p><p>  bufferptr=number; </p><p>  while(1) </p><p><b&g

36、t;  { </b></p><p>  key=calc_getkey();</p><p>  if(calc_testkey(key))  </p><p><b>  {    </b></p><p>  if(bufferptr!=

37、&number[MAX_DISPLAY_CHAR-2])    </p><p><b>  {     </b></p><p>  *bufferptr=key;     </p><p>  

38、calc_display(number);    </p><p>  bufferptr++;    </p><p><b>  }    </b></p><p><b>  }  

39、0; </b></p><p><b>  else  </b></p><p><b>  {   </b></p><p>  if(lasttoken=='0')     

40、0;  lvalue=calc_asciidec(number);</p><p>  else      rvalue=calc_asciidec(number);  </p><p><b>  //清除數(shù)字緩沖</b></p><p>  

41、bufferptr=number;    </p><p>  for(i=0;i<=MAX_DISPLAY_CHAR;i++)      number[i]=' ';    </p><p>  //處理操作符

42、0;   </p><p>  currtoken=key;   </p><p>  if(currtoken=='C')     calc_opfunctions(currtoken);    </p>&l

43、t;p>  else      calc_opfunctions(lasetoken);   </p><p>  //清除輸出緩沖   </p><p>  for(i=0;i<=MAX_DISPLAY_CHAR;i++)   

44、   outpufbuffer[i]=' ';     </p><p>  bufferptr=number;    </p><p>  if(currtoken!0x3D)     

45、0;lasttoken=currtoken;  </p><p><b>  }    </b></p><p>  lastpress=key;  </p><p><b>  }</b></p><p><b&

46、gt;  } </b></p><p>  //-------------------------------------------</p><p>  //   根據(jù)運(yùn)算符按鍵進(jìn)行運(yùn)算處理</p><p>  //-------------------------------------------- 

47、;void calc_opfunctions (char token)</p><p><b>  {  </b></p><p>  char data result; </p><p>  switch(token)</p><p>&l

48、t;b>  { </b></p><p>  case '+':if(currtoken=='='||isdigit(lastpress)) </p><p><b>  {   </b></p><p>  lvalue+=rvalu

49、e;  </p><p>  result=calc_chkerror(lvalue); </p><p><b>  } </b></p><p>  else result=SLEEP;  </p><p><b>  break;

50、60; </b></p><p>  case '-':if(currtoken=='='||isdigit(lastpress))  </p><p><b>  {   </b></p><p>  Lvalue-=rvalue

51、;   </p><p>  result=calc_chkerror(lvalue);  </p><p><b>  }  </b></p><p>  else result=SLEEP; </p><p><b>

52、  break;   </b></p><p>  case '*':if(currtoken=='='||isdigit(lastpress)) </p><p><b>  {   </b></p><p>  lva

53、lue*=rvalue;   </p><p>  result=calc_chkerror(lvalue);  </p><p><b>  } </b></p><p>  else result=SLEEP; </p><p><

54、b>  break;  </b></p><p>  case '/':if(currtoken=='='||isdigit(lastpress)) </p><p><b>  {</b></p><p>  if (rvalue)</p>

55、<p><b>  {    </b></p><p>  lvalue/=rvalue;   </p><p>  result=calc_chkerror(lvalue);  </p><p><b>  }  

56、;</b></p><p>  else result=SLEEP;  </p><p><b>  }</b></p><p>  else result=SLEEP; </p><p><b>  break; </b></p>

57、<p><b>  //取消  </b></p><p>  case 'C':lvalue=0;      rvalue=0;           currtoke

58、n='0';           lasttoken='0';    </p><p>  result=OK;    </p><p><b>  break

59、; </b></p><p>  default:result=SLEEP;</p><p><b>  }</b></p><p>  calc_output(result);</p><p><b>  } </b></p><p>  /

60、/--------------------------------------------------------</p><p>  //   檢查待顯示數(shù)據(jù)的上界和下界</p><p>  //   例如,99999999 and -99999999 </p><p>  

61、//--------------------------------------------------------</p><p>  int calc_chkerror (long num)</p><p><b>  { </b></p><p>  if(num>=-99999999&

62、;&num<=99999999)   return OK;  else    return ERROR;</p><p><b>  } </b></p><p>  //--------------------------------

63、---------------------------</p><p>  //   根據(jù)操作狀態(tài)輸出 </p><p>  //----------------------------------------------------------</p><p>  void calc_output {int status}&

64、lt;/p><p>  - {  switch(status)</p><p><b>  { </b></p><p>  case OK:calc_deaplay(calc_decascii(lvalue));      break;&

65、#160; </p><p>  case SLEEP:    break; </p><p>  case ERROR:calc_display("Exception");       break; </

66、p><p>  default:calc_display("Exception")       break; </p><p><b>  } </b></p><p><b>  } </b></p&

67、gt;<p>  //----------------------------------------------------</p><p>  //將ASCII字符串轉(zhuǎn)換為浮點(diǎn)數(shù) </p><p>  //----------------------------------------------------</p><p>  long

68、 calc_asciidec (char *buffer)</p><p><b>  {</b></p><p>  long data value; </p><p>  long data digit; </p><p>&l

69、t;b>  value=0; </b></p><p>  while(*buffer!=' ')</p><p><b>  {  </b></p><p>  digit=*buffer-'0'; </p><p> 

70、 value=value*10+digit; </p><p><b>  buffer++;</b></p><p><b>  } </b></p><p>  return value;</p><p><b>  } </b>&l

71、t;/p><p>  //----------------------------------------------------</p><p>  //將浮點(diǎn)數(shù)轉(zhuǎn)換為ASCII字符串 </p><p>  //---------------------------------------------------- </p><

72、p>  char *calc_decascii(long num)</p><p><b>  {</b></p><p>  long data temp=num;</p><p>  char xdata *avvayptr=&outputbuffer[MAX_DIS

73、PLAY_CHAR]; </p><p>  long data divisor=10;</p><p>  long data result; </p><p>  char data remainder,asciival; </p><p>  in

74、t data i; </p><p>  //如果計(jì)算結(jié)果為0。,則在緩沖中插入0并結(jié)束</p><p>  if(!temp) </p><p><b>  {  </b></p><p>  *arrayptr='0';  

75、; goto done; </p><p><b>  } </b></p><p>  if(temp<0) //處理負(fù)數(shù)</p><p><b>  {  </b></p><p>  outputbuffer[0]=&

76、#39;-';   temp-=2*temp;</p><p><b>  } </b></p><p>  for(i=0;i<sizeof(outputbuffer);i++) </p><p><b>  { </b></p>&

77、lt;p>  remainber=temp%divisor;  </p><p>  result=temp/divisor; </p><p>  if((!remainder)&&(!result))    *arrayptr=' ';  </

78、p><p><b>  else </b></p><p><b>  {    </b></p><p>  asciival=remainder+'0';  </p><p>  *arrayptr=asciiva

79、l; </p><p><b>  } </b></p><p>  temp/=10; </p><p>  //為“—”號(hào)保留位置 </p><p>  if(arrayptr!=&outputbuffer[1])    arra

80、yptr--; </p><p><b>  }  </b></p><p>  done:return outputbuffer;</p><p><b>  } </b></p><p>  //-------------------------

81、----------------------- </p><p>  //測(cè)試按鍵時(shí)數(shù)字還是操作符,如果是數(shù)字則返回1.是操作符時(shí)返回0 </p><p>  //------------------------------------------------ </p><p>  char calc_testkey 

82、;(char key)</p><p><b>  {</b></p><p>  if(isdigit(key))   return 1;  else   teturn 0;</p><p><b>  } <

83、;/b></p><p>  //------------------------------------------------ </p><p>  //調(diào)用input例程搜索按鍵,并返回按鍵的ASCII碼值</p><p>  //------------------------------------------------ <

84、;/p><p>  char calc_getkey()</p><p><b>  { </b></p><p>  char data mykey; </p><p><b>  do</b></p><p><b>

85、;  { </b></p><p>  mykey=input(); </p><p>  }  while(mykey==0);</p><p>  return mykey;</p><p><b>  } </b></p><

86、;p>  //------------------------------------------------ </p><p>  //調(diào)用Output和Clearscreen例程向LCD輸出ASCII</p><p>  //------------------------------------------------ </p><p&g

87、t;  void calc_display (char buf[MAX_DISPLAY_CHAR]) </p><p><b>  { </b></p><p>  int data i=0;</p><p>  clearscreen(); </p>

88、<p>  for(i;i<=MAX_DISPLAY_CHAR;i++) </p><p><b>  { </b></p><p>  if(buf[i]!=' ')    output(buf[i]); </p><p><

89、;b>  }</b></p><p><b>  } </b></p><p>  //----------------------calc.h---------------------</p><p><b>  //本例頭文件 </b></p><p>  

90、//-------------------------------------------------</p><p>  typedef unsigned short WORD;</p><p>  typedef unsigned char  BYTE; </p><p>  //-

91、----------------------------------------------- </p><p>  //定義適合屏幕顯示的ASCII字符的最大個(gè)數(shù)</p><p>  //------------------------------------------------</p><p>  #define MAX_DISPLAY_

92、CHAR 9 </p><p>  //------------------------------------------------</p><p><b>  //錯(cuò)誤處理狀態(tài) </b></p><p>  //------------------------------------------------&

93、#160;</p><p>  enum ERROR {OK=0,SLEEP=1,ERROR=2};</p><p>  //------------------------------------------------</p><p><b>  //函數(shù)聲明 </b></p><p>

94、  //------------------------------------------------</p><p>  void calc_evaluate(); </p><p>  void calc_opfunctions  (char token); </p><p>  char&

95、#160;calc_testkey  (char ch); </p><p>  long calc_asciidec  (char *buffer);</p><p>  char *calc_decascii  (long num);</p><p

96、>  int calc_chkerror  (long num);</p><p>  void calc_output  (int status);</p><p>  char calc_getkey(); </p><p>  void calc

97、_display(char buf[MAX_DISPLAY_CHAR]); </p><p>  void initialise();</p><p>  char input(); </p><p>  char output(char ch);</p><p>  vo

98、id clearscreen; </p><p>  //---------------------------lcd.c-------------------------</p><p>  //單行液晶顯示程序 </p><p>  //------------------------------------------------

99、--------- </p><p>  #include<reg51.h></p><p>  #include<absacc.h> </p><p>  #define uchar unsigned char </p><p>  #define 

100、;LCD_CMD_WR      0x00</p><p>  #define LCD_DATA_WR    0x01</p><p>  #define LCD_BUSY_RD     0x02</p>&

101、lt;p>  #define LCD_DATA_RD     0x03</p><p>  #define LCD_PAGE        0x80 </p><p>  #define LCD_CLS &

102、#160;          1</p><p>  #define LCD_HOME           2</p><p>  #define LCD_SET

103、MODE        4 </p><p>  #define LCD_SETVISIBLE     8</p><p>  #define LCD_SHIFT      

104、;   16 </p><p>  #define LCD_SETFUNCTION   32</p><p>  #define LCD_SETCGADDR     64</p><p>  #define LCD_S

105、ETDDADDR    128</p><p>  sbit bflag=ACC^7;//忙標(biāo)志位 </p><p>  void wrcmd(uchar); </p><p>  void output(char);</p><p>  void

106、60;busywait(); </p><p>  //------------------------------------------------</p><p><b>  //初始化LCD </b></p><p>  //----------------------------------------------

107、-- </p><p>  void initialise() </p><p><b>  { </b></p><p>  wrcmd(0x30);   //1行8位</p><p>  wrcmd(LCD_SETVISIBLE+4); 

108、 //顯示開(kāi),關(guān)光標(biāo)  </p><p>  wrcmd(LCD_SETDDADDR+15);  //從右邊開(kāi)始顯示 </p><p>  wrcmd(LCD_SETMODE+3);     //  遞增左移</p><p><b&

109、gt;  } </b></p><p>  //------------------------------------------------</p><p>  //清屏并將顯示位置起點(diǎn)設(shè)置在最右邊</p><p>  //------------------------------------------------ </

110、p><p>  void clearscreen()</p><p><b>  {</b></p><p>  wrcmd(LCD_CLS);  </p><p>  wrcmd(LCD_SETDDADDR+15);  </p><p><b&

111、gt;  } </b></p><p>  //------------------------------------------------</p><p>  //向LCD寫命令 </p><p>  //------------------------------------------------</p>&l

112、t;p>  void wrcmd(uchar cmd)</p><p><b>  { </b></p><p>  uchar volatile pdata *p=LCD_CMD_WR; </p><p>  P2=LCD_PAGE; </p>

113、<p><b>  *p=cmd;</b></p><p>  //上面三行可用下面的代碼替換 </p><p>  //XBYTE[0x8000]=cmd; </p><p>  busywait(); } </p><p>  //-----------------

114、-------------------------------</p><p>  //向LCD寫一個(gè)字符 </p><p>  //------------------------------------------------</p><p>  void output(char ch)</p><p>&l

115、t;b>  {</b></p><p>  char volatile pdata *p=LCD_DATA_WR; </p><p>  P2=LCD_PAGE; </p><p><b>  *p=ch; </b></p><p>  //上

116、面三行可用下面的代碼替換 </p><p>  //XBYTE[0x8001]=ch; </p><p>  busywait();</p><p><b>  } </b></p><p>  //----------------------------------------------

117、--</p><p><b>  //忙等待 </b></p><p>  //------------------------------------------------</p><p>  void busywait()</p><p><b>  { </b>

118、</p><p>  uchar volatile pdata *p=LCD_BUSY_RD; </p><p>  P2=LCD_PAGE;  </p><p>  //上面兩行可改成:</p><p>  //uchar volatile pdata 

119、;*p=0x8002; </p><p><b>  Do</b></p><p><b>  { </b></p><p><b>  ACC=*p; </b></p><p>  } while(bflag==1);</p>

120、;<p>  //上述所有代碼也可用以下代碼替換</p><p><b>  /* </b></p><p><b>  do </b></p><p><b>  {  </b></p><p>  ACC=XBYTE[0

121、x8002];</p><p>  }  while(bflag==1);  </p><p><b>  */</b></p><p><b>  } </b></p><p>  //------------------keypad.c-----

122、-------------- </p><p>  //鍵盤掃描函數(shù)char input();返回按鍵的ASCII碼</p><p>  //---------------------------------------------</p><p>  #include<reg51.h> </p><p&

123、gt;  #include<intrins.h>  </p><p>  char code keycodes[]=</p><p><b>  {</b></p><p>  '7','8','9','/',</p>

124、<p>  '4','5','6','*',</p><p>  '1','2','3','-', </p><p>  'C','0','=','+' </p

125、><p><b>  }; </b></p><p>  char data keyflags[16]; </p><p>  //------------------------------------------------</p><p>  //獲取鍵盤按鍵子程序 &

126、lt;/p><p>  //------------------------------------------------</p><p>  char input()</p><p><b>  { </b></p><p>  char *pKeyflag=keyflags; &

127、#160;    //標(biāo)識(shí)按鍵指針 </p><p>  char RowAddr=0xef;                     //鍵盤行

128、地址1110 1111 </p><p>  char ColData=0;                        //列數(shù)據(jù) 

129、</p><p>  char i,j,Tmp=0; </p><p>  for(i=0;i<4;i++) </p><p><b>  {  </b></p><p>  P2=RowAddr;   //在P2端口設(shè)置行地址

130、0; </p><p>  _nop_();  </p><p>  Tmp=P1&0x0f;  //從P1端口讀取列數(shù)據(jù)  </p><p>  for(j=0;j<4;j++)  </p><p><b>  { &

131、#160; </b></p><p>  ColData=Tmp;      //保存當(dāng)前列數(shù)據(jù)    </p><p>  if((Tmp&0x01)==0x00)   //如果有鍵按下  </p>

132、<p><b>  {   </b></p><p>  Tmp=*pKeyflag;</p><p>  *pKeyflag=1;               //標(biāo)識(shí)按鍵&

133、#160;   </p><p>  if(Tmp==0)                     //有新按鍵按下    </p

134、><p><b>  {     </b></p><p>  P2=0xff;    </p><p>  return keycodes[pKeyflag-keyflags];</p><p><b>  }&#

135、160;  </b></p><p><b>  }  </b></p><p>  else *pKeyflag=0;   </p><p>  pKeyflag++;   </p><p>  T

136、mp=ColData>>1;  </p><p><b>  } </b></p><p>  RowAddr<<=1;</p><p><b>  } </b></p><p><b>  P2=0xff; <

溫馨提示

  • 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)論