單片機(jī)秒表課程設(shè)計(jì)(c語言)_第1頁
已閱讀1頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p>  1實(shí)驗(yàn)設(shè)計(jì)的目的和任務(wù)</p><p>  1.1 單片機(jī)秒表實(shí)驗(yàn)的概述</p><p>  1.2系統(tǒng)設(shè)計(jì)思路及描述</p><p>  1.3 系統(tǒng)設(shè)計(jì)任務(wù)和要求</p><p><b>  2軟件與硬件設(shè)計(jì)</b

2、></p><p>  2.1系統(tǒng)硬件方案設(shè)計(jì)</p><p><b>  2.2軟件方案設(shè)計(jì)</b></p><p>  3 程序流程及實(shí)驗(yàn)效果</p><p><b>  3.1源程序及說明</b></p><p><b>  3.2原理圖分析</b

3、></p><p><b>  3.3實(shí)驗(yàn)效果</b></p><p><b>  4 參考文獻(xiàn)</b></p><p>  1. 實(shí)驗(yàn)設(shè)計(jì)的目的和任務(wù)</p><p>  1.1單片機(jī)秒表實(shí)驗(yàn)的概述</p><p><b>  一、實(shí)驗(yàn)題目</b>

4、;</p><p>  秒表系統(tǒng)設(shè)計(jì)——用STC89C52RC設(shè)計(jì)一個(gè)3位LED數(shù)碼顯示“秒表”,顯示時(shí)間為00.0~59.9秒,每毫秒自動(dòng)加一,每十毫秒自動(dòng)加一秒。</p><p><b>  二、增加功能</b></p><p>  增加一個(gè)“復(fù)位00.0”按鍵(即清零),一個(gè)“暫停”和“開始”按鍵,一個(gè)“復(fù)位60.0”按鍵(用來60秒倒計(jì)

5、時(shí)),一個(gè)倒計(jì)時(shí)“逐漸自減”按鍵。</p><p><b>  三,實(shí)驗(yàn)難點(diǎn)</b></p><p>  單片機(jī)電子秒表需要解決三個(gè)主要問題,一是有關(guān)單片機(jī)定時(shí)器(一個(gè)控制順序計(jì)時(shí),一個(gè)控制倒計(jì)時(shí))的使用;二是如何實(shí)現(xiàn)LED的動(dòng)態(tài)掃描顯示;三是如何對(duì)鍵盤輸入進(jìn)行編程。</p><p><b>  四、實(shí)驗(yàn)內(nèi)容提要</b>&

6、lt;/p><p>  本實(shí)驗(yàn)利用單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,結(jié)合集成電路芯片8051、LED數(shù)碼管以及實(shí)驗(yàn)箱上的按鍵來設(shè)計(jì)計(jì)時(shí)器。將軟、硬件有機(jī)地結(jié)合起來,使得系統(tǒng)能夠正確地進(jìn)行計(jì)時(shí),數(shù)碼管能夠正確地顯示時(shí)間。其中本實(shí)驗(yàn)設(shè)計(jì)了四個(gè)開關(guān)按鍵:其中key2按鍵按下去時(shí)開始計(jì)時(shí),即秒表開始鍵(同時(shí)也用作暫停鍵),key1按鍵按下去時(shí)數(shù)碼管清零,復(fù)位為“00.0”,key3按鍵按下去時(shí)數(shù)碼管復(fù)位為“60.0”(

7、用于倒計(jì)時(shí)),key4按鍵按下去則是數(shù)碼管開始“逐漸自減”倒計(jì)時(shí)。</p><p><b>  實(shí)驗(yàn)的意義</b></p><p>  通過本次課程設(shè)計(jì)加深對(duì)單片機(jī)課程的全面認(rèn)識(shí)復(fù)習(xí)和掌握,對(duì)單片機(jī)課程的應(yīng)用進(jìn)一步的了解。</p><p>  掌握定時(shí)器、外部中斷的設(shè)置和編程原理。</p><p>  通過此次課程設(shè)計(jì)能

8、夠?qū)纹瑱C(jī)軟硬件結(jié)合起來,對(duì)程序進(jìn)行編輯,校驗(yàn)。</p><p>  該實(shí)驗(yàn)通過單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)和計(jì)數(shù)原理,設(shè)計(jì)簡單的計(jì)時(shí)器系統(tǒng),擁有正確的計(jì)時(shí)、暫停、清零,并同時(shí)可以用數(shù)碼管顯示,在現(xiàn)實(shí)生活中應(yīng)用廣泛,具有現(xiàn)實(shí)意義</p><p><b>  實(shí)驗(yàn)儀器</b></p><p>  集成電路芯片8051,七段數(shù)碼管,TX-1C單片機(jī)開

