單片機99s倒計時課程設(shè)計_第1頁
已閱讀1頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課 程 設(shè) 計</b></p><p>  課程名稱:__單片機課程設(shè)計 </p><p>  題目名稱:__倒計時器設(shè)計 </p><p>  學(xué)生學(xué)院:_物理與光電工程學(xué)院 </p><p>  專業(yè)班級:_光信息科學(xué)與技術(shù)10(1)班</p>&l

2、t;p>  學(xué) 號:_XXXXXXX_ </p><p>  2012年12月3日</p><p>  摘要·····················&#

3、183;································2</p><p>  

4、一、本設(shè)計任務(wù)、實現(xiàn)方法及完成的功能······················3</p><p>  1、功能要求······

5、3;····································&#

6、183;········3</p><p>  2、實現(xiàn)方法·······················

7、·····························3</p><p>  二、設(shè)計的實現(xiàn)過程 ··

8、····································3<

9、;/p><p>  1、矩陣電路································&#

10、183;···················4</p><p>  2、數(shù)碼顯示和驅(qū)動電路 ··········

11、3;····························4</p><p>  3、復(fù)位電路···&#

12、183;····································

13、··········· 5</p><p>  4、晶振電路····················

14、83;·······························6</p><p>  三、系統(tǒng)的軟件

15、設(shè)計····································&#

16、183;··4</p><p>  1、按鍵掃描函數(shù) ankey()···························&

17、#183;···········4</p><p>  2、動態(tài)數(shù)碼管顯示函數(shù)···················

18、······················5</p><p>  3、初始化函數(shù)設(shè)計·········&

19、#183;···································6

20、 4、中斷函數(shù)設(shè)計···································

21、;···········6四、總體程序························&#

22、183;····················7</p><p>  五、結(jié)束語···········&

23、#183;···································12<

24、;/p><p><b>  倒計時課程設(shè)計 </b></p><p><b>  一:課程設(shè)計的要求</b></p><p><b>  1、功能要求:</b></p><p>  實現(xiàn)最長99S的倒計時功能;利用數(shù)碼管或液晶屏顯示數(shù)字;利用按鍵可以設(shè)置倒計時時間;設(shè)置倒計時開始

25、啟動鍵;時間到,聲(光)報警,示意倒計時時間到。</p><p><b>  2、實現(xiàn)方法:</b></p><p>  單片機采用51系列,分析功能要求,設(shè)計方案,編寫程序(keil c51 軟件),利用Proteus進行仿真。</p><p><b>  二:設(shè)計的實現(xiàn)過程</b></p><p&g

26、t;  proteus仿真下總原理框架圖如下</p><p><b>  接線:</b></p><p>  、XTAL1、XTAL2為晶振接入</p><p>  、RST為清零電路接入</p><p>  、P1口為鍵盤電路接入</p><p>  、P2口為數(shù)碼管的段選</p>

27、<p>  、P3..7為LED的選通</p><p>  、P0.6、P0.7分別為數(shù)碼管的十位、個位的選通</p><p><b>  原件清單:</b></p><p>  AT89C51單片機1個、1k電阻3個、12MHz晶振1個、33pF電容1個、1uF電容1個、10uf的電容一個、獨立按鍵1個、4行3列矩陣按鍵1個、LE

28、D指示燈1個、兩位動態(tài)共陰數(shù)碼管1個、帶9個引腳的上拉電阻1個、電源3個、地若2個</p><p><b>  模塊組成設(shè)計</b></p><p> ?。?)、矩陣鍵盤電路</p><p>  矩陣鍵盤電路原理:以上矩陣采用了4*3的結(jié)構(gòu),通過ankey()子函數(shù)不斷逐行逐行地掃描矩陣鍵盤電路,一旦判斷有按鍵按下立即反饋給倒計時時鐘循環(huán)函數(shù)。

29、</p><p><b>  掃描電路子程序:</b></p><p>  void ankey() //鍵盤掃描</p><p><b>  {</b></p><p>  uchar temp,key;</p><p>  P1=0xef;//第1行</p>

30、<p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;//temp高4位清0;</p><p>  if(temp!=0x0f) //判斷是否有鍵按下</p><p><b>  {</b></p><p>  delayms(10);

