2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  摘要</b></p><p>  隨著微電子和計(jì)算機(jī)技術(shù)的發(fā)展,步進(jìn)電機(jī)的需求量與日俱增,它廣泛用于打印機(jī)、電動(dòng)玩具等消費(fèi)類(lèi)產(chǎn)品以及數(shù)控機(jī)床、工業(yè)機(jī)器人、醫(yī)療器械等機(jī)電產(chǎn)品中,其在各個(gè)國(guó)民經(jīng)濟(jì)領(lǐng)域都有應(yīng)用。研究步進(jìn)電機(jī)的控制系統(tǒng),對(duì)提高控制精度和響應(yīng)速度、節(jié)約能源等都具有重要意義。</p><p>  本控制系統(tǒng)的設(shè)計(jì),由硬件設(shè)計(jì)和軟件設(shè)

2、計(jì)兩部分組成,完成二相步進(jìn)電機(jī)的控制。其中,硬件設(shè)計(jì)主要包括單片機(jī)系統(tǒng)、按鍵控制模塊、步進(jìn)電機(jī)驅(qū)動(dòng)模塊、數(shù)碼顯示模塊等功能模塊的設(shè)計(jì),以及硬件電路在PROTUS上的仿真。軟件設(shè)計(jì)包括主程序以及各個(gè)模塊的控制程序,最終實(shí)現(xiàn)對(duì)步進(jìn)電機(jī)轉(zhuǎn)動(dòng)方向及轉(zhuǎn)動(dòng)模式(四拍,八拍)的控制,并且將步進(jìn)電機(jī)的步進(jìn)數(shù)動(dòng)態(tài)顯示在LED數(shù)碼管上。本系統(tǒng)具有智能性、實(shí)用性及可靠性的特點(diǎn)。</p><p>  關(guān)鍵詞:二相步進(jìn)電機(jī) 單片機(jī) 四

3、拍 八拍 LED顯示</p><p><b>  Abstract</b></p><p>  With the development of microelectronics and computer art, step-by-step electric motor need amounts increase with each passing day , it

4、 is used for the products consuming a kind such as printer , electricity-driven toy broadly and numerical control machine tool , electromechanical products such as industry robot , medical apparatus and instruments are h

5、it by, the person applies to each national economy field It both. Study step-by-step electric motor navar , having importance to improving under </p><p>  Keywords: Electric motor MCU Four shoots Eight sh

6、oots LEDdisplay</p><p><b>  目錄</b></p><p>  摘要.........................................................................I</p><p>  1總體分析與解決方案............................

7、.............................1</p><p>  1.1問(wèn)題的提出與簡(jiǎn)述......................................................1</p><p>  1.2設(shè)計(jì)目的級(jí)系統(tǒng)功能....................................................1</p>&

8、lt;p>  2 硬件電路設(shè)計(jì)模塊..........................................................2</p><p>  2.1單片機(jī)系統(tǒng)原理........................................................2</p><p>  2.2二相步進(jìn)電機(jī)工作原理分析.............

9、.................................5</p><p>  2.3 L298驅(qū)動(dòng)電路設(shè)計(jì).....................................................7</p><p>  2.4 四位LED數(shù)碼管顯示設(shè)計(jì)...............................................7</p&g

10、t;<p>  2.5總體硬件仿真設(shè)計(jì).....................................................10</p><p>  3軟件設(shè)計(jì)模塊..............................................................11</p><p>  3.1整體流程分析與設(shè)計(jì)..........

11、.........................................11</p><p>  3.2步進(jìn)電機(jī)四拍,八拍流程分析與設(shè)計(jì)......................................11</p><p>  3.3顯示模塊流程分析與設(shè)計(jì)...............................................14</p>

12、;<p>  4 系統(tǒng)調(diào)試運(yùn)行與仿真........................................................15</p><p>  5 小結(jié)與心得體會(huì)............................................................16</p><p>  參考文獻(xiàn)................

13、....................................................17</p><p>  附錄........................................................................18</p><p>  二相步進(jìn)電機(jī)控制系統(tǒng)的設(shè)計(jì)</p><p>  1總體分析與解決

14、方案</p><p>  1.1問(wèn)題的提出與簡(jiǎn)述</p><p>  如今,電動(dòng)機(jī)在工農(nóng)業(yè)生產(chǎn)、人們?nèi)粘I钪衅鹬种匾淖饔?。步進(jìn)電機(jī)是最常見(jiàn)的一種控制電機(jī),在各領(lǐng)域中得到廣泛應(yīng)用。步進(jìn)電機(jī)作為執(zhí)行元件,是機(jī)電一體化的關(guān)鍵產(chǎn)品之一, 廣泛應(yīng)用在各種自動(dòng)化控制系統(tǒng)中。</p><p>  隨著微電子和計(jì)算機(jī)技術(shù)的發(fā)展,步進(jìn)電機(jī)的需求量與日俱增,在各個(gè)國(guó)民經(jīng)濟(jì)領(lǐng)域都

15、有應(yīng)用。步進(jìn)電機(jī)是一種將電脈沖轉(zhuǎn)化為角位移的執(zhí)行機(jī)構(gòu)。當(dāng)步進(jìn)驅(qū)動(dòng)器接收到一個(gè)脈沖信號(hào),它就驅(qū)動(dòng)步進(jìn)電機(jī)按設(shè)定的方向轉(zhuǎn)動(dòng)一個(gè)固定的角度(稱(chēng)為“步距角”),它的旋轉(zhuǎn)是以固定的角度一步一步運(yùn)行的。可以通過(guò)控制脈沖個(gè)數(shù)來(lái)控制角位移量,從而達(dá)到準(zhǔn)確定位的目的;同時(shí)可以通過(guò)控制脈沖頻率來(lái)控制電機(jī)轉(zhuǎn)動(dòng)的速度和加速度,從而達(dá)到調(diào)速的目的。步進(jìn)電機(jī)可以作為一種控制用的特種電機(jī),其優(yōu)點(diǎn)是結(jié)構(gòu)簡(jiǎn)單、運(yùn)行可靠、控制方便。尤其是步距值不受電壓、溫度的變化的影響、

16、誤差不會(huì)長(zhǎng)期積累的特點(diǎn),給實(shí)際的應(yīng)用帶來(lái)了很大的方便。它廣泛用于消費(fèi)類(lèi)產(chǎn)品(打印機(jī)、照相機(jī))、工業(yè)控制(數(shù)控機(jī)床、工業(yè)機(jī)器人)、醫(yī)療器械等機(jī)電產(chǎn)品中。研究步進(jìn)電機(jī)的控制和測(cè)量方法,對(duì)提高控制精度和響應(yīng)速度、節(jié)約能源等都具有重要意義。為此,本文設(shè)計(jì)了一個(gè)步進(jìn)電機(jī)控制系統(tǒng),可以實(shí)現(xiàn)對(duì)步進(jìn)電機(jī)轉(zhuǎn)動(dòng)方式和轉(zhuǎn)動(dòng)方向的控制。</p><p>  1.2設(shè)計(jì)目的及系統(tǒng)功能</p><p>  本設(shè)計(jì)的目

