畢業(yè)論文-基于單片機(jī)的多功能電子跑表設(shè)計(jì)【精校排版】_第1頁(yè)
已閱讀1頁(yè),還剩31頁(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>  本科畢業(yè)設(shè)計(jì)(論文)</p><p><b> ?。?0 屆)</b></p><p>  基于單片機(jī)的多功能電子跑表</p><p><b>  目錄</b></p><p><b>  摘要II</b></p><p>  

2、AbstractIII</p><p><b>  第一章 緒論1</b></p><p>  1.1 單片機(jī)的概述1</p><p>  1.1.1 單片機(jī)的發(fā)展和定義1</p><p>  1.1.2 單片機(jī)的特點(diǎn)1</p><p>  第二章 材料選擇與設(shè)計(jì)思路2<

3、;/p><p>  2.1 材料選擇2</p><p>  2.1.2 單片機(jī)的選擇2</p><p>  2.1.2 LED顯示2</p><p>  2.1.3 鍵盤(pán)3</p><p>  2.2 設(shè)計(jì)思路3</p><p>  第三章 主要技術(shù)的設(shè)計(jì)5</p>

4、;<p>  3.1 主要技術(shù)5</p><p>  3.2 主要的設(shè)計(jì)方案5</p><p>  3.2.1 定時(shí)器5</p><p>  3.2.2 顯示8</p><p>  3.2.3 鍵盤(pán)9</p><p>  3.2.4 利用定時(shí)中斷進(jìn)行顯示和查鍵9</p>

5、<p>  第四章 電路12</p><p>  4.1 復(fù)位電路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 秒表的計(jì)時(shí)功能14</p><p>  5.1.2秒表的倒計(jì)時(shí)功能流程圖15</p><p>  5.2 程序16</p><p>  第六章 總結(jié)17</p><p><b>  參考文獻(xiàn)18</b></p><p><b>  附錄19</

7、b></p><p>  基于單片機(jī)的多功能電子跑表</p><p><b>  摘要 </b></p><p>  采用單片機(jī)技術(shù)制作一個(gè)具有到計(jì)時(shí)功能和多次數(shù)據(jù)計(jì)時(shí)并回顯的多功能跑表。我們采用51單片機(jī)做為核心!單片機(jī)具體型號(hào)為SST89E516RD2是SST公司8位微處理器 FlashFlex51 系列的成員,是采用先進(jìn)的閃存 CM

8、OS 半導(dǎo)體技術(shù)設(shè)計(jì)和制造,這些器件是采用8051的指令集,并和標(biāo)準(zhǔn)的 8051控制器管腳兼容。芯片內(nèi)部帶有 16/24/40/72Kbyte 的片內(nèi) FLASH EEPROM 存儲(chǔ)器,使用了 SST 公司專利的 CMOS閃存技術(shù),存儲(chǔ)器被分成兩塊獨(dú)立的程序存儲(chǔ)器,第一塊(BLOCK0)占用 8/16/32/64Kbyte 的內(nèi)部程序存儲(chǔ)器空間,第二塊(BLOCK0)占用 8Kbyte 的內(nèi)部程序存儲(chǔ)器空間。8Kbyte 的第二塊 FL

9、ASH可以映射到 8/16/32/64Kbyte 空間的低地址,還可以被隱藏和當(dāng)成類似 EEPROM 的獨(dú)立的數(shù)據(jù)存儲(chǔ)器。</p><p>  本次設(shè)計(jì)采用SST89E516RD2為核心加上必要的電路,再用共陰7段數(shù)碼管4個(gè)進(jìn)行顯示輸出,用按鍵控制功能選擇,因?yàn)镾ST89E516RD2電源是 4.50V - 5.50V 操作,工作頻率 0~40MHz所以我們采用5V電源進(jìn)行供電。</p><p

10、>  設(shè)計(jì)分為(1)功能描述(2)系統(tǒng)構(gòu)建和材料選擇(3)制作方案和制作流程圖(4)程序設(shè)計(jì)(5)電路。</p><p>  如何應(yīng)用單片機(jī)技術(shù)是我的畢業(yè)設(shè)計(jì)的核心!~隨著科學(xué)技術(shù)的不段發(fā)展,單片機(jī)技術(shù)已經(jīng)成為現(xiàn)在智能化的高科技技術(shù)產(chǎn)品的核心和基礎(chǔ)。單片機(jī)知識(shí)對(duì)于即將畢業(yè)的我們有著很重要的意義。</p><p>  關(guān)鍵詞:?jiǎn)纹瑱C(jī),多功能電子跑表,共陰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 單片機(jī)的概述</p><p>  1.1.1 單片機(jī)的發(fā)展和定義</p><p>  在一片集成電路芯片上

