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

下載本文檔

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

文檔簡介

1、<p><b>  題目:多功能秒表</b></p><p><b>  目錄</b></p><p>  一、課題任務(wù)及要求3</p><p><b>  1、課題任務(wù)3</b></p><p><b>  2、課題要求3</b><

2、/p><p>  二、設(shè)計思路和方案3</p><p>  三、硬件電路設(shè)計3</p><p><b>  1、原件清單3</b></p><p><b>  2、硬件原理圖3</b></p><p>  2.1 按鍵電路圖3</p><p> 

3、 2.2 單片機(jī)電路圖3</p><p>  2.3 1602模塊電路圖3</p><p>  2.4 總電路圖3</p><p>  四、軟件系統(tǒng)設(shè)計3</p><p>  1、主程序流程及說明3</p><p>  2、鍵盤掃描函數(shù)流程及說明3</p><p>  3、中斷服務(wù)子

4、程序流程及說明3</p><p>  4、程序清單及注釋3</p><p>  五、使用功能說明書3</p><p><b>  1、功能描述3</b></p><p><b>  2、操作指南3</b></p><p>  六、課程設(shè)計心得體會3</p&g

5、t;<p><b>  一、課題任務(wù)及要求</b></p><p><b>  1、課題任務(wù)</b></p><p>  設(shè)計一電子秒表,并具有顯示,基本操作功能。</p><p><b>  2、課題要求</b></p><p>  1)設(shè)計可以顯示0.1—10

6、0s的秒表,最小單位為毫秒</p><p>  2)通過按鍵控制秒表清零、暫停、繼續(xù)、退出等功能</p><p><b>  3)具有倒計時功能</b></p><p>  4)秒表可以分組存儲,批量顯示</p><p><b>  5)顯示北京時間</b></p><p>

7、  6)可利用蜂鳴器添加提示音</p><p><b>  二、設(shè)計思路和方案</b></p><p>  本課題初步可分為兩個模塊,時間模塊和秒表模塊。由于實驗板上的數(shù)碼管只有6位,所以決定采用1602液晶進(jìn)行顯示。利用矩陣鍵盤作為外圍控制,但是因為實驗板上的矩陣鍵盤和LCD都接在了P3口,所以能夠利用的按鍵個數(shù)很少,導(dǎo)致部分功能如秒表時間調(diào)節(jié)無法完成。</p

8、><p><b>  三、硬件電路設(shè)計</b></p><p><b>  1、原件清單</b></p><p><b>  2、硬件原理圖</b></p><p><b>  2.1 按鍵電路圖</b></p><p>  實驗板上有

9、一組4*4的矩陣鍵盤和4個獨(dú)立按鍵,本課題中是使用了矩陣鍵盤中的一列和一個獨(dú)立按鍵。獨(dú)立按鍵的一端與P3.7相連,另一端接地。矩陣按鍵分別與P3.0-P3.3相連,另一端接P3.6。</p><p>  2.2 單片機(jī)電路圖</p><p>  外部晶振的頻率為11.0592MHz,復(fù)位電路采用的是手動復(fù)位電路。P0口與10K的排阻相連作為上拉電阻,驅(qū)動1602LCD.P2.3用于驅(qū)動蜂鳴

10、器。</p><p>  2.3 1602模塊電路圖</p><p>  1602的D0-D7為數(shù)據(jù)口,與單片機(jī)的P0口相連。</p><p>  RS:數(shù)據(jù)/命令選擇端,連P3.5;</p><p>  RW:讀寫選擇端,連P3.6;</p><p>  LCDEN:使能端,連P3.4</p><

11、p><b>  2.4 總電路圖</b></p><p><b>  四、軟件系統(tǒng)設(shè)計</b></p><p>  1、主程序流程及說明</p><p>  主程序中主要進(jìn)行LCD和定時器的初始化以及鍵盤掃描并執(zhí)行相應(yīng)的操作。</p><p>  LCD初始化:16*2顯示,5*7點(diǎn)陣,8位數(shù)

