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

下載本文檔

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

文檔簡介

1、<p><b>  一、概述</b></p><p>  單片機(jī)課程設(shè)計(jì)是一門實(shí)踐課程,要求學(xué)生具有制作調(diào)試單片機(jī)最小系統(tǒng)及外設(shè)的能力,能夠掌握單片機(jī)內(nèi)部資源的使用。</p><p>  單片機(jī)課程設(shè)計(jì)內(nèi)容包括硬件設(shè)計(jì)、制作及軟件編寫、調(diào)試,學(xué)生在熟練掌握焊接技術(shù)的基礎(chǔ)上,能熟練使用單片機(jī)軟件開發(fā)環(huán)境Keil C51編程調(diào)試,并使用STC ISP調(diào)試工具采用

2、串口下載方式聯(lián)調(diào)制作的單片機(jī)最小系統(tǒng)。</p><p>  單片機(jī)課程設(shè)計(jì)題目包含基本部分及擴(kuò)展部分,基本部分即單片機(jī)最小系統(tǒng)部分,擴(kuò)展部分是對單片機(jī)內(nèi)部資源及外部IO口的功能擴(kuò)展,使制作的單片機(jī)系統(tǒng)具有一定的功能。</p><p><b>  二、實(shí)驗(yàn)內(nèi)容</b></p><p>  自制一個單片機(jī)最小系統(tǒng),包括串口下載、復(fù)位電路,采用外部小

3、鍵盤輸入數(shù)據(jù),能夠?qū)崿F(xiàn)加法、乘法及一個科學(xué)計(jì)算,計(jì)算結(jié)果顯示在四位一體的數(shù)碼管上。</p><p><b>  三、硬件設(shè)計(jì)</b></p><p><b>  1 設(shè)計(jì)總體框圖</b></p><p><b>  2 實(shí)際電路</b></p><p><b> ?。?/p>

4、1)復(fù)位電路</b></p><p>  在單片機(jī)系統(tǒng)中,復(fù)位電路是非常關(guān)鍵的,當(dāng)程序跑飛(運(yùn)行不正常)或死機(jī)(停止運(yùn)行)時(shí),就需要進(jìn)行復(fù)位。</p><p>  MCS-5l 系列單片機(jī)的復(fù)位引腳RST( 第9 管腳) 出現(xiàn)2個機(jī)器周期以上的高電平時(shí),單片機(jī)就執(zhí)行復(fù)位操作。如果RST 持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài)。</p><p>  復(fù)位操

5、作通常有兩種基本形式:上電自動復(fù)位和開關(guān)復(fù)位。上電瞬間,電容兩端電壓不能突變,此時(shí)電容的負(fù)極和RESET 相連,電壓全部加在了電阻上,RESET 的輸入為高,芯片被復(fù)位。隨之+5V電源給電容充電,電阻上的電壓逐漸減小,最后約等于0,芯片正常工作。并聯(lián)在電容的兩端為復(fù)位按鍵,當(dāng)復(fù)位按鍵沒有被按下的時(shí)候電路實(shí)現(xiàn)上電復(fù)位,在芯片正常工作后,通過按下按鍵使RST管腳出現(xiàn)高電平達(dá)到手動復(fù)位的效果。一般來說,只要RST 管腳上保持10ms 以上的高

6、電平,就能使單片機(jī)有效的復(fù)位。本次課程設(shè)計(jì)選用開關(guān)復(fù)位電路,設(shè)計(jì)如下:</p><p><b> ?。?)時(shí)鐘電路</b></p><p>  XTAL1(19 腳) :芯片內(nèi)部振蕩電路輸入端。</p><p>  XTAL2(18 腳) :芯片內(nèi)部振蕩電路輸出端。</p><p>  XTAL1 和XTAL2 是獨(dú)立的

7、輸入和輸出反相放大器,它們可以被配置為使用石英晶振的片內(nèi)振蕩器,或者是器件直接由外部時(shí)鐘驅(qū)動。本次課程設(shè)計(jì)采用的是內(nèi)時(shí)鐘模式,即采用利用芯片內(nèi)部的振蕩電路,在XTAL1、XTAL2 的引腳上外接定時(shí)元件(一個石英晶體和兩個電容),內(nèi)部振蕩器便能產(chǎn)生自激振蕩。一般來說晶振可以在1.2 ~ 12MHz 之間任選,甚至可以達(dá)到24MHz 或者更高,但是頻率越高功耗也就越大。在本次課程設(shè)計(jì)采用的11.0592M 的石英晶振。和晶振并聯(lián)的兩個電容