17、集成微處理器、存儲(chǔ)器、I/O接口電路,從而構(gòu)成了單芯片微型計(jì)算機(jī),即單片機(jī)。又稱:微控制器。</p><p>  單片機(jī)技術(shù)發(fā)展過(guò)程可分為三個(gè)主要階段: </p><p>  單片機(jī)的初級(jí)階段 1974年~1978年,Intel公司推出了MCS-48系列單片機(jī) 。8位CPU、1K字節(jié)ROM、64字節(jié)RAM、27根I/O線和1個(gè)8位定時(shí)/計(jì)數(shù)器。特點(diǎn)是:存儲(chǔ)器容量較小,尋址范圍?。ú淮笥?K

18、),無(wú)串行接口,指令系統(tǒng)功能不強(qiáng)。</p><p>  高性能階段1980年,Intel公司推出了MCS-51系列單片機(jī):8位CPU、4K字節(jié)ROM、128字節(jié)RAM、4個(gè)8位并口、1個(gè)全雙工串行口、2個(gè)16位定時(shí)/計(jì)數(shù)器。尋址范圍64K,并有控制功能較強(qiáng)的布爾處理器。結(jié)構(gòu)體系完善,性能已大大提高,面向控制的特點(diǎn)進(jìn)一步突出?,F(xiàn)在,MCS-51已成為公認(rèn)的單片機(jī)經(jīng)典機(jī)種。</p><p> 

19、 微控制器化階段1982年,Intel推出MCS-96系列單片機(jī)。芯片內(nèi)集成:16位CPU、8K字節(jié)ROM、232字節(jié)RAM、5個(gè)8位并口、1個(gè)全雙工串行口、2個(gè)16位定時(shí)/計(jì)數(shù)器。尋址范圍64K。片上還有8路10位ADC、1路PWM輸出及高速I/O部件等。特點(diǎn)是:片內(nèi)面向測(cè)控系統(tǒng)外圍電路增強(qiáng),使單片機(jī)可以方便靈活地用于復(fù)雜的自動(dòng)測(cè)控系統(tǒng)及設(shè)備?!拔⒖刂破鳌钡姆Q謂更能反應(yīng)單片機(jī)的本質(zhì)。</p><p>  1.1

20、.2 單片機(jī)的特點(diǎn)</p><p>  控制性能和可靠性,高實(shí)時(shí)控制功能特別強(qiáng),其CPU可以對(duì)I/O端口直接進(jìn)行操作,位操作能力更是其它計(jì)算機(jī)無(wú)法比擬的。另外,由于CPU、存儲(chǔ)器及I/O接口集成在同一芯片內(nèi),各部件間的連接緊湊,數(shù)據(jù)在傳送時(shí)受干擾的影響較小,且不易受環(huán)境條件的影響,所以單片機(jī)的可靠性非常高。</p><p>  第二章 設(shè)計(jì)思路與材料選擇</p><

21、p><b>  2.1 設(shè)計(jì)思路</b></p><p>  為了實(shí)現(xiàn)秒表的計(jì)時(shí),需要利用單片機(jī)實(shí)現(xiàn)百分之一秒(10ms)的中斷,在中斷程序中實(shí)現(xiàn)數(shù)字的變化,并動(dòng)態(tài)顯示出來(lái)。</p><p>  顯示采用的是動(dòng)態(tài)掃描的方法。動(dòng)態(tài)掃描的方法其實(shí)很簡(jiǎn)單,就是輪流點(diǎn)亮各數(shù)碼管,同時(shí)把各數(shù)碼管所需要的字符送到對(duì)應(yīng)的 I/O口;而中間需要有一定的延時(shí),原因是單片機(jī)每一條

22、指令執(zhí)行的時(shí)間很短,如果切換得太快的話,發(fā)光二極管都來(lái)不及反應(yīng),在編程上可以加上一個(gè)延時(shí)子程序來(lái)解決。</p><p>  設(shè)置按鍵1.2.來(lái)控制計(jì)時(shí)的啟/停和倒計(jì)時(shí)模式下初值的設(shè)定,按鍵3來(lái)控制連續(xù)8次計(jì)時(shí)和倒計(jì)時(shí)模式的轉(zhuǎn)換,采用軟件消抖方式進(jìn)行處理。</p><p>  采用復(fù)位電路對(duì)單片機(jī)進(jìn)行重置。</p><p><b>  2.2 材料選擇&l

23、t;/b></p><p>  電子跑表其實(shí)就是一個(gè)單片機(jī)的最小系統(tǒng),單片機(jī)、晶振、復(fù)位電路、鍵盤(pán)輸入電路、顯示電路構(gòu)成了這個(gè)最小系統(tǒng)。以下是我們對(duì)該最小系統(tǒng)的基本部件的分析選擇。</p><p>  2.2.1 單片機(jī)的選擇</p><p>  本次設(shè)計(jì)對(duì)單片機(jī)的數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)的處理要求都不高,所以選擇的單片機(jī)要求也不太高STT公司的SST89E516RD

