單片機(jī)課程設(shè)計(jì)報(bào)告---單片機(jī)控制秒表系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩10頁(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><b>  摘要</b></p><p>  本設(shè)計(jì)是設(shè)計(jì)一個(gè)單片機(jī)控制秒表系統(tǒng)。</p><p>  近年來(lái)隨著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷的走向深入,同時(shí)帶動(dòng)著傳統(tǒng)控制檢測(cè)日新月異更新。在實(shí)時(shí)檢測(cè)和自動(dòng)控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往是作為一個(gè)核心部件來(lái)使用,僅單片機(jī)方面的知識(shí)是不夠的,還要根據(jù)具體的硬件結(jié)構(gòu),以及針對(duì)具體的應(yīng)用對(duì)象的軟

2、件結(jié)合,加以完善。秒表的出現(xiàn),解決了傳統(tǒng)的由于人為因素造成的誤差和不公平性。</p><p>  設(shè)計(jì)一個(gè)8位LED數(shù)碼顯示“多功能秒表”,初始顯示時(shí)間為00—00—00,每毫秒自動(dòng)加一,每十毫秒自動(dòng)加一秒。增加一個(gè)“復(fù)位按鍵(即清零),一個(gè)“暫停”和“開始”按鍵。其中軟件系統(tǒng)采用c語(yǔ)言編寫程序,包括顯示程序,加計(jì)數(shù)程序,中斷,延時(shí)程序,按鍵消抖程序等,簡(jiǎn)單切易于觀察,在仿真中就可以觀察到實(shí)際的工作狀態(tài)。<

3、/p><p>  關(guān)鍵字:?jiǎn)纹瑱C(jī),秒表,C語(yǔ)言</p><p><b>  目錄</b></p><p>  1課程設(shè)計(jì)的目的和任務(wù)</p><p>  1.1 單片機(jī)的功能</p><p>  1.2 單片機(jī)秒表課程設(shè)計(jì)的概述</p><p>  1.3課程設(shè)計(jì)思路及描述&l

4、t;/p><p>  1.4 課程設(shè)計(jì)任務(wù)和要求</p><p><b>  2軟件的設(shè)計(jì)流程</b></p><p><b>  2.1軟件方案設(shè)計(jì)</b></p><p>  3試驗(yàn)程序及設(shè)計(jì)效果</p><p><b>  3.1源程序及注釋</b>&

5、lt;/p><p><b>  3.2課程設(shè)計(jì)效果</b></p><p><b>  4 參考文獻(xiàn)</b></p><p>  1.1 單片機(jī)的功能</p><p>  單片機(jī)是一種集成在電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機(jī)存儲(chǔ)器 RAM、只讀存儲(chǔ)器ROM、多種

