基于單片機控制的步進電機的設計說明_第1頁
基于單片機控制的步進電機的設計說明_第2頁
基于單片機控制的步進電機的設計說明_第3頁
基于單片機控制的步進電機的設計說明_第4頁
基于單片機控制的步進電機的設計說明_第5頁
已閱讀5頁,還剩31頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、電氣綜合設計題目 _二級學院 _ 專 業 _ 班 級 _ _ 學生 _ 學號 _ 學生 _ 學號 _ _ _ 學生 _ 學號 _ _ 指導教師 _ 時間: _ 考核項目平時成績20分設計50分答辯30分得分總分考核等級教師簽名35 / 36摘要: 介紹了步進電機和直流電機原理與其驅動程序控制控制模塊,通過AT89S52單片機與大電流驅動陣列ULN2003完成步進電機和直流電機各種運行方式的控制。實現步進電機的正反轉速度控制并且顯示數據。整個系統采用模塊化設計,結構簡單、可靠,通過按鍵控制,操作方便,節省成本。關鍵詞: 步進電機;ULN2003; AT89S51; 引言隨著數字化技術發展,數字控

2、制技術得到了廣泛而深入的應用。步進電機是一種將數字信號直接轉換成角位移或線位移的控制驅動元件, 具有快速起動和停止的特點。因為步進電動機組成的控制系統結構簡單,價格低廉,性能上能滿足工業控制的基本要求,所以廣泛地應用于手工業自動控制、數控機床、組合機床、機器人、計算機外圍設備、照相機,投影儀、數碼攝像機、大型望遠鏡、衛星天線定位系統、醫療器件以與各種可控機械工具等等。直流電機廣泛應用于計算機外圍設備( 如硬盤、軟盤和光盤存儲器) 、家電產品、醫療器械和電動車上, 無刷直流電機的轉子都普遍使用永磁材料組成的磁鋼, 并且在航空、航天、汽車、精密電子等行業也被廣泛應用。在電工設備中的應用,除了直流電

3、磁鐵(直流繼電器、直流接觸器等)外,最重要的就是應用在直流旋轉電機中。在發電廠里,同步發電機的勵磁機、蓄電池的充電機等,都是直流發電機;鍋爐給粉機的原動機是直流電動機。此外,在許多工業部門,例如大型軋鋼設備、大型精密機床、礦井卷揚機、市電車、電纜設備要求嚴格線速度一致的地方等,通常都采用直流電動機作為原動機來拖動工作機械的。直流發電機通常是作為直流電源,向負載輸出電能;直流電動機則是作為原動機帶動各種生產機械工作,向負載輸出機械能。在控制系統中,直流電機還有其它的用途,例如測速電機、伺服電機等。他們都是利用電和磁的相互作用來實現向機械能能的轉換。一、步進電機的工作原理步進電機本質上是一個數字角

4、度轉換器。以三相電機為例, 其結構原理見圖1。各相夾角為120°的定子磁極上均勻分布了5個矩形小齒, 沒有繞組的轉子圓周上也均勻的分布著40個小齒(相鄰齒夾角為9°)。利用電磁學的性質, 在某相繞組通電時, 相應的磁極產生磁場, 與轉子形成磁路如此時定子的小齒與轉子的小齒沒有對齊, 則在磁場作用下, 轉子就轉動一定角度, 達到齒的對齊。在單三拍控制方式下, 若A相通電, B、C相不通電, 在磁場作用下使轉子齒和A相定子齒相對假設此時為初態并且令與A相中心對齊的轉子齒為0號齒, 因為B相與A相相差120°,可知120°/9°=13 39, 不為整

5、數, 即此時轉子齒與B相不對齊, 只是13號齒靠近相的中心, 且相差3°。如果此時突然變為B相通電, 而A、C相都不通電, 那么, 13號齒會在磁場的作用下轉到與相中心對齊的位置, 這就是常說的走一步, 此時,轉子轉了。這樣, 按照A-B-C-A順序通電次, 可以使轉子轉動9°。那么步進電機的步距角Q=(360/NZ)°(式中N=MC為運行拍數;M為控制繞組相數;C為狀態系數, 單三拍或雙三拍時C=1, 單六拍或雙六拍時C=2為轉子齒數)。二、硬件系統1、電路圖2、ULN2003ULN是集成達林頓管IC,部還集成了一個消線圈反電動勢的二極管,可用來驅動繼電器。它是