24、與 805的軟件完全兼容,開(kāi)發(fā)工具兼容,封裝與引腳兼容。其內(nèi)部 RAM 共有 1Kbyte(256Byte + 768Byte)256Bytes 寄存器/數(shù)據(jù) RAM,內(nèi)含兩塊高性能 SuperFlash 存儲(chǔ)器(EEPROM)8K/16K/32K/64Kbyte 的主存儲(chǔ)塊 + 8Kbyte 的次存儲(chǔ)塊(每個(gè)塊的扇區(qū)大小都是 128Byte)用 SoftLock 可以獨(dú)立地對(duì)每個(gè)塊進(jìn)行安全加鎖。實(shí)現(xiàn)應(yīng)用中再編程(IAP:In-Appl

25、ication-Programming)兩塊可同時(shí)操作。在 IAP 過(guò)程中可實(shí)現(xiàn)存儲(chǔ)器的覆蓋,支持中斷響應(yīng)。支持最大 64KByte 外部程序和數(shù)據(jù)存儲(chǔ)空間P1 的 5、6、7 等三個(gè)引腳可驅(qū)動(dòng)大電流(每個(gè)可達(dá) 16mA)3 個(gè) 16 位定時(shí)/計(jì)數(shù)器(T0,T1,T2)全雙工增強(qiáng)型串行通訊口(UART) 幀錯(cuò)誤</p><p>  識(shí)別自動(dòng)地址識(shí)別,10 個(gè)中斷源,4 個(gè)優(yōu)先級(jí),提供 4 個(gè)外部中斷輸入,帶內(nèi)部可

26、編程看門狗(WDT),可編程計(jì)數(shù)器陣列(PCA),4 個(gè) 8 位 I/O 口(32 個(gè) I/O 引腳)和 1 個(gè) 4 位口,共 36 個(gè) I/O。這款51單片機(jī)具備我們本次設(shè)計(jì)所需要的所有功能,同時(shí)他也是市面上常見(jiàn)的一款單片機(jī),所以我們選擇它作為本次設(shè)計(jì)的單片機(jī)。</p><p>  2.2.2 LED顯示</p><p>  通常把數(shù)碼管、符號(hào)管、米字管共稱為筆畫(huà)顯示器;而把筆畫(huà)顯示器

27、和矩陣管統(tǒng)稱為字符顯示器。因?yàn)槲覀冞@里采用的7段數(shù)碼管所以我們?cè)敿?xì)介紹一下數(shù)碼管的分類:數(shù)碼管可以按字高、顏色、結(jié)構(gòu)、各發(fā)光段的連接方式等進(jìn)行分類。按照各發(fā)光段的連接方式分,數(shù)碼管可分為共陽(yáng)極和共陰極兩種。</p><p>  所謂的共陽(yáng)方式就是筆畫(huà)顯示器各段發(fā)光管的陽(yáng)極是公共的,而陰極是互相隔離的。</p><p>  所謂的共陰方式就是筆畫(huà)顯示器各段發(fā)光管的陰極是公共的,而陽(yáng)極是互相隔

28、離的</p><p>  LED 顯示的原理。如圖 2.1所示為七段 LED 數(shù)碼管的原理圖,通過(guò)該圖可以很容易地看出共陽(yáng)極和共陰極的七段 LED 管的工作原理的不同點(diǎn)。對(duì)于共陰極的數(shù)碼管,所有發(fā)光二極管的陰極共連后接地,而陽(yáng)極引出腳用于控制 LED 是否點(diǎn)亮。若陽(yáng)極引出腳接地,則 LED 被熄滅;若陽(yáng)極引出腳接高電平,則 LED 被點(diǎn)亮。</p><p>  圖2.1 7段數(shù)碼管的原理

29、圖</p><p>  共陽(yáng)極的 LED 正好相反,所有發(fā)光二極管的陽(yáng)極共連后接高電平,而陽(yáng)極引出腳用于控制 LED是否點(diǎn)亮。若陰極引出腳接高電平,則 LED 被熄滅;若陰極引出腳接地,則 LED 被點(diǎn)亮。因此共陽(yáng)極和共陰極所需要的字型碼正好相反。這里我們選用的是共</p><p>  陰數(shù)碼管進(jìn)行本次設(shè)計(jì)。</p><p><b>  2.2.3 鍵盤(pán)

30、</b></p><p>  外部指令對(duì)單片機(jī)的輸入一般都是通過(guò)鍵盤(pán)等輸入器件來(lái)實(shí)現(xiàn)的,而鍵盤(pán)的設(shè)計(jì)以及編程。方法在本設(shè)計(jì)中將會(huì)重點(diǎn)介紹。在設(shè)計(jì)中,是利用鍵盤(pán)來(lái)實(shí)現(xiàn)秒表的啟??刂萍肮δ艿倪x擇。</p><p>  第三章 主要技術(shù)的設(shè)計(jì)</p><p>  3.1 主要技術(shù) </p><p>  單片機(jī)電子跑表需要解決的三個(gè)最