31、 //延時,消除抖動</p><p>  if(temp!=0xf0)//判斷是否有鍵按下</p><p><b>  {</b></p><p>  temp=P1; //重新讀取P1口</p><p>  switch(temp)//判斷哪個鍵按下</p><p><b>  {&l

32、t;/b></p><p>  case 0xeb:</p><p><b>  key=1;</b></p><p><b>  break;</b></p><p>  case 0xed:</p><p><b>  key=2;</b>&l

33、t;/p><p><b>  break;</b></p><p>  case 0xee:</p><p><b>  key=3;</b></p><p><b>  break;</b></p><p><b>  }</b>&l

34、t;/p><p>  text(key);</p><p>  while(temp!=0x0f)//判斷按鍵是否釋放</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;<

35、/p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p> ?。?)、數(shù)碼管顯示和驅(qū)動電路</p><p>  數(shù)碼管顯示電路原理:通關(guān)P0.6和P0.7的位選通信號控制數(shù)碼

36、管十位個位的選通,然后通過P2口的段選信號控制數(shù)碼管的顯示數(shù)字。</p><p>  驅(qū)動電路:屬于上拉電阻,起到增大P1口的輸出電壓。</p><p><b>  數(shù)碼管顯示程序:</b></p><p>  void display(uchar numdis) //動態(tài)數(shù)碼管顯示子函數(shù)</p><p><b&

37、gt;  {</b></p><p>  uchar shi,ge; //分離兩個分別要顯示的數(shù)</p><p>  shi=numdis/10;</p><p>  ge=numdis%10;</p><p><b>  sw=0;</b></p><p>  P2=

38、table[shi]; //送十位段選數(shù)據(jù)</p><p>  delayms(5);//延時</p><p><b>  sw=1;</b></p><p><b>  gw=0;</b></p><p>  P2=table[ge]; //送個位段選數(shù)據(jù)</p><

39、p>  delayms(5);</p><p><b>  gw=1;</b></p><p><b>  }</b></p><p><b>  、復(fù)位電路:</b></p><p>  復(fù)位電路原理:RST為高電平有效,電路中的按鍵一旦按下則RST端由低電平變?yōu)楦唠娖?/p>

40、,因而實現(xiàn)總電路的復(fù)位。</p><p><b>  晶振電路:</b></p><p>  晶振電路為系統(tǒng)提供了合適的時鐘信號。</p><p><b>  中斷子函數(shù):</b></p><p>  void T0_time() interrupt 1//定時器0中斷函數(shù)</p>

41、<p><b>  {</b></p><p>  TH0=(65536-50000)/256;//重裝初值</p><p>  TL0=(65536-50000)%256;</p><p>  numt0++;//50ms中斷一次</p><p><b>  }</b></

42、p><p><b>  初始函數(shù):</b></p><p>  void init() //初始化函數(shù)</p><p><b>  {</b></p><p>  TMOD=0x01;//設(shè)置定時器0為工作方式1(0000 0001)</p><p>  TH0=(6553

43、6-50000)/256;//裝初值50ms一次中斷</p><p>  TL0=(65536-50000)%256;</p><p>  EA=1; // 開總中斷</p><p>  ET0=1; //開定時器0中斷</p><p><b>  TR0=0; </b></p><p>  

44、sw=1;//關(guān)數(shù)碼管十位位選</p><p>  gw=1; //關(guān)數(shù)碼管個位位選</p><p><b>  }</b></p><p><b>  3.總程序</b></p><p>  #include <reg51.h> </p><p> 

45、 #define uchar unsigned char</p><p>  #define uint unsigned int </p><p>  sbit sw=P0^6;//十位位選</p><p>  sbit gw=P0^7;//個位位選</p><p>  sbit led=P3^7;//LED燈</p>&l

46、t;p>  uchar code table[]={</p><p>  0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p><p>  0x7f,0x6f};//編碼定義</p><p>  uchar numt0,num;</p><p>  voi

47、d delayms(uint);</p><p>  void text(uchar);</p><p>  void display(uchar numdis) //動態(tài)數(shù)碼管顯示子函數(shù)</p><p><b>  {</b></p><p>  uchar shi,ge; //分離兩個分別要顯示的數(shù)