12、據(jù)接口,不顯示光標(biāo),執(zhí)行寫操作后地址指針加一。</p><p>  定時器初始化:定時器0、1工作于方式一,50ms中斷一次</p><p>  2、鍵盤掃描函數(shù)流程及說明</p><p>  鍵盤應(yīng)該完成以下幾個功能:北京時間的調(diào)整、秒表開始、暫停、清零、倒計時、顯示存儲時間的。本課程設(shè)計中采用的是矩陣鍵盤的獨(dú)立式鍵盤。鍵盤掃描程序中應(yīng)該注意以下幾個問題:1、是否

13、有鍵按下;2、按鍵識別;3、按鍵消抖;4、按鍵是否松開。流程圖如下所示</p><p>  3、中斷服務(wù)子程序流程及說明</p><p>  定時器0用于控制時間模塊,定時器1用于控制控制秒表,均工作于方式一,50ms中斷一次。每個中斷子程序中均要放入時間顯示函數(shù),實新時間。定時器1要同時完成倒計時和計時的功能。所以要設(shè)置一個中間變量。每次進(jìn)入中斷時,對中間變量的值進(jìn)行判斷,執(zhí)行相應(yīng)的操作

14、。</p><p><b>  4、程序清單及注釋</b></p><p>  #include<reg52.h></p><p>  #define uchar unsigned char </p><p>  #define uint unsigned int</p><p>  

15、sbit dula=P2^6;</p><p>  sbit wela=P2^7;</p><p>  sbit rs=P3^5;</p><p>  sbit lcden=P3^4;</p><p>  sbit wr=P3^6;</p><p>  sbit s1=P3^0;</p>

16、<p>  sbit s2=P3^1;</p><p>  sbit s3=P3^2;</p><p>  sbit s4=P3^3;</p><p>  sbit s5=P3^7;</p><p>  sbit beep=P2^3;</p><p>  uchar count,count1,s1num,

17、mbnum,i,j,count2,mbnum1;</p><p>  uint num,num1;</p><p>  char miao,shi,fen;</p><p>  uchar code table[]=" 000.0";</p><p>  uchar code table1[]=" 0

18、0:00:00"; //初始化時間</p><p>  uint mbtime[10];</p><p>  void delay(uint z) //ms延時函數(shù)</p><p><b>  {</b></p><p><b>  uint x,y;</b>

19、;</p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  }</b></p><p>  /************北京時間模塊************/</p><p>  void write_

20、com(uchar com) //1602寫指令</p><p><b>  {</b></p><p><b>  rs=0;</b></p><p><b>  lcden=0;</b></p><p><b>  P0=com;</b>

21、</p><p><b>  delay(5);</b></p><p><b>  lcden=1;</b></p><p><b>  delay(5);</b></p><p><b>  lcden=0;</b></p><p

22、><b>  }</b></p><p>  void write_date(uchar date)//1602寫數(shù)據(jù)</p><p><b>  {</b></p><p><b>  rs=1;</b></p><p><b>  lcden=

23、0;</b></p><p><b>  P0=date;</b></p><p><b>  delay(5);</b></p><p><b>  lcden=1;</b></p><p><b>  delay(5);</b></p

24、><p><b>  lcden=0;</b></p><p><b>  }</b></p><p>  void init()//初始化函數(shù)</p><p><b>  {</b></p><p>  uchar num;<

25、/p><p><b>  dula=0;</b></p><p><b>  wela=0;</b></p><p><b>  lcden=0;</b></p><p>  write_com(0x38);</p><p>  write_

26、com(0x0c); </p><p>  write_com(0x06);</p><p>  write_com(0x01); //以上幾條是1602的初始化設(shè)置</p><p>  write_com(0x80); </p><p>  for(num=0;num<9;num++)

27、//第一行用來顯示秒表,初始化為"000.0s"</p><p><b>  {</b></p><p>  write_date(table[num]);</p><p><b>  delay(5);</b></p><p><b>  }</b>

28、;</p><p>  write_com(0x80+0x40);</p><p>  for(num=0;num<12;num++)//第二行顯示北京時間,初始時間為"00:00:00"</p><p><b>  {</b></p><p>  write_date(table1[nu