31、主要的核心技術(shù)是:</p><p>  如何使用單片機(jī)的的定時(shí)器。</p><p>  如何實(shí)現(xiàn)動(dòng)態(tài)掃描顯示。</p><p>  如何寫(xiě)鍵盤(pán)的輸入控制程序。</p><p>  3.2 主要的設(shè)計(jì)方案</p><p>  3.2.1 定時(shí)器</p><p>  單片機(jī)中定時(shí)器的使用是一項(xiàng)重

32、要的內(nèi)容,也是一項(xiàng)基本的內(nèi)容。由于內(nèi)容太多就不詳細(xì)介紹了,在后面的設(shè)計(jì)中將會(huì)穿插說(shuō)明。</p><p>  這里我們利用單片機(jī)百分之一秒(10ms)的中斷,在中斷程序中實(shí)現(xiàn)數(shù)字的變化并動(dòng)態(tài)顯示出來(lái),從而實(shí)現(xiàn)秒表的計(jì)時(shí)。</p><p>  以下是具體的程序?qū)崿F(xiàn):</p><p><b>  程序:</b></p><p>

33、;<b>  定義</b></p><p>  //定義共陽(yáng)極字符編碼表</p><p>  uchar code TABLE[10]={0xa0,0xf9,0xc4,0xd0,0x99,0x92,0x82,0xf8,0x80,0x98};</p><p>  uint m;//計(jì)數(shù)值</p><p>  uint LE

34、D0,LED1,LED2,LED3; //各位的數(shù)值</p><p>  uchar ms;//用于表示數(shù)碼管顯示位及計(jì)算是否 10ms 到設(shè)定定時(shí)器 T0 的工作方式</p><p>  TMOD=0x01;//T0 方式 1 計(jì)時(shí) 1ms</p><p><b>  TL0=0x18;</b></p><p><

35、;b>  TH0=0xfc;</b></p><p>  EA=1;//開(kāi)中斷,啟動(dòng)定時(shí)器</p><p><b>  ET0=1;</b></p><p><b>  TR0=1;</b></p><p>  動(dòng)態(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;//點(diǎn)亮百分一秒位的 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];//點(diǎn)亮十分一秒位的 LED 數(shù)碼管</p><p>  P1_7=1;//輸出十分一秒位數(shù)值</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  P3=

39、0xfb;//點(diǎn)亮秒位的 LED 數(shù)碼管</p><p>  P1=table[LED1]; //輸出秒位數(shù)值</p><p><b>  P1_7=0;</b></p><p><b>  //點(diǎn)亮小數(shù)點(diǎn)位</b></p><p><b>  break;</b></p

40、><p><b>  case 3:</b></p><p><b>  P3=0xf7;</b></p><p>  //點(diǎn)亮十秒位的 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>  計(jì)算各位顯示字符的子程序<

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>  //計(jì)算十秒位數(shù)值</b></p><p>  n=time%1000;</p><p>  LED1=(n/100);</p><p><b>  //計(jì)算秒位數(shù)值</b></p><p>&

44、lt;b>  n=n%100;</b></p><p>  LED2=(n/10);//計(jì)算十分一秒位數(shù)值</p><p>  LED3=n%10;//計(jì)算百分一秒位數(shù)值</p><p><b>  }</b></p><p>  流程圖如圖3.1所示。</p><p>  圖3

45、.1 定時(shí)器方案流程圖</p><p><b>  3.2.2 顯示</b></p><p>  顯示我們采用的是動(dòng)態(tài)顯示驅(qū)動(dòng)。動(dòng)態(tài)顯示驅(qū)動(dòng):數(shù)碼管動(dòng)態(tài)顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式之一,動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選

46、通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開(kāi),該位就顯示出字形,沒(méi)有選通的數(shù)碼管就不會(huì)亮。通過(guò)分時(shí)輪流控制各個(gè)數(shù)碼管的的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。在輪流顯示過(guò)程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺(jué)暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)

