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

下載本文檔

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

文檔簡介

1、<p>  《可調(diào)數(shù)字時鐘課程設(shè)計》</p><p><b>  課</b></p><p><b>  程</b></p><p><b>  設(shè)</b></p><p><b>  計</b></p><p>  課

2、 程: 單片機系統(tǒng)分析與調(diào)試 </p><p>  專 業(yè): 應(yīng)用電子技術(shù) </p><p>  班 級: 電子1033班 </p><p>  姓 名: </p><p>  小組成員:

3、</p><p>  指導(dǎo)老師: </p><p>  2012 年 1 月 6 日</p><p><b>  設(shè)計任務(wù)</b></p><p>  設(shè)計一個8位顯示的電子鐘,有4個按鍵可進(jìn)行時鐘的調(diào)整,帶鬧鐘,具體要求如下。</p><p>  

4、可以顯示時、分、秒。</p><p>  當(dāng)按下菜單鍵后,進(jìn)入時鐘調(diào)整狀態(tài),按下時調(diào)整按鍵,時值加1;按下分調(diào)整按鍵,分值加1;按下秒調(diào)整鍵后,秒加1。當(dāng)再次按下菜單按鍵時,進(jìn)入鬧鐘調(diào)整狀態(tài),按下時調(diào)整按鍵,時值加1;按下分調(diào)整按鍵,分值加1;按下秒調(diào)整鍵后,秒加1。再次按下菜單鍵,電子時鐘進(jìn)入正常工作狀態(tài)。</p><p>  當(dāng)時鐘達(dá)到鬧鐘設(shè)定值時,蜂鳴器發(fā)出“滴滴”響聲。</p

5、><p>  在正常狀態(tài)下,對時、分、秒調(diào)整按鍵不響應(yīng)。</p><p><b>  任務(wù)分析及方案制定</b></p><p><b>  顯示部分</b></p><p>  電子時鐘選用了8合1的共陰極數(shù)碼管,只需要向數(shù)碼管的段位端口發(fā)送要顯示的段碼并發(fā)送相應(yīng)的位碼就可以決定哪一位數(shù)碼管顯示字符。

6、在顯示方式上,采用動態(tài)掃描顯示法。</p><p><b>  計時部分</b></p><p>  要使電子時鐘能精確的進(jìn)行計時顯示,則單片機系統(tǒng)內(nèi)部要求有一個精確的的時鐘信號發(fā)生器??梢詫纹瑱C中的定時器T0設(shè)置成50ms的定時器來實現(xiàn),每20次定時中斷結(jié)束,秒計數(shù)器加1;當(dāng)秒計數(shù)到60時,秒計數(shù)器清零,分計數(shù)器加1;當(dāng)分計數(shù)到60時,分計數(shù)器清零,時計數(shù)器加1;

7、當(dāng)時計數(shù)器到24時,時計數(shù)器清零。</p><p><b>  鬧鐘部分</b></p><p>  能夠設(shè)置鬧鐘值,使蜂鳴器發(fā)出聲音。</p><p><b>  4、調(diào)整部分</b></p><p>  在調(diào)整狀態(tài)下,可以對時鐘,鬧鐘的時、分、秒值進(jìn)行加1處理。</p><p

8、><b>  三、硬件設(shè)計</b></p><p>  電路原理圖如下,段碼信息經(jīng)過74hc573驅(qū)動后發(fā)送到8位數(shù)碼管段選端,同時位選信息經(jīng)過74hc138驅(qū)動后發(fā)送到數(shù)碼管的位選端口。</p><p>  74LC573是8位同相三態(tài)雙向總線收發(fā)器,可雙向傳輸數(shù)據(jù),常用來驅(qū)動LED或者其他電路。當(dāng)8051單片機的P0口總線負(fù)載達(dá)到或超過P0口最大負(fù)載能力時,

9、必須接入74hc573等總線驅(qū)動器加以信號驅(qū)動。</p><p><b>  電路原理圖:</b></p><p><b>  電路仿真圖如下:</b></p><p><b>  軟件設(shè)計</b></p><p>  P3.0口所接按鍵k1為菜單鍵,第一次按下為調(diào)時鐘狀態(tài),第