17、的是以單片機(jī)為核心設(shè)計(jì)出一個(gè)二相步進(jìn)電機(jī)控制系統(tǒng)。本系統(tǒng)采用ATmega128作為控制單元,通過(guò)按鍵實(shí)現(xiàn)對(duì)二相步進(jìn)電機(jī)轉(zhuǎn)動(dòng)方向及轉(zhuǎn)動(dòng)模式的控制,并且將步進(jìn)電機(jī)的步進(jìn)步數(shù)動(dòng)態(tài)顯示在LED數(shù)碼管上。</p><p>  通過(guò)本課題,查閱相關(guān)資料,由于本學(xué)期所學(xué)單片機(jī)課程型號(hào)為ATmega128,了解了ATmega128單片機(jī)控制的一些基本技術(shù),掌握其控制系統(tǒng)的分析方法與實(shí)現(xiàn)方法,能對(duì)單片機(jī)外圍電路設(shè)計(jì)進(jìn)行系統(tǒng)學(xué)習(xí)與掌

18、握;另一方面,通過(guò)設(shè)計(jì)步進(jìn)電機(jī)控制系統(tǒng)的硬件電路,控制程序和相應(yīng)的電路圖,以此培養(yǎng)自己的自學(xué)和動(dòng)手能力,從而為今后參加工作或進(jìn)一步深造打下良好的基礎(chǔ)。設(shè)計(jì)的步進(jìn)電機(jī)控制系統(tǒng)有以下功能:</p><p>  1. 二相步進(jìn)電機(jī)采用雙極性(H橋)控制</p><p>  2.用K0-K1作為通電方式選擇鍵,K0為四拍,K1為八拍</p><p>  3. 用K2作為啟動(dòng)

19、/停止控制鍵</p><p>  4. 用K3作為方向控制</p><p>  5. 用4位LED數(shù)碼管顯示工作步數(shù)</p><p>  6. 用3個(gè)發(fā)光二極管顯示狀態(tài):正轉(zhuǎn)時(shí)紅燈亮,反轉(zhuǎn)時(shí)黃燈亮,不轉(zhuǎn)時(shí)綠燈亮</p><p>  考慮到二相步進(jìn)電機(jī)需采用雙極性控制,故電機(jī)的驅(qū)動(dòng)模塊使用芯片L298實(shí)現(xiàn),接線簡(jiǎn)潔,穩(wěn)定性好。選定好設(shè)計(jì)方案后,

20、可以由分析得到系統(tǒng)的總體原理框圖如下所示:</p><p>  圖1系統(tǒng)總體原理框圖</p><p><b>  2硬件電路設(shè)計(jì)模塊</b></p><p>  2.1 單片機(jī)系統(tǒng)原理</p><p>  本次課題采用的單片機(jī)型號(hào)是ATmega128,ATmega128為基于AVR RISC結(jié)構(gòu)的8位低功耗CMOS微處理

21、器。由于其先進(jìn)的指令集以及單周期指令執(zhí)行時(shí),ATmega128 的數(shù)據(jù)吞吐率高達(dá)1 MIPS/MHz,從而可以緩減系統(tǒng)在功耗和處理速度之間的矛盾。AVR 內(nèi)核具有豐富的指令集和32個(gè)通用工作寄存器。所有的寄存器都直接與算邏單元(ALU) 相連接,使得一條指令可以在一個(gè)時(shí)鐘周期內(nèi)同時(shí)訪問(wèn)兩個(gè)獨(dú)立的寄存器。這種結(jié)構(gòu)大大提高了代碼效率,并且具有比普通的復(fù)雜指令集微處理器高10 倍的數(shù)據(jù)吞吐率。ATmega128 具有如下特點(diǎn):128K 字節(jié)的

22、系統(tǒng)內(nèi)可編程Flash( 具有在寫(xiě)的過(guò)程中還可以讀的能力,即RWW)、4K字節(jié)的EEPROM,4K字節(jié)的SRAM、53個(gè)通用I/O 口線、32個(gè)通用工作寄存器、實(shí)時(shí)時(shí)鐘RTC、4個(gè)靈活的具有比較模式和PWM 功能的定時(shí)器/ 計(jì)數(shù)器(T/C)、兩個(gè)USART、面向字節(jié)的兩線接口TWI、8通道10位ADC( 具有可選的可編程增益)、具有片內(nèi)振蕩器的可編程看門(mén)狗定時(shí)器、SPI串行端口、與IEEE 1149.1 規(guī)范兼容的JTAG測(cè)試接口( 此

23、接口</p><p>  ATmega128 AVR有整套的開(kāi)發(fā)工具,包括C編譯器,宏匯編,程序調(diào)試器/ 仿真器和評(píng)估板。芯片引腳圖如下所示:</p><p>  圖2 ATmega128的引腳圖</p><p>  本次課設(shè)所使用的單片機(jī)功能主要有單片機(jī)的I/O口以及定時(shí)器/計(jì)數(shù)器功能。作為通用數(shù)字I/O 使用時(shí),所有AVR I/O 端口都具有真正的讀- 修改-

24、寫(xiě)功能。這意味著用SBI 或CBI 指令改變某些管腳的方向( 或者是端口電平、禁止/ 使能上拉電阻) 時(shí)不會(huì)無(wú)意地改變其他管腳的方向( 或者是端口電平、禁止/ 使能上拉電阻)。輸出緩沖器具有對(duì)稱(chēng)的驅(qū)動(dòng)能力,可以輸出或吸收大電流,直接驅(qū)動(dòng)LED。所有的端口引腳都具有與電壓無(wú)關(guān)的上拉電阻,并有保護(hù)二極管與VCC 和地相連。每個(gè)端口都有三個(gè)I/O 存儲(chǔ)器地址:數(shù)據(jù)寄存器 – PORTx、 數(shù)據(jù)方向寄存器 – DDRx 和端口輸入引腳– PIN

25、x。數(shù)據(jù)寄存器和數(shù)據(jù)方向寄存器為讀/ 寫(xiě)寄存器,而端口輸入引腳為只讀寄存器。當(dāng)寄存器SFIOR 的上拉禁止位PUD 置位時(shí)所有端口的全部引腳的上拉電阻都被禁止。DDxn 位于DDRx 寄存器, PORTxn 位于PORTx 寄存器, PINxn 位于PINx 寄存器。DDxn 以來(lái)選擇引腳的方向。當(dāng)DDxn 為"1“ 時(shí), Pxn 配置為輸出;否則為輸入。當(dāng)引腳配置為輸入時(shí),若PORTxn 為"1“,上拉電</

26、p><p>  圖3 ATmega128的仿真圖</p><p>  本次課設(shè)采用單片機(jī)的定時(shí)器/計(jì)數(shù)器功能的CTC模式, T/C(TCNT0)和輸出比較寄存器(OCR0)為8位寄存器。中斷請(qǐng)求信號(hào)位于定時(shí)器中斷標(biāo)志寄存器TIFR。與定時(shí)器相關(guān)的所有中斷都可以通過(guò)定時(shí)器中斷屏蔽寄存器TIMSK 單獨(dú)進(jìn)行屏蔽。在CTC 模式(WGM01:0 = 2) 里OCR0 寄存器用于調(diào)節(jié)計(jì)數(shù)器的分辨率。當(dāng)

27、計(jì)數(shù)器的數(shù)值TCNT0 等于OCR0 時(shí)計(jì)數(shù)器清零。OCR0 定義了計(jì)數(shù)器的top 值,亦即計(jì)數(shù)器的分辨率。這個(gè)模式可以在極大程度上控制比較匹配輸出的頻率,也簡(jiǎn)化了外部事件計(jì)數(shù)的操作。CTC模式的時(shí)序圖如下所示。計(jì)數(shù)器數(shù)值TCNT0一直增加直到TCNT0與OCR0匹配,然后TCNT0 清零。</p><p>  圖4 CTC模式的時(shí)序圖</p><p>  2.2 二相步進(jìn)電機(jī)工作原理分析

28、</p><p>  步進(jìn)電機(jī)一般分為永磁式(PM)、反應(yīng)式(VR)和混合式(HB)3種類(lèi)型。目前,二相混合式步進(jìn)電機(jī)的應(yīng)用最為廣泛。圖5為二相六線式步進(jìn)電機(jī)的工作原示意圖。由圖可知,它有2個(gè)繞組,且每個(gè)繞組都有一個(gè)中間抽頭。因此,二相步進(jìn)電機(jī)也就有了6根引線。當(dāng)電機(jī)中的繞組通電后,其定子磁極產(chǎn)生磁場(chǎng),將轉(zhuǎn)子吸合到相應(yīng)的磁極處。若繞組在控制脈沖的作用下,通電方向使定子在順時(shí)針?lè)较蜉喠鳟a(chǎn)生磁場(chǎng),則電機(jī)可順時(shí)針轉(zhuǎn)動(dòng);