47、碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。下面是一種常見(jiàn)的動(dòng)態(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>  //延時(shí)程序</b></p><p><b

49、>  ms++;</b></p><p>  //點(diǎn)亮下一個(gè)數(shù)碼管</p><p><b>  }</b></p><p>  這是一個(gè)很簡(jiǎn)單的動(dòng)態(tài)顯示程序,完全按照動(dòng)態(tài)顯示的規(guī)則來(lái)編寫(xiě)的,在很多單片機(jī)的入門教程中對(duì)單片機(jī)的顯示都是采用類似的編程法。但是這個(gè)程序有一個(gè)很大的問(wèn)題,就是延時(shí)程序的出現(xiàn)。延時(shí)程序?qū)嶋H上就是使單片機(jī)不

50、斷地進(jìn)行遞減或遞加計(jì)數(shù),而在這一段時(shí)間內(nèi)單片機(jī)是不能做其他任何事情的。這顯然不符合我們實(shí)際應(yīng)用的要求,因?yàn)樵趯?shí)際的應(yīng)用中</p><p>  單片機(jī)除了顯示外還有很多其他的事情是要處理的。實(shí)際應(yīng)用時(shí)這個(gè)顯示程序要進(jìn)行改寫(xiě)。</p><p><b>  3.2.3 鍵盤(pán)</b></p><p>  鍵盤(pán)的最根本的功能就是當(dāng)該按鍵按下后,單片機(jī)應(yīng)

51、用系統(tǒng)能夠完成該按鍵所設(shè)定的功能。對(duì)于一組鍵盤(pán),必定會(huì)通過(guò)一個(gè)接口電路與單片機(jī)相連。CPU 要檢測(cè)是否有鍵盤(pán)信息輸入而且要判斷是哪一個(gè)鍵被按下,然后根據(jù)鍵值來(lái)進(jìn)行相應(yīng)的工作。鍵盤(pán)最主要的技術(shù)就是消抖,現(xiàn)在無(wú)論什么鍵盤(pán)都是以機(jī)械接觸點(diǎn)和合/斷作用,而機(jī)械觸點(diǎn)存在彈性在開(kāi)關(guān)合/閉時(shí)候會(huì)有抖動(dòng)從而引起輸入點(diǎn)信號(hào)的抖動(dòng)導(dǎo)致輸入信號(hào)的不準(zhǔn)確。所以我們首先要解決的就是鍵盤(pán)的消抖問(wèn)題。消抖問(wèn)題有兩種處理方案。軟件消抖和硬件消抖。硬件消抖:硬件消抖主要

52、可以通過(guò)雙穩(wěn)態(tài)電路和濾波電路等消抖電路對(duì)按鍵進(jìn)行消抖處理。常用的消抖電路如圖3.2所示。軟件消抖:軟件消抖其實(shí)就是進(jìn)行有10ms延時(shí)的兩次查詢,當(dāng)?shù)谝淮尾樵兊桨存I按下后進(jìn)行一個(gè)10ms的延時(shí)再進(jìn)行一次查詢,如過(guò)這次查詢結(jié)果也為按下則確認(rèn)按鍵被按下,讀出按值,等待按鍵釋放。如果第二次查詢按鍵狀態(tài)為斷開(kāi)則視為干擾,斷開(kāi)檢測(cè)同理。</p><p>  圖3.2 硬件消抖動(dòng)電路圖</p><p>

53、;  因?yàn)檐浖都茨転槲覀児?jié)省材料又能為我們節(jié)省電路空間。所以我們本次設(shè)計(jì)應(yīng)用軟件消抖的方式來(lái)處理鍵盤(pán)的消抖問(wèn)題。具體的程序?qū)⒃谧詈蟮某绦蛘鹿?jié)中給出。</p><p>  3.2.4 利用定時(shí)中斷進(jìn)行顯示和查鍵</p><p>  利用中斷進(jìn)行查鍵和顯示可以節(jié)省單片機(jī)資源并且使程序更具可讀性。定時(shí)查鍵</p><p> ?。?0ms進(jìn)行一次查鍵)。</p

54、><p>  圖3.3 查鍵流程圖</p><p>  圖3.2為其中一個(gè)查鍵的流程圖,cheak 為該鍵消抖標(biāo)志位。當(dāng)沒(méi)有鍵被按下,則 cheak 置 0,并返回。當(dāng)有按鍵被按下時(shí),則檢查消抖標(biāo)志位 cheak,如果標(biāo)志位為 0,則說(shuō)明了還沒(méi)有進(jìn)行消抖處理,將 cheak 置為 1 同時(shí)返回。因?yàn)檫^(guò) 10ms 才再進(jìn)入一次查鍵,所以相當(dāng)于進(jìn)行了 10ms 的延時(shí)效果,程序不需要進(jìn)行延時(shí)。若

55、再次查鍵的時(shí)候發(fā)現(xiàn)該鍵的消抖標(biāo)志位 cheak 為 1,則說(shuō)明此鍵已經(jīng)過(guò)消抖處理,這時(shí)等待鍵的釋放從而實(shí)現(xiàn)該鍵的功能。定時(shí)掃描鍵盤(pán)的子程序?yàn)椋?lt;/p><p>  bit cheak;</p><p>  //cheak 為 P2_1 的消抖標(biāo)志位</p><p>  bit keydown; //keydown 為 P2_1 按下的