10、二次按下為調(diào)鬧鐘狀態(tài),P3.1、P3.2、P3.3分別為調(diào)時、調(diào)分、調(diào)秒鍵。</p><p><b>  程序結(jié)構(gòu)流程圖</b></p><p><b>  四、總結(jié)</b></p><p>  首先在做本次課程設(shè)計的過程中,我感觸最深的當(dāng)屬查閱大量的設(shè)計資料了。為了讓自己的設(shè)計更加完善,查閱這方面的設(shè)計資料是十分必要的,

11、同時也是必不可少的。   其次,在這次課程設(shè)計中,我們運用到了以前所學(xué)的專業(yè)課知識,如:C語言、模擬和數(shù)字電路知識等。雖然過去從未獨立應(yīng)用過它們,但在學(xué)習(xí)的過程中帶著問題去學(xué)我發(fā)現(xiàn)效率很高,這是我做這次課程設(shè)計的又一收獲。   最后,在設(shè)計之前,我們要對所用單片機的內(nèi)部結(jié)構(gòu)有一個系統(tǒng)的了解,知道該單片機內(nèi)有哪些資源;要有一個清晰的思路和一個完整的軟件流程圖;在設(shè)計程序時,不能妄想一次就將整個程序設(shè)計好,反復(fù)修改、不斷改進(jìn)是程序設(shè)計的

12、必經(jīng)之路;要養(yǎng)成注釋程序的好習(xí)慣,一個程序的完美與否不僅僅是實現(xiàn)功能,而應(yīng)該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便;在實習(xí)過程中遇到問題是很正常的,但我們應(yīng)該將每次遇到的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題。但是從中學(xué)到的知識會讓我受益終身。發(fā)現(xiàn)、提出、分析、解決問題和實踐能力提高都會受益于我在以后的學(xué)習(xí)、工作和生活中。</p><p><b>  附:程序</

13、b></p><p>  #include"reg52.h"</p><p>  sbit k1=P3^0; //定義P3.0口為菜單鍵k1</p><p>  sbit k2=P3^1; //定義P3.1口為調(diào)時鍵k2</p><p>  sbit k3=P3^2; //定義P3

14、.1口為調(diào)分鍵k3</p><p>  sbit k4=P3^3; //定義P3.1口為調(diào)秒鍵k4</p><p>  sbit P1_7=P1^7; //蜂鳴器接口</p><p>  unsigned char code distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f

15、};//共陰數(shù)碼管斷碼0—9</p><p>  unsigned char hour=12,minute=30,second; //定義時、分、秒為12—30—00</p><p>  unsigned char hour1,minute1,second1; //鬧鐘時、分、秒</p><p>  unsigned char count,m;

16、//全局變量 count計時變量,m菜單鍵被按下次數(shù)</p><p>  void delay(int t) //延時子函數(shù)tS</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  for(i=0;i<t;i++)&

17、lt;/p><p><b>  {</b></p><p>  for(j=0;j<114;j++)</p><p><b>  {;}</b></p><p><b>  }</b></p><p><b>  }</b><

18、;/p><p>  void display() //顯示子函數(shù)</p><p><b>  {</b></p><p><b>  switch(m)</b></p><p><b>  {</b></p><p>  case 0:

19、 //菜單鍵未按下,正常顯示行時</p><p><b>  {</b></p><p>  TR0=1; //開啟定時器</p><p>  P2=0; //數(shù)碼管位碼</p><p>  P0=distab[hour/10]; //顯示時十位</p>

20、;<p><b>  delay(2);</b></p><p><b>  P2=1;</b></p><p>  P0=distab[hour%10]; //顯示時個位</p><p><b>  delay(2);</b></p><p><

21、b>  P2=2;</b></p><p>  P0=0x40; //顯示—</p><p><b>  delay(2);</b></p><p><b>  P2=3;</b></p><p>  P0=distab[minute/10]; //顯示分十位

