課程設(shè)計(jì)報(bào)告---倒計(jì)時(shí)器_第1頁
已閱讀1頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  課 程 設(shè) 計(jì)</b></p><p>  課程名稱 單片機(jī)課程設(shè)計(jì)</p><p>  題目名稱 倒計(jì)時(shí)器</p><p>  學(xué)生學(xué)院 物理與光電工程學(xué)院</p><p><b>  專業(yè)班級(jí) </b></p>

2、<p>  學(xué) 號(hào) </p><p>  學(xué)生姓名 </p><p>  指導(dǎo)教師 </p><p>  2012 年 12 月 14 日</p><p><b>  倒計(jì)時(shí)器設(shè)計(jì)</b></p><p><b>

3、  功能要求:</b></p><p>  實(shí)現(xiàn)最長(zhǎng)99S的倒計(jì)時(shí)功能;利用數(shù)碼管或液晶屏顯示數(shù)字;利用按鍵可以設(shè)置倒計(jì)時(shí)時(shí)間;設(shè)置倒計(jì)時(shí)開始啟動(dòng)鍵;時(shí)間到,聲(光)報(bào)警,示意倒計(jì)時(shí)時(shí)間到。</p><p><b>  2、實(shí)現(xiàn)方法:</b></p><p>  單片機(jī)采用51系列,分析功能要求,設(shè)計(jì)方案,編寫程序(keil c51

4、 軟件),利用Proteus進(jìn)行仿真。</p><p><b>  流程圖:</b></p><p><b>  具體電路與軟件設(shè)計(jì)</b></p><p>  按鍵倒計(jì)時(shí)時(shí)間設(shè)計(jì)與矩陣按鍵掃描函數(shù)ankey()</p><p>  上圖就是4行3列矩陣按鍵與AT89C51的接法。</p>

5、;<p>  矩陣按鍵的原理和方法:矩陣按鍵的兩端都與單片機(jī)的I/O口相連,在檢測(cè)時(shí),人為的通過單片機(jī)I/O口送出低電平。檢測(cè)時(shí),先送一列為低電平,其余幾列全為高電平(這時(shí)就確定了列數(shù)),然后立即輪流檢測(cè)一次個(gè)行是否有低電平,若檢測(cè)到某一行為低電平(這時(shí)就確定了行數(shù)),則可以確定單前被按下的鍵是哪行哪列。同樣,用這種方法輪流檢測(cè)各行各列,這樣就可以檢測(cè)所有按鍵,當(dāng)有鍵按下時(shí),就可判斷是哪個(gè)鍵被按下。當(dāng)然,也可以將行線置為低

6、電平,掃描列是否有低電平。</p><p>  當(dāng)按下0~9數(shù)字鍵時(shí),會(huì)產(chǎn)生相應(yīng)數(shù)值賦給矩陣按鍵掃描函數(shù)中以定義的參數(shù)key,當(dāng)按下#或*鍵時(shí),會(huì)分別產(chǎn)生11或10賦給key。這時(shí)調(diào)用對(duì)矩陣按鍵掃描進(jìn)行相應(yīng)處理函數(shù)text(uchar )且key賦給它,text(uchar )函數(shù)對(duì)key值進(jìn)行相應(yīng)處理:如果只按下一次數(shù)字鍵,那這數(shù)字就會(huì)是倒計(jì)時(shí)的個(gè)位,如果按下兩次數(shù)字鍵,那第一次的數(shù)字就會(huì)是倒計(jì)時(shí)的十位,第二次

7、數(shù)字的數(shù)字就會(huì)是倒計(jì)時(shí)的個(gè)位,當(dāng)按下#或*鍵時(shí),開始倒計(jì)時(shí)。</p><p>  2、動(dòng)態(tài)數(shù)碼管顯示函數(shù)</p><p>  動(dòng)態(tài)數(shù)碼管顯示就是輪流向各位數(shù)碼管送出段選及相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人眼感覺各位數(shù)碼管同時(shí)都在顯示,實(shí)際上多位數(shù)碼管是一位一位輪流顯示的,只是輪流比較快,我們分辨不出來。本設(shè)計(jì)用的是兩位動(dòng)態(tài)共陰數(shù)碼管顯示,它和單片機(jī)的連接如圖所示:<

8、/p><p>  其中那排阻是驅(qū)動(dòng)電路。</p><p><b>  時(shí)鐘和復(fù)位電路</b></p><p>  RST為復(fù)位信號(hào)輸入端,高電平有效。系統(tǒng)上電后,當(dāng)已經(jīng)進(jìn)行過倒計(jì)時(shí),這時(shí)想進(jìn)行不同時(shí)間的倒計(jì)時(shí),只要按下復(fù)位按鈕K后,就可以進(jìn)行新的倒計(jì)時(shí)。</p><p>  時(shí)鐘電路接XTAL1和XTAL2,再通過單片機(jī)中的

9、定時(shí)器分頻,得到秒的時(shí)間量級(jí)。</p><p><b>  中斷函數(shù)設(shè)計(jì)</b></p><p><b>  先初始化中斷函數(shù):</b></p><p>  TMOD=0x01;設(shè)置定時(shí)器0為工作方式1(0000 0001)</p><p>  TH0=(65536-50000)/256;//裝初值

10、50ms一次中斷</p><p>  TL0=(65536-50000)%256;</p><p>  EA=1; //開總中斷</p><p>  ET0=1; //開定時(shí)器0中斷</p><p>  TR0=0; //先別啟動(dòng)中斷,留著用按鍵啟動(dòng),以便開始倒計(jì)時(shí)</p><p><b>  中斷函數(shù)如