56、標(biāo)志位</p><p>  bit start; //秒表啟動(dòng)標(biāo)志位</p><p>  bit stop; //秒表停止標(biāo)志位</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,則已消抖,按下標(biāo)志置 1</p><p>  cheak=0; //同時(shí)將 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é)束,程序檢測(cè)到按鍵釋放才開(kāi)始實(shí)現(xiàn)該按鍵的功。</p><p>  利用定時(shí)中斷進(jìn)行顯示。利用中斷進(jìn)行顯示簡(jiǎn)化了顯示程序而且減輕了CUP的工作負(fù)擔(dān)。具體的實(shí)現(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 復(fù)位電路</b>

64、;</p><p>  復(fù)位電路是單片機(jī)中不可缺少的主要電路之一。所謂復(fù)位電路顧名思義就是使單片機(jī)重新啟動(dòng)的電路,當(dāng)復(fù)位電路啟動(dòng)時(shí)單片機(jī)內(nèi)部的所有寄存器回到初始狀態(tài)。復(fù)位電路如圖4.1所示。</p><p>  圖4.1 復(fù)位電路</p><p>  對(duì)于51單片機(jī)來(lái)說(shuō)他是高頻復(fù)位,所謂高頻復(fù)位就是RST保持兩個(gè)機(jī)器周期以上的高電平時(shí)自動(dòng)復(fù)位。從圖4.1中可以看

65、出該電路可以實(shí)現(xiàn)兩個(gè)功能: </p><p>  上電復(fù)位:上電瞬間,電容充電電流最大,電容相當(dāng)于短路,RST端為高電平,自動(dòng)復(fù)位;電容兩端的電壓達(dá)到電源電壓時(shí),電容充電電流為零,電容相當(dāng)于開(kāi)路,RST端為低電平,程序正常運(yùn)行。</p><p>  手動(dòng)復(fù)位:首先經(jīng)過(guò)上電復(fù)位,當(dāng)按下按鍵時(shí),RST直接與VCC相連,為高電平形成復(fù)位,同時(shí)電解電容被短路放電;按鍵松開(kāi)時(shí),VCC對(duì)電容充電,充電

66、電流在電阻上,RST依然為高電平,仍然是復(fù)位,充電完成后,電容相當(dāng)于開(kāi)路,RST為低電平,正常工作。</p><p>  4.2 元件及其作用</p><p>  單片機(jī):SST89E516RD,主控制器。</p><p>  七段共陰數(shù)碼管:LED1-LED4,用于顯示。</p><p>  NPN三極管:SS9012,制作放大電路。&l

67、t;/p><p>  按鍵 K1:在正常情況下,用于控制單一計(jì)時(shí)模式下秒表的啟動(dòng)/停止。在倒計(jì)時(shí)初值設(shè)定的情況下為倒計(jì)時(shí)初值的增加按鍵,按一下 K1,倒計(jì)時(shí)初值增加 1;按住 K1 不放,倒計(jì)時(shí)初值連續(xù)增加;快速連按兩下 K1 然后不放,則倒計(jì)時(shí)初值快速增加,增加的速度是連續(xù)增加的 10 倍。</p><p>  按鍵 K2:在正常情況下,用于控制連續(xù)計(jì)時(shí) 8 個(gè)的計(jì)時(shí)模式下秒表的啟動(dòng)/停止。

68、在倒計(jì)時(shí)初值設(shè)定的情況下為倒計(jì)時(shí)初值的減少按鍵,按一下 K2,倒計(jì)時(shí)初值減少 1;按住 K2 不放,倒計(jì)時(shí)初值連續(xù)減少;快速連按兩下 K2 然后不放,則倒計(jì)時(shí)初值快速減少,減少的速度是連續(xù)減少的 10倍。</p><p>  按鍵 K3:用于秒表的功能的選擇,在默認(rèn)情況下,為秒表的計(jì)時(shí)準(zhǔn)備模式。按下 K3 后秒表進(jìn)入倒計(jì)時(shí)的狀態(tài),這時(shí)通過(guò)按鍵 K1 和 K2 可以進(jìn)行倒計(jì)時(shí)初值的調(diào)整,再按下 K3 則進(jìn)入倒計(jì)時(shí)。

69、</p><p>  按鍵 RESET:在復(fù)位電路中,對(duì)單片機(jī)起復(fù)位作用。</p><p>  LED5:用于顯示單片機(jī)的工作狀態(tài),在準(zhǔn)備計(jì)時(shí)的時(shí)候,LED5 點(diǎn)亮;在計(jì)時(shí)的時(shí)候,LED5閃爍;在倒計(jì)時(shí)初值設(shè)定和倒計(jì)時(shí)工作的時(shí)候,LED5 熄滅。</p><p>  LED6:用于顯示單片機(jī)的工作狀態(tài),在準(zhǔn)備計(jì)時(shí)和計(jì)時(shí)工作的時(shí)候,LED6 熄滅;在倒計(jì)時(shí)初值設(shè)定的時(shí)