29、通電方向使定子在逆時(shí)針?lè)较蜉喠鳟a(chǎn)生磁場(chǎng),則電機(jī)可逆時(shí)針轉(zhuǎn)動(dòng)??刂泼}沖每作用一次,通電方向就變化一次,使電機(jī)轉(zhuǎn)動(dòng)一步,即一個(gè)步距角。脈沖頻率越高,電機(jī)轉(zhuǎn)動(dòng)也就越快。</p><p>  本次課設(shè)所使用的二相步進(jìn)電機(jī)需要采用雙極性的接法。雙極性則是指步進(jìn)電機(jī)線圈中電流的流動(dòng)方向不是單向的,即繞組線圈中的電流有時(shí)沿某一方向流動(dòng),有時(shí)按相反方向流動(dòng)。步進(jìn)電機(jī)的雙極性驅(qū)動(dòng)電路如圖2-5所示它使用8個(gè)晶體管來(lái)驅(qū)動(dòng)2組相位。雙

30、極性驅(qū)動(dòng)電路可以同時(shí)驅(qū)動(dòng)四線式或六線式的二相步進(jìn)電機(jī)。對(duì)于二相六線式步進(jìn)電機(jī)而言, 2個(gè)繞組的中間抽頭Vdd1和Vdd2都懸空。根據(jù)步進(jìn)電機(jī)的工作原理,當(dāng)控制器給驅(qū)動(dòng)器發(fā)出脈沖信號(hào)時(shí),驅(qū)動(dòng)器經(jīng)過(guò)環(huán)形分配器和功率放大后,電機(jī)繞組通電的順序?yàn)?其4個(gè)狀態(tài)按順序周而復(fù)始進(jìn)行變化,電機(jī)轉(zhuǎn)動(dòng); 若通電時(shí)序就變?yōu)闀r(shí),電機(jī)就逆向轉(zhuǎn)動(dòng)。步進(jìn)電機(jī)運(yùn)轉(zhuǎn)時(shí),當(dāng)達(dá)林頓管Q1和Q4導(dǎo)通時(shí),線圈中電流方向?yàn)锳→;當(dāng)林頓管Q2和Q3導(dǎo)通時(shí),線圈中電流方向?yàn)椤鶤。可見(jiàn)

31、,步進(jìn)電機(jī)線圈中的電流方向在運(yùn)轉(zhuǎn)過(guò)程中是不斷改變的。</p><p>  圖5 二相步進(jìn)電機(jī)原理圖</p><p>  圖6 雙極性驅(qū)動(dòng)電路</p><p>  任務(wù)要求需要對(duì)二相步進(jìn)電機(jī)進(jìn)行四拍,八拍的控制。其兩者的區(qū)別在于通電時(shí)序的不一樣,四拍的通電方式為:,而八拍需要在此基礎(chǔ)上進(jìn)行細(xì)分,在中間插入,其通電方式為: </p><p>  

32、。由對(duì)應(yīng)的通電方式,在結(jié)合圖6,便可以得到對(duì)應(yīng)的單片機(jī)管腳P1.0,P1.1,P1.2,P1.3的電平變化情況,繪制出步進(jìn)電機(jī)的四拍,八拍控制方式表格。如下所示:</p><p>  表1 步進(jìn)電機(jī)四拍控制通電方式</p><p>  表2 步進(jìn)電機(jī)八拍控制通電方式</p><p>  由上述所得表格,便可以通過(guò)控制單片機(jī)I/O口輸出高低電平變化來(lái)實(shí)現(xiàn)步進(jìn)電機(jī)的四拍

33、,八拍運(yùn)轉(zhuǎn)。在編寫(xiě)程序時(shí),設(shè)置好控制字,在I/O口做循環(huán)輸出,便實(shí)現(xiàn)了單片機(jī)對(duì)步進(jìn)電機(jī)的控制。由于單片機(jī)單獨(dú)代負(fù)載能力較差,步進(jìn)電機(jī)與單片機(jī)之間需要接入步進(jìn)電機(jī)的驅(qū)動(dòng)電路。</p><p>  2.3 L298驅(qū)動(dòng)電路設(shè)計(jì)</p><p>  由課題任務(wù)要求可知,二相步進(jìn)電機(jī)需采用雙極性(H橋)控制,故考慮使用芯片L298來(lái)驅(qū)動(dòng)步進(jìn)電機(jī)。L298N 為雙全橋步進(jìn)電機(jī)專(zhuān)用驅(qū)動(dòng)芯片,內(nèi)部包含4

