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

下載本文檔

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

文檔簡介

1、<p><b>  1 概述</b></p><p>  1.1 總體設(shè)計方案</p><p>  先進(jìn)行系統(tǒng)板的基本焊接,即先將晶振電路和復(fù)位電路焊接完成。然后對秒表的功能進(jìn)行總體的設(shè)計和規(guī)劃,列寫出程序的綱要,規(guī)劃好I/O口的控制對象。再進(jìn)行外圍電路的設(shè)計,根據(jù)安排好的I/O口的使用,設(shè)計出合理的電路圖,并進(jìn)行最后的焊接。最后,根據(jù)自己的總體設(shè)計和規(guī)

2、劃進(jìn)行軟件設(shè)計。</p><p>  1.2 硬件設(shè)計與焊接</p><p>  最小系統(tǒng)版是現(xiàn)成的套件,只要焊接時細(xì)心一點(diǎn)基本不會出錯,而數(shù)碼管一般是由P0和P2口控制,或者由P0口加鎖存器控制,這也不需要自己過多的去設(shè)計,只要焊接時仔細(xì)一點(diǎn),一般也不會出錯。在這個秒表中,最重要的就是獨(dú)立按鍵的設(shè)計和焊接,因為,如果設(shè)計不合理,就很有可能造成秒表的操作不便或者是計時誤差增大。我認(rèn)為,按

3、鍵2控制外部中斷0是最優(yōu)選擇。</p><p>  1.3 軟件設(shè)計方案</p><p>  將各個功能以模塊化的形式設(shè)計出來,當(dāng)然,要先寫主體,編譯通過并下載入實(shí)驗板功能可以實(shí)現(xiàn)后再添加其他功能模塊,然后再編譯下載,一步一步直至完成所有功能。</p><p>  軟件設(shè)計要比硬件設(shè)計復(fù)雜很多,出現(xiàn)的問題也多。小問題一大堆,。在設(shè)計中,我遇到的最大的兩個問題就是存

4、儲時間的數(shù)組定義和減小按鍵存數(shù)時產(chǎn)生的誤差。剛開始我存儲時間數(shù)組定義為code型,結(jié)果不能用設(shè)置的時間變量賦值,在網(wǎng)上找了好久才發(fā)現(xiàn)問題所在,只能將code去掉;最初存儲時間數(shù)值的按鍵只是一個單純的按鍵,結(jié)果發(fā)現(xiàn)按鍵按下期間秒表是停止的,最后只得將該功能用外部中斷來實(shí)現(xiàn),并且將其設(shè)置為下降沿觸發(fā),這樣就大大減少了誤差。</p><p>  2 系統(tǒng)總體方案及硬件設(shè)計</p><p>  2

5、.1 硬件總體設(shè)計</p><p>  1)單片機(jī)選型:AT89S51</p><p>  2)復(fù)位電路:上電+按鈕</p><p><b>  3)晶振電路</b></p><p>  4)鍵盤:獨(dú)立鍵盤+中斷</p><p>  5)數(shù)碼管顯示:LED</p><p>

6、;<b>  6)獨(dú)立按鍵控制</b></p><p><b>  原理圖如下:</b></p><p>  2.2 單片機(jī)基本電路設(shè)計</p><p>  1)復(fù)位電路:上電+按鈕</p><p><b>  2)晶振電路</b></p><p>&

7、lt;b>  3)EA處理</b></p><p><b>  4)電源設(shè)計</b></p><p><b>  原理圖如下:</b></p><p>  2.3 秒表時間顯示電路設(shè)計</p><p>  2.4 獨(dú)立按鍵電路設(shè)計</p><p>  2

8、.5 蜂鳴器電路設(shè)計</p><p><b>  3 軟件設(shè)計</b></p><p>  3.1 程序設(shè)計思路</p><p>  利用定時器經(jīng)確定時,并且利用隨機(jī)存儲區(qū)的有限空間,定義一個二維數(shù)組,通過按鍵將時間數(shù)值賦給數(shù)組(實(shí)踐證明,隨機(jī)存儲器內(nèi)最多只能存儲30組時間數(shù)值),然后在秒表停止或在數(shù)組存滿的情況下將所存的時間數(shù)值讀出。當(dāng)然