9、發(fā)板,MCS-51系列單片機(jī)微機(jī)仿真實(shí)驗(yàn)系統(tǒng)中的軟件(Keil uvision2)</p><p>  1.2系統(tǒng)設(shè)計(jì)思路及描述</p><p>  該實(shí)驗(yàn)要求進(jìn)行計(jì)時(shí)并在數(shù)碼管上顯示時(shí)間,則可利用MCS-51系列單片機(jī)的芯片AT89C52的P3.4,P3.5,P3.6,P3.7作為按鍵的入口;定時(shí)器T0作為每0.1秒減一的定時(shí)器;定時(shí)器T1作為每0.1秒加一的定時(shí)器。其中“開始”按鍵當(dāng)開

10、關(guān)由上向下?lián)軙r(shí)開始計(jì)時(shí),此時(shí)若再撥“開始”按鍵則數(shù)碼管暫停;“清零”按鍵當(dāng)開關(guān)由上向下?lián)軙r(shí)數(shù)碼管清零,此時(shí)若再撥“開始”按鍵則又可重新開始計(jì)時(shí)。</p><p><b>  方框圖如下圖:</b></p><p><b>  數(shù)字秒表設(shè)計(jì)導(dǎo)向圖</b></p><p>  1.3 系統(tǒng)設(shè)計(jì)任務(wù)和要求</p>

11、<p><b>  1.設(shè)計(jì)指標(biāo) 。</b></p><p>  了解8051芯片的的工作原理和工作方式 ,使用該芯片對(duì)LED數(shù)碼管進(jìn)行顯示控制,實(shí)現(xiàn)用單片機(jī)的端口控制數(shù)碼管,顯示分、秒,并能用按鈕實(shí)現(xiàn)秒表起動(dòng)、停止、60秒、倒計(jì)時(shí)清零等功能,精確到0.1秒。</p><p>  要求選用定時(shí)器的工作方式,畫出使用單片機(jī)控制LED數(shù)碼管顯示的電路圖,并實(shí)現(xiàn)其

12、硬件電路,并編程完成軟件部分,最后調(diào)試秒表起動(dòng)、停止、清零等功能。</p><p><b>  2.設(shè)計(jì)要求</b></p><p>  畫出電路原理圖(或仿真電路圖);</p><p><b>  電路仿真與調(diào)試;</b></p><p><b>  2.軟件與硬件設(shè)計(jì)</b>

13、;</p><p>  2.1系統(tǒng)硬件方案設(shè)計(jì)</p><p>  單片機(jī)應(yīng)用系統(tǒng)由硬件系統(tǒng)和軟件系統(tǒng)兩部分組成。硬件系統(tǒng)是指單片機(jī)以及擴(kuò)展的存儲(chǔ)器、I\O接口、外圍擴(kuò)展的功能芯片以及接口電路。軟件系統(tǒng)包括監(jiān)控程序和各種應(yīng)用程序。</p><p>  在單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)是整個(gè)系統(tǒng)的核心,對(duì)整個(gè)系統(tǒng)的信息輸入、處理、信息輸出進(jìn)行控制。與單片機(jī)配套的有相應(yīng)的復(fù)位

14、電路、時(shí)鐘電路以及擴(kuò)展的存儲(chǔ)器和I\O接口,使單片機(jī)應(yīng)用系統(tǒng)能夠運(yùn)行。</p><p>  在一個(gè)單片機(jī)應(yīng)用系統(tǒng)中,往往都會(huì)輸入信息和顯示信息,這就涉及鍵盤和顯示器。在單片機(jī)應(yīng)用系統(tǒng)中,一般都根據(jù)系統(tǒng)的要求配置相應(yīng)的鍵盤和顯示器。配置鍵盤和顯示器一般都沒有統(tǒng)一的規(guī)定,有的系統(tǒng)功能復(fù)雜,需輸入的信息和顯示的信息量大,配置的鍵盤和顯示器功能相對(duì)強(qiáng)大,而有些系統(tǒng)輸入/輸出的信息少,這時(shí)可能用幾個(gè)按鍵和幾個(gè)LED指示燈就

15、可以進(jìn)行處理了。在單片機(jī)應(yīng)用系統(tǒng)在中配置的鍵盤可以是獨(dú)立鍵盤,也可能是矩陣鍵盤。</p><p><b>  系統(tǒng)硬件結(jié)構(gòu)框圖</b></p><p><b>  2.2軟件方案設(shè)計(jì)</b></p><p>  此次選用C51來編程,首先要有初始化程序,通過初始化程序,將對(duì)主程序所用到的變量、常量以及各個(gè)參數(shù)和所調(diào)用的子函

16、數(shù)定義。其次還有顯示程序、按鍵掃描及處理程序、時(shí)鐘程序和倒計(jì)時(shí)程序,系統(tǒng)軟件流程圖圖如圖 2.2所示:</p><p>  3 程序流程及實(shí)驗(yàn)效果</p><p><b>  3.1源程序及說明</b></p><p>  #include<reg52.h> //52系列單片機(jī)頭文件</p>&