11、下:</b></p><p>  void T0_time() interrupt 1//定時(shí)器0中斷函數(shù)</p><p><b>  {</b></p><p>  TH0=(65536-50000)/256;//重裝初值</p><p>  TL0=(65536-50000)%256;</p&g

12、t;<p>  numt0++;//50ms中斷一次</p><p><b>  }</b></p><p><b>  完整電路圖和程序:</b></p><p><b>  完整電路圖</b></p><p><b>  程序:</b&g

13、t;</p><p>  #include <reg51.h> </p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int </p><p>  sbit sw=P0^6;//十位位選</p><p>  

14、sbit gw=P0^7;//個(gè)位位選</p><p>  sbit led=P3^7;//LED燈</p><p>  uchar code table[]={</p><p>  0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p><p>  0x7f,

15、0x6f};//編碼定義</p><p>  uchar numt0,num;</p><p>  void delayms(uint);</p><p>  void text(uchar);</p><p>  void display(uchar numdis) //動(dòng)態(tài)數(shù)碼管顯示子函數(shù)</p><p><

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

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

18、lt;p>  delayms(5);</p><p><b>  gw=1;</b></p><p><b>  }</b></p><p>  void delayms(uint x)//延時(shí)x ms</p><p><b>  {</b></p>&

19、lt;p><b>  uint i,j;</b></p><p>  for(i=x;i>0;i--) //i=x即延時(shí)約x毫秒</p><p>  for(j=110;j>0;j--);</p><p><b>  }</b></p><p>  void ankey() //

20、鍵盤掃描</p><p><b>  {</b></p><p>  uchar temp,key;</p><p>  P1=0xef;//第1行</p><p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;//temp高

21、4位清0;</p><p>  if(temp!=0x0f) //判斷是否有鍵按下</p><p><b>  {</b></p><p>  delayms(10); //延時(shí),消除抖動(dòng)</p><p>  if(temp!=0xf0)//判斷是否有鍵按下</p><p><b>  

22、{</b></p><p>  temp=P1; //重新讀取P1口</p><p>  switch(temp)//判斷哪個(gè)鍵按下</p><p><b>  {</b></p><p>  case 0xeb:</p><p><b>  key=1;</b>

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

24、<p><b>  key=3;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  text(key);</p><p>  while(temp!=0x0f)//判斷按鍵是否釋放</p&g

25、t;<p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;</p><p><b>  } </b></p><p><b>  }</b><

26、;/p><p><b>  }</b></p><p>  P1=0xdf;//第2行</p><p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;</p><p>  if(temp!=0x0f)</p><

27、;p><b>  {</b></p><p>  delayms(10);</p><p>  if(temp!=0xf0)</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  swit

28、ch(temp)</p><p><b>  {</b></p><p>  case 0xdb:</p><p><b>  key=4;</b></p><p><b>  break;</b></p><p>  case 0xdd:</p&

29、gt;<p><b>  key=5;</b></p><p><b>  break;</b></p><p>  case 0xde:</p><p><b>  key=6;</b></p><p><b>  break;</b>&l

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

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

32、lt;b>  temp=P1;</b></p><p>  temp=temp&0x0f;</p><p>  if(temp!=0x0f)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(temp!=0xf

33、0)</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  switch(temp)</p><p><b>  {</b></p><p>  case 0xbb:</p>&l

34、t;p><b>  key=7;</b></p><p><b>  break;</b></p><p>  case 0xbd:</p><p><b>  key=8;</b></p><p><b>  break;</b></p>

35、;<p>  case 0xbe:</p><p><b>  key=9;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  text(key);</p><p>  w

36、hile(temp!=0x0f)</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;</p><p><b>  } </b></p><p>&

37、lt;b>  }</b></p><p><b>  }</b></p><p>  P1=0x7f;//第4行</p><p><b>  temp=P1;</b></p><p>  temp=temp&0x0f;</p><p>  if(te

38、mp!=0x0f)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(temp!=0xf0)</p><p><b>  {</b></p><p><b>  temp=P1;</b><

39、;/p><p>  switch(temp)</p><p><b>  {</b></p><p>  case 0x7b:</p><p><b>  key=10;</b></p><p><b>  break;</b></p><

40、;p>  case 0x7d:</p><p><b>  key=0;</b></p><p><b>  break;</b></p><p>  case 0x7e:</p><p><b>  key=11;</b></p><p><

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

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

43、}</b></p><p>  void text(uchar key)//判斷鍵盤掃描結(jié)果,并倒計(jì)時(shí)</p><p><b>  {</b></p><p>  static uchar n,bb,s;//靜態(tài)局部變量</p><p><b>  s=1;</b></p>

44、<p>  if(key==0||key==1||key==2||key==3||key==4||key==5||key==6||key==7||key==8||key==9)</p><p>  n++;//有數(shù)字鍵被按下,n加1</p><p>  if(key==10||key==11)</p><p>  n=3;//*和#被按下,n置3<

45、/p><p><b>  switch(n)</b></p><p><b>  {</b></p><p>  case 1: bb=key;key=20;display(bb);break;//第1次按下數(shù)字鍵</p><p>  case 2: bb=bb*10+key;n=0;key=20;di

46、splay(bb);break;//第2次按下數(shù)字鍵</p><p>  case 3: { num=bb;//*和#被按下,開始倒計(jì)時(shí)</p><p>  while(s==1)</p><p><b>  {</b></p><p>  TR0=1;//啟動(dòng)定時(shí)器0中斷</p><p>  i

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

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

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

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

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

52、位位選</p><p><b>  }</b></p><p>  void main()//主函數(shù)</p><p><b>  {</b></p><p>  init();//初始化函數(shù)</p><p><b>  num=0;</b></p&

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論