單片機課程設(shè)計---數(shù)字時鐘的設(shè)計_第1頁
已閱讀1頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  單片機課程設(shè)計---數(shù)字時鐘的設(shè)計</p><p>  摘要: 近年來隨著計算機在社會領(lǐng)域的滲透和大規(guī)模集成電路的發(fā)展,單片機的應用正在不斷地走向深入,由于它具有功能強,體積小,功耗低,價格便宜,工作可靠,使用方便等特點,因此特別適合于與控制有關(guān)的系統(tǒng),越來越廣泛地應用于自動控制,智能化儀器,儀表,數(shù)據(jù)采集,軍工產(chǎn)品以及家用電器等各個領(lǐng)域,單片機往往是作為一個核心部件來使用,在根據(jù)具體硬件結(jié)

2、構(gòu),以及針對具體應用對象特點的軟件結(jié)合,以作完善。</p><p>  本次做的數(shù)字鐘是以單片機(AT89C51)為核心,結(jié)合相關(guān)的元器件(共陰極LED數(shù)碼顯示器等)再配以相應的軟件,達到制作簡易數(shù)字鐘的目的,其硬件部分難點在于元器件的選擇、布局及焊接。</p><p>  正文: 本設(shè)計的構(gòu)想:通過單片機控制數(shù)字時鐘,將時間顯示在LED數(shù)碼管上。通過按鍵來顯示執(zhí)行個部分的功能,比如調(diào)時、

3、秒表、鬧鐘等。</p><p>  本設(shè)計的工作原理如下:在單片機最小系統(tǒng)的基礎(chǔ)上,使用I/O口連接按鍵、LED數(shù)碼管。通過單片機定時器中斷來獲取比較準確的時間。本程序中用定時器中斷0,TOMD=0x01,每1ms產(chǎn)生一次中斷,所以對定時器所裝的初值:TH0 = (65536-1000)/256,TL0 = (65536-1000)%256。然后在主函數(shù)中執(zhí)行初始化函數(shù)、按鍵函數(shù),顯示函數(shù),來實現(xiàn)所設(shè)計的數(shù)字時鐘

4、的功能。</p><p><b>  實驗的原來圖如下:</b></p><p><b>  實驗的流程圖如下:</b></p><p><b>  功能介紹:</b></p><p>  開機時,顯示00-00-00的時間開始計時。最上面的led發(fā)光二極管亮一秒滅一秒。<

5、;/p><p>  按鍵“選擇”。當?shù)谝淮伟聪聲r,最上面的led發(fā)光二極管不再亮滅閃爍,計數(shù)器停止工作,同時顯示調(diào)時的發(fā)光二極管會亮,此時按下按鍵“加加”,可以實現(xiàn)秒的加。第二次按下“選擇”按鍵時,按按鍵“加加”可以實現(xiàn)分的加。第三次按下“選擇”按鍵時,按按鍵“加加”可以實現(xiàn)時的加。第四次按下“選擇”按鍵時,會變成秒表的顯示,同時計數(shù)器開始工作,最上面的led發(fā)光二極管發(fā)生亮滅閃爍,顯示調(diào)時的發(fā)光二極管會滅,顯示秒表

6、的發(fā)光二極管會亮。按按鍵“加加”可以實現(xiàn)秒表的工作,再按“加加”,秒表停止工作,再按“加加”,秒表清零。第五次按下“選擇”按鍵時,數(shù)碼管顯示定鬧鐘的功能。顯示秒表的發(fā)光二極管會滅,顯示鬧鐘的發(fā)光二極管會亮。按按鍵“加加”可以實現(xiàn)鬧鐘分的調(diào)整。第六次按下“選擇”按鍵時,按鍵“加加”可以實現(xiàn)鬧鐘時的調(diào)整。第六次按下“選擇”按鍵時,顯示鬧鐘的發(fā)光二極管會滅。</p><p>  通過上面,定鬧鐘完成后,我們按下“鬧鐘開

7、啟”按鍵,當?shù)竭_定時時間時,鬧鐘會發(fā)出蜂鳴聲,同時數(shù)碼管顯示“HELLO-_-”字樣,蜂鳴聲可持續(xù)一分鐘,當然我們也可以通過“鬧鐘開啟”按鍵關(guān)掉鬧鐘。</p><p><b>  參考文獻:</b></p><p>  趙亮,侯國瑞,《單片機C語音編程與實例》,人民郵電出版社,2003年九月第一版。</p><p>  閻石,《數(shù)字電路基礎(chǔ)》,