17、lt;p>  #define uchar unsigned char //宏定義</p><p>  #define uint unsigned int</p><p>  sbit dula=P2^6; //申明U1鎖存器的鎖存端</p><p>  sbit wela=P2^7; //申明U2鎖存

18、器的鎖存端</p><p>  sbit key1=P3^4; //申明四個(gè)按鍵的鎖存端</p><p>  sbit key2=P3^5;</p><p>  sbit key3=P3^6;</p><p>  sbit key4=P3^7;</p><p>  uchar code ta

19、ble[]={ //含有0~9的數(shù)字?jǐn)?shù)組</p><p>  0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p><p>  0x7f,0x6f};</p><p>  void delayms(uint); //聲明延時(shí)函數(shù)</

20、p><p>  void display(uchar,uchar,uchar); //聲明顯示函數(shù)</p><p>  void keyscan(); //聲明按鍵函數(shù)</p><p>  uchar num1,num2,bai,shi,ge; //變量聲明</p><p><b>  uin

21、t num;</b></p><p>  void main() //主函數(shù)入口</p><p><b>  {</b></p><p>  TMOD=0x11; //設(shè)置TO,T1定時(shí)器</p><p>  TH0=(65536-4

22、5872)/256; //裝初值11.05992M晶振定時(shí)50ms數(shù)為45872</p><p>  TL0=(65536-45872)%256;</p><p>  TH1=(65536-45872)/256;</p><p>  TL1=(65536-45872)%256;</p><p>  EA=1; /

23、/開總中斷</p><p>  ET0=1; //開啟定時(shí)器T0中斷</p><p>  ET1=1; //開啟定時(shí)器T1中斷</p><p>  while(1) //程序停在這里等待中斷的發(fā)生,這個(gè)大循環(huán)也是實(shí)現(xiàn)數(shù)據(jù)顯示的主體</p><p><b>  {&

24、lt;/b></p><p>  keyscan();</p><p>  //三個(gè)數(shù)碼管要選送的數(shù)據(jù)</p><p>  bai=num/100; //百位 </p><p>  shi=(num-100*bai)/10; //十位</p><p>  ge=num-100*

25、bai-shi*10; //個(gè)位</p><p>  //直接把第二只數(shù)碼管的小數(shù)點(diǎn)燒出來</p><p>  dula=1; //打開段選</p><p>  P0=0x80; //送段選數(shù)據(jù)</p><p>  dula=0; //關(guān)閉斷選</p><p>  P0=

26、0xff; //送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)原來段選數(shù)據(jù)通過位鎖存端造成混亂</p><p>  wela=1; //打開位選</p><p>  P0=0xfd; //送位選數(shù)據(jù)</p><p>  wela=0; //關(guān)閉位選</p><p>  delay

27、ms(5); //延時(shí)</p><p>  display(bai,shi,ge); </p><p><b>  }</b></p><p><b>  }</b></p><p>  void display(uchar bai, uchar shi,uchar ge)</p