22、</p><p><b>  delay(2);</b></p><p><b>  P2=4;</b></p><p>  P0=distab[minute%10]; //顯示分個位</p><p><b>  delay(2);</b></p><

23、;p><b>  P2=5;</b></p><p>  P0=0x40; //顯示—</p><p><b>  delay(2);</b></p><p><b>  P2=6;</b></p><p>  P0=distab[second/10];

24、 //顯示秒十位</p><p><b>  delay(2);</b></p><p><b>  P2=7;</b></p><p>  P0=distab[second%10]; //顯示秒個位</p><p><b>  delay(2);</b></

25、p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 1: //菜單鍵按下一次,顯示調(diào)時</p><p><b>  {</b></p><p><b>  P2=0;

26、</b></p><p>  P0=distab[hour/10];</p><p><b>  delay(2);</b></p><p><b>  P2=1;</b></p><p>  P0=distab[hour%10];</p><p><b&g

27、t;  delay(2);</b></p><p><b>  P2=3;</b></p><p>  P0=distab[minute/10];</p><p><b>  delay(2);</b></p><p><b>  P2=4;</b></p&g

28、t;<p>  P0=distab[minute%10];</p><p><b>  delay(2);</b></p><p><b>  P2=6;</b></p><p>  P0=distab[second/10];</p><p><b>  delay(2);&

29、lt;/b></p><p><b>  P2=7;</b></p><p>  P0=distab[second%10];</p><p><b>  delay(2);</b></p><p><b>  }</b></p><p>  bre

30、ak; </p><p>  case 2: //菜單鍵第二次按下,顯示調(diào)鬧鐘</p><p><b>  {</b></p><p>  TR0=0; //關(guān)閉定時器</p><p><b>  P2=0;</b></p>&

31、lt;p>  P0=distab[hour1/10];</p><p><b>  delay(2);</b></p><p><b>  P2=1;</b></p><p>  P0=distab[hour1%10];</p><p><b>  delay(2);</b&g

32、t;</p><p><b>  P2=2;</b></p><p><b>  P0=0x40;</b></p><p><b>  delay(2);</b></p><p><b>  P2=3;</b></p><p>  

33、P0=distab[minute1/10];</p><p><b>  delay(2);</b></p><p><b>  P2=4;</b></p><p>  P0=distab[minute1%10];</p><p><b>  delay(2);</b><

34、/p><p><b>  P2=5;</b></p><p><b>  P0=0x40;</b></p><p><b>  delay(2);</b></p><p><b>  P2=6;</b></p><p>  P0=dis

35、tab[second1/10];</p><p><b>  delay(2);</b></p><p><b>  P2=7;</b></p><p>  P0=distab[second1%10];</p><p><b>  delay(2);</b></p>

36、<p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void timer0_int() //

37、中斷初始化程序</p><p><b>  {</b></p><p>  TMOD=0x01; //采用中斷方式1</p><p>  TH0=0x3c; //寫入數(shù)據(jù)</p><p>  TL0=0xb0; //50ms中斷一次</p><

38、;p>  ET0=1; //允許定時器中斷</p><p>  EA=1; //打開總中斷</p><p>  TR0=1; //開啟定時器</p><p><b>  }</b></p><p>  void timer0() interrupt

39、1 using 1 //中斷服務(wù)程序(定時)</p><p><b>  {</b></p><p>  count++; </p><p>  if(count==20) //中斷20次后,即1秒。</p><p><b>  {</b></p

40、><p>  count=0; //歸零</p><p>  second++; //秒加1</p><p>  if(second==60) //當(dāng)秒達(dá)到60后</p><p><b>  {</b></p><p>  second=0;

41、 //秒歸零</p><p>  minute++; //分加1</p><p>  if(minute==60) //當(dāng)分達(dá)到60后</p><p><b>  {</b></p><p>  minute=0; //分歸零</p><p> 

42、 hour++; //時加1</p><p>  if(hour==24) //當(dāng)達(dá)到24小時后</p><p><b>  {</b></p><p>  hour=0; //時歸零</p><p><b>  }</b></p><p

43、><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(hour1=hour&&minute1==minute&&second1<10) //如果鬧鐘值與時鐘值相等,蜂鳴器蜂鳴1

44、分鐘</p><p><b>  {</b></p><p>  display();</p><p>  P1_7=!P1_7;</p><p><b>  delay(5);</b></p><p><b>  }</b></p>&

45、lt;p><b>  }</b></p><p>  void keyscan() //按鍵掃描子程序</p><p><b>  {</b></p><p>  if(k1==0) //菜單鍵k1去抖</p><p><b>  {<