8、高等教育出版社,1997年第四版</p><p>  吳金戌,沈慶陽,郭廷杰,《8051單片機實踐與應用》,清華大學出版社</p><p>  《單片機接口技術(shù)》 胡漢才 高等教育出版社</p><p><b>  程序示例:</b></p><p>  #include <reg52.h></p&

9、gt;<p>  #define uchar unsigned char;</p><p>  #define uint unsigned int;</p><p>  uchar code talbe[] = {0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//

10、數(shù)碼管顯示</p><p>  uchar code table[] = {0x76,0x79,0x38,0x38,0x3f,0x01,0x08,0x01};</p><p>  uchar code weii[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};</p><p>  uchar code wei[] = {

11、0x7f,0xbf,0xdb,0xef,0xf7,0xdb,0xfd,0xfe}; //數(shù)碼管的位選</p><p>  int a[8],b[8],c[8]; // 定義a[8]時間,b[8]秒表,c[8] 鬧鐘的定時</p><p>  uint tt,ttm,i,x,y,z,key_state1,flag_mode,key_state2,flag_jia;</p>

12、<p>  int shi,fen,miao,m_shi,m_fen,m_miao,n_shi,n_fen,n_miao;//定義時間秒表鬧鐘顯示變量</p><p>  sbit k_mode = P1^0;//定義設(shè)置開關(guān)</p><p>  sbit k_jia = P1^1;//定義加加開關(guān)</p><p>  sbit k_naozhong =

13、 P1^2;//定義鬧鐘按鍵開關(guān)</p><p>  sbit button = P1^7;// 鬧鐘的輸出控制端</p><p>  sbit shan = P1^3; //led亮一秒滅一秒</p><p>  sbit tiaos = P1^4; //當調(diào)整時間時此控制的led亮</p><p>  sbit miaob = P1^

14、5; //當用到秒表時此控制的led亮</p><p>  sbit dings = P1^6;//當定鬧鐘時間時此控制的led亮</p><p>  void init(); //聲明初始化函數(shù)</p><p>  void diaplay(); //聲明顯示函數(shù)</p><p>  void delay(z);

15、//聲明延遲函數(shù)</p><p>  void key(); //聲明按鍵函數(shù)</p><p>  void naozhong(); //聲明鬧鐘函數(shù)</p><p>  /***主函數(shù)***/</p><p>  void main() //主函數(shù)</p><p><b>  {</b

16、></p><p><b>  init ();</b></p><p><b>  while (1)</b></p><p><b>  {</b></p><p>  if (tt%2 == 0) //每2ms掃描一次按鍵</p><p>&

17、lt;b>  {</b></p><p><b>  key ();</b></p><p><b>  }</b></p><p>  diaplay ();</p><p>  naozhong();</p><p><b>  }</b

18、></p><p><b>  }</b></p><p>  /***初始化函數(shù)***/</p><p>  void init ()</p><p><b>  {</b></p><p><b>  shi = 0;</b></p>

19、;<p><b>  fen = 0;</b></p><p><b>  miao = 0;</b></p><p>  m_shi = 0;</p><p>  m_fen = 0;</p><p>  m_miao = 0;</p><p>  n_shi

20、 = 0;</p><p>  n_fen = 0;</p><p>  n_miao = 0;</p><p><b>  tt = 0;</b></p><p><b>  ttm = 0;</b></p><p>  TMOD = 0x01; //選擇工作模式1&

21、lt;/p><p>  TH0 = (65536-1000)/256;//給定時器裝初值</p><p>  TL0 = (65536-1000)%256;</p><p>  EA = 1; //打開總中斷</p><p>  ET0 = 1; //打開定時器/計數(shù)器0</p><p>  TR0 =

22、1; //開始計數(shù)</p><p><b>  }</b></p><p>  /***中斷1***/</p><p>  void time () interrupt 1</p><p><b>  {</b></p><p>  TH0 = (65536-1000

23、)/256; //重裝初值 </p><p>  TL0 = (65536-1000)%256;</p><p><b>  tt++;</b></p><p>  if (flag_mode == 4) //當變量flag_mode=4時,運行秒表程序</p><p><b>  {</b>