6、I/O口和中斷系統(tǒng)、定時(shí)器/計(jì)時(shí)器等功能(可能還包括顯示驅(qū)動(dòng)電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個(gè)小而完善的計(jì)算機(jī)系統(tǒng)。</p><p>  MCS-51系列單片機(jī),其主要功能如下:</p><p>  ·8位CPU·4kbytes 程序存儲(chǔ)器(ROM)·128bytes的數(shù)據(jù)存儲(chǔ)器(RAM)·32條I

7、/O口線·111條指令,大部分為單字節(jié)指令·21個(gè)專用寄存器·2個(gè)可編程定時(shí)/計(jì)數(shù)器·5個(gè)中斷源,2個(gè)優(yōu)先級(jí)·一個(gè)全雙工串行通信口·外部數(shù)據(jù)存儲(chǔ)器尋址空間為64kB·邏輯操作位尋址功能·雙列直插40PinDIP封裝·單一+5V電源供電</p><p>  40個(gè)引腳按引腳功能大致可分為4個(gè)種類:電源、時(shí)鐘、

8、控制和I/O引腳。 </p><p><b> ?、?電源: </b></p><p> ?、?VCC - 芯片電源,接+5V; </p><p>  ⑵ VSS - 接地端; </p><p>  注:用萬(wàn)用表測(cè)試單片機(jī)引腳電壓一般為0v或者5v,這是標(biāo)準(zhǔn)的TTL電平。但有時(shí)候在單片機(jī)程序正在工作時(shí)候測(cè)試結(jié)果并不是這個(gè)

9、值而是介于0v-5v之間,其實(shí)這是萬(wàn)用表的響應(yīng)速度沒(méi)這么快而已,在某一個(gè)瞬間單片機(jī)引腳電壓仍保持在0v或者5v。 </p><p> ?、?時(shí)鐘:XTAL1、XTAL2 - 晶體振蕩電路反相輸入端和輸出端。 </p><p> ?、?控制線:控制線共有4根, </p><p>  ⑴ ALE/PROG:地址鎖存允許/片內(nèi)EPROM編程脈沖 </p>&

10、lt;p> ?、?ALE功能:用來(lái)鎖存P0口送出的低8位地址 </p><p>  ② PROG功能:片內(nèi)有EPROM的芯片,在EPROM編程期間,此引腳輸入編程脈沖。 </p><p> ?、?PSEN:外ROM讀選通信號(hào)。 </p><p> ?、?RST/VPD:復(fù)位/備用電源。 </p><p> ?、?RST(Reset)功能

11、:復(fù)位信號(hào)輸入端。 </p><p> ?、?VPD功能:在Vcc掉電情況下,接備用電源。 </p><p> ?、?EA/Vpp:內(nèi)外ROM選擇/片內(nèi)EPROM編程電源。 </p><p>  ① EA功能:內(nèi)外ROM選擇端。 </p><p>  ② Vpp功能:片內(nèi)有EPROM的芯片,在EPROM編程期間,施加編程電源Vpp。 <

12、/p><p><b> ?、?I/O線 </b></p><p>  80C51共有4個(gè)8位并行I/O端口:P0、P1、P2、P3口,共32個(gè)引腳。 </p><p>  P3口還具有第二功能,用于特殊信號(hào)輸入輸出和控制信號(hào)(屬控制總線) </p><p>  5. P3口第二功能 </p><p>

13、  P30 RXD 串行輸入口 </p><p>  P31 TXD 串行輸出口 </p><p>  P32 INT0 外部中斷0(低電平有效) </p><p>  P33 INT1 外部中斷1(低電平有效) </p><p>  P34 T0 定時(shí)計(jì)數(shù)器0 </p><p>  P35 T1 定時(shí)計(jì)數(shù)器1 <

14、;/p><p>  P36 WR 外部數(shù)據(jù)存儲(chǔ)器寫選通(低電平有效) </p><p>  P37 RD 外部數(shù)據(jù)存儲(chǔ)器讀選通(低電平有效)1.2 單片機(jī)秒表課程設(shè)計(jì)的概述</p><p>  設(shè)計(jì)一個(gè)單片機(jī)控制的秒表系統(tǒng)。利用單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,結(jié)合顯示電路、LED數(shù)碼管以及按鍵來(lái)設(shè)計(jì)計(jì)時(shí)器。將軟、硬件有機(jī)地結(jié)合起來(lái),使得系統(tǒng)能夠正確地進(jìn)行加計(jì)時(shí)

15、,數(shù)碼管能夠正確地顯示時(shí)間。</p><p>  1.3課程設(shè)計(jì)思路及描述</p><p>  1. 開機(jī)時(shí)數(shù)碼管顯示00—00—00秒。</p><p>  2. 八位數(shù)碼管顯示,顯示時(shí)間為00—00—00秒。</p><p>  3. 每毫秒自動(dòng)加一,每一百毫秒自動(dòng)加一秒。 </p><p>  4. 按鍵控制計(jì)數(shù)

16、,用一個(gè)按鍵同時(shí)控制開始計(jì)數(shù)、停止計(jì)數(shù)和歸零</p><p><b>  5. 方框圖如下圖</b></p><p><b>  6 實(shí)驗(yàn)電路</b></p><p><b>  . </b></p><p>  1.4 課程設(shè)計(jì)任務(wù)和要求</p><p&g

17、t;<b>  1.設(shè)計(jì)要求</b></p><p><b>  理解實(shí)驗(yàn)原理</b></p><p><b>  軟件編程與調(diào)試;</b></p><p><b>  電路仿真與調(diào)試;</b></p><p>  寫出完整、詳細(xì)的課程設(shè)計(jì)報(bào)告。</

18、p><p><b>  2.1軟件方案設(shè)計(jì)</b></p><p>  在軟件設(shè)計(jì)中,一般采用模塊化的程序設(shè)計(jì)方法,它具有明顯的優(yōu)點(diǎn)。把一個(gè)多功能的復(fù)雜的程序劃分為若干個(gè)簡(jiǎn)單的、功能單一的程序模塊,有利于程序的設(shè)計(jì)和調(diào)試,有利于程序的優(yōu)化和分工,提高了程序的閱讀性和可靠性,使程序的結(jié)構(gòu)層次一目了然。</p><p>  應(yīng)用系統(tǒng)的程序由包含多個(gè)模塊

19、的主程序和各種子程序組成。各程序模塊都要完成一個(gè)明確的任務(wù),實(shí)現(xiàn)某個(gè)具體的功能,如:加計(jì)數(shù)延時(shí),計(jì)數(shù)和顯示等,在具體需要時(shí)調(diào)用相應(yīng)的模塊即可。</p><p><b>  3.1源程序及注釋</b></p><p>  #include <reg51.h> </p><p>  #include <intrins.h&g

20、t; </p><p>  #define uchar unsigned char </p><p>  void delay_ms(uchar ms); // 延時(shí)毫秒@12M,ms最大值255 </p><p>  void key_scan(); // 按鍵掃描 </p><p>  void

21、 key_to(); // 按鍵處理 </p><p>  uchar code dis_code[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; </p><p>  //0 1 2 3 4 5 6 7 8 9 — </p><p>

22、;  uchar data dis[8]; // dis[0]為百分之一秒值,dis[1]為十分之一秒值 </p><p>  // dis[2],dis[5]為'-'段碼的偏移量 </p><p>  // dis[3]為秒個(gè)位值,dis[4]為秒十位值 </p><p>  // dis[6]為分個(gè)位值,dis[7]

23、為分十位值 </p><p>  uchar data dot = 0; // 百分之一秒計(jì)數(shù)器(0.00s-0.99s) </p><p>  uchar data sec = 0; // 秒計(jì)數(shù)器(00s-59s) </p><p>  uchar data min = 0; // 分計(jì)數(shù)器(00m-99m)

24、 </p><p>  uchar data dis_b; // dis_b為位碼選通數(shù)碼管 </p><p>  uchar data dis_r; // dis_r為取段碼時(shí)的偏移量 </p><p>  uchar data key_t = 0; // 按鍵次數(shù),初始為0 </p><p&

25、gt;  sbit K = P1^4; // K鍵與P1.4相連 </p><p>  sbit wela=P2^3;</p><p>  sbit dula=P2^2; </p><p>  void main() </p><p><b>  { </b></p&

26、gt;<p>  P0= 0xff; // 關(guān)所有數(shù)碼管 改 </p><p>  P1 = 0xff; // p1為準(zhǔn)雙向口,作輸入時(shí)先寫1 </p><p>  dis[2] = 10; // '-'在段碼表中偏

27、移量為10 </p><p>  dis[5] = 10; // '-'在段碼表中偏移量為10 </p><p>  dis_b = 0x7f; // 初始選通P2.7口數(shù)碼管 </p><p>  dis_r = 0; // 初始化偏移量為0 </p><

28、p><b>  wela=0;</b></p><p>  dula=0; </p><p>  TMOD = 0x11; // 定時(shí)/計(jì)數(shù)器0,1工作于方式1 </p><p>  TH0 = 0xd8; // 預(yù)置定時(shí)常數(shù)55536(d8f0),產(chǎn)生10ms時(shí)基信號(hào) </p&g

29、t;<p>  TL0 = 0xf0; </p><p>  TH1 = 0xfc; // 預(yù)置定時(shí)常數(shù)64536(fc18),產(chǎn)生1ms間隔用于動(dòng)態(tài)顯示 </p><p>  TH1 = 0x18; </p><p>  EA = 1; // 開總中斷 </p><

30、;p>  ET0 = 1; // 定時(shí)/計(jì)數(shù)器0允許中斷 </p><p>  ET1 = 1; // 定時(shí)/計(jì)數(shù)器1允許中斷 </p><p>  TR0 = 0; // 關(guān)閉定時(shí)/計(jì)數(shù)器0 </p><p>  TR1 = 1; // 啟動(dòng)定時(shí)

31、/計(jì)數(shù)器1 </p><p>  while(1) </p><p><b>  { </b></p><p>  if(K != 1) // 有鍵按下 </p><p><b>  { </b></p><p>  de

32、lay_ms(10); // 延時(shí)10ms去抖 </p><p>  if(K != 1) // 確定是有鍵按下 </p><p><b>  { </b></p><p>  while(K != 1); // 等待鍵松開 </p><p>  key_to();

33、 // 按鍵處理 </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p&

34、gt;  void key_to() // 按鍵處理子程序 </p><p><b>  { </b></p><p>  key_t++; // 按鍵次數(shù)加1 </p><p>  if(key_t == 1) // 第一次按下

35、 </p><p>  TR0 = 1; // 啟動(dòng)定時(shí)器0 </p><p><b>  else </b></p><p><b>  { </b></p><p>  if(key_t == 2) // 第二次按下 </

36、p><p>  TR0 = 0; // 關(guān)閉定時(shí)器0 </p><p><b>  else </b></p><p><b>  { </b></p><p>  if(key_t == 3) // 第三次按下 </p><p>

37、;<b>  { </b></p><p>  dot = 0; // 三個(gè)計(jì)數(shù)器清零 </p><p>  sec = 0; </p><p>  min = 0; </p><p>  key_t = 0; // 按鍵次數(shù)清零 </p><p>

38、;<b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p>  void tiem0(void) interrupt 1

39、 // T/C0中斷服務(wù)程序(產(chǎn)生10ms時(shí)基信號(hào)) </p><p><b>  { </b></p><p>  dot++; // 百分之一秒計(jì)數(shù)器加1 </p><p>  if(dot == 100) // 計(jì)數(shù)值到100 </p>

40、<p><b>  { </b></p><p>  dot = 0; // 清零 </p><p>  sec++; // 秒計(jì)數(shù)器加1(進(jìn)位10ms*100=1s) </p><p>  if(sec == 60) // 秒計(jì)數(shù)值到

41、60 </p><p><b>  { </b></p><p>  sec = 0; // 秒計(jì)數(shù)器清零 </p><p>  min++; // 分計(jì)數(shù)器加1(進(jìn)位60s=1m) </p><p>  if(min == 100) // 分計(jì)

42、數(shù)到100 </p><p>  min = 0; // 分計(jì)數(shù)器清零 </p><p><b>  } </b></p><p><b>  } </b></p><p>  TH0 = 0xd8; // 重置定時(shí)常數(shù) <

43、;/p><p>  TL0 = 0xf0; </p><p><b>  } </b></p><p>  void time1(void) interrupt 3 // T/C1中斷服務(wù)程序(延時(shí)1ms數(shù)碼管動(dòng)態(tài)顯示) </p><p><b>  { </b></p

44、><p>  dis[0] = dot % 10; // 百分之一秒計(jì)數(shù)器個(gè)位分離出來(lái)賦紿dis[0] </p><p>  dis[1] = dot / 10; // 百分之一秒計(jì)數(shù)器十位分離出來(lái)賦紿dis[1] </p><p>  dis[3] = sec % 10; // 秒計(jì)數(shù)器個(gè)位賦紿dis[3]

45、 </p><p>  dis[4] = sec / 10; // 秒計(jì)數(shù)器十位賦紿dis[4] </p><p>  dis[6] = min % 10; // 分計(jì)數(shù)器個(gè)位賦紿dis[6] </p><p>  dis[7] = min / 10; // 分計(jì)數(shù)器十位賦紿dis[7] <

46、/p><p>  P0 = dis_code[dis[dis_r]]; </p><p><b>  dula=1;</b></p><p>  dula=0;// 段碼送P0口(dis[0]...dis[7]) 改 </p><p><b>  P0 = 0;</b></p><

47、;p>  P0 = dis_b; // 位碼送P2口 </p><p>  wela=1; </p><p><b>  wela=0;</b></p><p>  dis_r++; // 偏移量加1,下次中斷時(shí)顯示下個(gè)數(shù) </p><p&

48、gt;  dis_r &= 0x07; // dis_r增到8時(shí)自動(dòng)清0(使之在0到7間循環(huán)) </p><p>  dis_b = _cror_(dis_b,1); // 位碼循環(huán)右移,下次中斷時(shí)選通下個(gè)數(shù)碼管 </p><p>  TH1 = 0xfc; // 重置定時(shí)常數(shù) </p>&l

49、t;p>  TL1 = 0x18; </p><p><b>  } </b></p><p>  void delay_ms(uchar ms) // 延時(shí)毫秒@12M,ms最大值255 </p><p><b>  { </b></p><p>  uc

50、har i; </p><p>  while(ms--) </p><p>  for(i = 0; i < 124; i++); </p><p><b>  } </b></p><p><b>  3.2課程設(shè)計(jì)效果</b></p><p&g

51、t;<b>  1.整體效果</b></p><p><b>  2.開始倒計(jì)時(shí)</b></p><p>  3.倒計(jì)時(shí)到不同時(shí)間</p><p><b>  4 參考文獻(xiàn)</b></p><p>  【1】郭天祥編著.51單片機(jī)C語(yǔ)言教程-入門、提高、開發(fā)、拓展全攻略.電子工

溫馨提示

  • 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)論