46、;/b></p><p>  delay(10); </p><p>  if(k1==0) //菜單鍵是否按下</p><p><b>  {</b></p><p>  m++;if(m==3)m=0; //記錄按下次數(shù),3次后歸零</p>&

47、lt;p><b>  }</b></p><p>  while(!k1); //k1是否放開</p><p><b>  }</b></p><p><b>  if(m!=0)</b></p><p><b>  {</b>&

48、lt;/p><p><b>  switch(m)</b></p><p><b>  {</b></p><p>  case 1: //第一次按下菜單鍵,進(jìn)入時間調(diào)整狀態(tài)</p><p>  if(k2==0) //時調(diào)整鍵去抖</p><p

49、><b>  {</b></p><p>  delay(80);</p><p>  if(k2==0) //時調(diào)整鍵是否按下</p><p><b>  {</b></p><p>  hour++;if(hour==24)hour=0; //時自加,到24后歸零&l

50、t;/p><p><b>  }</b></p><p><b>  }</b></p><p>  if(k3==0) //分調(diào)整鍵去抖</p><p><b>  {</b></p><p>  delay(80);</p>

51、<p>  if(k3==0) //分調(diào)整鍵是否按下</p><p><b>  {</b></p><p>  minute++;if(minute==60)minute=0;//分自加,到60后歸零</p><p><b>  }</b></p><p><b

52、>  }</b></p><p>  if(k4==0) //秒調(diào)整鍵去抖</p><p><b>  {</b></p><p>  delay(80);</p><p>  if(k4==0) //秒調(diào)整鍵是否按下</p><p><b

53、>  {</b></p><p>  second++;if(second==60)second=0;//秒自加,到60后歸零</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b>&l

54、t;/p><p>  case 2://第二次按下菜單鍵,進(jìn)入鬧鐘調(diào)整狀態(tài)</p><p>  if(k2==0)//時調(diào)整鍵去抖</p><p><b>  {</b></p><p>  delay(80);</p><p>  if(k2==0)/

55、/時調(diào)整鍵是否按下</p><p><b>  {</b></p><p>  hour1++;if(hour1==24)hour1=0;//時自加,到24后歸零</p><p><b>  }</b></p><p><b>  }</b></p><p

56、>  if(k3==0)//分調(diào)整鍵去抖</p><p><b>  {</b></p><p>  delay(80);</p><p>  if(k3==0)//分調(diào)整鍵是否按下</p><p><b>  {</b></p><p>

57、  minute1++;if(minute1==60)minute1=0;//分自加,到60后歸零</p><p><b>  }</b></p><p>  }//秒調(diào)整鍵去抖</p><p><b>  if(k4==0)</b></p><p><b>  {&l

58、t;/b></p><p>  delay(80);</p><p>  if(k4==0)//秒調(diào)整鍵是否按下</p><p><b>  {</b></p><p>  second1++;if(second1==60)second1=0;//秒自加,到60后歸零</p><p

59、><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p

60、><b>  }</b></p><p>  void main()//主函數(shù)</p><p><b>  {</b></p><p>  timer0_int();//調(diào)入中斷初始化子程序</p><p>  while(1)//主

61、循環(huán)</p><p><b>  {</b></p><p>  keyscan();//調(diào)入按鍵掃描子程序</p><p>  display();//調(diào)入顯示子程序</p><p><b>  }</b></p><p><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

提交評論