6、雙列16腳封裝,NPN晶體管矩陣,最大驅動電壓=50V,電流=500mA,輸入電壓=5V,適用于TTL COMS,由達林頓管組成驅動電路。ULN是集成達林頓管IC,部還集成了一個消線圈反電動勢的二極管,它的輸出端允許通過電流為200mA,飽和壓降VCE約1V左右,耐壓BVCEO 約為36V。用戶輸出口的外接負載可根據以上參數估算。采用集電極開路輸出,輸出電流大,故可直接驅動繼電器或固體繼電器,也可直接驅動低壓燈泡。通常單片機驅動ULN2003時,上拉2K的電阻較為合適,同時,COM引腳應該懸空或接電源。ULN2003是一個非門電路,包含7個單元,但獨每個單元驅動電流最大可達350mA.資料的最

7、后有引用電路,9腳可以懸空。 比如1腳輸入,16腳輸出,你的負載接在VCC與16腳之間,不用9腳。ULN2003的作用:ULN2003是大電流驅動陣列,多用于單片機、智能儀表、PLC、數字量輸出卡等控制電路中。可直接驅動繼電器等負載。輸入5VTTL電平,輸出可達500mA/50V。ULN2003是高耐壓、大電流達林頓列,由七個硅NPN達林頓管組成。ULN2003的每一對達林頓都串聯一個2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路直接相連,可以直接處理原先需要標準邏輯緩沖器。ULN2003是高壓大電流達林頓晶體管陣列系列產品,具有電流增益高、工作電壓高、溫度圍寬、帶負載能力強

8、等特點,適應于各類要求高速大功率驅動的系統。      ULN2003A引腳圖與功能:ULN2003是高耐壓、大電流、部由七個硅NPN 達林頓管組成的驅動芯片。 經常在以下電路中使用,作為顯示驅動、繼電器驅動、照明燈驅動、電磁閥驅動、伺服電機、步進電機驅動等電路中。ULN2003 的每一對達林頓都串聯一個2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路直接相連,可以直接處理原先需要標準邏輯緩沖器來處理的數據。ULN2003 工作電壓高,工作電流大,灌電流可達500mA,并且能夠在關態時承受50V的電壓,輸出還可以在高負

9、載電流并行運行。ULN2003的封裝采用DIP16或SOP16。ULN2003可以驅動7個繼電器,具有高電壓輸出特性,并帶有共陰極的續流二極管使器件可用于開關型感性負載。每對達林頓管的額定集電極電流是500mA,達林頓對管還可并聯使用以達到更高的輸出電流能力。    顯示電路主要包括大型LED數碼管BSI20-1(共陽極,數字凈高12 cm)和高電壓大電流驅動器ULN2003,大型LED數碼管的每段是由多個LED發光二極管串并聯而成的,因此導通電流大、導通壓降高。ULN2003是高壓大電流達林頓晶體管陣列電路,他具有7個獨立的反相驅動器,每個驅動器的輸出灌電流可達

10、500mA,導通時輸出電壓約1V,截止時輸出電壓可達50V。ULN2003的17腳為信號輸入腳,依次對應的輸出端為1610腳,8腳為接地端。當驅動電源電壓為+12V時,若要求數碼管每段導通電流為40mA,則每段的限流電阻為50。則一塊ULN2003恰好驅動一個LED數碼管的7段。大數碼管采用共陽極接法,低電平有效。鎖存器輸出的電平經NPN三極管9014反相后,再由ULN2003放大后推動大數碼管顯示.3、AT89C51AT89C51是一種帶4K字節FLASH存儲器(FPEROMFlash Programmable and Erasable Read Only Memory)的低電壓、高性能CM

11、OS 8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃速存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C51單片機為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。外形與引腳排列如圖所示。主要特性·與MCS-51 兼容·4K字節可編程FLASH存儲器·壽命:1000寫/擦循環

12、·數據保留時間:10年·全靜態工作:0Hz-24MHz·三級程序存儲器鎖定·128×8位部RAM·32可編程I/O線·兩個16位定時器/計數器·5個中斷源·可編程串行通道·低功耗的閑置和掉電模式·片振蕩器和時鐘電路特性概述AT89C51 提供以下標準功能:4k 字節Flash 閃速存儲器,128字節部RAM,32 個I/O 口線,兩個16位定時/計數器,一個5向量兩級中斷結構,一個全雙工串行通信口,片振蕩器與時鐘電路。同時,AT89C51可降至0Hz的靜態邏輯操作,

13、并支持兩種軟件可選的節電工作模式。空閑方式停止CPU的工作,但允許RAM,定時/計數器,串行通信口與中斷系統繼續工作。掉電方式保存RAM中的容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復位。管腳說明VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的低八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須接上拉電阻。P1口:P1口是一個部提供上拉電阻的8位雙向I/O口,P1口緩沖