9、,也需要通過按鍵來讀取不同時間數(shù)值,并且使用按鍵來控制秒表的開始、停止與清零。</p><p>  附加項目:1)按鍵每按下一次,蜂鳴器聲響50毫秒或100毫秒;</p><p>  2)在秒表啟動時,第二段數(shù)碼管小點(diǎn)亮0.5毫秒,滅0.5毫秒;</p><p>  3)在秒表啟動和讀取所存時間數(shù)值時,由于只有四段數(shù)碼管,不可能將分,秒,毫秒同時顯示,所以在秒表啟動

10、時,當(dāng)時間小于60秒時,數(shù)碼管顯示秒和毫秒,而大于60秒時則顯示分和秒;在讀取所存時間數(shù)值時,采用“點(diǎn)”作標(biāo)志位,第二段數(shù)碼管的“點(diǎn)”亮表示顯示的是秒和毫秒,而第四段的數(shù)碼管的“點(diǎn)”亮則表示的是分和秒。</p><p>  3.2 秒表程序構(gòu)成</p><p> ?。ň唧w程序參見附1)</p><p>  3.2.1主程序(main函數(shù))</p>&

11、lt;p>  程序的初始入口,不斷調(diào)用各個子程序,程序的骨架。</p><p>  3.2.2秒表啟動存數(shù)程序(keeptime函數(shù))</p><p>  用以處理分,秒和毫秒之間的聯(lián)系。</p><p>  3.2.3讀取所存數(shù)值處理程序(showtime函數(shù))</p><p>  用以讀取處理所存時間數(shù)值并加以處理。</p&g

12、t;<p>  3.2.4數(shù)碼管顯示程序</p><p>  1)秒表啟動時顯示程序(display函數(shù)):確定顯示數(shù)值,將顯示數(shù)值分為個位、十位、百位、千位,分別查表顯示。</p><p>  2)讀取所存時間數(shù)值顯示程序(display2函數(shù)):調(diào)取數(shù)組值賦給該函數(shù),確定顯示數(shù)值,將將其分為個、十、百、千位,分別查表顯示。</p><p>  3)

13、所存時間數(shù)值序號顯示程序(display3函數(shù)):用以顯示所存時間的序號,以便于區(qū)分。</p><p>  3.2.5按鍵掃描程序</p><p>  1)掃描按鍵1(scankey1函數(shù))</p><p>  用于停止秒表或所存時間數(shù)值清零。</p><p>  2)掃描按鍵2(exter0函數(shù))</p><p> 

14、 用以觸發(fā)外部中斷0,觸發(fā)方式為下降沿觸發(fā),盡量降低了存儲時間數(shù)值時引起的誤差。</p><p>  3)掃描按鍵3(scankey3函數(shù))</p><p>  用于所存時間數(shù)值的序號加一。</p><p>  4)掃描按鍵3(scankey4函數(shù))</p><p>  用于所存時間數(shù)值的序號減一。</p><p> 

15、 3.2.6延時程序(delay函數(shù))</p><p>  用于延時z*1毫秒。 </p><p>  3.3 源程序代碼見附1。</p><p><b>  4 實(shí)驗仿真</b></p><p>  單片機(jī)學(xué)習(xí)中我們使用proteus做仿真,該軟件的優(yōu)點(diǎn)是可以搭建單片機(jī)的常用仿真電路,并且可以利用豐富的外設(shè)器件,如數(shù)

16、碼管,LCD,按鍵,傳感器,A/D,D/A等,實(shí)現(xiàn)與實(shí)際系統(tǒng)板運(yùn)行相接近的效果,即可以完成系統(tǒng)級的調(diào)試。</p><p>  使用Proteus 軟件進(jìn)行單片機(jī)系統(tǒng)仿真設(shè)計, 是虛擬仿真技術(shù)和計算機(jī)多媒體技術(shù)相結(jié)合的綜合運(yùn)用,有利于培養(yǎng)學(xué)生的電路設(shè)計能力及仿真軟件的操作能力;在單片機(jī)課程設(shè)計中,我們使用 Proteus 開發(fā)環(huán)境學(xué)習(xí),在不需要硬件投入的條件下,對單片機(jī)的學(xué)習(xí)比單純學(xué)習(xí)書本知識更容易接受,更容易提高

17、。實(shí)踐證明,在使用 Proteus 進(jìn)行系統(tǒng)仿真開發(fā)成功之后再進(jìn)行實(shí)際制作,能極大提高單片機(jī)系統(tǒng)設(shè)計效率。</p><p>  Proteus仿真軟件可以看做是構(gòu)建了一個特殊的單片機(jī)系統(tǒng), 只要將所寫程序的HEX文件導(dǎo)入該單片機(jī)系統(tǒng),就可以讓它一句句的執(zhí)行所寫的指令,也可以讓它與Keil實(shí)現(xiàn)聯(lián)調(diào),程序有問題可以隨時改,幫助快速調(diào)試程序。</p><p>  Proteus仿真軟件的應(yīng)用,使

