單片機課程設(shè)計--- 設(shè)計并實現(xiàn)可編倒計時裝置_第1頁
已閱讀1頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計任務(wù)書</b></p><p>  題 目: 設(shè)計并實現(xiàn)可編倒計時裝置</p><p><b>  初始條件:</b></p><p>  Protues軟件或Xl1000實驗箱;</p><p>  課程設(shè)計輔導(dǎo)資料:“Xl1000說明書以及實驗指導(dǎo)”“、單

2、片微型計算機”等;</p><p>  先修課程:模擬電子技術(shù)、數(shù)字電子技術(shù)、Protues電路設(shè)計教程及單片機原理及應(yīng)用等課程</p><p>  要求完成的主要任務(wù):(包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p>  課程設(shè)計時間:1周;</p><p>  課程設(shè)計內(nèi)容:設(shè)計并實現(xiàn)可編倒計時裝置;</

3、p><p>  要求:按秒倒計時,鍵盤預(yù)置分、秒各兩位數(shù),鍵控啟動計時,數(shù)碼管顯示倒計時。計時器歸零時輸出一音頻信號。</p><p>  本課程設(shè)計統(tǒng)一技術(shù)要求:研讀輔導(dǎo)資料對應(yīng)章節(jié),對選定的設(shè)計題目進行理論分析,針對具體設(shè)計部分的原理分析、建模、必要的推導(dǎo)和可行性分析,畫出程序設(shè)計框圖,編寫程序代碼(含注釋),上機調(diào)試運行程序,記錄實驗結(jié)果(含計算結(jié)果和圖表),并對實驗結(jié)果進行分析和總結(jié);

4、</p><p>  課程設(shè)計說明書按學?!罢n程設(shè)計工作規(guī)范”中的“統(tǒng)一書寫格式”撰寫,具體包括:</p><p><b>  目錄;</b></p><p><b>  設(shè)計原理;</b></p><p>  系統(tǒng)硬件線路設(shè)計圖;</p><p><b>  程序

5、框圖;</b></p><p><b>  資源分配表;</b></p><p><b>  源程序</b></p><p><b>  性能分析</b></p><p>  課程設(shè)計的心得體會(至少500字);</p><p><b&

6、gt;  時間安排:</b></p><p>  指導(dǎo)教師簽名: 年 月 日</p><p>  系主任(或責任教師)簽名: 年 月 日</p><p><b>  目錄</b></p><p>  1.設(shè)計原理…………………

7、………………………………………..2</p><p>  1.1倒計時原理…………………………………………………2</p><p>  1.2數(shù)碼管顯示原理…………………………………………..2</p><p>  1.3矩陣鍵盤工作原理………………………………………..2</p><p>  1.4小喇叭工作原理……………………………………

8、………3</p><p>  1.5led燈顯示原理……………………………………………..3</p><p>  2.系統(tǒng)硬件線路設(shè)計圖……………………………………………4</p><p>  2.1單片機部分………………………………………………..4</p><p>  2.2數(shù)碼管部分……………………………………………….4</p&

9、gt;<p>  2.3矩陣鍵盤部分……………………………………………5</p><p>  2.4小喇叭及LED部分…………………………………….5</p><p>  2.5X1000實驗箱連線………………………………………6</p><p>  3.程序框圖………………………………………………………7</p><p>  

10、4.資源分配表……………………………………………………9</p><p>  5.源程序………………………………………………………….9</p><p>  6.性能分析……………………………………………………….14</p><p>  7.總結(jié)與心得……………………………………………………15</p><p>  8.本科生課程設(shè)計成績評

11、定表………………………………….16</p><p><b>  1.設(shè)計原理</b></p><p><b>  1.1倒計時原理</b></p><p>  利用定時器T0工作于方式1下,為16位定時計數(shù)方式,由TH提供高8位,TL提供低8位的計數(shù)初值,最大計數(shù)為65536個脈沖,當時,工作于定時方式,以振蕩源的12分

12、頻信號作為計數(shù)脈沖;當時,工作于計數(shù)方式,對外部脈沖輸入端輸入的脈沖計數(shù)。計數(shù)脈沖能否加到計數(shù)器上,受啟動信號的控制,當GATE=0時只要TR=1則定時/計數(shù)器啟動工作。當GATE=1時,TR=1和同時滿足才能啟動,此時啟動受到雙重控制。每啟動定時、計數(shù)前,需預(yù)置計數(shù)初值。啟動后計數(shù)器立即加1計數(shù),TL低8位的計數(shù)滿回零后向TH進位,當16位計數(shù)滿回零后,中斷溢出標志TF置1,產(chǎn)生中斷請求,表示定時時間到或計數(shù)次數(shù)到。若允許中斷ET=1

13、且CPU開中斷(EA=1),則CPU響應(yīng)中斷,轉(zhuǎn)向中斷服務(wù)程序,同時TF自動清零。TMOD=0x01設(shè)置定時器T0工作與方式1且為定時方式,由于每個計數(shù)脈沖的周期為1us,故若將定時器設(shè)置為10ms需接受10000次脈沖,所以要從初值55536處開始計數(shù),為定時器賦初值為TH=0xd8,TL=0xf0。在此基礎(chǔ)上以count--作為倒計時程序,設(shè)置count從100開始減1即可實現(xiàn)時間間隔為1s</p><p>

14、  1.2數(shù)碼管顯示原理</p><p>  數(shù)碼管實際上是由7個發(fā)光二極管組成8字形構(gòu)成的,加上小數(shù)點就是8個,我們分別把他命名為A,B,C,D,E,F,G,H。在Xl1000實驗箱接法為共陽極接法,我們獲得0123456789字符所對應(yīng)的HEX代碼即為0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60 。由于所有數(shù)碼管顯示端和控制端都接在一起,為了顯示出時鐘倒計

15、時的效果,我們需要采用動態(tài)掃描以實現(xiàn)靜態(tài)顯示。在單片機里,首先顯示一個數(shù),然后關(guān)掉,顯示第二數(shù)數(shù),再關(guān)掉,那么將看到連續(xù)的數(shù)字顯示,輪流點亮掃描過程中,每位顯示器的點亮時間是極為短暫的(約1ms),由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝作用,盡管實際上各位顯示器并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù)。</p><p>  1.3矩陣鍵盤工作原理</p><p&g