14、器能接收輸出4TTL門電流。P1口管腳寫入1后,被部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于部上拉的緣故。在FLASH編程和校驗時,P1口作為低八位地址接收。P2口:P2口為一個部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄

15、存器的容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。P3口:P3口管腳是8個帶部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如下表所示:口管腳 備選功能P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(計時器0外部輸入)P3.5 T1(計時器1外部輸入)P3.6 /WR(外部數據存儲器寫選通)P3.

16、7 /RD(外部數據存儲器讀選通)P3口同時為閃爍編程和編程校驗接收一些控制信號。RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的低位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被

17、略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。/EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有部程序存儲器。注意加密方式1時,/EA將部鎖定為RESET;當/EA端保持高電平時,此間部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入與部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。振蕩器特性:XTAL1和X

18、TAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片振蕩器。石晶振蕩和瓷振蕩均可采用。如采用外部時鐘源驅動器件,XTAL2應不接。有余輸入至部時鐘信號要通過一個二分頻觸發器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。三、軟件系統該系統采用多個模塊的方式來實現對步進電機的控制。控制模塊采用單片機AT89S51來控制ULN2003驅動電機轉動。1. main/*實例名稱:步進電機*實例說明:實現步進電機的正反轉以與加減速控制,并在LCD屏上實時顯示步進電機的狀態* hzd*時間:14.01.10*/#include "target.h"#

19、include "key.h"#define MOTER_SPEED_NORMAL 5 /電機正常運行上限#define MOTER_SPEED_MIN 15 /電機低速運行下限uchar timer0Count; /timer0中斷溢出計數 uchar moterStep; /電機步數 (0x000x07)uint moterSpeed; /速度值變化量 (0moterSpeedMax)uint moterSpeedMax; /速度最快值uchar moterState; /電機運行狀態uchar moterDirect; /電機運轉方向,靜止/0x00;正轉/0x01;

20、反轉/0x02uchar moterAddReduce; /電機加速與減速量uchar speedDirect; /0x01,電機加速;0x02,電機減速bit display_is_ok; /顯示屏是否需要更新/*MOTER_STOP,停止;MOTER_FRONT_ADD,正轉加速MOTER_FRONT_REDUCE,正轉減速;MOTER_FRONT_NORMAL,正轉正常MOTER_FRONT_LOWER,正轉低速;MOTER_QUEEN_ADD,反轉加速MOTER_QUEEN_REDUCE,反轉減速,MOTER_QUEEN_NOMAL,反轉正常MOTER_QUEEN_LOWER,反轉低速

21、*/void main() uchar keyValueRead; target_init(); moterState=MOTER_STOP; timer0Count=0x00; moterAddReduce=0x00; moterStep=0x00; moterSpeed=0x00; moterSpeedMax=0x00; /默認停止 moterDirect=0x00; /默認停止 moter_state_display(MOTER_STOP); display_is_ok=1; sei(); while(1) keyValueRead=get_key_value();switch(keyV

22、alueRead) case KEY_FRONT: /正轉 moterState=MOTER_FRONT_LOWER;moterDirect=0x01;moterSpeedMax=MOTER_SPEED_MIN;display_is_ok=0;/moter_state_display(MOTER_FRONT_LOWER);break; case KEY_QUEEN: /反轉 moterState=MOTER_QUEEN_LOWER;moterDirect=0x02;moterSpeedMax=MOTER_SPEED_MIN;display_is_ok=0;/moter_state_displa

23、y(MOTER_QUEEN_LOWER);break; case KEY_ADD: /加速 speedDirect=0x01; moterAddReduce=100;display_is_ok=0;if(moterDirect=0x01) /正轉 moter_state_display(MOTER_FRONT_ADD);else if(moterDirect=0x02) moter_state_display(MOTER_QUEEN_ADD);break; case KEY_REDUCE: /減速 speedDirect=0x02; moterAddReduce=100;display_is_

24、ok=0;if(moterDirect=0x01) /正轉 moter_state_display(MOTER_FRONT_REDUCE);else if(moterDirect=0x02) moter_state_display(MOTER_QUEEN_REDUCE);break; case KEY_STOP: /停止 moterState=MOTER_STOP; moterSpeedMax=0x00; /默認停止 moterDirect=0x00; /默認停止moter_state_display(MOTER_STOP);display_is_ok=1;break; default: br

