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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

8、高等教育出版社,1997年第四版</p><p>  吳金戌,沈慶陽(yáng),郭廷杰,《8051單片機(jī)實(shí)踐與應(yīng)用》,清華大學(xué)出版社</p><p>  《單片機(jī)接口技術(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]時(shí)間,b[8]秒表,c[8] 鬧鐘的定時(shí)</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;//定義時(shí)間秒表鬧鐘顯示變量</p><p>  sbit k_mode = P1^0;//定義設(shè)置開(kāi)關(guān)</p><p>  sbit k_jia = P1^1;//定義加加開(kāi)關(guān)</p><p>  sbit k_naozhong =

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

14、5; //當(dāng)用到秒表時(shí)此控制的led亮</p><p>  sbit dings = P1^6;//當(dāng)定鬧鐘時(shí)間時(shí)此控制的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;//給定時(shí)器裝初值</p><p>  TL0 = (65536-1000)%256;</p><p>  EA = 1; //打開(kāi)總中斷</p><p>  ET0 = 1; //打開(kāi)定時(shí)器/計(jì)數(shù)器0</p><p>  TR0 =

22、1; //開(kāi)始計(jì)數(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) //當(dāng)變量flag_mode=4時(shí),運(yùn)行秒表程序</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)//鬧鐘時(shí)顯示 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) //當(dāng)flag_mode=4時(shí)顯示秒表</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)//當(dāng)flag_mode=5或flag_mode=6時(shí)顯示定時(shí)數(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 //其他時(shí)候顯示時(shí)間</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è)置按鍵程序的編寫(xiě)</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)//加加按鍵程序的編寫(xiě)</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)整時(shí)間,秒表,鬧鐘<

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

最新文檔

評(píng)論

0/150

提交評(píng)論