16、t;  矩陣按鍵部分由16個輕觸按鍵按照4x4的方式排列將行線所接的單片機I/O口作為輸出端,將列線所接的I/O口作為輸入。這樣,當按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出的是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣通過讀入輸入線的狀態(tài)就可得知是否有按鍵按下了。確定矩陣式鍵盤上何鍵被按下有許多方法,在此次設(shè)計中采用了一種行列反轉(zhuǎn)掃描法。相較于行掃描法跟為簡單。利用行列的變化,確定出其交點出的按鍵的按下與否。&

17、lt;/p><p>  1.4小喇叭工作原理</p><p>  聲音是由震動所產(chǎn)生的,一定頻率的震動就產(chǎn)生了一定頻率的聲音。在倒計時結(jié)束時,根據(jù)計時結(jié)束后每一位都是0,啟動設(shè)置好的一定頻率的脈沖,將脈沖傳送到實驗箱上的小喇叭,即可實現(xiàn)小喇叭的報警。</p><p>  1.5led燈顯示原理</p><p>  在實驗要求的基礎(chǔ)之上引入了幾個l

18、ed燈作為現(xiàn)象燈,對應(yīng)于倒計時秒高位為5,4,3,2,時依次點亮,且有一個燈在計時結(jié)束后伴隨著小喇叭報警聲不停閃爍。顯示原理,即是在相應(yīng)的時間點給led低電平可實現(xiàn)點亮,給予方波脈沖實現(xiàn)閃爍。</p><p>  2.系統(tǒng)硬件線路設(shè)計圖</p><p><b>  2.1單片機部分</b></p><p><b>  2.2數(shù)碼管部分

19、</b></p><p><b>  2.3矩陣鍵盤部分</b></p><p>  2.4小喇叭及LED部分</p><p>  2.5X1000實驗箱連線</p><p><b>  3.程序框圖</b></p><p><b>  4.資源分配表&

20、lt;/b></p><p>  單片機P0口:連接8段數(shù)碼管的顯示端,即JP51連接JP5,P0.0連接B,P0.1連接F,P0.2連接A,P0.3連接G,P0.4連接D,P0.5連接H,P0.6連接E,P0.7連接C。</p><p>  單片機的P2口:連接8段數(shù)碼管的控制端,即JP52連接JP8,P2.0到P2.7依次連接控制端的0到7。</p><p&g

21、t;  單片機的P1口:連接矩陣鍵盤,即JP44連接JP50。</p><p>  單片機的P3口:P3.2連接小喇叭,P3.2連接JP16。P3.3到P3.7連接8路指示燈中的任意5路。</p><p><b>  5.源程序</b></p><p>  #include <reg52.h>//包含頭文件</p>&