8、的大小對振蕩頻率有微小影響,可以起到頻率微調(diào)作用。當(dāng)采用石英晶振時(shí),電容可以在20 ~ 40pF 之間選擇(本實(shí)驗(yàn)套件使用30pF);當(dāng)采用陶瓷諧振器件時(shí),電容要適當(dāng)?shù)卦龃笠恍?,?0 ~ 50pF 之間。通常選取33pF 的陶瓷電容就可以了。具體電路如下:</p><p> ?。?)EA/VPP(31腳)的功能和接法</p><p>  51 單片機(jī)的EA/VPP(31 腳) 是內(nèi)部和外

9、部程序存儲器的選擇管腳。當(dāng)EA 保持高電平時(shí),單片機(jī)訪問內(nèi)部程序存儲器;當(dāng)EA 保持低電平時(shí),則不管是否有內(nèi)部程序存儲器,只訪問外部存儲器。</p><p>  對于現(xiàn)今的絕大部分單片機(jī)來說,其內(nèi)部的程序存儲器(一般為flash)容量都很大,因此基本上不需要外接程序存儲器,而是直接使用內(nèi)部的存儲器。</p><p>  在本實(shí)驗(yàn)套件中,EA 管腳接到了VCC 上,只使用內(nèi)部的程序存儲器。&

10、lt;/p><p><b> ?。?)鍵盤輸入電路</b></p><p>  在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構(gòu)成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加

11、一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時(shí),采用矩陣法來做鍵盤是合理的。</p><p>  由于本次實(shí)驗(yàn)是制作簡易計(jì)算器,按鍵需求較多,所以輸入設(shè)備選擇為一個矩陣鍵盤,具體電路設(shè)計(jì)如下:</p><p> ?。?)數(shù)碼管顯示電路</p><p>  數(shù)碼管按段數(shù)可分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)

12、碼管多一個發(fā)光二極管單元(多一個小數(shù)點(diǎn)顯示);按能顯示多少個“8”可分為1位、2位、3位、4位、5位、6位、7位等數(shù)碼管。</p><p>  按發(fā)光二極管單元連接方式可分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管,共陽數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就

13、不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽極為高電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陽極為低電平時(shí),相應(yīng)字段就不亮。</p><p>  本次課程設(shè)計(jì)采用共陰數(shù)碼管作為顯示設(shè)備,驅(qū)動芯片采用3態(tài)8位緩沖器芯片,具體型號為SN74LS244N,位選采用4個NPN三極管驅(qū)動,具體型號為S9013,具體電

14、路如下:</p><p><b>  四、軟件設(shè)計(jì)</b></p><p><b>  1 程序內(nèi)容</b></p><p>  本次課程設(shè)計(jì)的程序包括:主程序(實(shí)現(xiàn)乘法,加法,科學(xué)計(jì)算等),延時(shí)子程序,鍵盤掃描子程序,數(shù)碼管顯示子程序。</p><p><b>  2 C語言程序<

15、/b></p><p><b>  見附錄</b></p><p>  五、Protues仿真</p><p><b>  具體仿真圖如下:</b></p><p>  需要說明的是,本次仿真主要檢驗(yàn)程序是否正確,所以省去了復(fù)位電路,晶振電路,電源電路等。因?yàn)樵诜抡嬷羞@些電路沒有不會影響程序的

16、運(yùn)行。這樣可以節(jié)省時(shí)間,避免做些無用功,同時(shí)電路看起來更簡潔,更易理解,把最關(guān)鍵的與程序有關(guān)的電路連接凸顯出來。</p><p><b>  六、設(shè)計(jì)總結(jié)</b></p><p>  在本次課程設(shè)計(jì)中我體會最深刻的就是“理想是豐滿的,現(xiàn)實(shí)是殘酷的”。平常在學(xué)習(xí)中,我們只學(xué)習(xí)了書本上理論的知識,知道原理。具體做起實(shí)物來問題百出!</p><p>