25、eak;if(display_is_ok=0) /判斷LCD容是否需要更新 switch(moterSpeedMax) case MOTER_SPEED_NORMAL: if(moterDirect=0x01) moter_state_display(MOTER_FRONT_NORMAL); else if(moterDirect=0x02) moter_state_display(MOTER_QUEEN_NOMAL); display_is_ok=1; break; case MOTER_SPEED_MIN: if(moterDirect=0x01) moter_state_display(

26、MOTER_FRONT_LOWER); else if(moterDirect=0x02) moter_state_display(MOTER_QUEEN_LOWER); display_is_ok=1; break; default: break; void timer0_overflow(void) interrupt 1 /timer0定時10ms TH0=-500/256; /定時10ms TL0=-500%256; timer0Count=0x00; if(speedDirect=0x01) /如果為加速 if(moterSpeedMax>MOTER_SPEED_NORMAL)

27、 moterSpeedMax-;/最大加速到正常值 else moterAddReduce=0x00; speedDirect=0x00; /已經加速到正常值,不再加速 else if(speedDirect=0x02) if(moterSpeedMax<MOTER_SPEED_MIN) moterSpeedMax+; else moterAddReduce=0x00; speedDirect=0x00; if(moterSpeed<moterSpeedMax) moterSpeed+; else moterSpeed=0x00; if(moterDirect=0x01) /正轉

28、if(moterStep>0x00) moterStep-; else moterStep=0x07; else if(moterDirect=0x02)/反轉 if(moterStep<0x07) moterStep+; else moterStep=0x00; ground(moterStep); 2. target#define TARGET_GLOBAL 1#include "target.h"#include "dot.h"void timer0_init(void) TMOD|=0x01; /MODEL1,timer TH0=0x

29、DC; /定時10ms TL0=0x00; ET0=1; /中斷使能 TR0=1; /關閉定時器0void target_init(void) timer0_init(); Lcd_Initial();/*函數名稱:display_head(void)*函數功能:顯示“步進電機運行狀態”字樣*函數入口:無*函數出口:無*/void display_head(void) uchar i,temp; temp=0x00; for(i=0;i<8;i+) Lcd_Character_16X16(1,10,temp,MOTER_HEADi);temp+=16; /*函數名稱:display_st

30、ate(state)*函數功能:顯示電機狀態“停止”,“正轉”,“反轉”*函數入口:state,電機狀態*函數出口:無*說明:state:0x01,停止;0x02,正轉;0x03,反轉*/void display_state(state) switch(state) case 0x01: /顯示“停止” Lcd_Character_16X16(1,60,0,MOTER_STATE0); /停 Lcd_Character_16X16(1,60,16,MOTER_STATE1);/止 break;case 0x02: /顯示“正轉” Lcd_Character_16X16(1,60,0,MOTER

31、_STATE2); /正 break;case 0x03: /顯示“反轉” Lcd_Character_16X16(1,60,0,MOTER_STATE3); /反 break;default: break; if(state=0x02)|(state=0x03) Lcd_Character_16X16(1,60,16,MOTER_STATE4); /轉/*函數名稱:display_speed(speed)*函數功能:顯示電機速度狀態*函數入口:speed,電機速度狀態*函數出口:無*說明:speed:0x01,正常;0x02,低速;0x03,加速; 0x04,減速*/void display

32、_speed(speed) switch(speed) case 0x01: Lcd_Character_16X16(1,60,32,SPEED_STATE4); /正 Lcd_Character_16X16(1,60,48,SPEED_STATE5); /常 break; case 0x02: Lcd_Character_16X16(1,60,32,SPEED_STATE2); /低 break; case 0x03: Lcd_Character_16X16(1,60,32,SPEED_STATE0); /加 break; case 0x04: Lcd_Character_16X16(1,6

33、0,32,SPEED_STATE1); /減 break; default: break; if(speed=0x02)|(speed=0x03)|(speed=0x04) Lcd_Character_16X16(1,60,48,SPEED_STATE3); /速 /*函數名稱:moter_state_display(uchar moterState)*函數功能:實現步進電機狀態顯示*函數入口:moterState,電機運行狀態*函數出口:無*說明:moterState:0x01,停止;0x02,正轉加速運行;0x03,正轉減速運行;0x04,正轉正常運行;0x05,正轉低速運行;0x06,反

34、轉加速運行;0x07,反轉減速運行;0x08,反轉正常運行;0x09,反轉低速運行*/void moter_state_display(uchar moterState) Lcd_Clear(); display_head(); switch(moterState) case MOTER_STOP: /停止 display_state(0x01); break;case MOTER_FRONT_ADD:/正轉加速運行 display_state(0x02); display_speed(0x03); break;case MOTER_FRONT_REDUCE: /正轉減速運行 display_