22、lt;p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  //定義speaker端口</p><p>  sbit speaker=P3^2;</p><p>  //依次定義閃爍燈端口</p><p>  

23、sbit led1=P3^3;</p><p>  sbit led2=P3^4;</p><p>  sbit led3=P3^5;</p><p>  sbit led4=P3^6;</p><p>  sbit led5=P3^7;</p><p>  //共陽數(shù)碼管 0-9編碼表 </p><

24、;p>  code unsigned char tab[]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60}; </p><p>  //定義秒和分顯示的高低位</p><p>  uchar Show_MH,Show_ML,Show_SH,Show_SL;</p><p><b>  //定義相

25、關(guān)變量</b></p><p>  uchar minute,second,key1,key2,key3,key4,key5,MH,ML,SH,SL;</p><p><b>  //設(shè)置標志位</b></p><p>  uchar flag1=1,flag2=1,flag3=1,flag4=1,flag5=1,flag6=0;&

26、lt;/p><p>  //鍵盤掃描程序(行列翻轉(zhuǎn)法)</p><p>  uchar keyscan(void);</p><p>  //比較簡單的自減延時函數(shù)</p><p>  void delay(uint cnt)</p><p>  {while(--cnt);}</p><p>  

27、//********************************主函數(shù)*********************************//</p><p><b>  main()</b></p><p>  { //**********************輸入分的高位**********************************//</p&g

28、t;<p>  while(flag1)</p><p>  {key1=keyscan();//調(diào)用鍵盤掃描,</p><p>  P2=0xfe;//第1個數(shù)碼管顯示</p><p>  switch(key1)//按下相應(yīng)的鍵顯示相對應(yīng)的碼值</p><p><b>  {</b></p&g

29、t;<p>  case 0x7e:{P0=tab[0];MH=0;flag1=0;};break;//0 </p><p>  case 0x7d:{P0=tab[1];MH=1;flag1=0;};break;//1</p><p>  case 0x7b:{P0=tab[2];MH=2;flag1=0;};break;//2</p><p>  

30、case 0x77:{P0=tab[3];MH=3;flag1=0;};break;//3</p><p>  case 0xbe:{P0=tab[4];MH=4;flag1=0;};break;//4</p><p>  case 0xbd:{P0=tab[5];MH=5;flag1=0;};break;//5</p><p><b>  }</b

31、></p><p>  delay(30000);</p><p><b>  }</b></p><p>  //******************************輸入分的低位****************************//</p><p>  while(flag2)</p>

32、<p>  { key2=keyscan();//調(diào)用鍵盤掃描,</p><p>  P2=0xfd;//第2個數(shù)碼管顯示</p><p>  switch(key2)//按下相應(yīng)的鍵顯示相對應(yīng)的碼值</p><p><b>  {</b></p><p>  case 0x7e:{P0=tab[0];ML

33、=0;flag2=0;};break;//0 </p><p>  case 0x7d:{P0=tab[1];ML=1;flag2=0;};break;//1</p><p>  case 0x7b:{P0=tab[2];ML=2;flag2=0;};break;//2</p><p>  case 0x77:{P0=tab[3];ML=3;flag2=0;};br

34、eak;//3</p><p>  case 0xbe:{P0=tab[4];ML=4;flag2=0;};break;//4</p><p>  case 0xbd:{P0=tab[5];ML=5;flag2=0;};break;//5</p><p>  case 0xbb:{P0=tab[6];ML=6;flag2=0;};break;//6</p>

35、;<p>  case 0xb7:{P0=tab[7];ML=7;flag2=0;};break;//7</p><p>  case 0xde:{P0=tab[8];ML=8;flag2=0;};break;//8</p><p>  case 0xdd:{P0=tab[9];ML=9;flag2=0;};break;//9</p><p><

36、b>  }</b></p><p>  delay(30000);</p><p><b>  }</b></p><p>  //******************************輸入秒的高位*****************************//</p><p>  while(fl

