課程設(shè)計(jì)---多功能秒表_第1頁(yè)
已閱讀1頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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è)計(jì)思路和方案3</p><p>  三、硬件電路設(shè)計(jì)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è)計(jì)3</p><p>  1、主程序流程及說(shuō)明3</p><p>  2、鍵盤(pán)掃描函數(shù)流程及說(shuō)明3</p><p>  3、中斷服務(wù)子

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

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

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

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

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

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

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:讀寫(xiě)選擇端,連P3.6;</p><p>  LCDEN:使能端,連P3.4</p><

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

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

13、有鍵按下;2、按鍵識(shí)別;3、按鍵消抖;4、按鍵是否松開(kāi)。流程圖如下所示</p><p>  3、中斷服務(wù)子程序流程及說(shuō)明</p><p>  定時(shí)器0用于控制時(shí)間模塊,定時(shí)器1用于控制控制秒表,均工作于方式一,50ms中斷一次。每個(gè)中斷子程序中均要放入時(shí)間顯示函數(shù),實(shí)新時(shí)間。定時(shí)器1要同時(shí)完成倒計(jì)時(shí)和計(jì)時(shí)的功能。所以要設(shè)置一個(gè)中間變量。每次進(jìn)入中斷時(shí),對(duì)中間變量的值進(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"; //初始化時(shí)間</p><p>  uint mbtime[10];</p><p>  void delay(uint z) //ms延時(shí)函數(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>  /************北京時(shí)間模塊************/</p><p>  void write_

20、com(uchar com) //1602寫(xiě)指令</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寫(xiě)數(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、//第一行用來(lái)顯示秒表,初始化為"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++)//第二行顯示北京時(shí)間,初始時(shí)間為"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;//定時(shí)器的初始化,兩個(gè)定時(shí)器均工作在方式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) //時(shí)間模塊修改時(shí)間

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); //先寫(xiě)入地址</p>

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

34、t;b>  {</b></p><p>  if(s1==0) //移動(dòng)光標(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)停在時(shí)鐘位</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; //重新計(jì)時(shí)</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); //把地址重新寫(xiě)會(huì)秒位</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) //秒表寫(xiě)時(shí)間</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;//對(duì)時(shí)間進(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) //因?yàn)樵阪I盤(pán)掃描和中斷函數(shù)中都要調(diào)用寫(xiě)函數(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() //秒表鍵盤(pán)掃描函數(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)//計(jì)時(shí)開(kāi)始</p><p><b>  {</b></p><p><b>  TR1=1;</b></p><p><b>  }</b></p>&

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

57、 //設(shè)置只能存10組時(shí)間</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;//自動(dòng)顯示存儲(chǔ)的

60、時(shí)間</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);//加這條延時(shí),否則LCD可能會(huì)花屏</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; //計(jì)數(shù)清零</p><p><b>  i=0;</b></p><p>  j=0; //清空數(shù)組中儲(chǔ)存的時(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)//倒計(jì)時(shí)函數(shù)</p><p><b>  {</b></p><p><b>  num--;</b></p><p>  if(num==0)//計(jì)時(shí)時(shí)間到</p><p><b>  {</b><

79、/p><p>  TR1=0; //定時(shí)器停止</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>  五、使用功能說(shuō)明書(shū)</b></p><p>&

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

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論