34、信道邏輯驅(qū)動(dòng)電路,是一種二相和四相步進(jìn)電機(jī)的專(zhuān)用驅(qū)動(dòng)器,可同時(shí)驅(qū)動(dòng)2個(gè)二相或1個(gè)四相步進(jìn)電機(jī),內(nèi)含二個(gè)H-Bridge 的高電壓、大電流雙全橋式驅(qū)動(dòng)器,接收標(biāo)準(zhǔn)TTL邏輯準(zhǔn)位信號(hào),可驅(qū)動(dòng)46V、2A以下的步進(jìn)電機(jī),且可以直接透過(guò)電源來(lái)調(diào)節(jié)輸出電壓;此芯片可直接由單片機(jī)的IO端口來(lái)提供模擬時(shí)序信號(hào)。在接入步進(jìn)電機(jī)時(shí),OUTl,OUT2 ,OUT3,OUT4接二相步進(jìn)電機(jī)的,,,,二相步進(jìn)電機(jī)的對(duì)應(yīng)管腳以圖6為準(zhǔn),input1~input4

35、接單片機(jī)的I/O口,用來(lái)控制單片機(jī)的正反轉(zhuǎn)以及四拍,八拍通電方式。芯片的內(nèi)部結(jié)構(gòu)如下圖所示:</p><p>  圖7 L298內(nèi)部結(jié)構(gòu)圖</p><p>  由圖6與圖7比較可以看出,L298內(nèi)部集成有2個(gè)H橋路,對(duì)應(yīng)的輸入接口為:IN1位P1.1,IN2為P1.0,IN3為P1.2,IN4為P1.3。對(duì)應(yīng)的輸出接口為:OUT1接,OUT2接,OUT3接,OUT4接。PROTUS仿真圖為

36、:</p><p>  圖8 驅(qū)動(dòng)電路PROTUS仿真圖</p><p>  2.4 四位LED數(shù)碼管顯示設(shè)計(jì)</p><p>  任務(wù)要求需采用4位LED數(shù)碼管顯示工作步數(shù),通過(guò)查閱相關(guān)資料,在仿真時(shí)采用型號(hào)7SEG-MPX4-CC共陰極數(shù)碼管顯示。其PROTUS仿真圖如下所示:</p><p>  圖9 數(shù)碼管顯示仿真圖</p>

37、;<p>  單片機(jī)的PD口接數(shù)碼管輸入管腳ABCDEFG以及DP(可以不用),PE口接4位數(shù)碼管的片選端口1234,7段數(shù)碼管對(duì)應(yīng)的顯示數(shù)值與輸入信號(hào)的關(guān)系可以由下表得到。</p><p>  表3 七段數(shù)碼管顯示功能表</p><p>  由上表可以得到顯示數(shù)字與單片機(jī)管腳輸入信號(hào)的對(duì)應(yīng)關(guān)系。只需要控制單片機(jī)的PD口輸出信號(hào)即可顯示數(shù)字,在程序設(shè)計(jì)中,定義7段顯示數(shù)組為s

38、even_seg[10]= {0X3f, 0X06, 0X5b, 0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f}即可使數(shù)碼管顯示數(shù)字。</p><p>  2.5 總體硬件仿真設(shè)計(jì)</p><p>  由前面各硬件部分的設(shè)計(jì)分析,以及控制系統(tǒng)的總體原理框圖可以得到系統(tǒng)的硬件PROTUS仿真圖為:</p><p>  圖10 系統(tǒng)仿真原理圖&l

39、t;/p><p>  通過(guò)硬件仿真圖可以看到,以單片機(jī)ATmega128為核心的控制系統(tǒng),由PA口與PB口進(jìn)行開(kāi)關(guān)按鍵的設(shè)置,具體為:PB1接K2啟動(dòng)/停止開(kāi)關(guān),高電平為停止?fàn)顟B(tài),低電平為啟動(dòng)狀態(tài);PA7接K3正/反轉(zhuǎn)開(kāi)關(guān),高電平為正轉(zhuǎn),低電平為反轉(zhuǎn);PA0接K0四拍通電方式,按一次即可使電機(jī)進(jìn)行四拍運(yùn)轉(zhuǎn);PA2接K1八拍通電方式,按一次使電機(jī)進(jìn)行八拍運(yùn)轉(zhuǎn)。</p><p>  PE口與PD口

40、外接4位LED數(shù)碼管,顯示步進(jìn)步數(shù),具體接線方式已在前面敘述,通過(guò)控制PE口的電平信號(hào),達(dá)到片選的目的,進(jìn)而實(shí)現(xiàn)4位數(shù)值的顯示。PF口作為輸出口外接負(fù)載,具體由PF7接綠色發(fā)光二極管,使其在電機(jī)停轉(zhuǎn)時(shí)亮;PF5接紅色放光二極管,使其在電機(jī)正轉(zhuǎn)時(shí)亮;PF4接黃色發(fā)光二極管,使其在電機(jī)發(fā)轉(zhuǎn)時(shí)亮。PF0-PF3外接驅(qū)動(dòng)電路L298的4個(gè)輸入端,具體為PF0接IN2,PF1接IN1,PF2接IN3,PF3接IN4;即對(duì)應(yīng)圖2-5的P1.0-P1

41、.3,L298再外接二相步進(jìn)電機(jī),這樣即可通過(guò)控制單片機(jī)的PF口輸出電平來(lái)實(shí)現(xiàn)二相步進(jìn)電機(jī)的啟動(dòng),停止,正反轉(zhuǎn)以及四拍,八拍運(yùn)轉(zhuǎn)。具體工作過(guò)程需通過(guò)對(duì)單片機(jī)編程來(lái)實(shí)現(xiàn)。</p><p><b>  3軟件設(shè)計(jì)模塊</b></p><p>  3.1總體流程分析與設(shè)計(jì)</p><p>  軟件模塊的分析需要根據(jù)硬件電路的設(shè)計(jì)來(lái)進(jìn)行,基于上述硬件電