37、ag3)</p><p>  { key3=keyscan();//調(diào)用鍵盤掃描,</p><p>  P2=0xf7;//第3個數(shù)碼管顯示</p><p>  switch(key3)//按下相應(yīng)的鍵顯示相對應(yīng)的碼值</p><p><b>  {</b></p><p>  case 0x

38、7e:{P0=tab[0];SH=0;flag3=0;};break;//0 </p><p>  case 0x7d:{P0=tab[1];SH=1;flag3=0;};break;//1</p><p>  case 0x7b:{P0=tab[2];SH=2;flag3=0;};break;//2</p><p>  case 0x77:{P0=tab[3];S

39、H=3;flag3=0;};break;//3</p><p>  case 0xbe:{P0=tab[4];SH=4;flag3=0;};break;//4</p><p>  case 0xbd:{P0=tab[5];SH=5;flag3=0;};break;//5 </p><p><b>  }</b></p>

40、<p>  delay(30000);</p><p><b>  }</b></p><p>  //********************************輸入秒的低位******************************//</p><p>  while(flag4)</p><p>

41、  { key4=keyscan();//調(diào)用鍵盤掃描,</p><p>  P2=0xef;//第4個數(shù)碼管顯示</p><p>  switch(key4)//按下相應(yīng)的鍵顯示相對應(yīng)的碼值</p><p><b>  {</b></p><p>  case 0x7e:{P0=tab[0];SL=0;flag4=

42、0;};break;//0 </p><p>  case 0x7d:{P0=tab[1];SL=1;flag4=0;};break;//1</p><p>  case 0x7b:{P0=tab[2];SL=2;flag4=0;};break;//2</p><p>  case 0x77:{P0=tab[3];SL=3;flag4=0;};break;//3&l

43、t;/p><p>  case 0xbe:{P0=tab[4];SL=4;flag4=0;};break;//4</p><p>  case 0xbd:{P0=tab[5];SL=5;flag4=0;};break;//5</p><p>  case 0xbb:{P0=tab[6];SL=6;flag4=0;};break;//6</p><p&

44、gt;  case 0xb7:{P0=tab[7];SL=7;flag4=0;};break;//7</p><p>  case 0xde:{P0=tab[8];SL=8;flag4=0;};break;//8</p><p>  case 0xdd:{P0=tab[9];SL=9;flag4=0;};break;//9</p><p><b>  }&

45、lt;/b></p><p>  delay(30000);//延時</p><p><b>  }</b></p><p>  //*****************************按鍵啟動倒計時************************8***//</p><p>  while(flag5)&l

46、t;/p><p><b>  {</b></p><p>  key5=keyscan();//調(diào)用鍵盤掃描</p><p>  switch(key5)//檢測鍵控信號</p><p>  case 0xe7:flag5=0;</p><p>  delay(30000);</p>

47、<p><b>  }</b></p><p>  //******************************分秒計算式*********************************//</p><p>  minute=MH*10+ML;</p><p>  second=SH*10+SL;</p><

48、p>  //*****************************單片機賦初值****************************//</p><p>  TMOD=0x01;//定時器0設(shè)置 10ms in 12M crystal</p><p><b>  TH0=0xd8;</b></p><p><b>  

49、TL0=0xf0;</b></p><p>  IE= 0x82;//打開中斷T0</p><p><b>  TR0=1;</b></p><p>  //***************************數(shù)碼管動態(tài)掃描實現(xiàn)靜態(tài)顯示********************//</p><p>  whi

50、le(1)//</p><p><b>  {</b></p><p>  P0=Show_MH;//顯示分十位</p><p><b>  P2=0xfe; </b></p><p>  delay(300);</p><p>  P0=Show_ML; //顯示分個位&l

51、t;/p><p><b>  P2=0xfd;</b></p><p>  delay(300);</p><p>  P0=0xf7; //顯示分隔符</p><p><b>  P2=0xfb;</b></p><p>  delay(300);</p><

52、;p>  P0=Show_SH;//顯示秒十位</p><p><b>  P2=0xf7;</b></p><p>  delay(300);</p><p>  P0=Show_SL; //顯示秒個位</p><p>  P2=0xef; </p><p>  delay(300)

53、; </p><p><b>  }</b></p><p><b>  }</b></p><p>  //**************************************************************************//</p><p>  void

54、tim(void) interrupt 1 using 1//定時器T0中斷服務(wù)程序</p><p>  {static uchar count;</p><p>  uchar g,control2,control3,control4,control5;</p><p>  //**********************************單片機賦初值***

55、*********************//</p><p>  TH0=0xd8;//賦初值55536</p><p><b>  TL0=0xf0;</b></p><p><b>  count++;</b></p><p>  //*************************100x

