版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 本科畢業(yè)設(shè)計(論文)</p><p><b> ?。?0 屆)</b></p><p> 基于單片機的多功能電子跑表</p><p><b> 目錄</b></p><p><b> 摘要II</b></p><p>
2、AbstractIII</p><p><b> 第一章 緒論1</b></p><p> 1.1 單片機的概述1</p><p> 1.1.1 單片機的發(fā)展和定義1</p><p> 1.1.2 單片機的特點1</p><p> 第二章 材料選擇與設(shè)計思路2<
3、;/p><p> 2.1 材料選擇2</p><p> 2.1.2 單片機的選擇2</p><p> 2.1.2 LED顯示2</p><p> 2.1.3 鍵盤3</p><p> 2.2 設(shè)計思路3</p><p> 第三章 主要技術(shù)的設(shè)計5</p>
4、;<p> 3.1 主要技術(shù)5</p><p> 3.2 主要的設(shè)計方案5</p><p> 3.2.1 定時器5</p><p> 3.2.2 顯示8</p><p> 3.2.3 鍵盤9</p><p> 3.2.4 利用定時中斷進行顯示和查鍵9</p>
5、<p> 第四章 電路12</p><p> 4.1 復位電路12</p><p> 4.2 元件及其作用12</p><p> 4.3 I/0接口13</p><p> 第五章 程序14</p><p> 5.1 程序流程圖14</p><p>
6、; 5.1.1 秒表的計時功能14</p><p> 5.1.2秒表的倒計時功能流程圖15</p><p> 5.2 程序16</p><p> 第六章 總結(jié)17</p><p><b> 參考文獻18</b></p><p><b> 附錄19</
7、b></p><p> 基于單片機的多功能電子跑表</p><p><b> 摘要 </b></p><p> 采用單片機技術(shù)制作一個具有到計時功能和多次數(shù)據(jù)計時并回顯的多功能跑表。我們采用51單片機做為核心!單片機具體型號為SST89E516RD2是SST公司8位微處理器 FlashFlex51 系列的成員,是采用先進的閃存 CM
8、OS 半導體技術(shù)設(shè)計和制造,這些器件是采用8051的指令集,并和標準的 8051控制器管腳兼容。芯片內(nèi)部帶有 16/24/40/72Kbyte 的片內(nèi) FLASH EEPROM 存儲器,使用了 SST 公司專利的 CMOS閃存技術(shù),存儲器被分成兩塊獨立的程序存儲器,第一塊(BLOCK0)占用 8/16/32/64Kbyte 的內(nèi)部程序存儲器空間,第二塊(BLOCK0)占用 8Kbyte 的內(nèi)部程序存儲器空間。8Kbyte 的第二塊 FL
9、ASH可以映射到 8/16/32/64Kbyte 空間的低地址,還可以被隱藏和當成類似 EEPROM 的獨立的數(shù)據(jù)存儲器。</p><p> 本次設(shè)計采用SST89E516RD2為核心加上必要的電路,再用共陰7段數(shù)碼管4個進行顯示輸出,用按鍵控制功能選擇,因為SST89E516RD2電源是 4.50V - 5.50V 操作,工作頻率 0~40MHz所以我們采用5V電源進行供電。</p><p
10、> 設(shè)計分為(1)功能描述(2)系統(tǒng)構(gòu)建和材料選擇(3)制作方案和制作流程圖(4)程序設(shè)計(5)電路。</p><p> 如何應用單片機技術(shù)是我的畢業(yè)設(shè)計的核心!~隨著科學技術(shù)的不段發(fā)展,單片機技術(shù)已經(jīng)成為現(xiàn)在智能化的高科技技術(shù)產(chǎn)品的核心和基礎(chǔ)。單片機知識對于即將畢業(yè)的我們有著很重要的意義。</p><p> 關(guān)鍵詞:單片機,多功能電子跑表,共陰7段數(shù)碼管</p>
11、<p> Microcontroller-based Multi-Function Electronic Stopwatch</p><p><b> Abstract</b></p><p> SCM technology can be used to make a memory of multiple sets of data and time
12、when the record is complete data set can display memory! We use 51 microcontroller as the core! ~ SCM specific model for the SST89E516RD2 SST company is 8-bit microcontroller FlashFlex51 family members,Flash memory is th
13、e use of advanced design and manufacturing CMOS semiconductor technology, these devices are using the 8051 instruction set, and the standard 8051 pin-compatible controller. With 16/24/40/72Kbyte chip FL</p><p&
14、gt; Design is divided into (1) Features (2) systems engineering and material selection (3) production programs and production flow chart (4) programming (5) circuit (6) production in kind。How to use microcontroller tech
15、nology is the core of my graduation! ~ not of science and technology with the development of intelligent single chip technology has become a high technology products are now the core and foundation. SCM knowledge is abou
16、t to graduate we have very important significance.Keywords:SCM ;</p><p><b> 第一章 緒論</b></p><p> 1.1 單片機的概述</p><p> 1.1.1 單片機的發(fā)展和定義</p><p> 在一片集成電路芯片上
17、集成微處理器、存儲器、I/O接口電路,從而構(gòu)成了單芯片微型計算機,即單片機。又稱:微控制器。</p><p> 單片機技術(shù)發(fā)展過程可分為三個主要階段: </p><p> 單片機的初級階段 1974年~1978年,Intel公司推出了MCS-48系列單片機 。8位CPU、1K字節(jié)ROM、64字節(jié)RAM、27根I/O線和1個8位定時/計數(shù)器。特點是:存儲器容量較小,尋址范圍?。ú淮笥?K
18、),無串行接口,指令系統(tǒng)功能不強。</p><p> 高性能階段1980年,Intel公司推出了MCS-51系列單片機:8位CPU、4K字節(jié)ROM、128字節(jié)RAM、4個8位并口、1個全雙工串行口、2個16位定時/計數(shù)器。尋址范圍64K,并有控制功能較強的布爾處理器。結(jié)構(gòu)體系完善,性能已大大提高,面向控制的特點進一步突出?,F(xiàn)在,MCS-51已成為公認的單片機經(jīng)典機種。</p><p>
19、 微控制器化階段1982年,Intel推出MCS-96系列單片機。芯片內(nèi)集成:16位CPU、8K字節(jié)ROM、232字節(jié)RAM、5個8位并口、1個全雙工串行口、2個16位定時/計數(shù)器。尋址范圍64K。片上還有8路10位ADC、1路PWM輸出及高速I/O部件等。特點是:片內(nèi)面向測控系統(tǒng)外圍電路增強,使單片機可以方便靈活地用于復雜的自動測控系統(tǒng)及設(shè)備?!拔⒖刂破鳌钡姆Q謂更能反應單片機的本質(zhì)。</p><p> 1.1
20、.2 單片機的特點</p><p> 控制性能和可靠性,高實時控制功能特別強,其CPU可以對I/O端口直接進行操作,位操作能力更是其它計算機無法比擬的。另外,由于CPU、存儲器及I/O接口集成在同一芯片內(nèi),各部件間的連接緊湊,數(shù)據(jù)在傳送時受干擾的影響較小,且不易受環(huán)境條件的影響,所以單片機的可靠性非常高。</p><p> 第二章 設(shè)計思路與材料選擇</p><
21、p><b> 2.1 設(shè)計思路</b></p><p> 為了實現(xiàn)秒表的計時,需要利用單片機實現(xiàn)百分之一秒(10ms)的中斷,在中斷程序中實現(xiàn)數(shù)字的變化,并動態(tài)顯示出來。</p><p> 顯示采用的是動態(tài)掃描的方法。動態(tài)掃描的方法其實很簡單,就是輪流點亮各數(shù)碼管,同時把各數(shù)碼管所需要的字符送到對應的 I/O口;而中間需要有一定的延時,原因是單片機每一條
22、指令執(zhí)行的時間很短,如果切換得太快的話,發(fā)光二極管都來不及反應,在編程上可以加上一個延時子程序來解決。</p><p> 設(shè)置按鍵1.2.來控制計時的啟/停和倒計時模式下初值的設(shè)定,按鍵3來控制連續(xù)8次計時和倒計時模式的轉(zhuǎn)換,采用軟件消抖方式進行處理。</p><p> 采用復位電路對單片機進行重置。</p><p><b> 2.2 材料選擇&l
23、t;/b></p><p> 電子跑表其實就是一個單片機的最小系統(tǒng),單片機、晶振、復位電路、鍵盤輸入電路、顯示電路構(gòu)成了這個最小系統(tǒng)。以下是我們對該最小系統(tǒng)的基本部件的分析選擇。</p><p> 2.2.1 單片機的選擇</p><p> 本次設(shè)計對單片機的數(shù)據(jù)存儲和數(shù)據(jù)的處理要求都不高,所以選擇的單片機要求也不太高STT公司的SST89E516RD
24、與 805的軟件完全兼容,開發(fā)工具兼容,封裝與引腳兼容。其內(nèi)部 RAM 共有 1Kbyte(256Byte + 768Byte)256Bytes 寄存器/數(shù)據(jù) RAM,內(nèi)含兩塊高性能 SuperFlash 存儲器(EEPROM)8K/16K/32K/64Kbyte 的主存儲塊 + 8Kbyte 的次存儲塊(每個塊的扇區(qū)大小都是 128Byte)用 SoftLock 可以獨立地對每個塊進行安全加鎖。實現(xiàn)應用中再編程(IAP:In-Appl
25、ication-Programming)兩塊可同時操作。在 IAP 過程中可實現(xiàn)存儲器的覆蓋,支持中斷響應。支持最大 64KByte 外部程序和數(shù)據(jù)存儲空間P1 的 5、6、7 等三個引腳可驅(qū)動大電流(每個可達 16mA)3 個 16 位定時/計數(shù)器(T0,T1,T2)全雙工增強型串行通訊口(UART) 幀錯誤</p><p> 識別自動地址識別,10 個中斷源,4 個優(yōu)先級,提供 4 個外部中斷輸入,帶內(nèi)部可
26、編程看門狗(WDT),可編程計數(shù)器陣列(PCA),4 個 8 位 I/O 口(32 個 I/O 引腳)和 1 個 4 位口,共 36 個 I/O。這款51單片機具備我們本次設(shè)計所需要的所有功能,同時他也是市面上常見的一款單片機,所以我們選擇它作為本次設(shè)計的單片機。</p><p> 2.2.2 LED顯示</p><p> 通常把數(shù)碼管、符號管、米字管共稱為筆畫顯示器;而把筆畫顯示器
27、和矩陣管統(tǒng)稱為字符顯示器。因為我們這里采用的7段數(shù)碼管所以我們詳細介紹一下數(shù)碼管的分類:數(shù)碼管可以按字高、顏色、結(jié)構(gòu)、各發(fā)光段的連接方式等進行分類。按照各發(fā)光段的連接方式分,數(shù)碼管可分為共陽極和共陰極兩種。</p><p> 所謂的共陽方式就是筆畫顯示器各段發(fā)光管的陽極是公共的,而陰極是互相隔離的。</p><p> 所謂的共陰方式就是筆畫顯示器各段發(fā)光管的陰極是公共的,而陽極是互相隔
28、離的</p><p> LED 顯示的原理。如圖 2.1所示為七段 LED 數(shù)碼管的原理圖,通過該圖可以很容易地看出共陽極和共陰極的七段 LED 管的工作原理的不同點。對于共陰極的數(shù)碼管,所有發(fā)光二極管的陰極共連后接地,而陽極引出腳用于控制 LED 是否點亮。若陽極引出腳接地,則 LED 被熄滅;若陽極引出腳接高電平,則 LED 被點亮。</p><p> 圖2.1 7段數(shù)碼管的原理
29、圖</p><p> 共陽極的 LED 正好相反,所有發(fā)光二極管的陽極共連后接高電平,而陽極引出腳用于控制 LED是否點亮。若陰極引出腳接高電平,則 LED 被熄滅;若陰極引出腳接地,則 LED 被點亮。因此共陽極和共陰極所需要的字型碼正好相反。這里我們選用的是共</p><p> 陰數(shù)碼管進行本次設(shè)計。</p><p><b> 2.2.3 鍵盤
30、</b></p><p> 外部指令對單片機的輸入一般都是通過鍵盤等輸入器件來實現(xiàn)的,而鍵盤的設(shè)計以及編程。方法在本設(shè)計中將會重點介紹。在設(shè)計中,是利用鍵盤來實現(xiàn)秒表的啟??刂萍肮δ艿倪x擇。</p><p> 第三章 主要技術(shù)的設(shè)計</p><p> 3.1 主要技術(shù) </p><p> 單片機電子跑表需要解決的三個最
31、主要的核心技術(shù)是:</p><p> 如何使用單片機的的定時器。</p><p> 如何實現(xiàn)動態(tài)掃描顯示。</p><p> 如何寫鍵盤的輸入控制程序。</p><p> 3.2 主要的設(shè)計方案</p><p> 3.2.1 定時器</p><p> 單片機中定時器的使用是一項重
32、要的內(nèi)容,也是一項基本的內(nèi)容。由于內(nèi)容太多就不詳細介紹了,在后面的設(shè)計中將會穿插說明。</p><p> 這里我們利用單片機百分之一秒(10ms)的中斷,在中斷程序中實現(xiàn)數(shù)字的變化并動態(tài)顯示出來,從而實現(xiàn)秒表的計時。</p><p> 以下是具體的程序?qū)崿F(xiàn):</p><p><b> 程序:</b></p><p>
33、;<b> 定義</b></p><p> //定義共陽極字符編碼表</p><p> uchar code TABLE[10]={0xa0,0xf9,0xc4,0xd0,0x99,0x92,0x82,0xf8,0x80,0x98};</p><p> uint m;//計數(shù)值</p><p> uint LE
34、D0,LED1,LED2,LED3; //各位的數(shù)值</p><p> uchar ms;//用于表示數(shù)碼管顯示位及計算是否 10ms 到設(shè)定定時器 T0 的工作方式</p><p> TMOD=0x01;//T0 方式 1 計時 1ms</p><p><b> TL0=0x18;</b></p><p><
35、;b> TH0=0xfc;</b></p><p> EA=1;//開中斷,啟動定時器</p><p><b> ET0=1;</b></p><p><b> TR0=1;</b></p><p> 動態(tài)顯示字符的子程序</p><p> vo
36、id display(void)</p><p><b> {</b></p><p> switch (ms%4){</p><p><b> case 0:</b></p><p> P3=0xfe;//點亮百分一秒位的 LED 數(shù)碼管</p><p> P1=
37、table[LED3]; //輸出百分一秒位數(shù)值</p><p><b> P1_7=1;</b></p><p><b> break;</b></p><p><b> case 1:</b></p><p><b> P3=0xfd;</b>
38、</p><p> P1=table[LED2];//點亮十分一秒位的 LED 數(shù)碼管</p><p> P1_7=1;//輸出十分一秒位數(shù)值</p><p><b> break;</b></p><p><b> case 2:</b></p><p> P3=
39、0xfb;//點亮秒位的 LED 數(shù)碼管</p><p> P1=table[LED1]; //輸出秒位數(shù)值</p><p><b> P1_7=0;</b></p><p><b> //點亮小數(shù)點位</b></p><p><b> break;</b></p
40、><p><b> case 3:</b></p><p><b> P3=0xf7;</b></p><p> //點亮十秒位的 LED 數(shù)碼管</p><p> P1=table[LED0]; //輸出十秒位數(shù)值</p><p><b> P1_7=1;&
41、lt;/b></p><p><b> break;</b></p><p> default: return;</p><p><b> }</b></p><p><b> }</b></p><p> 計算各位顯示字符的子程序<
42、;/p><p> void add1(time)</p><p> uint time;</p><p><b> {</b></p><p><b> uint n,a;</b></p><p> a=time/1000;</p><p>&l
43、t;b> LED0=a;</b></p><p><b> //計算十秒位數(shù)值</b></p><p> n=time%1000;</p><p> LED1=(n/100);</p><p><b> //計算秒位數(shù)值</b></p><p>&
44、lt;b> n=n%100;</b></p><p> LED2=(n/10);//計算十分一秒位數(shù)值</p><p> LED3=n%10;//計算百分一秒位數(shù)值</p><p><b> }</b></p><p> 流程圖如圖3.1所示。</p><p> 圖3
45、.1 定時器方案流程圖</p><p><b> 3.2.2 顯示</b></p><p> 顯示我們采用的是動態(tài)顯示驅(qū)動。動態(tài)顯示驅(qū)動:數(shù)碼管動態(tài)顯示接口是單片機中應用最為廣泛的一種顯示方式之一,動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控制電路,位選
46、通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機對位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位數(shù)碼管的點亮時間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應,盡管實際上各位數(shù)
47、碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。下面是一種常見的動態(tài)顯示程序:</p><p> uchar delay;</p><p><b> for(;;)</b></p><p><b> {</b
48、></p><p> display();</p><p><b> //調(diào)用顯示子程序</b></p><p> for(delay=0;delay<=200;delay++);</p><p><b> //延時程序</b></p><p><b
49、> ms++;</b></p><p> //點亮下一個數(shù)碼管</p><p><b> }</b></p><p> 這是一個很簡單的動態(tài)顯示程序,完全按照動態(tài)顯示的規(guī)則來編寫的,在很多單片機的入門教程中對單片機的顯示都是采用類似的編程法。但是這個程序有一個很大的問題,就是延時程序的出現(xiàn)。延時程序?qū)嶋H上就是使單片機不
50、斷地進行遞減或遞加計數(shù),而在這一段時間內(nèi)單片機是不能做其他任何事情的。這顯然不符合我們實際應用的要求,因為在實際的應用中</p><p> 單片機除了顯示外還有很多其他的事情是要處理的。實際應用時這個顯示程序要進行改寫。</p><p><b> 3.2.3 鍵盤</b></p><p> 鍵盤的最根本的功能就是當該按鍵按下后,單片機應
51、用系統(tǒng)能夠完成該按鍵所設(shè)定的功能。對于一組鍵盤,必定會通過一個接口電路與單片機相連。CPU 要檢測是否有鍵盤信息輸入而且要判斷是哪一個鍵被按下,然后根據(jù)鍵值來進行相應的工作。鍵盤最主要的技術(shù)就是消抖,現(xiàn)在無論什么鍵盤都是以機械接觸點和合/斷作用,而機械觸點存在彈性在開關(guān)合/閉時候會有抖動從而引起輸入點信號的抖動導致輸入信號的不準確。所以我們首先要解決的就是鍵盤的消抖問題。消抖問題有兩種處理方案。軟件消抖和硬件消抖。硬件消抖:硬件消抖主要
52、可以通過雙穩(wěn)態(tài)電路和濾波電路等消抖電路對按鍵進行消抖處理。常用的消抖電路如圖3.2所示。軟件消抖:軟件消抖其實就是進行有10ms延時的兩次查詢,當?shù)谝淮尾樵兊桨存I按下后進行一個10ms的延時再進行一次查詢,如過這次查詢結(jié)果也為按下則確認按鍵被按下,讀出按值,等待按鍵釋放。如果第二次查詢按鍵狀態(tài)為斷開則視為干擾,斷開檢測同理。</p><p> 圖3.2 硬件消抖動電路圖</p><p>
53、; 因為軟件消抖即能為我們節(jié)省材料又能為我們節(jié)省電路空間。所以我們本次設(shè)計應用軟件消抖的方式來處理鍵盤的消抖問題。具體的程序?qū)⒃谧詈蟮某绦蛘鹿?jié)中給出。</p><p> 3.2.4 利用定時中斷進行顯示和查鍵</p><p> 利用中斷進行查鍵和顯示可以節(jié)省單片機資源并且使程序更具可讀性。定時查鍵</p><p> ?。?0ms進行一次查鍵)。</p
54、><p> 圖3.3 查鍵流程圖</p><p> 圖3.2為其中一個查鍵的流程圖,cheak 為該鍵消抖標志位。當沒有鍵被按下,則 cheak 置 0,并返回。當有按鍵被按下時,則檢查消抖標志位 cheak,如果標志位為 0,則說明了還沒有進行消抖處理,將 cheak 置為 1 同時返回。因為過 10ms 才再進入一次查鍵,所以相當于進行了 10ms 的延時效果,程序不需要進行延時。若
55、再次查鍵的時候發(fā)現(xiàn)該鍵的消抖標志位 cheak 為 1,則說明此鍵已經(jīng)過消抖處理,這時等待鍵的釋放從而實現(xiàn)該鍵的功能。定時掃描鍵盤的子程序為:</p><p> bit cheak;</p><p> //cheak 為 P2_1 的消抖標志位</p><p> bit keydown; //keydown 為 P2_1 按下的
56、標志位</p><p> bit start; //秒表啟動標志位</p><p> bit stop; //秒表停止標志位</p><p> void scan(void)</p><p><b> {</b></p>
57、;<p> P2=0x0f; //讀入前先將電位拉高</p><p> if(P2_1==0).</p><p> { if(cheak==0)cheak=1; //若 cheak 為 0,則將 cheak 置 1 并返回</p><p><b> else</b>
58、;</p><p><b> {</b></p><p> keydown=1; //若 cheak 為 1,則已消抖,按下標志置 1</p><p> cheak=0; //同時將 cheak 置 0</p><p><b>
59、 }</b></p><p><b> }</b></p><p> if(P2_1==1)</p><p> { while(keydown==1) //若 P2_1 和 keydown 均為 1,則釋放該鍵</p><p> { keydown=0;</p>
60、<p> if(start==0){start=1;stop=0;}</p><p> else {start=0;stop=1;}</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b><
61、/p><p> 從上面的子程序可以看出每一次按鍵工作都是以按鍵的釋放為最終結(jié)束,程序檢測到按鍵釋放才開始實現(xiàn)該按鍵的功。</p><p> 利用定時中斷進行顯示。利用中斷進行顯示簡化了顯示程序而且減輕了CUP的工作負擔。具體的實現(xiàn)方法為;</p><p> Void time0(void)interrupt 1 using 1</p><p&g
62、t; {TLO=0x18;</p><p> TH0=0xfc; //重裝數(shù)據(jù)</p><p> ms++ </p><p> if (ms==10); //到10秒執(zhí)行一次查鍵</p><p><b> {ms=0;</b></p>
63、<p> Scankey=1;</p><p><b> }</b></p><p> Display(); //調(diào)用一次顯示子程序</p><p><b> 第四章 電路</b></p><p><b> 4.1 復位電路</b>
64、;</p><p> 復位電路是單片機中不可缺少的主要電路之一。所謂復位電路顧名思義就是使單片機重新啟動的電路,當復位電路啟動時單片機內(nèi)部的所有寄存器回到初始狀態(tài)。復位電路如圖4.1所示。</p><p> 圖4.1 復位電路</p><p> 對于51單片機來說他是高頻復位,所謂高頻復位就是RST保持兩個機器周期以上的高電平時自動復位。從圖4.1中可以看
65、出該電路可以實現(xiàn)兩個功能: </p><p> 上電復位:上電瞬間,電容充電電流最大,電容相當于短路,RST端為高電平,自動復位;電容兩端的電壓達到電源電壓時,電容充電電流為零,電容相當于開路,RST端為低電平,程序正常運行。</p><p> 手動復位:首先經(jīng)過上電復位,當按下按鍵時,RST直接與VCC相連,為高電平形成復位,同時電解電容被短路放電;按鍵松開時,VCC對電容充電,充電
66、電流在電阻上,RST依然為高電平,仍然是復位,充電完成后,電容相當于開路,RST為低電平,正常工作。</p><p> 4.2 元件及其作用</p><p> 單片機:SST89E516RD,主控制器。</p><p> 七段共陰數(shù)碼管:LED1-LED4,用于顯示。</p><p> NPN三極管:SS9012,制作放大電路。&l
67、t;/p><p> 按鍵 K1:在正常情況下,用于控制單一計時模式下秒表的啟動/停止。在倒計時初值設(shè)定的情況下為倒計時初值的增加按鍵,按一下 K1,倒計時初值增加 1;按住 K1 不放,倒計時初值連續(xù)增加;快速連按兩下 K1 然后不放,則倒計時初值快速增加,增加的速度是連續(xù)增加的 10 倍。</p><p> 按鍵 K2:在正常情況下,用于控制連續(xù)計時 8 個的計時模式下秒表的啟動/停止。
68、在倒計時初值設(shè)定的情況下為倒計時初值的減少按鍵,按一下 K2,倒計時初值減少 1;按住 K2 不放,倒計時初值連續(xù)減少;快速連按兩下 K2 然后不放,則倒計時初值快速減少,減少的速度是連續(xù)減少的 10倍。</p><p> 按鍵 K3:用于秒表的功能的選擇,在默認情況下,為秒表的計時準備模式。按下 K3 后秒表進入倒計時的狀態(tài),這時通過按鍵 K1 和 K2 可以進行倒計時初值的調(diào)整,再按下 K3 則進入倒計時。
69、</p><p> 按鍵 RESET:在復位電路中,對單片機起復位作用。</p><p> LED5:用于顯示單片機的工作狀態(tài),在準備計時的時候,LED5 點亮;在計時的時候,LED5閃爍;在倒計時初值設(shè)定和倒計時工作的時候,LED5 熄滅。</p><p> LED6:用于顯示單片機的工作狀態(tài),在準備計時和計時工作的時候,LED6 熄滅;在倒計時初值設(shè)定的時
70、候,LED6 點亮;在倒計時工作的時候,LED6 閃爍</p><p> 4.3 I/0接口</p><p> P1.0~P1.7:與數(shù)碼管的各個位相連,用于傳送數(shù)碼管的段位碼。</p><p> P3.0~P3.3:與數(shù)碼管 LED1~LED4 相連,通過單片機的 P3.0~P3.3 可以控制 LED 的顯示。</p><p>
71、P2.1:和按鈕 K1 相連,用于決定單一計時模式下的秒表啟動/停止和倒計時初值的增加。</p><p> P2.0:和按鈕 K2 相連,用于決定連續(xù)計 8 個的計時模式下秒表啟動/停止和倒計時初值的減少。</p><p> P2.2:和按鈕 K3 相連,用于單片機工作模式的選擇。</p><p> P2.6:和 LED6 相連,用于顯示單片機的工作狀態(tài)。&l
72、t;/p><p> P2.7:和 LED5 相連,用于顯示單片機的工作狀態(tài)</p><p><b> 第五章 程序</b></p><p> 5.1 程序流程圖</p><p> 5.1.1 秒表的計時功能</p><p> 秒表的計時功能流程圖如圖5.1所示。</p>
73、<p> 圖5.1 秒表計時功能流程圖</p><p> 秒表的倒計時功能流程圖</p><p> 秒表的倒計時功能分為:</p><p> 倒計時的初值增加如圖5.2所示。</p><p> 倒計時的初值減少如圖5.3所示。</p><p> 倒計時功能流程圖如圖5.3所示。</p>
74、;<p> 5.2 倒計時的初值增加流程圖</p><p> 5.3 倒計時的初值減少流程圖</p><p> 5.4 倒計時的功能流程圖</p><p><b> 5.2 程序</b></p><p><b> 具體程序見附錄</b></p><
75、p><b> 第六章 總結(jié)</b></p><p> 現(xiàn)代電子科技發(fā)展越來越快,微型化、集成化、高密度化以及設(shè)備的高精度化已經(jīng)成為一種長期的趨勢,這就要求我們使用更精確的設(shè)備。本設(shè)計中使用的芯片只是當前電子科技發(fā)展的一般產(chǎn)物,隨著科技的不斷發(fā)展,更高密度、更高精度的芯片將會取代現(xiàn)有的產(chǎn)品,所以我們還是要不斷的學習,不斷的豐富和更新我們的產(chǎn)品,提出更高的要求。</p>
76、<p> 就在當前經(jīng)濟形勢的情況下,電子產(chǎn)品要找到新的增長點,唯一的出路是智能化??梢哉f,一切電子產(chǎn)品,包括通信、廣播、電視控制、家用電器、電視音響等消費類電子產(chǎn)品,智能化的時代已經(jīng)到來,“智能化”的魅力無窮,模擬處處數(shù)字化的景象已經(jīng)展現(xiàn),今后將會迎來新的高潮。</p><p> 由于時間和條件的限制,本方案在設(shè)計和實現(xiàn)過程中仍然存在很多不盡完善的地方,敬請老師指導。</p><
77、;p><b> 參考文獻</b></p><p> [1]蔡美琴,張為民,何金兒,等.MCS-51系列單片機系統(tǒng)及應用[M].西安:高等教育出版社,2004.189~192.</p><p> [2]裴瞳. RabbitMiniCore系列模塊—讓產(chǎn)品開發(fā)輕而易舉[J].電子技術(shù)應用,2009,35(02):42~45.</p><p&
78、gt; [3] Keil Software – Cx51編譯器用戶手冊[J]</p><p> [4]周世龍.單電源供電運算放大器設(shè)計方法[J].電子工程師,2005,31(05):31~35.</p><p> [5]孫惠麗,林凌.低功耗單雙電源供電的軌對軌儀表放大器AD627[J].國外電子元器件,2002.7(11):33~34.</p><p> [
79、6]候建華.基于TLC2543LL的A/D轉(zhuǎn)換模板的設(shè)計[J].機電產(chǎn)品開發(fā)與創(chuàng)新,2007,20(01): 164~165.</p><p> [7]霍亮生.電子技術(shù)基礎(chǔ)[M].北京:清華大學出版社,2006. 31~36.</p><p> [8]渠豐沛,胡波,于學禹.PADS2005電路原理圖與PCB設(shè)計[M],北京:機械工業(yè)出版社,2009.133~140.</p>
80、<p> [9]高吉祥.數(shù)字系統(tǒng)與自動控制系統(tǒng)設(shè)計[M],北京:電子工業(yè)出版社,2007.15~59.</p><p> [10]劉艷鈴.采用MAX232實現(xiàn)MCS-51單片機與PC機的通信[J].天津理工學院學報,1999, 15(02):58~61.</p><p> [11]. SST 單片機應用文集[J] 弘微科技有限公司 </p><p&g
81、t; [12]謝自美.電子線路設(shè)計實驗測試[M].武漢.華中科技大學出版社,1998.65~68.</p><p><b> 附錄</b></p><p><b> 總程序</b></p><p><b> 頭文件和變量定義</b></p><p> 包含 reg52
82、.h 頭文件。</p><p><b> 變量定義:</b></p><p> 在程序中用到的變量如表 1 所示。</p><p> //頭文件及變量聲名</p><p> #include <reg52.h></p><p> #define uchar unsigned
83、char</p><p> #define uint unsigned int</p><p><b> //定義各管腳</b></p><p> sbit P2_0=P2^0;</p><p> sbit P2_1=P2^1;</p><p> sbit P2_2=P2^2;</
84、p><p> sbit P1_7=P1^7;</p><p> sbit P2_6=P2^6;</p><p> sbit P2_7=P2^7;</p><p><b> //各變量的聲名</b></p><p> uchar code TABLE[10]={0xa0,0xf9,0xc4,0
85、xd0,0x99,0x92,0x82,0xf8,0x80,0x98};</p><p><b> //段位碼</b></p><p> uchar ms,mm;</p><p> uint m,tab[8];</p><p> uint LED0,LED1,LED2,LED3;</p><p&
86、gt;<b> //各位的數(shù)字</b></p><p><b> bit add;</b></p><p> bit bit_add1;</p><p> bit bit_sub;</p><p> bit scankey;</p><p> bit cheak;
87、</p><p> bit keydown;</p><p> bit fast_add;</p><p> bit double_key;</p><p> bit K2_keydown;</p><p> bit fast_sub;</p><p> bit double_sub
88、;</p><p><b> bit sub;</b></p><p> bit K3_keyup;</p><p> bit K3_keydown;</p><p> bit count_down;</p><p> bit start;</p><p><
89、;b> bit stop;</b></p><p> bit eight_start;</p><p> bit eight_stop;</p><p><b> 主程序</b></p><p> 在主程序中需要完成以下的功能:首先調(diào)用初始化函數(shù)對各個變量進行初始化,再對定時器的</p&
90、gt;<p> 定時初值進行設(shè)定,接著根據(jù)各個標志位的值來判斷單片機的工作模式及工作狀態(tài)。鍵盤掃描由</p><p> scan( )來完成,各個位的數(shù)值的計算由 add1( )來完成。</p><p> void man (void)</p><p> {begin1(); //調(diào)用初始化函數(shù)</p><p>
91、 TMOD=0x01;</p><p><b> TL0=0x18;</b></p><p><b> TH0=0xfc;</b></p><p><b> EA=1;</b></p><p><b> ET0=1;</b></p>
92、<p><b> TR0=1;</b></p><p><b> for(;;){</b></p><p> if(scankey==1) //進行鍵盤掃描</p><p><b> {</b></p><p> scankey=0;</p
93、><p><b> scan();</b></p><p> if(double_key==1) //倒計時初值快速增加</p><p><b> {</b></p><p><b> P2_6=0;</b></p><p><b>
94、; P2_7=1;</b></p><p><b> m=m+10;</b></p><p><b> add1(m);</b></p><p><b> }</b></p><p> if(fast_add==1) //倒計時初值連續(xù)增加</
95、p><p><b> {</b></p><p><b> P2_6=0;</b></p><p><b> P2_7=1;</b></p><p><b> m++;</b></p><p><b> add1(m
96、);</b></p><p> bit_add1=0;</p><p><b> }</b></p><p> if(add==1) //倒計時初值增加 1</p><p><b> {</b></p><p><b> P2_6=
97、0;</b></p><p><b> P2_7=1;</b></p><p><b> add=0;</b></p><p><b> m++;</b></p><p><b> add1(m);</b></p><
98、;p><b> }</b></p><p> if(double_sub==1) //倒計時初值快速減少</p><p><b> {</b></p><p><b> P2_6=0;</b></p><p><b> P2_7=1;</b
99、></p><p><b> m=m-10;</b></p><p><b> add1(m);</b></p><p><b> }</b></p><p> if(fast_sub==1) //倒計時初值連續(xù)減少</p><p&g
100、t;<b> {</b></p><p><b> P2_6=0;</b></p><p><b> P2_7=1;</b></p><p><b> m--;</b></p><p><b> add1(m);</b>&l
101、t;/p><p> bit_sub=0;</p><p><b> }</b></p><p> if(sub==1) //倒計時初值減少 1</p><p><b> {</b></p><p><b> P2_6=0;</b></p&
102、gt;<p><b> P2_7=1;</b></p><p><b> sub=0;</b></p><p><b> m--;</b></p><p><b> add1(m);</b></p><p><b> }&
103、lt;/b></p><p> if(start==1)</p><p><b> //計時開始</b></p><p><b> {</b></p><p> if(mm==0)P2_7=!P2_7;</p><p><b> P2_6=1;<
104、;/b></p><p><b> m++;</b></p><p> if(m==6000)m=0;</p><p><b> add1(m);</b></p><p><b> }</b></p><p> if(stop==1) s
105、tart=0;</p><p><b> //計時停止</b></p><p> if(count_down==1)</p><p><b> //倒計時開始</b></p><p> { if(m>0)m--;</p><p><b> P2_7=
106、1;</b></p><p> if(mm==0)P2_6=!P2_6;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 初始化子
107、程序</b></p><p> 初始化子程序通常是在一開始就被調(diào)用,用來初始化各個變量,同時也顯示了單片機上電后的工作狀態(tài)。雖然有些變量在定義的時候已被默認初始化了,但是為了自己檢查方便,還是應該加上初始化的子程序。</p><p> void begin1(void)</p><p><b> {</b></p>
108、<p> fast_add=0;</p><p> bit_add1=0;</p><p><b> mm=0;</b></p><p><b> m=0;</b></p><p><b> ms=0;</b></p><p>&
109、lt;b> LED0=0;</b></p><p><b> LED1=0;</b></p><p><b> LED2=0;</b></p><p><b> LED3=0;</b></p><p><b> add=0;</b&g
110、t;</p><p> double_key=0;</p><p> scankey=0;</p><p> keydown=0;</p><p> K3_keydown=0;</p><p> count_down=0;</p><p><b> P2_6=1;</
111、b></p><p><b> P2_7=0;</b></p><p><b> }</b></p><p><b> 定時器中斷子程序</b></p><p> 這里的秒表的計時、鍵盤的掃描及數(shù)值顯示等都是利用定時中斷來完成的。定時的時間 設(shè)為1ms,用于數(shù)值顯
112、示;同時利用累加的方法實現(xiàn) 10ms 和 200ms 的定時,用于鍵盤的掃描及控制顯示</p><p><b> 燈的閃爍。</b></p><p> void time0(void)</p><p><b> {</b></p><p><b> TL0=0x18;</b&
113、gt;</p><p><b> TH0=0xfc;</b></p><p><b> ms++;</b></p><p> if(ms==10)</p><p><b> { ms=0;</b></p><p><b> mm++;
114、</b></p><p> if(mm==20)mm=0;</p><p> scankey=1;</p><p><b> }</b></p><p> display();</p><p><b> }</b></p><p>
115、;<b> 顯示子程序</b></p><p> 顯示子程序其實包括了 display()和 add1(time)兩個子程序。add1(time)是用來計算數(shù)碼管各個位</p><p> 要顯示的數(shù)值的子程序,display()是查段位碼表及進行動態(tài)掃描的子程序。</p><p> void add1(time)</p>
116、<p> uint time;</p><p><b> {</b></p><p><b> uint n,a;</b></p><p> a=time/1000;</p><p><b> LED0=a;</b></p><p>
117、<b> //計算十秒位數(shù)值</b></p><p> n=time%1000;</p><p> LED1=(n/100);</p><p><b> //計算秒位數(shù)值</b></p><p><b> n=n%100;</b></p><p&g
118、t; LED2=(n/10);</p><p> //計算十分一秒位數(shù)值</p><p> LED3=n%10;</p><p> //計算百分一秒位數(shù)值</p><p><b> }</b></p><p> void display(void)</p><p&g
119、t;<b> {</b></p><p> switch (ms%4){</p><p><b> case 0:</b></p><p><b> P3=0xfe;</b></p><p> P1=table[LED3];</p><p>&
120、lt;b> P1_7=1;</b></p><p><b> break;</b></p><p><b> case 1:</b></p><p><b> P3=0xfd;</b></p><p> P1=table[LED2];</p&g
121、t;<p><b> P1_7=1;</b></p><p><b> break;</b></p><p><b> case 2:</b></p><p><b> P3=0xfb;</b></p><p> P1=table[
122、LED1];</p><p><b> P1_7=1</b></p><p><b> break;</b></p><p><b> case 3:</b></p><p><b> P3=0xf7;</b></p><p&g
123、t; P1=table[LED0];</p><p><b> P1_7=1;</b></p><p><b> break;</b></p><p> default: return;</p><p><b> }</b></p><p>&
124、lt;b> }</b></p><p><b> 鍵盤掃描</b></p><p> 鍵盤掃描的子程序完成的任務(wù)是每 10ms 進行一次鍵盤的查詢,根據(jù)查詢的結(jié)果對相應的標志</p><p> 位進行賦值。因為要實現(xiàn)比較多的功能,所以鍵盤掃描的子程序比較復雜。</p><p> void sc
125、an(void)</p><p><b> { char a;</b></p><p><b> P2=0x0f;</b></p><p> if(count_down==0&&P2_2==0)</p><p> //實現(xiàn)倒計時的功能</p><p>
126、 { if(cheak==0){cheak=1;}</p><p> //若 cheak 為 0,則按鍵沒消抖</p><p> else {K3_keydown=1;cheak=0;}</p><p><b> }</b></p><p><b> P2=0x0f;</b></p&
127、gt;<p> if(K3_keydown==1&&P2_2==1)</p><p><b> //K3 彈起</b></p><p> { K3_keyup=1;</p><p> K3_keydown=0;}</p><p> if(K3_keyup==1)</p>
128、<p><b> {</b></p><p><b> if(mm==0)</b></p><p> { if(bit_add1==1&&keydown==1)</p><p> //0.2 秒內(nèi)連按 2 次 K1,則快速增</p><p> {double_
129、key=1;}</p><p> else {bit_add1=0;}</p><p><b> }</b></p><p><b> if(mm==0)</b></p><p> { if(bit_sub==1&&K2_keydown==1)</p><
130、p> //0.2 秒內(nèi)連按 2 次 K2,則快速減</p><p> {double_sub=1;}</p><p> else {bit_sub=0;}</p><p><b> }</b></p><p> if(mm==0&&keydown==1)</p><p&
131、gt; //按住 K1 不放,連續(xù)增</p><p> fast_add=1;</p><p> if(mm==0&&K2_keydown==1)</p><p> //按住 K2 不放,連續(xù)減</p><p> fast_sub=1;</p><p> if(P2_1==0)</p&
132、gt;<p><b> {</b></p><p> if(cheak==0){cheak=1;mm=0;}</p><p><b> else</b></p><p> keydown=1;</p><p><b> }</b></p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文-基于單片機的電子門鈴設(shè)計【精校排版】
- 基于單片機的多功能電子跑表
- 畢業(yè)論文-基于單片機的電子時鐘設(shè)計【精校排版】
- 畢業(yè)論文-基于單片機倒車系統(tǒng)設(shè)計【精校排版】
- 畢業(yè)論文-基于單片機的數(shù)字電子鐘【精校排版】
- 畢業(yè)論文-基于單片機的數(shù)字秒表設(shè)計【精校排版】
- 基于單片機的多功能電子跑表定稿.doc
- 畢業(yè)論文-基于單片機數(shù)據(jù)采集系統(tǒng)設(shè)計【精校排版】
- 畢業(yè)論文-基于單片機的數(shù)字鐘設(shè)計【精校排版】
- 畢業(yè)論文-基于單片機的密碼鎖設(shè)計【精校排版】
- 畢業(yè)論文-基于單片機的音樂流水燈設(shè)計【精校排版】
- 畢業(yè)論文-單片機開發(fā)板設(shè)計【精校排版】
- 基于單片機的多功能電子跑表1稿.doc
- 畢業(yè)論文-基于單片機的溫度計的設(shè)計【精校排版】
- 畢業(yè)論文-基于sst89e516rd單片機的多功能音樂盒設(shè)計【精校排版】
- 基于單片機的多功能電子跑表2稿.doc
- 畢業(yè)論文-智能單片機照明控制裝置設(shè)計【精校排版】
- 畢業(yè)論文-基于單片機的數(shù)字溫度計的設(shè)計【精校排版】
- 畢業(yè)論文-單片機日歷時鐘開發(fā)【精校排版】
- 畢業(yè)論文-基于單片機的lcd顯示器的設(shè)計【精校排版】
評論
0/150
提交評論