42、路的分析設(shè)計(jì),對(duì)整個(gè)程序流程需要有個(gè)整體的思考與判斷。由硬件電路的設(shè)計(jì)可以看出,程序需要實(shí)現(xiàn)以下幾個(gè)功能:通過(guò)開(kāi)關(guān)按鍵實(shí)現(xiàn)電機(jī)的啟用與停止,正轉(zhuǎn)與反轉(zhuǎn),以及四拍,八拍的運(yùn)行方式;由4位LED數(shù)碼管實(shí)現(xiàn)步進(jìn)步數(shù)的顯示;3個(gè)發(fā)光二極管顯示電機(jī)的狀態(tài)。程序設(shè)計(jì)的總體思想是單片機(jī)通過(guò)判斷按鍵輸入電平變化從而選擇正反轉(zhuǎn)以及四八拍的工作方式。通過(guò)單片機(jī)的定時(shí)器/計(jì)數(shù)器2實(shí)現(xiàn)步數(shù)計(jì)數(shù)的功能;由定時(shí)器/計(jì)數(shù)器0實(shí)現(xiàn)單片機(jī)PF口輸出正反轉(zhuǎn)信號(hào)以及四拍,八

43、拍控制字,同時(shí)發(fā)光二極管顯示狀態(tài),主程序流程圖如圖3-1所示。程序設(shè)計(jì)主要采用主程序調(diào)用子程序的模式來(lái)進(jìn)行,定義子程序display()在主程序中循環(huán)實(shí)現(xiàn)單片機(jī)的持續(xù)運(yùn)行。</p><p>  在display()中,調(diào)用子程序saomiao()實(shí)現(xiàn)對(duì)按鍵的掃描以達(dá)到選定電機(jī)運(yùn)行狀態(tài)的目的,由if判斷語(yǔ)句設(shè)計(jì),先判斷啟動(dòng)/停止按鍵接口PB1,接著判斷正/反轉(zhuǎn)按鍵接口PA7,設(shè)定變量flag(正轉(zhuǎn)位0,反轉(zhuǎn)為2),

44、然后判斷四八拍方式選擇按鍵,此時(shí)開(kāi)啟定時(shí)器/計(jì)數(shù)器0和定時(shí)器/計(jì)數(shù)器2,以及確定循環(huán)變量tt(四拍為4,八拍為8),由于定時(shí)器/計(jì)數(shù)器的啟動(dòng),使得單片機(jī)的PF口輸出對(duì)應(yīng)方式的控制字,讓電機(jī)開(kāi)始運(yùn)轉(zhuǎn);計(jì)數(shù)功能啟用,實(shí)現(xiàn)步進(jìn)數(shù)的計(jì)數(shù),最后通過(guò)片選數(shù)組scan[k]選定數(shù)碼管的位數(shù),并由七段數(shù)組seven_seg[],顯示對(duì)應(yīng)的數(shù)值。最后重新判斷PB口數(shù)值,若啟動(dòng)/停止按鍵為停止,則關(guān)閉定時(shí)器/計(jì)數(shù)器0和定時(shí)器/計(jì)數(shù)器2,系統(tǒng)停止,具體完整程

45、序參見(jiàn)附錄。</p><p>  3.2步進(jìn)電機(jī)四拍,八拍流程分析與設(shè)計(jì)</p><p>  程序設(shè)計(jì)需要對(duì)步進(jìn)電機(jī)進(jìn)行四拍控制與八拍控制,有前面所述可知,兩者的區(qū)別在于對(duì)電機(jī)的通電時(shí)序不一樣。由表2-1與表2-2可以得到電機(jī)的控制字,在程序設(shè)計(jì)時(shí),首先定義電機(jī)的控制字?jǐn)?shù)組,由于存在正反轉(zhuǎn)兩種情況,所以定義一個(gè)2維數(shù)組為d4[][8]= {{0x22,0x28,0x21,0x24},{0x

46、22,0x2a,0x28,02</p><p>  9,0x21,0x25,0x24,0x26},{0x14,0x11,0x18,0x12},{0x14,0x15,0x11, 0x19, 0x18, 0x1a,0x12,0x16}};分別為電機(jī)正轉(zhuǎn)4拍,正轉(zhuǎn)8拍,反轉(zhuǎn)4拍,反轉(zhuǎn)8拍的控制字;通過(guò)給單片機(jī)PF口賦予上述數(shù)值即可實(shí)現(xiàn)步進(jìn)電機(jī)的不同方式運(yùn)轉(zhuǎn),同時(shí)由發(fā)光二極管顯示電機(jī)的工作狀態(tài)。</p>&

47、lt;p>  圖11 主程序流程圖</p><p>  在程序設(shè)計(jì)時(shí),需要使用單片機(jī)的定時(shí)器/計(jì)數(shù)器0功能實(shí)現(xiàn)四拍,八拍運(yùn)轉(zhuǎn)。在程序中,首先有saomiao()程序判斷所選功能按鍵,同時(shí)開(kāi)啟定時(shí)器/計(jì)數(shù)器0,在其初始化程序里,設(shè)定寄存器的值為T(mén)CNT0 = 0x64,OCR0 = 0x9C,當(dāng)TCNT0的計(jì)數(shù)值與OCR0相等時(shí),觸發(fā)中斷子程序timer0_comp_isr(),在中斷子程序里,先重新賦予寄

48、存器數(shù)值TCNT0 = 0x64,OCR0 = 0x9C,以便下次觸發(fā)中斷程序,然后將設(shè)定的計(jì)數(shù)變量timer0加1,判斷timer0是否為50,當(dāng)累加到50后,將timer0清零,變量i加1,將對(duì)應(yīng)的控制字d4[flag+pai][i%tt]賦給PF口,使電機(jī)轉(zhuǎn)動(dòng),讓循環(huán)重復(fù)上述過(guò)程。flag+pai確定了電機(jī)的正反轉(zhuǎn)以及四拍,八拍方式;當(dāng)為四拍時(shí),tt=4,為八拍時(shí),tt=8;這樣即可使控制字循環(huán)輸出給PF口,從而實(shí)現(xiàn)了步進(jìn)電機(jī)的

49、四拍,八拍運(yùn)轉(zhuǎn)。其程序流程圖如下所示:</p><p>  圖12 步進(jìn)電機(jī)四拍,八拍流程圖</p><p>  程序通過(guò)控制寄存器值TCCR0來(lái)控制定時(shí)器/計(jì)數(shù)器0的啟動(dòng)與停止,當(dāng)TCCR0=0x0E時(shí),定時(shí)器/計(jì)數(shù)器0啟動(dòng),TCNT0累加,當(dāng)TCNTO=OCR0時(shí),觸發(fā)相應(yīng)的中斷子程序,設(shè)定當(dāng)timer0=50時(shí),將控制字輸出到PF口,實(shí)現(xiàn)了一定的延時(shí),可以調(diào)整這個(gè)數(shù)值以達(dá)到滿(mǎn)意的延時(shí)