18、我們在沒有硬件開銷的情況下,更快更好的接觸到單片機(jī)的開發(fā)和應(yīng)用,并且方便了程序的調(diào)試。</p><p>  Proteus仿真圖參見——附2 系統(tǒng)原理圖。</p><p><b>  5 設(shè)計體會</b></p><p>  經(jīng)過這六周的單片機(jī)實(shí)訓(xùn),自己有很多的心得體會,我接觸單片機(jī)程序設(shè)計將近有一年了,第一次接觸是跟著電氣開發(fā)部一起學(xué)習(xí),其實(shí)

19、當(dāng)時也沒學(xué)到太多內(nèi)容,只是懂得了一點(diǎn)皮毛而已。</p><p>  而現(xiàn)在做一個相對自己水平來說功能較強(qiáng)的實(shí)物,這使我在實(shí)踐中對單片機(jī)的理解又加深了不少,而且,在這個課程設(shè)計中,讓我真真切切感受到收獲的喜悅。在做的過程中,我遇到了很多問題,通過自己的努力,比如上網(wǎng)查資料,去圖書館借書,或者請教高年級的同學(xué),都把他們一一解決了,成功后的喜悅給了我莫大學(xué)好單片機(jī)的信心和動力。</p><p>

20、  單片機(jī)對于我們電專業(yè)的學(xué)生來說是一門很重要的學(xué)科,老師和一些畢業(yè)的學(xué)長都說,如果學(xué)好單片機(jī),就憑這門技術(shù)找一個好工作不成問題。盡管我們在課堂上學(xué)到的內(nèi)容有限,但在以后還要好好的學(xué)習(xí)單片機(jī)。最后感謝老師對我們的精心指導(dǎo)和幫助,感謝同學(xué)們對我的幫助。</p><p>  下面我就來談?wù)勎覀€人的幾點(diǎn)體會:</p><p>  1. 在設(shè)計程序時,不能妄想一次就將整個程序設(shè)計好,“反復(fù)修改,不

21、斷改進(jìn)”是程序設(shè)計的必經(jīng)之路。</p><p>  2. 要養(yǎng)成注釋程序的好習(xí)慣,一個程序的完美與否不僅僅是實(shí)現(xiàn)功能,而應(yīng)該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便。</p><p>  3. 在設(shè)計程序過程中遇到問題是很正常的,但我們應(yīng)該將每次遇到的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題。</p><p>  4. 在設(shè)計程序時,將

22、自己的程序分成一個模塊一個模塊來寫,先寫程序的主體,編譯沒錯誤后再往上添加其他功能模塊,添加一個功能模塊就編譯一次,并下載到單片機(jī)里查看是否有錯誤,等成功后再依次添加其他模塊直至完成所有功能。</p><p><b>  參考文獻(xiàn)</b></p><p>  【1】 賈宗璞,許合利.C語言程序設(shè)計:中國礦業(yè)大學(xué)出版社,2007</p><p>

23、  【2】 靳孝峰,王艷.單片機(jī)的原理與應(yīng)用,北京:北京航空航天大學(xué)大學(xué)出版社2009</p><p>  【3】 康華光.電子技術(shù)基礎(chǔ)(模擬部分)(第五版).北京:高等教育出版社,2006.</p><p><b>  附1:源程序代碼</b></p><p>  #include<reg52.h></p><

24、p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  sbit buz=P3^0;</p><p>  sbit key1=P3^1;</p><p>  sbit key2=P3^2;</p><p>  sb

25、it key3=P3^3;</p><p>  sbit key4=P3^4;</p><p>  uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p>  uchar bank[30][3]={0};</p><p>  uchar

26、min,sec,msec,aa,bb,cc,dd,ee,ff;</p><p>  uchar tab=0,tab1=0,i,j;</p><p>  uint tab3;</p><p>  void display(uchar qian,uchar bai,uchar shi,uchar ge);</p><p>  void displ

27、ay2(uchar qian,uchar bai,uchar shi,uchar ge,uchar qq);</p><p>  void display3(uchar shi,uchar ge);</p><p>  void delay(uint);</p><p>  void scankey1();</p><p>  void sc

28、ankey3();</p><p>  void scankey4();</p><p>  void keeptime();</p><p>  void showtime();</p><p>  void init()//初始化子程序</p><p><b>  {</b></p&