48、</p><p>  shi=numdis/10;</p><p>  ge=numdis%10;</p><p><b>  sw=0;</b></p><p>  P2=table[shi]; //送十位段選數(shù)據(jù)</p><p>  delayms(5);//延時</p>

49、<p><b>  sw=1;</b></p><p><b>  gw=0;</b></p><p>  P2=table[ge]; //送個位段選數(shù)據(jù)</p><p>  delayms(5);</p><p><b>  gw=1;</b></p>

50、;<p><b>  }</b></p><p>  void delayms(uint x)//延時x ms</p><p><b>  {</b></p><p><b>  uint i,j;</b></p><p>  for(i=x;i>0;i

51、--) //i=x即延時約x毫秒</p><p>  for(j=110;j>0;j--);</p><p><b>  }</b></p><p>  void ankey() //鍵盤掃描</p><p><b>  {</b></p><p>  uchar t

52、emp,key;</p><p>  P1=0xef;//第1行</p><p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;//temp高4位清0;</p><p>  if(temp!=0x0f) //判斷是否有鍵按下</p><p><

53、;b>  {</b></p><p>  delayms(10); //延時,消除抖動</p><p>  if(temp!=0xf0)//判斷是否有鍵按下</p><p><b>  {</b></p><p>  temp=P1; //重新讀取P1口</p><p>  sw

54、itch(temp)//判斷按鍵按下情況 </p><p><b>  {</b></p><p>  case 0xeb:</p><p><b>  key=1;</b></p><p><b>  break;</b></p><p>  

55、case 0xed:</p><p><b>  key=2;</b></p><p><b>  break;</b></p><p>  case 0xee:</p><p><b>  key=3;</b></p><p><b>  b

56、reak;</b></p><p><b>  }</b></p><p>  text(key);</p><p>  while(temp!=0x0f)//判斷按鍵是否釋放</p><p><b>  {</b></p><p><b>  temp

57、=P1;</b></p><p>  temp=temp&0x0f;</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p>  P1=0xdf;

58、//第2行</p><p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;</p><p>  if(temp!=0x0f)</p><p><b>  {</b></p><p>  delayms(10);</p&g

59、t;<p>  if(temp!=0xf0)</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  switch(temp)</p><p><b>  {</b></p><p>

60、;  case 0xdb:</p><p><b>  key=4;</b></p><p><b>  break;</b></p><p>  case 0xdd:</p><p><b>  key=5;</b></p><p><b>

61、  break;</b></p><p>  case 0xde:</p><p><b>  key=6;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  text(ke

62、y);</p><p>  while(temp!=0x0f)</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;</p><p><b>  } </

63、b></p><p><b>  }</b></p><p><b>  }</b></p><p>  P1=0xbf;//第3行</p><p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;&

