版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 摘要</b></p><p> 本設(shè)計(jì)是設(shè)計(jì)一個單片機(jī)控制秒表系統(tǒng)。</p><p> 近年來隨著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷的走向深入,同時帶動著傳統(tǒng)控制檢測日新月異更新。在實(shí)時檢測和自動控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往是作為一個核心部件來使用,僅單片機(jī)方面的知識是不夠的,還要根據(jù)具體的硬件結(jié)構(gòu),以及針對具體的應(yīng)用對象的軟
2、件結(jié)合,加以完善。秒表的出現(xiàn),解決了傳統(tǒng)的由于人為因素造成的誤差和不公平性。</p><p> 設(shè)計(jì)一個8位LED數(shù)碼顯示“多功能秒表”,初始顯示時間為00—00—00,每毫秒自動加一,每十毫秒自動加一秒。增加一個“復(fù)位按鍵(即清零),一個“暫?!焙汀伴_始”按鍵。其中軟件系統(tǒng)采用c語言編寫程序,包括顯示程序,加計(jì)數(shù)程序,中斷,延時程序,按鍵消抖程序等,簡單切易于觀察,在仿真中就可以觀察到實(shí)際的工作狀態(tài)。<
3、/p><p> 關(guān)鍵字:單片機(jī),秒表,C語言</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ī)存儲器 RAM、只讀存儲器ROM、多種
6、I/O口和中斷系統(tǒng)、定時器/計(jì)時器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個小而完善的計(jì)算機(jī)系統(tǒng)。</p><p> MCS-51系列單片機(jī),其主要功能如下:</p><p> ·8位CPU·4kbytes 程序存儲器(ROM)·128bytes的數(shù)據(jù)存儲器(RAM)·32條I
7、/O口線·111條指令,大部分為單字節(jié)指令·21個專用寄存器·2個可編程定時/計(jì)數(shù)器·5個中斷源,2個優(yōu)先級·一個全雙工串行通信口·外部數(shù)據(jù)存儲器尋址空間為64kB·邏輯操作位尋址功能·雙列直插40PinDIP封裝·單一+5V電源供電</p><p> 40個引腳按引腳功能大致可分為4個種類:電源、時鐘、
8、控制和I/O引腳。 </p><p><b> ⒈ 電源: </b></p><p> ?、?VCC - 芯片電源,接+5V; </p><p> ⑵ VSS - 接地端; </p><p> 注:用萬用表測試單片機(jī)引腳電壓一般為0v或者5v,這是標(biāo)準(zhǔn)的TTL電平。但有時候在單片機(jī)程序正在工作時候測試結(jié)果并不是這個
9、值而是介于0v-5v之間,其實(shí)這是萬用表的響應(yīng)速度沒這么快而已,在某一個瞬間單片機(jī)引腳電壓仍保持在0v或者5v。 </p><p> ?、?時鐘:XTAL1、XTAL2 - 晶體振蕩電路反相輸入端和輸出端。 </p><p> ?、?控制線:控制線共有4根, </p><p> ?、?ALE/PROG:地址鎖存允許/片內(nèi)EPROM編程脈沖 </p>&
10、lt;p> ?、?ALE功能:用來鎖存P0口送出的低8位地址 </p><p> ② PROG功能:片內(nèi)有EPROM的芯片,在EPROM編程期間,此引腳輸入編程脈沖。 </p><p> ⑵ PSEN:外ROM讀選通信號。 </p><p> ⑶ RST/VPD:復(fù)位/備用電源。 </p><p> ① RST(Reset)功能
11、:復(fù)位信號輸入端。 </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個8位并行I/O端口:P0、P1、P2、P3口,共32個引腳。 </p><p> P3口還具有第二功能,用于特殊信號輸入輸出和控制信號(屬控制總線) </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 定時計(jì)數(shù)器0 </p><p> P35 T1 定時計(jì)數(shù)器1 <
14、;/p><p> P36 WR 外部數(shù)據(jù)存儲器寫選通(低電平有效) </p><p> P37 RD 外部數(shù)據(jù)存儲器讀選通(低電平有效)1.2 單片機(jī)秒表課程設(shè)計(jì)的概述</p><p> 設(shè)計(jì)一個單片機(jī)控制的秒表系統(tǒng)。利用單片機(jī)的定時器/計(jì)數(shù)器定時和記數(shù)的原理,結(jié)合顯示電路、LED數(shù)碼管以及按鍵來設(shè)計(jì)計(jì)時器。將軟、硬件有機(jī)地結(jié)合起來,使得系統(tǒng)能夠正確地進(jìn)行加計(jì)時
15、,數(shù)碼管能夠正確地顯示時間。</p><p> 1.3課程設(shè)計(jì)思路及描述</p><p> 1. 開機(jī)時數(shù)碼管顯示00—00—00秒。</p><p> 2. 八位數(shù)碼管顯示,顯示時間為00—00—00秒。</p><p> 3. 每毫秒自動加一,每一百毫秒自動加一秒。 </p><p> 4. 按鍵控制計(jì)數(shù)
16、,用一個按鍵同時控制開始計(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ì)報告。</
18、p><p><b> 2.1軟件方案設(shè)計(jì)</b></p><p> 在軟件設(shè)計(jì)中,一般采用模塊化的程序設(shè)計(jì)方法,它具有明顯的優(yōu)點(diǎn)。把一個多功能的復(fù)雜的程序劃分為若干個簡單的、功能單一的程序模塊,有利于程序的設(shè)計(jì)和調(diào)試,有利于程序的優(yōu)化和分工,提高了程序的閱讀性和可靠性,使程序的結(jié)構(gòu)層次一目了然。</p><p> 應(yīng)用系統(tǒng)的程序由包含多個模塊
19、的主程序和各種子程序組成。各程序模塊都要完成一個明確的任務(wù),實(shí)現(xiàn)某個具體的功能,如:加計(jì)數(shù)延時,計(jì)數(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); // 延時毫秒@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]為秒個位值,dis[4]為秒十位值 </p><p> // dis[6]為分個位值,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為取段碼時的偏移量 </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)雙向口,作輸入時先寫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; // 定時/計(jì)數(shù)器0,1工作于方式1 </p><p> TH0 = 0xd8; // 預(yù)置定時常數(shù)55536(d8f0),產(chǎn)生10ms時基信號 </p&g
29、t;<p> TL0 = 0xf0; </p><p> TH1 = 0xfc; // 預(yù)置定時常數(shù)64536(fc18),產(chǎn)生1ms間隔用于動態(tài)顯示 </p><p> TH1 = 0x18; </p><p> EA = 1; // 開總中斷 </p><
30、;p> ET0 = 1; // 定時/計(jì)數(shù)器0允許中斷 </p><p> ET1 = 1; // 定時/計(jì)數(shù)器1允許中斷 </p><p> TR0 = 0; // 關(guān)閉定時/計(jì)數(shù)器0 </p><p> TR1 = 1; // 啟動定時
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); // 延時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; // 啟動定時器0 </p><p><b> else </b></p><p><b> { </b></p><p> if(key_t == 2) // 第二次按下 </
36、p><p> TR0 = 0; // 關(guān)閉定時器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; // 三個計(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時基信號) </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ù) <
43、;/p><p> TL0 = 0xf0; </p><p><b> } </b></p><p> void time1(void) interrupt 3 // T/C1中斷服務(wù)程序(延時1ms數(shù)碼管動態(tài)顯示) </p><p><b> { </b></p
44、><p> dis[0] = dot % 10; // 百分之一秒計(jì)數(shù)器個位分離出來賦紿dis[0] </p><p> dis[1] = dot / 10; // 百分之一秒計(jì)數(shù)器十位分離出來賦紿dis[1] </p><p> dis[3] = sec % 10; // 秒計(jì)數(shù)器個位賦紿dis[3]
45、 </p><p> dis[4] = sec / 10; // 秒計(jì)數(shù)器十位賦紿dis[4] </p><p> dis[6] = min % 10; // 分計(jì)數(shù)器個位賦紿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ù) </p><p&
48、gt; dis_r &= 0x07; // dis_r增到8時自動清0(使之在0到7間循環(huán)) </p><p> dis_b = _cror_(dis_b,1); // 位碼循環(huán)右移,下次中斷時選通下個數(shù)碼管 </p><p> TH1 = 0xfc; // 重置定時常數(shù) </p>&l
49、t;p> TL1 = 0x18; </p><p><b> } </b></p><p> void delay_ms(uchar ms) // 延時毫秒@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ì)時</b></p><p> 3.倒計(jì)時到不同時間</p><p><b> 4 參考文獻(xiàn)</b></p><p> 【1】郭天祥編著.51單片機(jī)C語言教程-入門、提高、開發(fā)、拓展全攻略.電子工
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)報告---單片機(jī)秒表系統(tǒng)設(shè)計(jì)
- 單片機(jī)秒表單片機(jī)課程設(shè)計(jì)
- 單片機(jī)秒表課程設(shè)計(jì)報告
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的秒表系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的秒表設(shè)計(jì)單片機(jī)課程設(shè)計(jì)
- 單片機(jī)秒表課程設(shè)計(jì)
- 單片機(jī)秒表課程設(shè)計(jì)
- 單片機(jī)秒表課程設(shè)計(jì)
- 單片機(jī)秒表系統(tǒng)課程設(shè)計(jì)
- 單片機(jī)控制的秒表系統(tǒng)課程設(shè)計(jì)
- 單片機(jī)秒表設(shè)計(jì)課程設(shè)計(jì)報告
- 單片機(jī)課程設(shè)計(jì)報告-秒表設(shè)計(jì)
- 單片機(jī)秒表系統(tǒng)設(shè)計(jì)課程設(shè)計(jì)--基于8051的單片機(jī)秒表系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報告-秒表設(shè)計(jì)
- 單片機(jī)秒表設(shè)計(jì)課程設(shè)計(jì)報告
- 單片機(jī)秒表設(shè)計(jì)課程設(shè)計(jì)報告
- 單片機(jī)課程設(shè)計(jì)---秒表
- 單片機(jī)秒表課程設(shè)計(jì)
- 秒表(單片機(jī)課程設(shè)計(jì))
- 單片機(jī)課程設(shè)計(jì)--秒表系統(tǒng)設(shè)計(jì)
評論
0/150
提交評論