29、gt;<p>  for(i=0;i<30;i++)</p><p>  for(j=0;j<3;j++)</p><p>  bank[i][j]=0;</p><p><b>  P3=0xff;</b></p><p><b>  min=0;</b></p&

30、gt;<p><b>  sec=0;</b></p><p><b>  msec=0;</b></p><p>  TMOD=0X01;</p><p>  TH0=(65536-10000)/256;</p><p>  TL0=(65536-10000)%256;</p&

31、gt;<p><b>  EA=1;</b></p><p><b>  EX0=1;</b></p><p><b>  IT0=1;</b></p><p><b>  ET0=1;</b></p><p><b>  TR0=

32、tab1;</b></p><p><b>  tab=0;</b></p><p><b>  tab3=1;</b></p><p><b>  i=0;</b></p><p><b>  } </b></p><

33、p>  void main()//主函數(shù)</p><p><b>  {</b></p><p><b>  init();</b></p><p><b>  while(1)</b></p><p><b>  {</b></p>

34、<p>  scankey1();</p><p>  if(tab1==1)</p><p>  keeptime();</p><p><b>  else</b></p><p>  showtime();</p><p><b>  }</b&

35、gt;</p><p><b>  }</b></p><p>  void display(uchar qian,uchar bai,uchar shi,uchar ge)//顯示子程序1,用于秒表走動時顯示</p><p><b>  {</b></p><p><b>  P2=0

36、xfe;</b></p><p>  P0=table[qian];</p><p><b>  delay(1);</b></p><p><b>  P0=0;</b></p><p><b>  P2=0xfd;</b></p><p>

37、;  if(tab<=50)</p><p>  P0=table[bai]|0x80;</p><p>  else P0=table[bai];</p><p><b>  delay(1);</b></p><p><b>  P0=0;</b></p><p>

38、<b>  P2=0xfb;</b></p><p>  P0=table[shi];</p><p><b>  delay(1);</b></p><p><b>  P0=0;</b></p><p><b>  P2=0xf7;</b></p

39、><p>  P0=table[ge];</p><p><b>  delay(1);</b></p><p><b>  P0=0;</b></p><p><b>  }</b></p><p>  void display2(uchar qian,

40、uchar bai,uchar shi,uchar ge,uchar qq)//顯示子程序2,顯示所存時間</p><p><b>  {</b></p><p><b>  P2=0xfe;</b></p><p>  P0=table[qian];</p><p><b>  dela

41、y(1);</b></p><p><b>  P0=0;</b></p><p><b>  P2=0xfd;</b></p><p><b>  if(qq==0)</b></p><p>  P0=table[bai]|0x80;</p><

42、;p>  else P0=table[bai];</p><p><b>  delay(1);</b></p><p><b>  P0=0;</b></p><p><b>  P2=0xfb;</b></p><p>  P0=table[shi];</p&g

43、t;<p><b>  delay(1);</b></p><p><b>  P0=0;</b></p><p><b>  P2=0xf7;</b></p><p><b>  if(qq==1)</b></p><p>  P0=tab

44、le[ge]|0x80;</p><p>  else P0=table[ge];</p><p><b>  delay(1);</b></p><p><b>  P0=0;</b></p><p><b>  }</b></p><p>  vo

45、id display3(uchar shi,uchar ge)//顯示子程序3,顯示存儲時間的序號</p><p><b>  {</b></p><p><b>  P2=0xfb;</b></p><p>  P0=table[shi];</p><p><b>  delay(1

46、);</b></p><p><b>  P0=0;</b></p><p><b>  P2=0xf7;</b></p><p>  P0=table[ge];</p><p><b>  delay(1);</b></p><p><

47、;b>  P0=0;</b></p><p><b>  }</b></p><p>  void keeptime()//秒表記時函數(shù)</p><p><b>  {</b></p><p><b>  msec=tab;</b></p>

48、<p>  aa=msec%10;</p><p>  bb=msec/10;</p><p>  cc=sec%10;</p><p>  dd=sec/10;</p><p>  ee=min%10;</p><p>  ff=min/10;</p><p>  if(tab==1

49、00)</p><p><b>  {</b></p><p><b>  tab=0;</b></p><p><b>  sec++;</b></p><p><b>  }</b></p><p>  if(sec==60)&

50、lt;/p><p><b>  {</b></p><p><b>  sec=0;</b></p><p><b>  min++;</b></p><p><b>  }</b></p><p>  if(min==59)</