70、候,LED6 點(diǎn)亮;在倒計(jì)時(shí)工作的時(shí)候,LED6 閃爍</p><p>  4.3 I/0接口</p><p>  P1.0~P1.7:與數(shù)碼管的各個(gè)位相連,用于傳送數(shù)碼管的段位碼。</p><p>  P3.0~P3.3:與數(shù)碼管 LED1~LED4 相連,通過(guò)單片機(jī)的 P3.0~P3.3 可以控制 LED 的顯示。</p><p>  

71、P2.1:和按鈕 K1 相連,用于決定單一計(jì)時(shí)模式下的秒表啟動(dòng)/停止和倒計(jì)時(shí)初值的增加。</p><p>  P2.0:和按鈕 K2 相連,用于決定連續(xù)計(jì) 8 個(gè)的計(jì)時(shí)模式下秒表啟動(dòng)/停止和倒計(jì)時(shí)初值的減少。</p><p>  P2.2:和按鈕 K3 相連,用于單片機(jī)工作模式的選擇。</p><p>  P2.6:和 LED6 相連,用于顯示單片機(jī)的工作狀態(tài)。&l

72、t;/p><p>  P2.7:和 LED5 相連,用于顯示單片機(jī)的工作狀態(tài)</p><p><b>  第五章 程序</b></p><p>  5.1 程序流程圖</p><p>  5.1.1 秒表的計(jì)時(shí)功能</p><p>  秒表的計(jì)時(shí)功能流程圖如圖5.1所示。</p>

73、<p>  圖5.1 秒表計(jì)時(shí)功能流程圖</p><p>  秒表的倒計(jì)時(shí)功能流程圖</p><p>  秒表的倒計(jì)時(shí)功能分為:</p><p>  倒計(jì)時(shí)的初值增加如圖5.2所示。</p><p>  倒計(jì)時(shí)的初值減少如圖5.3所示。</p><p>  倒計(jì)時(shí)功能流程圖如圖5.3所示。</p>

74、;<p>  5.2 倒計(jì)時(shí)的初值增加流程圖</p><p>  5.3 倒計(jì)時(shí)的初值減少流程圖</p><p>  5.4 倒計(jì)時(shí)的功能流程圖</p><p><b>  5.2 程序</b></p><p><b>  具體程序見(jiàn)附錄</b></p><

75、p><b>  第六章 總結(jié)</b></p><p>  現(xiàn)代電子科技發(fā)展越來(lái)越快,微型化、集成化、高密度化以及設(shè)備的高精度化已經(jīng)成為一種長(zhǎng)期的趨勢(shì),這就要求我們使用更精確的設(shè)備。本設(shè)計(jì)中使用的芯片只是當(dāng)前電子科技發(fā)展的一般產(chǎn)物,隨著科技的不斷發(fā)展,更高密度、更高精度的芯片將會(huì)取代現(xiàn)有的產(chǎn)品,所以我們還是要不斷的學(xué)習(xí),不斷的豐富和更新我們的產(chǎn)品,提出更高的要求。</p>

76、<p>  就在當(dāng)前經(jīng)濟(jì)形勢(shì)的情況下,電子產(chǎn)品要找到新的增長(zhǎng)點(diǎn),唯一的出路是智能化。可以說(shuō),一切電子產(chǎn)品,包括通信、廣播、電視控制、家用電器、電視音響等消費(fèi)類電子產(chǎn)品,智能化的時(shí)代已經(jīng)到來(lái),“智能化”的魅力無(wú)窮,模擬處處數(shù)字化的景象已經(jīng)展現(xiàn),今后將會(huì)迎來(lái)新的高潮。</p><p>  由于時(shí)間和條件的限制,本方案在設(shè)計(jì)和實(shí)現(xiàn)過(guò)程中仍然存在很多不盡完善的地方,敬請(qǐng)老師指導(dǎo)。</p><

77、;p><b>  參考文獻(xiàn)</b></p><p>  [1]蔡美琴,張為民,何金兒,等.MCS-51系列單片機(jī)系統(tǒng)及應(yīng)用[M].西安:高等教育出版社,2004.189~192.</p><p>  [2]裴瞳. RabbitMiniCore系列模塊—讓產(chǎn)品開(kāi)發(fā)輕而易舉[J].電子技術(shù)應(yīng)用,2009,35(02):42~45.</p><p&