50、效果,將TCCR0設(shè)置為0x00來(lái)屏蔽定時(shí)器/計(jì)數(shù)器0功能。</p><p>  3.3顯示模塊流程分析與設(shè)計(jì)</p><p>  硬件設(shè)計(jì)得到了4位LED數(shù)碼管的顯示電路,由單片機(jī)的PD口輸出顯示數(shù)字,有PE口用來(lái)輸出片選信號(hào)。由前所述表3可知,ABCDEFG管腳對(duì)應(yīng)的數(shù)字顯示,得到了10個(gè)對(duì)應(yīng)的十六進(jìn)制數(shù),在程序設(shè)計(jì)中,先定義了7段數(shù)碼管顯示數(shù)組seven_seg[10]={0X3f,

51、0X06,0X5b,0X4f,0X66, 0X6d, 0X7d, 0X07, 0X7f, 0X6f},以及片選數(shù)組scan[4]={0Xf7,0Xfb,0Xfd,0Xfe};使用定時(shí)器/計(jì)數(shù)器2來(lái)實(shí)現(xiàn)計(jì)數(shù)的功能,其工作方式與定時(shí)器/計(jì)數(shù)器0一樣,在時(shí)序上與定時(shí)器/計(jì)數(shù)器0保持一致,以達(dá)到步進(jìn)與計(jì)數(shù)同步的效果,其設(shè)定的TCNT2與OCR2值與前面一致。其程序流程圖如下所示:</p><p>  圖13 中斷計(jì)數(shù)程序

52、流程圖</p><p>  通過(guò)定時(shí)器/計(jì)數(shù)器2實(shí)現(xiàn)計(jì)數(shù)的功能,要顯示出計(jì)數(shù)結(jié)果,需要給單片機(jī)PE口對(duì)應(yīng)的片選信號(hào)來(lái)實(shí)現(xiàn)每位數(shù)值的顯示。其對(duì)應(yīng)的程序代碼如下:</p><p>  PORTE =scan[k];//對(duì)應(yīng)的片選信號(hào) </p><p>  switch(k)//顯示每位數(shù)值</p><p>  {case 0 : PORTD=

53、seven_seg[now.geshi%10]; break;//顯示個(gè)位</p><p>  case 1 : PORTD=seven_seg[now.geshi/10];break;//顯示十位</p><p>  case 2 : PORTD=seven_seg[now.baiqian%10];break;//顯示百位 case 3 : PORTD=seven_seg[now

54、.baiqian/10];break;//顯示千位</p><p><b>  } </b></p><p>  k++; </p><p>  if(k==4) k=0;//4位循環(huán)顯示,清零</p><p>  對(duì)上述程序代碼循環(huán)運(yùn)行,即可實(shí)現(xiàn)4位LED數(shù)碼管的顯示功能。</p><p

55、>  4系統(tǒng)調(diào)試運(yùn)行與仿真</p><p>  硬件設(shè)計(jì)模塊完成了對(duì)系統(tǒng)電路圖的設(shè)計(jì),軟件模塊由程序?qū)崿F(xiàn)了各項(xiàng)功能;接下來(lái)需要將軟件與硬件結(jié)合起來(lái)才能真正完成整個(gè)設(shè)計(jì)工作。我們采用的是PROTUS仿真軟件得到了系統(tǒng)的硬件圖,參見(jiàn)圖10;使用ICC AVR軟件的集成環(huán)境調(diào)試程序,程序代碼請(qǐng)參見(jiàn)附錄,在該集成環(huán)境下,創(chuàng)建一工程,將程序裝入該工程下,調(diào)試運(yùn)行無(wú)誤后,該工程會(huì)自動(dòng)生成.hex文件,在PROTUS仿真

56、環(huán)境里,在單片機(jī)中載入該文件,這樣便實(shí)現(xiàn)了單片機(jī)程序的載入。在系統(tǒng)完成后測(cè)試系統(tǒng),檢查硬件和軟件是否能夠協(xié)調(diào)運(yùn)行,并對(duì)系統(tǒng)出現(xiàn)的情況進(jìn)行分析,看是否能夠達(dá)到系統(tǒng)創(chuàng)作之初所設(shè)想的效果,如達(dá)不到則重新修改系統(tǒng)的硬件結(jié)構(gòu)或者修改軟件的程序部分,直到達(dá)到設(shè)計(jì)需要為止。本系統(tǒng)的設(shè)計(jì)思路為:首先從整體上劃分出各功能模塊,然后硬件和軟件同時(shí)進(jìn)行依次完成各個(gè)功能模塊,最后將各個(gè)模塊聯(lián)系起來(lái)完成整個(gè)系統(tǒng)。</p><p>  在硬

57、件調(diào)試的過(guò)程中,遇到了很多問(wèn)題。主要有: 按鍵設(shè)計(jì)完成后,在多次運(yùn)行過(guò)程中發(fā)現(xiàn)按鍵是否按下難以直觀準(zhǔn)確判斷,在此處進(jìn)行改進(jìn)設(shè)計(jì),為每一個(gè)按鍵接上一個(gè)發(fā)光二極管,當(dāng)有鍵按下時(shí),相對(duì)應(yīng)的發(fā)光二極管變亮,使得按鍵動(dòng)作形象直觀。在步進(jìn)電機(jī)與驅(qū)動(dòng)電路的連接中,需要準(zhǔn)確的接好各個(gè)管腳,因?yàn)槌绦蚶锏目刂谱謱?duì)應(yīng)著這些管腳電平的變化,不能隨便接,單片機(jī)的輸出口與驅(qū)動(dòng)電路的輸出口也需要一一對(duì)應(yīng),否則電機(jī)無(wú)法按正常的設(shè)計(jì)運(yùn)轉(zhuǎn)。</p><

58、p>  軟件測(cè)試的時(shí)候也有些問(wèn)題,主要有:控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的程序段完成后,調(diào)試發(fā)現(xiàn)對(duì)步進(jìn)電機(jī)的轉(zhuǎn)速過(guò)小,查閱資料后發(fā)現(xiàn)設(shè)計(jì)思路不太合理,原先的設(shè)計(jì)思路是用主程序控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng),采用延時(shí)方式控制步進(jìn)電機(jī)速度,由定時(shí)器處理按鍵鍵值;隨即改進(jìn)程序,主程序用來(lái)處理按鍵,由定時(shí)器控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng),步進(jìn)電機(jī)轉(zhuǎn)動(dòng)速度由定時(shí)器定時(shí)時(shí)間決定,可調(diào)范圍較廣。問(wèn)題得到解決,不僅擴(kuò)大了步進(jìn)電機(jī)轉(zhuǎn)速的控制范圍,也使得單片機(jī)對(duì)步進(jìn)電機(jī)轉(zhuǎn)速的控制更加精確。&