56、10ms=1s,實現(xiàn)秒信號減計數(shù)****************//</p><p>  if (count==100)</p><p><b>  {</b></p><p><b>  count=0;</b></p><p>  second--;//秒減1</p><p&

57、gt;  //*****檢測是否計時結(jié)束并對顯示值處理*********//</p><p>  if(minute==0 && second==0)</p><p><b>  {</b></p><p>  Show_MH=tab[minute/10];//十位顯示值處理</p><p>  Sho

58、w_ML=tab[minute%10]; //個位顯示處理</p><p>  Show_SH=tab[second/10];//十位顯示值處理</p><p>  Show_SL=tab[second%10]; //個位顯示處理</p><p>  delay(30000);</p><p>  flag6=1;//轉(zhuǎn)向音頻輸出</p

59、><p><b>  }</b></p><p>  //***********檢測秒位是否計時結(jié)束并對顯示值處理*************//</p><p>  else if(second==0 )</p><p><b>  {</b></p><p>  Show_MH

60、=tab[minute/10];//十位顯示值處理</p><p>  Show_ML=tab[minute%10]; //個位顯示處理</p><p>  Show_SH=tab[second/10];//十位顯示值處理</p><p>  Show_SL=tab[second%10]; //個位顯示處理</p><p>  second=

61、60;</p><p><b>  minute--;</b></p><p><b>  }</b></p><p>  //***************顯示值處理****************//</p><p><b>  else </b></p&

62、gt;<p><b>  {</b></p><p>  Show_MH=tab[minute/10];//十位顯示值處理</p><p>  Show_ML=tab[minute%10]; //個位顯示處理</p><p>  Show_SH=tab[second/10];//十位顯示值處理</p><p&

63、gt;  Show_SL=tab[second%10]; //個位顯示處理</p><p><b>  } </b></p><p>  //*****************計時結(jié)束數(shù)碼管關(guān)閉,喇叭響起,指示燈閃爍************//</p><p>  while(flag6)</p><p>  { f

64、lag6=1; </p><p>  P0=0;//關(guān)閉數(shù)碼管</p><p>  for(g=0;g<200;g++)//音頻輸出</p><p><b>  {</b></p><p>  delay(80);</p><p>  speaker=!speaker;</p>

65、<p>  led1=!led1;</p><p><b>  }</b></p><p>  speaker=1;</p><p><b>  led1=1;</b></p><p>  delay(20000);</p><p><b>  }&l

66、t;/b></p><p>  //當秒高位變化時5個LED輪流閃爍</p><p>  control2=second/10;</p><p>  control3=second/10;</p><p>  control4=second/10;</p><p>  control5=second/10;<

67、;/p><p>  if (control2==2) led2=0; else led2=1;</p><p>  if (control3==3) led3=0; else led3=1;</p><p>  if (control4==4) led4=0; else led4=1;</p><p>  if (control

68、5==5) led5=0; else led5=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  //鍵盤掃描函數(shù),使用行列反轉(zhuǎn)掃描法</p><p>  uchar keyscan(void)</p><p>

69、;<b>  {</b></p><p>  uchar cord_h,cord_l;//行列值</p><p>  P1=0x0f; //行線輸出全為0</p><p>  cord_h=P1&0x0f; //讀入列線值</p><p>  if(cord_h!=0x0f)

70、//先檢測有無按鍵按下</p><p><b>  {</b></p><p>  delay(100); //去抖</p><p>  if(cord_h!=0x0f)</p><p><b>  {</b></p><p>  cord_h=P1&0

71、x0f; //讀入列線值</p><p>  P1=cord_h|0xf0; //輸出當前列線值</p><p>  cord_l=P1&0xf0; //讀入行線值</p><p>  return(cord_h+cord_l);//鍵盤最后組合碼值</p><p><b>  }</b></p>

72、;<p><b>  }</b></p><p>  return(0xff); //返回該值</p><p><b>  }</b></p><p><b>  6.性能分析</b></p><p>  實現(xiàn)了可編倒計時裝置,能夠按秒倒計時,鍵盤預(yù)置分、

73、秒各兩位數(shù),鍵控啟動計時,數(shù)碼管顯示倒計時。計時器歸零時輸出一音頻信號并有指示燈閃爍提示計時完畢。并在秒高位為5,4,3,2時分別有不同的指示燈點亮。</p><p><b>  7.總結(jié)與心得</b></p><p>  本科生課程設(shè)計成績評定表</p><p>  指導(dǎo)教師簽字: </p>&l

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論