35、state(0x02); display_speed(0x04); break;case MOTER_FRONT_NORMAL:/正轉正常運行 display_state(0x02); display_speed(0x01); break;case MOTER_FRONT_LOWER:/正轉低速運行 display_state(0x02); display_speed(0x02); break;case MOTER_QUEEN_ADD:/反轉加速運行 display_state(0x03); display_speed(0x03); break;case MOTER_QUEEN_REDUCE:

36、 /反轉減速運行 display_state(0x03); display_speed(0x04); break;case MOTER_QUEEN_NOMAL: /反轉正常運行 display_state(0x03); display_speed(0x01); break;case MOTER_QUEEN_LOWER: /反轉低速運行 display_state(0x03); display_speed(0x02); break;default: break; if(moterState!=MOTER_STOP) Lcd_Character_16X16(1,60,64,SPEED_STATE6

37、); /運Lcd_Character_16X16(1,60,80,SPEED_STATE7); /行 /*函數名稱:ground(step)*函數功能:給電機的四個相極送信號*函數入口:step,電機相位的第幾步*函數出口:無*說明:步進電機轉步數,分八步*/void ground(step) switch(step) case 0x00: MOTER_M1= 1; MOTER_M2= 0; MOTER_M3= 0; MOTER_M4= 0; break;case 0x01: MOTER_M1= 1; MOTER_M2= 1; MOTER_M3= 0; MOTER_M4= 0; break;

38、case 0x02: MOTER_M1= 0; MOTER_M2= 1; MOTER_M3= 0; MOTER_M4= 0; break;case 0x03: MOTER_M1= 0; MOTER_M2= 1; MOTER_M3= 1; MOTER_M4= 0; break;case 0x04: MOTER_M1= 0; MOTER_M2= 0; MOTER_M3= 1; MOTER_M4= 0; break; case 0x05: MOTER_M1= 0; MOTER_M2= 0; MOTER_M3= 1; MOTER_M4= 1; break;case 0x06: MOTER_M1= 0;

39、 MOTER_M2= 0; MOTER_M3= 0; MOTER_M4= 1; break;case 0x07: MOTER_M1= 0; MOTER_M2= 0; MOTER_M3= 0; MOTER_M4= 1; break;default: break; 3. key#define KEY_GLOBAL 1#include "Key.h"static uchar keyValueBuff; /讀取鍵值的緩沖區 static uchar keyValueOld; /前一次的鍵值 static uchar keyValueTemp; /鍵值中間交換變量 static ui

40、nt stillTimes; /鍵按下保持次數static uint stillTimesMax;static uchar get_data_1_count(uchar number);static void read_all_key(uchar *buff);/*函數名稱:keyDelay(uint us)*函數功能:毫秒級延時*函數入口:延時計數變量us*函數出口:無*/void keyDelay(uint us) uchar delayi; while(-us) for(delayi=0;delayi<10;delayi+); /*函數名稱:key_init(void)*函數功能:

41、初始化按鍵掃描*函數入口:無*函數出口:無*/void key_init(void) keyValueBuff = 0x00; keyValueOld = 0x00; keyValueTemp = 0x00; stillTimes = 0; stillTimesMax = FIRST_TIMES;/*函數名稱:read_all_key(uchar *buff)*函數功能:掃描按鍵下的鍵,將按下的鍵的位置存入變量buff*函數入口:buff*函數出口:無*/void read_all_key(uchar *buff) if(IN_PRESS_FRONT=KEY_FORCE_VALUE) /檢測按

42、下的鍵 READ_KEY(1,KEY_FRONT,*buff); else READ_KEY(0,KEY_FRONT,*buff); if(IN_PRESS_QUEEN=KEY_FORCE_VALUE) /檢測按下的鍵 READ_KEY(1,KEY_QUEEN,*buff); else READ_KEY(0,KEY_QUEEN,*buff); if(IN_PRESS_ADD=KEY_FORCE_VALUE)/檢測按下的鍵 READ_KEY(1,KEY_ADD,*buff); else READ_KEY(0,KEY_ADD,*buff); if(IN_PRESS_REDUCE=KEY_FORCE

43、_VALUE)/檢測按下的鍵 READ_KEY(1,KEY_REDUCE,*buff); else READ_KEY(0,KEY_REDUCE,*buff); if(IN_PRESS_STOP=KEY_FORCE_VALUE) /檢測按下的鍵 READ_KEY(1,KEY_STOP,*buff); else READ_KEY(0,KEY_STOP,*buff);/*函數名稱:get_key_value(void)*函數功能:讀取鍵值*函數入口:無*函數出口:返回按下的有效鍵值*/uchar get_key_value(void) keyValueBuff = 0x00; read_all_key(&keyValueBuff); k

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論