59、lt;/p><p><b>  5小結(jié)與心得體會(huì)</b></p><p>  經(jīng)過(guò)與同小組同學(xué)的共同努力,近一個(gè)多星期的學(xué)習(xí),本次課程設(shè)計(jì)課題二相步進(jìn)電機(jī)控制系統(tǒng)告一段落。二相步進(jìn)電機(jī)控制系統(tǒng)的設(shè)計(jì)主要分為硬件設(shè)計(jì)和軟件設(shè)計(jì)兩個(gè)部分:</p><p>  硬件設(shè)計(jì)主要是把單片機(jī)系統(tǒng)(ATmega128)、按鍵控制模塊、步進(jìn)電機(jī)驅(qū)動(dòng)模塊(L298)、

60、數(shù)碼顯示模塊等各個(gè)硬件功能模塊及其它元件合理搭配并連接起來(lái)使其能夠?yàn)檐浖\(yùn)行提供一個(gè)硬件平臺(tái)。</p><p>  軟件設(shè)計(jì)主要是通過(guò)編寫(xiě)程序代碼,實(shí)現(xiàn)對(duì)整個(gè)系統(tǒng)的控制。在系統(tǒng)上電復(fù)位后程序自動(dòng)運(yùn)行,通過(guò)接受外部的鍵盤(pán)操作修改系統(tǒng)參數(shù)值,控制步進(jìn)電機(jī)的啟停,以及四拍,八拍通電方式和轉(zhuǎn)動(dòng)方向的改變;定時(shí)器T0根據(jù)系統(tǒng)參數(shù)控制步進(jìn)電機(jī)的轉(zhuǎn)動(dòng);定時(shí)器T2實(shí)現(xiàn)步進(jìn)電機(jī)步進(jìn)步數(shù)的動(dòng)態(tài)顯示。</p><p

61、>  本系統(tǒng)具有一定的實(shí)用功能,能基本符合實(shí)際應(yīng)用需求,本次設(shè)計(jì)由于設(shè)計(jì)時(shí)間較短,個(gè)人能力以及精力等因素的限制,加之設(shè)計(jì)經(jīng)驗(yàn)的不足,該系統(tǒng)還有許多不盡如人意的地方。該系統(tǒng)具有一定的缺陷,并不完美,但仿真成功的那一刻的感覺(jué)是很美妙的,努力有了收獲,學(xué)的很充實(shí)。通過(guò)這次課程設(shè)計(jì),使我從一開(kāi)始對(duì)系統(tǒng)的不太熟悉,到能開(kāi)發(fā)一個(gè)簡(jiǎn)單的系統(tǒng),在這整個(gè)過(guò)程中我學(xué)到了很多東西,掌握了一些常用的開(kāi)發(fā)技能,也發(fā)現(xiàn)了大量的問(wèn)題,有些在設(shè)計(jì)過(guò)程中已經(jīng)解決,

62、有些還有待今后慢慢學(xué)習(xí)。</p><p>  近十天的課程設(shè)計(jì),使我受益匪淺。我不僅了解了把理論設(shè)計(jì)轉(zhuǎn)換成現(xiàn)實(shí)實(shí)物的整個(gè)過(guò)程。如:查閱資料,方案選定,電路設(shè)計(jì),仿真電路圖,檢查調(diào)試,軟件流程控制,編寫(xiě)調(diào)試軟件到整個(gè)軟硬件系統(tǒng)的調(diào)試,最后直到系統(tǒng)完成。為我以后的設(shè)計(jì)打下了一個(gè)好的基礎(chǔ)。而且使我更加熟悉了整個(gè)設(shè)計(jì)的過(guò)程和一些軟件及硬件設(shè)備的使用。對(duì)我以后面對(duì)這方面的工作有了很大的幫助,鍛煉了自己解決實(shí)際問(wèn)題的能力,也

63、培養(yǎng)了我們求真務(wù)實(shí)的態(tài)度。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 于海生,《計(jì)算機(jī)控制技術(shù)》[M],北京:機(jī)械工業(yè)出版社,2007年</p><p>  [2] 張毅剛,《新編MCS-51單片機(jī)應(yīng)用設(shè)計(jì)》[M],哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2006年</p><p>  [3] 陳冬

64、云,《ATmega128 單片機(jī)原理與開(kāi)發(fā)指導(dǎo)》[M],北京:機(jī)械工業(yè)出版社,2005年</p><p>  [4] 王彥平,《RPOTEL 99 電路設(shè)計(jì)指南》[M],北京:清華大學(xué)出版社,2000年</p><p>  [5] 沈美明,《IBM-PC匯編語(yǔ)言程序設(shè)計(jì)》[M], 北京:清華大學(xué)出版社,2001年</p><p>  [6] 沈精虎,《Protel9

65、9 入門(mén)與提高》[M], 北京:人民郵電出版社,2007年</p><p>  [7] 吳金戌,《8051 單片機(jī)時(shí)間與應(yīng)用》[M], 北京:清華大學(xué)出版社,2003年</p><p>  [8] 胡輝,《單片機(jī)原理及應(yīng)用設(shè)計(jì)》[M], 北京:中國(guó)水利水電出版社,2007年</p><p><b>  附錄:</b></p>&l

66、t;p><b>  程序代碼:</b></p><p>  //ICC-AVR application builder : 2009/6/30 14:09:19</p><p>  // Target : M128</p><p>  // Crystal: 4.0000Mhz</p><p>  #include

67、 <iom128v.h></p><p>  #include <macros.h></p><p>  unsigned char d4[][8]={{0x22,0x28,0x21,0x24},{0x22,0x2a,0x28,0x29,0x21,0x25,0x24,0x26},</p><p>  {0x14,0x11,0x18,0x12}

68、,{0x14,0x15,0x11,0x19,0x18,0x1a,0x12,0x16}};//定義電機(jī)四八拍正反轉(zhuǎn)控制字</p><p>  unsigned char scan[4]={0Xf7,0Xfb,0Xfd,0Xfe};/*選擇掃描顯示數(shù)碼管,送PE口選數(shù)碼管*/</p><p>  unsigned char seven_seg[10]={0X3f,0X06,0X5b,0X4f

69、,0X66,0X6d,0X7d,0X07,0X7f,0X6f};/*0-9的字符表,送PF口顯示*/</p><p>  unsigned char flag,pai,tt,i,key,k=0;//定義正反轉(zhuǎn),模式,拍數(shù),按鍵值,數(shù)碼管選位</p><p>  typedef struct{ </p><p>  char baiqian;</p>

70、<p>  char geshi;</p><p>  }conut; //定義計(jì)數(shù)變量</p><p>  conut now;</p><p>  void port_init(void)//端口初始化程序</p><p><b>  {</b></p><p>  PORTA =