51、p><p><b>  {</b></p><p><b>  tab1=0;</b></p><p><b>  TR0=tab1;</b></p><p><b>  }</b></p><p>  if(min==0)</p

52、><p>  display(dd,cc,bb,aa);</p><p>  if(min!=0)</p><p>  display(ff,ee,dd,cc);</p><p><b>  }</b></p><p>  void showtime()//存儲時間調(diào)出顯示函數(shù)</p>

53、<p><b>  {</b></p><p><b>  uchar pp;</b></p><p>  pp=(tab3-1)/2;</p><p>  scankey3();</p><p>  scankey4();</p><p>  aa=bank[

54、pp][0]%10;</p><p>  bb=bank[pp][0]/10;</p><p>  cc=bank[pp][1]%10;</p><p>  dd=bank[pp][1]/10;</p><p>  ee=bank[pp][2]%10;</p><p>  ff=bank[pp][2]/10;</

55、p><p>  if(bank[0][0]==0)</p><p>  display(0,0,0,0);</p><p><b>  else</b></p><p><b>  {</b></p><p>  if(tab3%2==1)</p><p>

56、;  display3((pp+1)/10,(pp+1)%10);</p><p>  if(tab3%2==0)</p><p><b>  {</b></p><p>  if(bank[pp][2]==0)</p><p>  display2(dd,cc,bb,aa,0);</p><p>

57、;  if(bank[pp][2]!=0)</p><p>  display2(ff,ee,dd,cc,1);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p&g

58、t;  void scankey1()//檢測按鍵1是否被按下</p><p><b>  {</b></p><p>  if(key1==0)</p><p><b>  {</b></p><p><b>  delay(8);</b></p><

59、p>  if(key1==0)</p><p><b>  {</b></p><p>  if(tab1==1)</p><p><b>  {</b></p><p><b>  tab1=0;</b></p><p>  TR0=tab1;

60、 </p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  init();</b></p><p><b>  }

61、</b></p><p><b>  buz=0;</b></p><p>  delay(100);</p><p><b>  buz=1;</b></p><p>  while(key1!=1);</p><p><b>  delay(8);&

62、lt;/b></p><p>  while(key1!=1);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void scankey3()/

63、/檢測按鍵3是否被按下</p><p><b>  {</b></p><p>  if(key3==0)</p><p><b>  {</b></p><p><b>  delay(8);</b></p><p>  if(key3==0)<

64、/p><p><b>  {</b></p><p>  if((tab3<60)&&(tab1==0))</p><p><b>  tab3++; </b></p><p><b>  buz=0;</b></p><p>  d

65、elay(100);</p><p><b>  buz=1;</b></p><p>  while(key3!=1);</p><p><b>  delay(8);</b></p><p>  while(key3!=1);</p><p><b>  }&l

66、t;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void scankey4()//檢測按鍵4是否被按下</p><p><b>  {</b></p><p>  if(key4=

67、=0)</p><p><b>  {</b></p><p><b>  delay(8);</b></p><p>  if(key4==0)</p><p><b>  {</b></p><p>  if((tab3>1)&&

68、;(tab1==0))</p><p><b>  tab3--; </b></p><p><b>  buz=0;</b></p><p>  delay(100);</p><p><b>  buz=1;</b></p><p>  while

69、(key4!=1);</p><p><b>  delay(8);</b></p><p>  while(key4!=1);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }&l

70、t;/b></p><p>  void delay(uint z)//延時函數(shù)</p><p><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(

71、y=110;y>0;y--);</p><p><b>  }</b></p><p>  void exter0() interrupt 0 //外部中斷0函數(shù)</p><p><b>  {</b></p><p>  delay(10);</p><p>

72、;  if((key2==0)&&(i<30))</p><p><b>  { </b></p><p>  if(tab1==0)</p><p><b>  {</b></p><p><b>  tab1=1;</b></p>&

73、lt;p><b>  TR0=tab1;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  j=0;</b><

74、/p><p>  bank[i][j++]=msec;</p><p>  bank[i][j++]=sec;</p><p>  bank[i][j]=min;</p><p><b>  i++;</b></p><p><b>  }</b></p><

75、p><b>  buz=0;</b></p><p>  delay(50);</p><p><b>  buz=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

76、;  void timer0() interrupt 1//定時器中斷0函數(shù)</p><p><b>  {</b></p><p>  TH0=(65536-10000)/256;</p><p>  TL0=(65536-10000)%256;</p><p><b>  tab++;</b&g

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論