24、;</p><p>  if (flag_jia == 1)</p><p><b>  {</b></p><p><b>  ttm ++;</b></p><p>  if (ttm == 10)</p><p><b>  { </b></

25、p><p><b>  ttm = 0;</b></p><p><b>  m_miao++;</b></p><p>  if (m_miao == 100)</p><p><b>  { </b></p><p>  m_miao = 0;</

26、p><p><b>  m_fen ++;</b></p><p>  if (m_fen == 60)</p><p><b>  { </b></p><p>  m_fen = 0;</p><p><b>  m_shi ++;</b></p&

27、gt;<p>  if (m_shi == 24)</p><p><b>  { </b></p><p>  m_shi = 0;</p><p><b>  }</b></p><p><b>  }</b></p><p><

28、b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (flag_jia == 2)</p><p><b>  {</b></p><p>  ttm++; tt

29、m--;</p><p><b>  }</b></p><p>  if (flag_jia == 3)</p><p><b>  {</b></p><p>  flag_jia = 0;</p><p>  m_shi = 0;</p><p>

30、;  m_fen = 0;</p><p>  m_miao = 0;</p><p><b>  ttm = 0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (tt == 1000

31、) </p><p>  { shan =! shan;</p><p><b>  tt = 0;</b></p><p><b>  miao++;</b></p><p>  if (miao == 60)</p><p><b>  { </b&

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

33、= 0;</b></p><p><b>  shi ++;</b></p><p>  if (shi == 24)</p><p><b>  { </b></p><p><b>  shi = 0;</b></p><p><b

34、>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /***顯示函數(shù)

35、***/</p><p>  void diaplay ()</p><p><b>  {</b></p><p>  a[0] = miao%10;</p><p>  a[1] = miao/10;</p><p>  a[2] = 10;</p><p>  a[3

36、] = fen%10;</p><p>  a[4] = fen/10;</p><p>  a[5] = 10;</p><p>  a[6] = shi%10;</p><p>  a[7] = shi/10;</p><p>  b[0] = m_miao%10;</p><p>  b[

37、1] = m_miao/10;</p><p>  b[2] = 10;</p><p>  b[3] = m_fen%10;</p><p>  b[4] = m_fen/10;</p><p>  b[5] = 10;</p><p>  b[6] = m_shi%10;</p><p> 

38、 b[7] = m_shi/10;</p><p>  c[0] = n_miao%10;</p><p>  c[1] = n_miao/10;</p><p>  c[2] = 10;</p><p>  c[3] = n_fen%10;</p><p>  c[4] = n_fen/10;</p>

39、<p>  c[5] = 10;</p><p>  c[6] = n_shi%10;</p><p>  c[7] = n_shi/10;</p><p>  for (i = 0;i<8;i++)</p><p><b>  {</b></p><p>  if (button

40、 == 1)//鬧鐘時顯示 hello-_-</p><p><b>  { </b></p><p>  P2 = weii[i];</p><p>  P0 = table[i];</p><p><b>  }</b></p><p><b>  else&

41、lt;/b></p><p><b>  {</b></p><p>  if (flag_mode == 4) //當flag_mode=4時顯示秒表</p><p><b>  {</b></p><p>  miaob = 0;dings = 1;tiaos = 1;</

42、p><p>  P2 = wei[i];</p><p>  P0 = talbe[b[i]];</p><p><b>  }</b></p><p>  else if(flag_mode==5||flag_mode==6)//當flag_mode=5或flag_mode=6時顯示定時數(shù)值</p><

43、;p><b>  {</b></p><p>  dings = 0;miaob =1;tiaos = 1;</p><p>  P2 = wei[i];</p><p>  P0 = talbe[c[i]];</p><p><b>  }</b></p><p>

44、  else //其他時候顯示時間</p><p><b>  {</b></p><p>  miaob = 1;dings = 1;</p><p>  P2 = wei[i];</p><p>  P0 = talbe[a[i]];</p><p><b>

45、  }</b></p><p><b>  }</b></p><p><b>  delay(4);</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /***

46、延遲函數(shù)***/</p><p>  void delay (z)</p><p><b>  {</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  }</b>&l

47、t;/p><p>  /***按鍵函數(shù)***/</p><p>  void key()</p><p><b>  {</b></p><p>  switch (key_state1)//設(shè)置按鍵程序的編寫</p><p><b>  {</b></p>&l

48、t;p>  case 0:if(k_mode == 0)</p><p>  key_state1 = 1;</p><p><b>  break;</b></p><p>  case 1:if(k_mode ==0)</p><p>  key_state1 = 2;</p><p>

49、<b>  break; </b></p><p>  case 2:if(k_mode == 1)</p><p>  key_state1 = 3;</p><p><b>  break; </b></p><p>  case 3:if(k_mode == 1)</p><

50、;p>  key_state1 = 4;</p><p><b>  break;</b></p><p>  case 4:flag_mode ++;</p><p>  key_state1 = 0;</p><p><b>  break; </b></p><p

51、><b>  }</b></p><p>  switch (key_state2)//加加按鍵程序的編寫</p><p><b>  {</b></p><p>  case 0:if(k_jia == 0)</p><p>  key_state2 = 1;</p><

52、;p><b>  break;</b></p><p>  case 1:if(k_jia == 0)</p><p>  key_state2 = 2;</p><p><b>  break; </b></p><p>  case 2:if(k_jia == 1)</p>

53、<p>  key_state2 = 3;</p><p><b>  break; </b></p><p>  case 3:if(k_jia == 1)</p><p>  key_state2 = 4;</p><p><b>  break;</b></p><

54、;p>  case 4:flag_jia ++;</p><p>  key_state2 = 0;</p><p><b>  break; </b></p><p><b>  } </b></p><p>  switch (flag_mode) //調(diào)整時間,秒表,鬧鐘<

55、;/p><p><b>  {</b></p><p>  case 1:TR0 = 0; tiaos = 0; //設(shè)置按鍵為1時,計數(shù)停止</p><p>  if (flag_jia == 1) //此時加加按鍵按下時秒加1</p><p><b>  {</b></p>&l

56、t;p><b>  miao++;</b></p><p>  if (miao == 60)</p><p><b>  {</b></p><p><b>  miao = 0;</b></p><p><b>  }</b></p>

57、<p>  flag_jia = 0;</p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 2: if (flag_jia == 1) //設(shè)置按鍵為2時,如果加加按鍵被按下分加1</p><p><b>

58、;  {</b></p><p><b>  fen++;</b></p><p>  if (fen == 60)</p><p><b>  {</b></p><p><b>  fen = 0;</b></p><p><b&g

59、t;  }</b></p><p>  flag_jia = 0;</p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 3: if (flag_jia == 1) //設(shè)置按鍵為3時,如果加加按鍵被按下分加1</

60、p><p><b>  {</b></p><p><b>  shi++;</b></p><p>  if (shi == 24)</p><p><b>  {</b></p><p><b>  shi = 0;</b><

61、/p><p><b>  }</b></p><p>  flag_jia = 0;</p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 4: TR0 = 1;break; //設(shè)置按

62、鍵為4時,時間調(diào)整完成,計數(shù)器開始工作</p><p>  case 5: if (flag_jia == 1) //設(shè)置按鍵為5時,如果加加按鍵被按下,鬧鐘的秒加1</p><p><b>  {</b></p><p><b>  n_fen ++;</b></p><p>  if (n

63、_fen == 60) </p><p><b>  {</b></p><p>  n_fen = 0;</p><p><b>  }</b></p><p>  flag_jia = 0; </p><p><b>  }</b>&l

64、t;/p><p><b>  break;</b></p><p>  case 6: if (flag_jia == 1) //設(shè)置按鍵為6時,如果加加按鍵被按下,鬧鐘的分加1</p><p><b>  {</b></p><p><b>  n_shi ++;</b>&l

65、t;/p><p>  if (n_shi == 24) </p><p><b>  {</b></p><p>  n_shi = 0;</p><p><b>  }</b></p><p>  flag_jia = 0; </p><p&g

66、t;<b>  }</b></p><p><b>  break;</b></p><p>  case 7: TR0 = 1;</p><p>  flag_mode = 0;</p><p><b>  break;</b></p><p>&l

67、t;b>  }</b></p><p><b>  }</b></p><p>  /***鬧鐘函數(shù)***/</p><p>  void naozhong()</p><p><b>  {</b></p><p>  if (k_naozhong ==

68、0 && shi==n_shi && fen==n_fen)</p><p><b>  {</b></p><p>  button = 1;</p><p><b>  }</b></p><p>  else button = 0;</p><

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論