71、 0xFF;</p><p>  DDRA = 0x00;</p><p>  PORTB = 0xFF;</p><p>  DDRB = 0x00;</p><p>  PORTC = 0x00; //m103 output only</p><p>  DDRC = 0x00;</p><

72、;p>  PORTD = 0x00;</p><p>  DDRD = 0xFF;</p><p>  PORTE = 0x00;</p><p>  DDRE = 0xFF;</p><p>  PORTF = 0x00;</p><p>  DDRF = 0xFF;</p><p&g

73、t;  PORTG = 0x00;</p><p>  DDRG = 0x00;</p><p><b>  }</b></p><p>  //TIMER0 initialize - prescale:256</p><p>  // WGM: CTC</p><p>  // desired

74、 value: 100Hz</p><p>  // actual value: 99.522Hz (-0.5%)</p><p>  void timer0_init(void)//定時(shí)器0初始化</p><p><b>  {</b></p><p>  TCCR0 = 0x00; //stop</p>

75、<p>  ASSR = 0x00; //set async mode</p><p>  TCNT0 = 0x64; //set count</p><p>  OCR0 = 0x9C;</p><p>  //start timer</p><p><b>  }</b></p><

76、;p>  unsigned char timer0=0;</p><p>  #pragma interrupt_handler timer0_comp_isr:16</p><p>  void timer0_comp_isr(void)</p><p><b>  {</b></p><p>  //compa

77、re occured TCNT0=OCR0</p><p>  TCNT0 = 0x64;</p><p>  OCR0 = 0x9C;</p><p><b>  timer0++;</b></p><p>  if(timer0==50)</p><p><b>  {</b

78、></p><p><b>  timer0=0;</b></p><p><b>  i++;</b></p><p>  PORTF=d4[flag+pai][i%tt];</p><p>  if(i==100)</p><p><b>  i=0;&l

79、t;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //TIMER2 initialize - prescale:256</p><p>  // WGM: Normal</p><p>  // desire

80、d value: 100Hz</p><p>  // actual value: 100.160Hz (0.2%)</p><p>  void timer2_init(void)//定時(shí)器2初始化</p><p><b>  {</b></p><p>  TCCR2 = 0x00; //stop</p>

81、<p>  TCNT2 = 0x64; //setup</p><p>  OCR2 = 0x9C;</p><p><b>  //start</b></p><p><b>  }</b></p><p>  unsigned char timer2=0;</p>

82、<p>  #pragma interrupt_handler timer2_comp_isr:10</p><p>  void timer2_comp_isr(void)//實(shí)現(xiàn)4位數(shù)碼管的計(jì)數(shù)功能</p><p><b>  {</b></p><p>  //compare occured TCNT2=OCR2</p&g

83、t;<p>  TCNT2 = 0x64; //setup</p><p>  OCR2 = 0x9C;</p><p><b>  timer2++;</b></p><p>  if(timer2==50)</p><p>  { timer2=0;</p><p>  now

84、.geshi++;</p><p>  if(now.geshi==99)</p><p>  {now.geshi=0;</p><p>  now.baiqian++;</p><p>  if(now.baiqian==99)</p><p>  now.baiqian=0;}</p><p&

85、gt;<b>  }</b></p><p><b>  }</b></p><p>  //call this routine to initialize all peripherals</p><p>  void init_devices(void)//單片機(jī)初始化</p><p><b

86、>  {</b></p><p>  //stop errant interrupts until set up</p><p>  CLI(); //disable all interrupts</p><p>  XDIV = 0x00; //xtal divider</p><p>  XMCRA = 0x00; /

87、/external memory</p><p>  port_init();</p><p>  timer0_init();</p><p>  timer2_init();</p><p>  MCUCR = 0x00;</p><p>  EICRA = 0x00; //extended ext ints<

88、;/p><p>  EICRB = 0x00; //extended ext ints</p><p>  EIMSK = 0x00;</p><p>  TIMSK = 0x82; //timer interrupt sources</p><p>  ETIMSK = 0x00; //extended timer interrupt sour

89、ces</p><p>  SEI(); //re-enable interrupts</p><p>  //all peripherals are now initialized</p><p><b>  }</b></p><p>  void display(void)//實(shí)現(xiàn)數(shù)碼管數(shù)值的顯示</p>

90、;<p><b>  {</b></p><p>  saomiao();</p><p>  PORTE=scan[k];</p><p><b>  switch(k)</b></p><p><b>  {</b></p><p> 

91、 case 0 : PORTD=seven_seg[now.geshi%10];</p><p><b>  break;</b></p><p>  case 1 : PORTD=seven_seg[now.geshi/10];</p><p><b>  break;</b></p><p> 

92、 case 2 : PORTD=seven_seg[now.baiqian%10];</p><p>  break; </p><p>  case 3 : PORTD=seven_seg[now.baiqian/10];</p><p><b>  break;</b></p><p><b>

93、;  } </b></p><p><b>  k++;</b></p><p>  if(k==4) k=0;</p><p>  delay(20000,20000);</p><p><b>  key=PINB;</b></p><p>  if(key

94、==0xFF) TCCR2 = 0x00;</p><p><b>  }</b></p><p>  void delay(int d1,int d2)/*延時(shí)子函數(shù)*/ </p><p><b>  {</b></p><p>  unsigned char i,j;</p

95、><p><b>  i=d1;</b></p><p>  while(i--)</p><p><b>  {</b></p><p><b>  j=d2;</b></p><p>  while(j--);</p><p>&

96、lt;b>  } </b></p><p><b>  }</b></p><p>  unsigned char j;</p><p>  saomiao()//讀取按鍵值選擇相應(yīng)的操作</p><p><b>  {</b></p><p><b&

97、gt;  key=PINB;</b></p><p>  if(key==0xFD)</p><p><b>  {j=PINA;</b></p><p>  if(j==0x7F)</p><p><b>  {flag=0;</b></p><p><b

98、>  }</b></p><p>  else if(j==0xFF) </p><p>  { flag=2;}</p><p><b>  { </b><

99、/p><p>  if(j==0xFE| j==0x7E)</p><p>  {TCCR0 = 0x0E;pai=0;tt=4;TCCR2 = 0x04;now.geshi=00,now.baiqian=00;}</p><p>  else if(j==0xFB | j==0x7B)</p><p>  {TCCR0 = 0x0E;pai=1

100、;tt=8;TCCR2 = 0x04;now.geshi=00,now.baiqian=00;}</p><p><b>  }</b></p><p><b>  }</b></p><p>  else PORTF=0x80; </p><p><b>  }</b><

101、;/p><p>  void main(void)</p><p><b>  {</b></p><p>  now.geshi=00,now.baiqian=00;</p><p>  init_devices();</p><p><b>  while(1)</b><

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論