17、  在這次實(shí)驗(yàn)中,困擾我很深的是數(shù)碼管的顯示問題,一直想用三極管來進(jìn)行位選,實(shí)現(xiàn)動態(tài)顯示,但是電路連接好后三極管基極只要給一點(diǎn)電壓(大約超過0.7V左右),集電極和發(fā)射極就導(dǎo)通,從而導(dǎo)致數(shù)碼管一直導(dǎo)通,顯示出數(shù)字8,不受程序控制。剛出現(xiàn)這個問題的時(shí)候,我一直沒找出是軟件還是硬件問題。直到用萬用表測出基極電壓才找出問題。但是我換了基極電阻的大小,最后還是沒有沒有解決問題。</p><p>  最后我改變了硬件電路連

18、接,決定直接把位選接到P2口,這樣雖然亮度沒有原來的強(qiáng),但是由于有驅(qū)動芯片,亮度還是比較滿意,可以滿足要求。這樣就解決了之前的問題。</p><p>  在整個課程設(shè)計(jì)過程中,還遇到了其他的小問題,在這里不一一贅述了。</p><p>  這次課程設(shè)計(jì)題目看起來簡單,但還是從中學(xué)到了些有用的東西。尤其要感謝老師的嚴(yán)格要求,這樣加強(qiáng)了我把這次課程設(shè)計(jì)做好的動力。</p><

19、;p><b>  七、附錄</b></p><p><b>  1 C語言程序:</b></p><p>  #include<reg52.h> //52系列單片機(jī)頭文件</p><p>  #include<math.h></p><p>  #includ

20、e<intrins.h> </p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  #define cheng0</p><p>  #define jia1</p><p>  #def

21、ine kaifang 2</p><p>  sbit wei1=P3^0; //定義4個位選端口</p><p>  sbit wei2=P3^1;</p><p>  sbit wei3=P3^2;</p><p>  sbit wei4=P3^3;</p><p>  uchar code table

22、[]={ //數(shù)碼管編碼</p><p>  0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p><p>  0x7f,0x6f,0x77,0x7c,</p><p>  0x39,0x5e,0x79,0x71};</p><p>  void dela

23、yms(uint);</p><p>  void display(uint shi);</p><p>  uchar keyboard();</p><p>  uchar key_ok=0;</p><p>  uchar num_key=0;//按鍵號 </p><p>  uchar count=0;//按鍵

24、有效標(biāo)識 </p><p>  void main()</p><p><b>  {</b></p><p>  uint a=0,num1=0,num2=0,num3=0,num_count=1;</p><p>  char fuhao=0;</p><p>  //while(1){di

25、splay(456);}</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  a=keyboard();</p><p>  if(key_ok==1)</p><p><b>  {</b>

26、;</p><p><b>  key_ok=0;</b></p><p>  if(count==1&&a<10)</p><p><b>  {</b></p><p>  if(num_count==1)</p><p><b>  nu

27、m1=a*1;</b></p><p><b>  else </b></p><p><b>  num2=a*1;</b></p><p>  if(num_count==3)</p><p>  num_count=1;</p><p><b> 

28、 }</b></p><p>  else if(a<10)</p><p><b>  {</b></p><p>  if(num_count==1)</p><p>  num1=num1*10+a;</p><p><b>  else </b>

29、</p><p>  num2=num2*10+a;</p><p><b>  }</b></p><p><b>  if(a==11)</b></p><p><b>  {</b></p><p><b>  count=0;<

30、/b></p><p>  fuhao=cheng;</p><p>  if(num_count==3)</p><p><b>  {</b></p><p>  num1=num3;</p><p><b>  }</b></p><p>

31、  num_count=2;</p><p><b>  }</b></p><p>  else if(a==12)</p><p><b>  {</b></p><p><b>  count=0;</b></p><p>  fuhao

32、=jia;</p><p>  if(num_count==3)</p><p><b>  {</b></p><p>  num1=num3;</p><p><b>  }</b></p><p>  num_count=2;</p><p&

33、gt;<b>  }</b></p><p>  else if(a==13)</p><p><b>  {</b></p><p><b>  count=0;</b></p><p>  fuhao=kaifang;</p><p>  if(

34、num_count==3)</p><p><b>  {</b></p><p>  num1=num3;</p><p><b>  }</b></p><p>  if(fuhao==kaifang)</p><p>  num3=sqrt(num1);</p&g

35、t;<p>  num1=0;num2=0;</p><p>  num_count=3;</p><p><b>  }</b></p><p>  else if(a==16)</p><p><b>  {</b></p><p><b>

36、;  count=0;</b></p><p>  if(fuhao==cheng)</p><p>  num3=num1*num2;</p><p>  else if(fuhao==jia)</p><p>  num3=num1+num2;</p><p>  num1=0;num2=0;&l

37、t;/p><p>  num_count=3; </p><p><b>  }</b></p><p><b>  }</b></p><p>  if(num_count==1)</p><p>  display(num1);&

38、lt;/p><p>  else if(num_count==2)</p><p>  display(num2);</p><p>  else if(num_count==3)</p><p>  display(num3);</p><p><b>  }</b></p><