78、gt;  [3] Keil Software – Cx51編譯器用戶手冊(cè)[J]</p><p>  [4]周世龍.單電源供電運(yùn)算放大器設(shè)計(jì)方法[J].電子工程師,2005,31(05):31~35.</p><p>  [5]孫惠麗,林凌.低功耗單雙電源供電的軌對(duì)軌儀表放大器AD627[J].國(guó)外電子元器件,2002.7(11):33~34.</p><p>  [

79、6]候建華.基于TLC2543LL的A/D轉(zhuǎn)換模板的設(shè)計(jì)[J].機(jī)電產(chǎn)品開(kāi)發(fā)與創(chuàng)新,2007,20(01): 164~165.</p><p>  [7]霍亮生.電子技術(shù)基礎(chǔ)[M].北京:清華大學(xué)出版社,2006. 31~36.</p><p>  [8]渠豐沛,胡波,于學(xué)禹.PADS2005電路原理圖與PCB設(shè)計(jì)[M],北京:機(jī)械工業(yè)出版社,2009.133~140.</p>

80、<p>  [9]高吉祥.數(shù)字系統(tǒng)與自動(dòng)控制系統(tǒng)設(shè)計(jì)[M],北京:電子工業(yè)出版社,2007.15~59.</p><p>  [10]劉艷鈴.采用MAX232實(shí)現(xiàn)MCS-51單片機(jī)與PC機(jī)的通信[J].天津理工學(xué)院學(xué)報(bào),1999, 15(02):58~61.</p><p>  [11]. SST 單片機(jī)應(yīng)用文集[J] 弘微科技有限公司 </p><p&g

81、t;  [12]謝自美.電子線路設(shè)計(jì)實(shí)驗(yàn)測(cè)試[M].武漢.華中科技大學(xué)出版社,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ù)對(duì)各個(gè)變量進(jìn)行初始化,再對(duì)定時(shí)器的</p&

90、gt;<p>  定時(shí)初值進(jìn)行設(shè)定,接著根據(jù)各個(gè)標(biāo)志位的值來(lái)判斷單片機(jī)的工作模式及工作狀態(tài)。鍵盤(pán)掃描由</p><p>  scan( )來(lái)完成,各個(gè)位的數(shù)值的計(jì)算由 add1( )來(lái)完成。</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) //進(jìn)行鍵盤(pán)掃描</p><p><b>  {</b></p><p>  scankey=0;</p

93、><p><b>  scan();</b></p><p>  if(double_key==1) //倒計(jì)時(shí)初值快速增加</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) //倒計(jì)時(shí)初值連續(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) //倒計(jì)時(shí)初值增加 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) //倒計(jì)時(shí)初值快速減少</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) //倒計(jì)時(shí)初值連續(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) //倒計(jì)時(shí)初值減少 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>  //計(jì)時(shí)開(kāi)始</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>  //計(jì)時(shí)停止</b></p><p>  if(count_down==1)</p><p><b>  //倒計(jì)時(shí)開(kāi)始</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>  初始化子程序通常是在一開(kāi)始就被調(diào)用,用來(lái)初始化各個(gè)變量,同時(shí)也顯示了單片機(jī)上電后的工作狀態(tài)。雖然有些變量在定義的時(shí)候已被默認(rèn)初始化了,但是為了自己檢查方便,還是應(yīng)該加上初始化的子程序。</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>  定時(shí)器中斷子程序</b></p><p>  這里的秒表的計(jì)時(shí)、鍵盤(pán)的掃描及數(shù)值顯示等都是利用定時(shí)中斷來(lái)完成的。定時(shí)的時(shí)間 設(shè)為1ms,用于數(shù)值顯

112、示;同時(shí)利用累加的方法實(shí)現(xiàn) 10ms 和 200ms 的定時(shí),用于鍵盤(pán)的掃描及控制顯示</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>  顯示子程序其實(shí)包括了 display()和 add1(time)兩個(gè)子程序。add1(time)是用來(lái)計(jì)算數(shù)碼管各個(gè)位</p><p>  要顯示的數(shù)值的子程序,display()是查段位碼表及進(jìn)行動(dòng)態(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>  //計(jì)算十秒位數(shù)值</b></p><p>  n=time%1000;</p><p>  LED1=(n/100);</p><p><b>  //計(jì)算秒位數(shù)值</b></p><p><b>  n=n%100;</b></p><p&g

118、t;  LED2=(n/10);</p><p>  //計(jì)算十分一秒位數(shù)值</p><p>  LED3=n%10;</p><p>  //計(jì)算百分一秒位數(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>  鍵盤(pán)掃描</b></p><p>  鍵盤(pán)掃描的子程序完成的任務(wù)是每 10ms 進(jìn)行一次鍵盤(pán)的查詢,根據(jù)查詢的結(jié)果對(duì)相應(yīng)的標(biāo)志</p><p>  位進(jìn)行賦值。因?yàn)橐獙?shí)現(xiàn)比較多的功能,所以鍵盤(pán)掃描的子程序比較復(fù)雜。</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>  //實(shí)現(xiàn)倒計(jì)時(shí)的功能</p><p>

126、  { if(cheak==0){cheak=1;}</p><p>  //若 cheak 為 0,則按鍵沒(méi)消抖</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. 本站所有資源如無(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)論