29、m]);</p><p><b>  delay(5);</b></p><p>  } </p><p>  TMOD=0x11;//定時器的初始化,兩個定時器均工作在方式1</p><p>  TH0=(65536-45872)/256;</p><p> 

30、 TL0=(65536-45872)%256;</p><p>  TH1=(65536-45872)/256;</p><p>  TL1=(65536-45872)%256; //50ms中斷一次</p><p><b>  EA=1;</b></p><p><b>  ET0=1;<

31、;/b></p><p><b>  ET1=1;</b></p><p><b>  TR0=1;</b></p><p><b>  }</b></p><p>  void write_sfm(uchar add,uchar date) //時間模塊修改時間

32、函數(shù)</p><p><b>  {</b></p><p>  uchar shi,ge;</p><p>  shi=date/10;</p><p>  ge=date%10;</p><p>  write_com(0x80+0x40+add); //先寫入地址</p>

33、;<p>  write_date(0x30+shi); </p><p>  write_date(0x30+ge); //再寫入數(shù)據(jù)</p><p><b>  }</b></p><p>  void keyscan() //鍵盤掃描函數(shù)</p><p>&l

34、t;b>  {</b></p><p>  if(s1==0) //移動光標(biāo)部分</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p><b>  if(s1==0)</b></

35、p><p><b>  {</b></p><p><b>  s1num++;</b></p><p>  while(!s1);</p><p><b>  }</b></p><p>  if(s1num==1)//光標(biāo)停在秒位</

36、p><p><b>  {</b></p><p><b>  TR0=0;</b></p><p>  write_com(0x80+0x40+10);</p><p>  write_com(0x0f); //顯示光標(biāo),并且閃爍</p><p><b> 

37、 }</b></p><p>  if(s1num==2) //光標(biāo)停在分鐘位</p><p><b>  {</b></p><p>  write_com(0x80+0x40+7);</p><p><b>  }</b></p><p>  i

38、f(s1num==3) //光標(biāo)停在時鐘位</p><p><b>  {</b></p><p>  write_com(0x80+0x40+4);</p><p><b>  }</b></p><p>  if(s1num==4) </p><p

39、><b>  {</b></p><p><b>  s1num=0;</b></p><p>  write_com(0x0c); //關(guān)閉光標(biāo)</p><p>  TR0=1; //重新計時</p><p><b>  }</b></p&g

40、t;<p><b>  }</b></p><p>  if(s1num!=0)</p><p><b>  {</b></p><p><b>  if(s2==0)</b></p><p><b>  {</b></p&

41、gt;<p><b>  delay(5);</b></p><p><b>  if(s2==0)</b></p><p><b>  {</b></p><p>  while(!s2);</p><p>  if(s1num==1) //調(diào)節(jié)秒

42、鐘位</p><p><b>  {</b></p><p><b>  miao++;</b></p><p>  if(miao==60)</p><p><b>  miao=0;</b></p><p>  write_sfm(10,miao);

43、</p><p>  write_com(0x80+0x40+10); //把地址重新寫會秒位</p><p><b>  }</b></p><p>  if(s1num==2)</p><p><b>  {</b></p><p><b>  fen++

44、;</b></p><p>  if(fen==60)</p><p><b>  fen=0;</b></p><p>  write_sfm(7,fen);</p><p>  write_com(0x80+0x40+7);</p><p><b>  }</b&g

45、t;</p><p>  if(s1num==3)</p><p><b>  {</b></p><p><b>  shi++;</b></p><p>  if(shi==24)</p><p><b>  shi=0;</b></p>

46、<p>  write_sfm(4,shi);</p><p>  write_com(0x80+0x40+4);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><

47、;p><b>  }</b></p><p><b>  }</b></p><p>  /************秒表模塊********/</p><p>  void write_mb(uint date) //秒表寫時間</p><p><b>  {</b

48、></p><p>  uint qian,bai,shi,ge;</p><p>  qian=date/1000;</p><p>  bai=date%1000/100;</p><p>  shi=date%100/10;</p><p>  ge=date%10;//對時間進(jìn)行分位&l

49、t;/p><p>  write_com(0x80+4);</p><p>  write_date(0x30+qian);</p><p>  write_date(0x30+bai);</p><p>  write_date(0x30+shi);</p><p>  write_date(table[7]);<

50、/p><p>  write_date(0x30+ge);</p><p><b>  }</b></p><p>  void write_mb1(uint date) //因為在鍵盤掃描和中斷函數(shù)中都要調(diào)用寫函數(shù),此處重載</p><p><b>  {</b></p><p&g

51、t;  uint qian,bai,shi,ge;</p><p>  qian=date/1000;</p><p>  bai=date%1000/100;</p><p>  shi=date%100/10;</p><p>  ge=date%10;</p><p>  write_com(0x80+4);&l

52、t;/p><p>  write_date(0x30+qian);</p><p>  write_date(0x30+bai);</p><p>  write_date(0x30+shi);</p><p>  write_date(table[7]);</p><p>  write_date(0x30+ge);&l

53、t;/p><p><b>  }</b></p><p>  void keyscan1() //秒表鍵盤掃描函數(shù)</p><p><b>  {</b></p><p><b>  if(s3==0)</b></p><p><b&g

54、t;  {</b></p><p><b>  delay(5);</b></p><p><b>  if(s3==0)</b></p><p><b>  {</b></p><p>  while(!s3);</p><p><

55、b>  mbnum++;</b></p><p>  if(mbnum==1)//計時開始</p><p><b>  {</b></p><p><b>  TR1=1;</b></p><p><b>  }</b></p>&

56、lt;p>  else if(mbnum==2) //計時暫停</p><p><b>  {</b></p><p><b>  j++;</b></p><p>  mbtime[i++]=num; //存儲暫停的時間</p><p>  if(i==10)

57、 //設(shè)置只能存10組時間</p><p><b>  i=0;</b></p><p><b>  TR1=0;</b></p><p><b>  mbnum=0;</b></p><p><b>  }</b></p><p&

58、gt;<b>  }</b></p><p><b>  }</b></p><p><b>  if(s4==0)</b></p><p><b>  {</b></p><p><b>  delay(5);</b></p&

59、gt;<p><b>  if(s4==0)</b></p><p><b>  {</b></p><p>  while(!s4);</p><p><b>  count2++;</b></p><p>  TR1=0;//自動顯示存儲的

60、時間</p><p>  if(count2==1)</p><p><b>  {</b></p><p>  for(i=0;i<j;i++)</p><p><b>  {</b></p><p>  write_mb1(mbtime[i]);</p>

61、<p>  delay(1000);//加這條延時,否則LCD可能會花屏</p><p>  write_com(0x80+4);</p><p>  delay(1000);</p><p><b>  }</b></p><p>  i=0; </p>

62、<p><b>  j=0;</b></p><p><b>  }</b></p><p>  if(count2==2)//清零</p><p><b>  {</b></p><p><b>  count2=0;</b>&

63、lt;/p><p><b>  num=0;</b></p><p>  write_mb1(0);</p><p>  write_com(0x80+4);</p><p>  delay(2000);</p><p><b>  }</b></p><p&

64、gt;<b>  }</b></p><p><b>  }</b></p><p><b>  if(s5==0)</b></p><p><b>  {</b></p><p><b>  delay(5);</b></p&

65、gt;<p><b>  if(s5==0)</b></p><p><b>  {</b></p><p>  while(!s5);</p><p><b>  mbnum1++;</b></p><p>  if(mbnum1==1)</p>

66、<p><b>  TR1=1;</b></p><p>  if(mbnum1==2)</p><p><b>  {</b></p><p><b>  TR1=0;</b></p><p>  beep=1; //蜂鳴器關(guān)閉</p>&

67、lt;p>  mbnum1=0; //計數(shù)清零</p><p><b>  i=0;</b></p><p>  j=0; //清空數(shù)組中儲存的時間</p><p><b>  }</b></p><p><b>  }</b></p>

68、<p><b>  } </b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p><b>  wela=0;</b></p><

69、p><b>  dula=0; </b></p><p><b>  wr=0;</b></p><p><b>  init();</b></p><p><b>  while(1)</b></p><p><b>  {</b

70、></p><p>  keyscan();</p><p>  keyscan1();</p><p><b>  }</b></p><p><b>  }</b></p><p>  void timer0() interrupt 1</p><

71、;p><b>  {</b></p><p>  TH0=(65536-45872)/256;</p><p>  TL0=(65536-45872)%256;</p><p><b>  count++;</b></p><p>  if(count==20) </p

72、><p><b>  {</b></p><p><b>  count=0;</b></p><p><b>  miao++;</b></p><p>  if(miao==60)</p><p><b>  {</b></p

73、><p><b>  miao=0;</b></p><p><b>  fen++;</b></p><p>  if(fen==60)</p><p><b>  {</b></p><p><b>  fen=0;</b><

74、/p><p><b>  shi++;</b></p><p>  if(shi==24)</p><p><b>  {</b></p><p><b>  shi=0;</b></p><p><b>  }</b></p&g

75、t;<p>  write_sfm(4,shi);</p><p><b>  }</b></p><p>  write_sfm(7,fen);</p><p><b>  }</b></p><p>  write_sfm(10,miao);</p><p>

76、;<b>  }</b></p><p><b>  }</b></p><p>  void timer1() interrupt 3</p><p><b>  {</b></p><p>  TH1=(65536-45872)/256;</p><p

77、>  TL1=(65536-45872)%256;</p><p><b>  count1++;</b></p><p>  if(count1==2)</p><p><b>  {</b></p><p><b>  count1=0;</b></p>

78、<p>  if(mbnum1==1)//倒計時函數(shù)</p><p><b>  {</b></p><p><b>  num--;</b></p><p>  if(num==0)//計時時間到</p><p><b>  {</b><

79、/p><p>  TR1=0; //定時器停止</p><p>  beep=0;//蜂鳴器響</p><p><b>  }</b></p><p><b>  }</b></p><p>  else </p><

80、;p><b>  {</b></p><p><b>  num++;</b></p><p>  if(num==1001)</p><p><b>  num=0;</b></p><p><b>  }</b></p><p

81、>  write_mb(num);</p><p>  write_com(0x80+4);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  五、使用功能說明書</b></p><p>&

82、lt;b>  1、功能描述</b></p><p>  本作品為多功能秒表,具有秒表的基本功能:計時、暫停、顯示10組計時時間、倒計時、倒計時時間到時,蜂鳴器發(fā)出聲音提醒。同時能顯示北京時間,時間具有調(diào)整功能。</p><p><b>  2、操作指南</b></p><p>  實驗板上,倒數(shù)第二列矩陣鍵盤分別為S1、S2、

83、S3、S4,最后一個獨(dú)立按鍵為S5。</p><p>  S1:按一下,時間停止走動,進(jìn)入調(diào)節(jié)界面。光標(biāo)停在秒鐘位并閃爍。按第二下,光標(biāo)跳動至分鐘位,按第三下,光標(biāo)調(diào)至?xí)r鐘位,按第四下,退出時間調(diào)節(jié),時間恢復(fù)走動。</p><p>  S2:只是時間調(diào)節(jié)下有效,每按一下使相應(yīng)時間位加一。</p><p>  S3:秒表的開始、暫停鍵。</p><

84、p>  S4:自動顯示記錄的計時時間。</p><p>  S5:開始倒計時,倒計時結(jié)束時,蜂鳴器響,再按一下,使蜂鳴器停止。</p><p>  六、課程設(shè)計心得體會</p><p>  通過單片機(jī)課程設(shè)計,加深了我對單片機(jī)知識的理解,對以前的學(xué)習(xí)內(nèi)容有了一個極大的鞏固和提高。同時,將理論和實際相聯(lián)系,提高了自己的動手能力,拓展了有關(guān)C語言編程、相關(guān)電子電路

溫馨提示

  • 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

提交評論