39、p><b>  }</b></p><p>  void delayms(int t)</p><p><b>  {</b></p><p><b>  int x,y;</b></p><p>  for(x=0;x<t;x++)</p>

40、<p>  for(y=0;y<t;y++);</p><p><b>  }</b></p><p>  void display(uint a) //顯示子函數(shù)</p><p><b>  {</b></p><p>  uchar qian,bai,shi,ge; <

41、/p><p>  qian=a/1000;</p><p>  bai=a/100%10;</p><p>  shi=a%100/10;</p><p><b>  ge=a%10;</b></p><p>  P1=table[ge];</p><p>  delayms(

42、5); </p><p>  P3=0xf7; </p><p>  delayms(2); </p><p><b>  P3=0xfF;</b></p><p>  delayms(3);</p><p>  if(a>=10)</p><

43、;p><b>  {</b></p><p>  P1=table[shi];</p><p><b>  P3=0xfB;</b></p><p>  delayms(2);</p><p><b>  P3=0xfF;</b></p><p>

44、  delayms(3);</p><p><b>  }</b></p><p>  if(a>=100)</p><p><b>  {</b></p><p>  P1=table[bai];</p><p><b>  P3=0xfD;</b&

45、gt;</p><p>  delayms(2);</p><p><b>  P3=0xff;</b></p><p>  delayms(3);</p><p><b>  }</b></p><p>  if(a>=1000)</p><p&

46、gt;<b>  {</b></p><p>  P1=table[qian];</p><p><b>  P3=0xfE;</b></p><p>  delayms(2);</p><p><b>  P3=0xfF;</b></p><p> 

47、 delayms(3);</p><p><b>  }</b></p><p>  /*不完善的顯示判斷程序,不如上面的好</p><p>  if(a>=1000)</p><p><b>  {</b></p><p>  P3=0xf0;</p>

48、;<p>  P1=table[qian];</p><p>  //wei1=1;</p><p><b>  P3=0xf8;</b></p><p>  delayms(5);</p><p><b>  P3=0xf0;</b></p><p>  

49、P1=table[bai];</p><p><b>  //wei2=1;</b></p><p><b>  P3=0xf4;</b></p><p>  delayms(5);</p><p><b>  P3=0xf0;</b></p><p>

50、  P1=table[shi];</p><p><b>  //wei3=1;</b></p><p><b>  P3=0xf2;</b></p><p>  delayms(5);</p><p><b>  P3=0xf0;</b></p><p&g

51、t;  P1=table[ge];</p><p><b>  //wei4=1;</b></p><p><b>  P3=0XF1;</b></p><p>  delayms(5);</p><p><b>  }</b></p><p>  el

52、se if(a>=100)</p><p><b>  {</b></p><p><b>  wei1=0;</b></p><p>  P1=table[bai];</p><p><b>  wei2=1;</b></p><p>  del

53、ayms(5);</p><p><b>  wei2=0;</b></p><p>  P1=table[shi];</p><p><b>  wei3=1;</b></p><p>  delayms(5);</p><p><b>  wei3=0;<

54、/b></p><p>  P1=table[ge];</p><p><b>  wei4=1;</b></p><p>  delayms(5);</p><p><b>  }</b></p><p>  else if(a>=10)</p>

55、<p><b>  {</b></p><p><b>  wei2=0;</b></p><p>  P1=table[shi];</p><p><b>  wei3=1;</b></p><p>  delayms(5);</p><p>

56、;<b>  wei3=0;</b></p><p>  P1=table[ge];</p><p><b>  wei4=1;</b></p><p>  delayms(5);</p><p><b>  }</b></p><p><b>

57、;  else </b></p><p><b>  {</b></p><p><b>  wei3=0;</b></p><p>  P1=table[ge];</p><p><b>  wei4=1;</b></p><p>  de

58、layms(5);</p><p><b>  }</b></p><p><b>  */</b></p><p><b>  }</b></p><p>  //矩陣鍵盤.無按鍵動作時(shí)其返回值num_key=0,否則返回按鍵號num_key****檢測高四位 </p