28、><p><b>  {</b></p><p>  dula=1; //打開段選</p><p>  P0=table[bai]; //送段選數(shù)據(jù)</p><p>  dula=0; //關(guān)閉斷選</p><p>  P0=0xff; //送位選數(shù)據(jù)前關(guān)閉所

29、有顯示,防止打開位選鎖存時(shí)原來段選數(shù)據(jù)通過位鎖存端造成混亂</p><p>  wela=1; //打開位選</p><p>  P0=0xfe; //送位選數(shù)據(jù)</p><p>  wela=0; //關(guān)閉位選</p><p>  delayms(5); //延時(shí)</p>

30、<p>  dula=1; //打開段選</p><p>  P0=table[shi]; //送段選數(shù)據(jù)</p><p>  dula=0; //關(guān)閉斷選</p><p>  P0=0xff;//送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)原來段選數(shù)據(jù)通過位鎖存端造成混亂</p><p>  

31、wela=1; //打開位選</p><p>  P0=0xfd; //送位選數(shù)據(jù)</p><p>  wela=0; //關(guān)閉位選</p><p>  delayms(5); //延時(shí)</p><p>  dula=1; //打開段選</p><p>  P0=ta

32、ble[ge]; //送段選數(shù)據(jù)</p><p>  dula=0; //關(guān)閉斷選</p><p>  P0=0xff; //送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)原來段選數(shù)據(jù)通過位鎖存端造成混亂</p><p>  wela=1; //打開位選</p><p>  P0=0xfb; //送位選數(shù)據(jù)<

33、/p><p>  wela=0; //關(guān)閉位選</p><p>  delayms(5); //延時(shí)</p><p><b>  }</b></p><p>  void delayms(uint xms) //延時(shí)子函數(shù)</p><p><b>  {</b

34、></p><p><b>  uint i,j;</b></p><p>  for(i=xms;i>0;i--) //i=xms即延時(shí)約xms毫秒</p><p>  for(j=110;j>0;j--);</p><p><b>  }</b></p&

35、gt;<p>  void keyscan()</p><p><b>  {</b></p><p>  if(key1==0) //清零</p><p><b>  {</b></p><p>  delayms(10);

36、//延時(shí)去抖</p><p>  if(key1==0) </p><p><b>  {</b></p><p>  while(!key1) //等待按下</p><p><b>  { </b></p><p>  TR0=0; //定時(shí)器TR0關(guān)閉&

37、lt;/p><p>  TR1=1; //定時(shí)器TR1打開</p><p>  num=0; //送數(shù)據(jù)num=0</p><p>  TR1=0; //定時(shí)器TR1關(guān)閉</p><p><b>  }</b></p><p><b>  }</b&

38、gt;</p><p><b>  }</b></p><p>  if(key2==0) //暫停和開始</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key2==0)&

39、lt;/p><p><b>  {</b></p><p>  while(!key2);</p><p><b>  TR0=0;</b></p><p>  TR1=~TR1; //每次按下,TR1的狀態(tài)時(shí)相反的</p><p><b>  }</b&g

40、t;</p><p><b>  }</b></p><p>  if(key3==0) //使計(jì)數(shù)器顯示為60.0</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key3

41、==0)</p><p><b>  {</b></p><p>  while(!key3); </p><p><b>  TR0=0;</b></p><p><b>  TR1=1;</b></p><p><b>  num=600;

42、</b></p><p><b>  TR1=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key4==0) //實(shí)現(xiàn)計(jì)數(shù)器的倒數(shù)功能</p>

43、<p><b>  {</b></p><p>  delayms(10);</p><p>  if(key4==0)</p><p><b>  {</b></p><p>  while(!key4);</p><p><b>  TR1=0;<

44、;/b></p><p><b>  TR0=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void T0_time(

45、)interrupt 1</p><p><b>  {</b></p><p>  TH0=(65536-45872)/256; //重裝初值</p><p>  TL0=(65536-45872)%256;</p><p><b>  num2++;</b></p><

46、;p>  if(num2==2) //如果到了2次,說明0.1秒的時(shí)間到</p><p><b>  {</b></p><p>  num2=0; //然后把num2清零重新再計(jì)2次</p><p><b>  num1++;</b></p>&

47、lt;p>  if(num1==10)</p><p>  num1=0; </p><p>  if(num==0) //當(dāng)num自減為0時(shí),重新為60.0,再開始倒計(jì)時(shí)</p><p><b>  num=600;</b></p><p>  num--;

48、 //num逐漸自減</p><p><b>  }</b></p><p><b>  }</b></p><p>  void T1_time()interrupt 3</p><p><b>  {</b></p><p>  TH1=(655

49、36-45872)/256; //重裝初值</p><p>  TL1=(65536-45872)%256; </p><p><b>  num2++;</b></p><p>  if(num2==2) //如果到了2次,說明0.1秒的時(shí)間到</p><p><b>  {&

50、lt;/b></p><p>  num2=0; //然后把num2清零重新再計(jì)2次</p><p><b>  num1++;</b></p><p>  if(num1==10)</p><p><b>  num1=0;</b></p><p

51、>  num++; //num逐漸自加</p><p>  if(num==600) //這個(gè)數(shù)十用來送給數(shù)碼管顯示的,到了60.0后歸零</p><p><b>  num=0; </b></p><p><b>  } </b></p><p><b>

52、;  }</b></p><p><b>  3.2原理圖分析</b></p><p><b>  按鍵原理圖 </b></p><p><b>  電源電路原理圖</b></p><p><b>  3.3實(shí)驗(yàn)效果</b></p>

53、<p>  通過最后軟件對(duì)程序的編譯,組建,執(zhí)行,還有最終生成.hex文件,把.hex下載到TX-1C開發(fā)板的STC89C52RC單片機(jī)上的最終效果圖如下:</p><p>  圖1.復(fù)位“00.0”</p><p>  圖2.復(fù)位“60.0”</p><p>  圖3.“開始自加”運(yùn)行</p><p>  圖4.“開始自減”運(yùn)

54、行</p><p><b>  4 參考文獻(xiàn)</b></p><p>  【1】孫育才編著.MCS-51系列單片微型計(jì)算機(jī)及其應(yīng)用.東南大學(xué)出版社.2009.12</p><p>  【2】郭天祥編著.51單片機(jī)C語言教程-入門、提高、開發(fā)、拓展全攻略.電子工業(yè)出版社.2010.05</p><p>  【3】劉剛編著.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論