64、lt;/p><p>  if(temp!=0x0f)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(temp!=0xf0)</p><p><b>  {</b></p><p><b

65、>  temp=P1;</b></p><p>  switch(temp)</p><p><b>  {</b></p><p>  case 0xbb:</p><p><b>  key=7;</b></p><p><b>  break

66、;</b></p><p>  case 0xbd:</p><p><b>  key=8;</b></p><p><b>  break;</b></p><p>  case 0xbe:</p><p><b>  key=9;</b>

67、;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  text(key);</p><p>  while(temp!=0x0f)</p><p><b>  {</b></p>

68、<p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p&

69、gt;<p>  P1=0x7f;//第4行</p><p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;</p><p>  if(temp!=0x0f)</p><p><b>  {</b></p><p&g

70、t;  delayms(10);</p><p>  if(temp!=0xf0)</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  switch(temp)</p><p><b>  {</b

71、></p><p>  case 0x7b:</p><p><b>  key=10;</b></p><p><b>  break;</b></p><p>  case 0x7d:</p><p><b>  key=0;</b></

72、p><p><b>  break;</b></p><p>  case 0x7e:</p><p><b>  key=11;</b></p><p><b>  break;</b></p><p><b>  }</b><

73、/p><p>  text(key);</p><p>  while(temp!=0x0f)</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;</p><

74、p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void text(uchar key)//判斷鍵盤掃描結(jié)果,并倒計時&l

75、t;/p><p><b>  {</b></p><p>  static uchar n,bb,s,i;//靜態(tài)局部變量</p><p><b>  s=1;</b></p><p>  if(key==0||key==1||key==2||key==3||key==4||key==5||key==6

76、||key==7||key==8||key==9)</p><p>  n++;//有數(shù)字鍵被按下,n加1</p><p>  if(key==11)</p><p><b>  n=3;</b></p><p><b>  i++;</b></p><p>  if(key

77、==10)</p><p>  n=4;//*和#被按下,n置3</p><p><b>  switch(n)</b></p><p><b>  {</b></p><p>  case 1: bb=key;num=key;break;//第1次按下數(shù)字鍵</p><p>

78、;  case 2: bb=bb*10+key;n=0;num=bb;break;//第2次按下數(shù)字鍵 </p><p><b>  case 3:{</b></p><p>  if(i%2==0)</p><p><b>  TR0=1;</b></p><p>&l

79、t;b>  else</b></p><p><b>  TR0=0;</b></p><p><b>  }</b></p><p><b>  n=0; </b></p><p><b>  break;</b></p>

80、<p>  case 4: num=bb;//*被按下,開始倒計時</p><p>  TR0=1;//啟動定時器0中斷</p><p>  while(s==1)</p><p><b>  {</b></p><p><b>  ankey();</b></p>

81、<p>  if(numt0==20)//如果到了20次,說明1秒時間到</p><p><b>  {</b></p><p>  numt0=0;//然后把numt0清0重新再計20次</p><p>  num--;//num自減</p><p>  if(num==0)//如果num等0

82、</p><p><b>  {</b></p><p>  TR0=0;//關(guān)閉定時器0中斷</p><p>  s=0; //推出循環(huán)</p><p>  led=0;//點亮LED燈</p><p><b>  }</b></p><p><

83、;b>  }</b></p><p>  display(num);//顯示num</p><p><b>  }</b></p><p>  break;</p><p><b>  }</b></p><p><b>  }<

84、;/b></p><p>  void init() //初始化函數(shù)</p><p><b>  {</b></p><p>  TMOD=0x01;//設(shè)置定時器0為工作方式1(0000 0001)</p><p>  TH0=(65536-50000)/256;//裝初值50ms一次中斷</p>

85、;<p>  TL0=(65536-50000)%256;</p><p>  EA=1; // 開總中斷</p><p>  ET0=1; //開定時器0中斷</p><p><b>  TR0=0; </b></p><p>  sw=1;//關(guān)數(shù)碼管十位位選</p><p&g

86、t;  gw=1; //關(guān)數(shù)碼管個位位選</p><p><b>  }</b></p><p>  void main()//主函數(shù)</p><p><b>  {</b></p><p>  init();//初始化函數(shù)</p><p><b>  num=0;

87、</b></p><p>  while(1) //循環(huán)</p><p><b>  {</b></p><p>  ankey(); //鍵盤掃描</p><p>  display(num);//動態(tài)數(shù)碼管顯示</p><p><b>  }</b><

88、/p><p><b>  }</b></p><p>  void T0_time() interrupt 1//定時器0中斷函數(shù)</p><p><b>  {</b></p><p>  TH0=(65536-50000)/256;//重裝初值</p><p>  TL0=

89、(65536-50000)%256;</p><p>  numt0++;//50ms中斷一次</p><p><b>  }</b></p><p><b>  總結(jié)心得 </b></p><p>  課程設(shè)計由始至終都是將所學(xué)知識理論與動手實踐相結(jié)合的試驗田地,無疑,本次單片機課程不僅讓

90、我們重溫了一次單片機的理論知識,使我對單片機的認識變得更加深刻,也無形地提高了我的實踐設(shè)計能力。</p><p>  設(shè)計過程中,在分析問題與解決問題的探索過程,對于我來說是一種享受,在面對一個又一個新問題的出現(xiàn),自己一個又一個地攻破,那種喜悅真的無與倫比,我對單片機產(chǎn)生的濃厚興趣也由此而生。</p><p>  總的來說,今次的課程設(shè)計我收益良多,也堅定了我對實踐出真知的不可磨滅的真理的

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論