59、><p>  unsigned char keyboard() </p><p><b>  { </b></p><p>  // unsigned char num_key=0;//按鍵號 </p><p>  unsigned char temp=0;//讀取P2口線數(shù)據(jù) </p><p&

60、gt;  static unsigned char temp_code=0;//用于保存按鍵值 </p><p>  static unsigned char temp_circle=0xFE;//保存P2線上的循環(huán)掃描值 </p><p>  static unsigned char num_check=0;//低電平計(jì)數(shù) </p><p>  static un

61、signed char key_flag=0;//按鍵有效標(biāo)識 </p><p>  P2=temp_circle;//0xFX </p><p>  temp=P2;//讀取P2口線數(shù)據(jù)</p><p>  if(temp!=temp_circle)//有按鍵動作 </p><p><b>  { </b></p

62、><p>  num_check++;//低電平計(jì)數(shù)|逢低電平加1 </p><p>  if(num_check==5)//連續(xù)10次(10ms)低電平有效 </p><p><b>  { </b></p><p>  key_flag=1;//按鍵有效標(biāo)識置1 </p><p>  temp_c

63、ode=temp;//保存按鍵值 </p><p><b>  } </b></p><p><b>  } </b></p><p>  else//松手OR無按鍵動作,此時(shí)應(yīng)該改變掃描線 </p><p><b>  { </b></p><p> 

64、 num_check=0; </p><p>  if(key_flag==1)//按鍵有效判斷 </p><p><b>  { </b></p><p>  key_flag=0; </p><p><b>  count++;</b></p><p><b>

65、  key_ok=1;</b></p><p>  switch(temp_code)//讀取按鍵號 </p><p><b>  { </b></p><p><b>  //P2^0線 </b></p><p>  case 0xEE: num_key=4; </p>

66、<p><b>  break; </b></p><p>  case 0xDE: num_key=3; </p><p><b>  break; </b></p><p>  case 0xBE: num_key=2; </p><p><b>  break; </

67、b></p><p>  case 0x7E: num_key=1; </p><p><b>  break; </b></p><p><b>  //P2^1線 </b></p><p>  case 0xED: num_key=8; </p><p><b

68、>  break; </b></p><p>  case 0xDD: num_key=7; </p><p><b>  break; </b></p><p>  case 0xBD: num_key=6; </p><p><b>  break; </b></p>

69、;<p>  case 0x7D: num_key=5; </p><p><b>  break; </b></p><p><b>  //P2^2線 </b></p><p>  case 0xEB: num_key=12; </p><p><b>  break;

70、</b></p><p>  case 0xDB: num_key=11; </p><p><b>  break; </b></p><p>  case 0xBB: num_key=0; </p><p><b>  break; </b></p><p>

71、  case 0x7B: num_key=9; </p><p><b>  break; </b></p><p><b>  //P2^3線 </b></p><p>  case 0xE7: num_key=16; </p><p><b>  break; </b>&l

72、t;/p><p>  case 0xD7: num_key=15; </p><p><b>  break; </b></p><p>  case 0xB7: num_key=14; </p><p><b>  break; </b></p><p>  case 0x77

73、: num_key=13; </p><p><b>  break; </b></p><p>  } </p><p><b>  } </b></p><p>  temp_circle=_crol_(temp_circle,1);//改變掃描線 </p>

74、;<p>  if(temp_circle==0xEF) </p><p><b>  { </b></p><p>  temp_circle=0xFE; </p><p><b>  } </b></p><p><b>  } </b></p>

75、<p>  return(num_key);//返回按鍵號 </p><p><b>  } </b></p><p><b>  2焊接電路板實(shí)物圖</b></p><p><b>  3 芯片引腳圖</b></p><p><b>  51單片機(jī)引腳圖

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論