久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1692|回復: 0
打印 上一主題 下一主題
收起左側

51單片機步進電動機控制系統設計資料

[復制鏈接]
跳轉到指定樓層
樓主
ID:22266 發表于 2020-11-16 18:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
設計一個基于單片機AT89C52的計算機步進電機控制系統,使用數字控制器進行步進電機的起停、正、反轉控制以及步進電機的加速、減速控制。
其中,用K0-K5作為通電方式選擇鍵,K0為單四拍正轉,K1為單四拍反轉,K2為雙四拍正轉,K3為雙四拍反轉,K4為八拍正轉,K5為八拍反轉;K6、K7分別為啟動和停止控制;K8,K9為加減速控制,K10,K11為給定步數加減控制。正轉時紅色指示燈亮,反轉時黃色指示燈亮,不轉時綠色指示燈亮;LED第一位顯示擋位,用后4位LED顯示剩余工作步數[6]。
2.2    設計目標
步進電機控制仿真,應該需要良好的人機界面,使人們操作更為簡便,設計實現了步進電機的正反轉,啟停,工作方式選擇,步數設定,加減速功能。在元器件的選用上應保證其技術在近5到10年不會被淘汰,應從其性能,價格方面考慮。
2.3    需求分析2.4    技術方案
在該系統中,以AT89C52為中心,ULN2003A和28BYJ48四相28BYJ-48-5VDC步進電機是四六線制步進電機構成電機電路,通過單片機進行控制;采用3個LED燈構成狀態顯示電路,實時顯示電機狀態;矩陣鍵盤K0~K11將用戶所需來選擇步進電機的工作狀態;6位數碼管顯示步數和速度擋位。如下圖 2?1所示,單片機作為主控芯片,控制各個模塊。步進電機調速需要調節脈沖頻率,所以使用單片機的定時器中斷是可行。

圖 2?1 總體設計框圖

2.5    方案論證
通過Proteus仿真軟件實現步進電機的模擬控制。系統各部分時序控制的配合:啟動電源后,通過矩陣鍵盤選擇功能;然后啟動,通過單片機發出高低脈沖到電機驅動電機對電機進行驅動;通過定時器中斷方式實現加減速功能是電機控制的關鍵點和難點。動態掃描方式進行數碼管顯示;在對單片機編程時,通過查閱有關資料進行理解分析,得到自己想要實現的程序。
最困難的是對定時器中斷進行操作,因為對定時器中斷的不熟悉,一直無法實現理想的控制。通過查閱單片機手冊解決問題。
2.6    本章小結
本章主要對此次設計進行總體方案的敘述。2.1介紹了課題需求,對課題的要求進行了詳細的敘述;2.2主要對課題的最終要實現的目標進行敘述,對整個時間安排及器件選型時要注意的一些細節;2.3對要完成課題目標需要采用的軟件,外部器件及實現方式進行了敘述;2.4對課程設計的總體方案進行敘述,并給出了系統總體框圖;2.5對實現此次課程設計所采用的方案進行了論證
3   硬件設計3.1    單片機
AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K 系統可編程Flash存儲器。使用Atmel 公司高密度非易失性存儲器技術制造,與工業80C51 產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統內編程,亦適于常規編程器。在單芯片上,擁有靈巧的8位CPU和在系統可編程Flash,使得AT89S52在眾多嵌入式控制應用系統中得到廣泛應用。CPU為Atmel公司生產的89C51/89C52/89C55等。出廠所配晶振頻率為11.0592MH,每個機器周期為1.085us,用戶更換晶振以提高速度。單片機引腳圖如下圖 3?1所示:

圖 3?1 單片機引腳圖

引腳介紹:
P0口是一個8位漏極開路的雙向I/O口。作為輸出口,每位能驅動8個TTL邏 輯電平。對P0端口寫“1”時,引腳用作高阻抗輸入。當訪問外部程序和數據存儲器時,P0口也被作為低8位地址/數據復用。在這種模式下,P0不具有內部上拉電阻。在flash編程時,P0口也用來接收指令字節;在程序校驗時,輸出指令字節。程序校驗 時,需要外部上拉電阻。P1口是一個具有內部上拉電阻的8 位雙向I/O口,p1輸出緩沖器能驅動4 個 TTL 邏輯電平。
此外,P1.0和P1.1分別作定時器/計數器2的外部計數輸入(P1.0/T2)和定時器/計數器2 的觸發輸入(P1.1/T2EX)。 在flash編程和校驗時,P1口接收低8位地址字節。P2 口是一個具有內部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅動
4個TTL邏輯電平。對P2端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入 口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲器或用16位地址讀取外部數據存儲器(例如執行MOVX @DPTR)時,P2口送出高八位地址。在這種應用中,P2 口使用很強的內部上拉發送1。在使用8位地址(如MOVX @RI)訪問外部數據存儲器時,P2口輸出P2鎖存器的內容。在flash編程和校驗時,P2口也接收高8位地址字節和一些控制信號。P3口是一個具有內部上拉電阻的8 位雙向I/O 口,p3 輸出緩沖器能驅動4個TTL邏輯電平。 P3口亦作為AT89S52特殊功能(第二功能)使用,如下表所示。在flash編程和校驗時,P3口也接收一些控制信號。
RST:復位輸入。當振蕩器工作時,RST引腳出現兩個機器周期以上高電平將使單片機復位。
ALE/PROG:當訪問外部程序存儲器或數據存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節。一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數據存儲器時將跳過一個ALE脈沖。對FLASH存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過對特殊功能寄存器(SFR)區中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令才能將ALE激活。此外,該引腳會被微弱拉高,單片機執行外部程序時,應設置ALE禁止位無效.
PSEN:程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當AT89S52由外部程序存儲器取指令(或數據)時,每個機器周期兩次PSEN有效,即輸出兩個脈沖,在此期間,當訪問外部數據存儲器,將跳過兩次PSEN信號。
EA/VPP:外部訪問允許,欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復位時內部會鎖存EA端狀態。如EA端為高電平(接Vcc端),CPU則執行內部程序存儲器的指令。FLASH存儲器編程時,該引腳加上+12V的編程允許電源Vpp,當然這必須是該器件是使用12V編程電壓Vpp。
3.2    晶振電路

圖 3?2 晶振電路

3.3    復位電路
復位是單片機的初始化工作,復位后中央處理器CPU和單片機內的其它功能部件都處在一定的初始狀態,并從這個狀態開始工作。為了防止程序執行過程中失步或運行紊亂,此處我們采用了上電復位,電路圖如下圖 3?3所示:

圖 3?3 復位電路

3.4    單片機最小系統
單片機最小系統是單片機運行的最基本條件:電源,單片機芯片,晶振電路,復位電路。電源為整個系統供能,單片機芯片運行程序,處理數據;晶振電路為單片機工作提供節拍,常被理解為單片機心臟;復位電路,在單片機上電時需要復位使程序從頭開始運行。
3.5    鍵盤模塊

圖 3?4 矩陣鍵盤

3.6    電動機及驅動
步進電機模塊如下圖 3?5所示

圖 3?5 電動機模塊

3.6.1     步進電機
本次設計采用的是

圖 3?6 步進電機

開始時,開關SB接通電源,SA、SC、SD斷開,B相磁極和轉子0、3號齒對齊,同時,轉子的1、4號齒就和C、D相繞組磁極產生錯齒,2、5號齒就和D、A相繞組磁極產生錯齒。
當開關SC接通電源,SB、SA、SD斷開時,由于C相繞組的磁力線和1、4號齒之間磁力線的作用,使轉子轉動,1、4號齒和C相繞組的磁極對齊。而0、3號齒和A、B相繞組產生錯齒,2、5號齒就和A、D相繞組磁極產生錯齒。依次類推,A、B、C、D四相繞組輪流供電,則轉子會沿著A、B、C、D方向轉動。步進電機的按通電順序不同,可分為單四拍,雙四拍,八拍三種工作方式。如下圖 3?7所示:

圖 3?7 步進電機工作時序

當步進電機從A,B,C,D四相依次通電時,電動機正轉,當反向通電則電動機反轉。
3.6.2     驅動電路
ULN2003A電路是美國Texas+Instruments公司和Sprague公司開發的高壓大電流達林頓晶體管陣列電路。ULN2003是高耐壓、大電流、內部由七個硅NPN和達林頓管組成的驅動芯片,如圖 3?8所示。經常在以下電路中使用,作為:顯示驅動、繼電器驅動、照明燈驅動、電磁閥驅動、伺服電機、步進電機驅動等電路中。該電路的特點如下:ULN2003的每一對達林頓都串聯一個2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路直接相連,可以直接處理原先需要標準邏輯緩沖器來處理的數據。ULN2003 是高壓大電流達林頓晶體管陣列系列產品,具有電流增益高、工作電壓高、溫度范圍寬、帶負載能力強等特點,適應于各類要求高速大功率驅動的系統。ULN2003 工作電壓高,工作電流大,灌電流可達500mA,并能在關態時承受50V 的電壓,輸出還可以在高負載電流并行運行。

圖 3?8 ULN2003邏輯圖

3.7    狀態顯示模塊
LED發光二極管顯示步進電機的工作狀態,它們分別接到單片機的P3.4~P3.6。如下圖 3?9所示,讓單片機連接到LED陰極,LED陽極接VCC。這樣通過設置端口電平就能使LED亮滅,達到顯示效果。本設計中,綠燈代表停止,紅燈代表正轉,黃燈代表反轉。

圖 3?9 LED狀態顯示

3.8    數碼管顯示
LED數碼管實際上是由七個發光管組成8字形構成的,加上小數點就是8個。這些段分別由字母a,b,c,d,e,f,g,dp來表示。當數碼管特定的段加上電壓后,這些特定的段就會發亮,以形成我們眼睛看到的字樣了。通過分時輪流控制各個LED數碼管的COM端,就使各個數碼管輪流受控顯示,這就是動態驅動。
本課題采用六位共陰極數碼管來對電機步數,速度擋位進行顯示。電路如下,接在單片機P0口i,P0必須添加上拉電阻,以為P0扣不加上拉電阻時處于開漏狀態,只允許輸出低電平,加上拉電阻后可輸出高電平。電路如下圖 3?10所示。

圖 3?10 數碼管電路

3.9    本章小結
本章主要是對硬件設計的描述。先是呈現出總硬件系統框圖及AT89S52單片機的接口及各種特性,再進行各部分電路的設計的原理,即:晶振電路,復位電路,鍵盤設計,驅動電路,電機工作狀態顯示部分,步數顯示部分。
4   軟件設計4.1    功能框圖
步進電機控制系統功能框圖如下圖 4?1所示,說明了每個模塊與單片機之間的聯系,控制邏輯;通過單片機控制鍵盤掃描,數碼管顯示,LED顯示,步進電機控制等。

圖 4?1功能框圖

4.2    主流程圖

圖 4?2 主流程圖

首先進行工作方式選擇,按下啟動按鈕,單片機判斷是否啟動,如果沒啟動綠燈亮,啟動后默認正轉紅燈亮,可通過選擇反轉,反轉時紅燈亮。由此可以讓步進電機按照指定的方式運轉,并且剩余步數顯示到數碼管上;單片機判斷步數是否走完。

4.3    步進電機模塊4.3.1     步進電機工作方式說明4.3.2     實現流程

圖 4?3 工作方式選擇

4.4    矩陣鍵盤模塊
矩陣鍵盤是整個系統中最重要的環節,本設計采用3*4矩陣鍵盤,通過行列掃描獲取鍵值。流程圖如下圖 4?4所示:

圖 4?4 鍵盤掃描

4.5    數碼管顯示模塊

圖 4?5 數碼管顯示

4.6    本章小結
本章主要描述了步進電機實現過程軟件的設計思路,包括功能框圖,主流程圖,步進電機模塊,關于工作方式的說明,鍵盤模塊設計,數碼管顯示設計。
5   測試和驗證5.1    任務分工5.2    搭建環境
使用Kiel編寫單片機程序,在Proteus中搭建仿真環境,將可執行程序加載到仿真單片機中,進行仿真,驗證設計的正確性,可行性。
5.2.1     建立編輯編譯環境
  • 創建AT89C52工程,C程序文檔,進行編輯。如下5?1所示:

圖 5?1 創建工程

  • 編輯代碼,選擇生成.Hex文件。如下5?2所示:

圖 5?2 生成目標文件

5.2.2     建立仿真和測試環境
根據電路原理圖在Proteus中搭建仿真模型。分別由數碼管顯示模塊,復位電路,矩陣鍵盤,晶振電路,單片機主控芯片,步進電機模塊,工作狀態顯示模塊。如下圖 5?3所示:

圖 5?3 仿真模型

5.3    方案驗證
通過仿真來驗證步進電機的控制是否合理。驗證如下:
5.3.1     啟動系統
系統默認,步進電機啟動轉速為1檔,給定步數500步;停止狀態,綠燈亮。如下圖 5?4所示:

圖 5?4 啟動系統

5.3.2     選擇工作方式
選擇8拍正轉工作方式,速度調為3檔,步數給定500步,此時正轉燈亮。仿真如下圖 5?5所示。
選擇8拍反轉工作方式,速度調為6檔,步數給定1000步,此時反轉燈亮。仿真如下圖 5?6所示。
選擇單4拍正轉,速度5檔,給定步數300步,此時正轉燈亮。仿真如下圖 5?7所示。
選擇雙4拍反轉,速度6檔,步數給定500步,此時反轉燈亮。仿真如下圖 5?8所示。

圖 5?5 8拍正轉


圖 5?6 8拍反轉


圖 5?7 單4拍正轉


圖 5?8 雙四拍反轉

5.4    問題與分析
在本次課題中,我遇到一些問題如下:
  •    由于定時器中斷的功能不是很熟悉所以在使用定時器中斷調節步進電機轉速時出現問題,通過翻看單片機手冊學會了定時器中斷的使用方法,和定時器時間的設定。
  •    在程序的編寫過程中,忽略了鍵盤復位檢測導致在仿真過程中,進行加減檔,步數加減時,出現多加,多減的情況。后查閱資料添加了復位檢測后得到了解決。
  •    課程設計中,很多元器件的選用以及電路的設計都無法很快的完成。我們通過請教老師,以及同學之間的討論,上網查閱資料來對這些問題進行了一一解決。
5.5    創新與擴展
本次課程設計的核心在于利用51單片機作為主控芯片控制步進電機的基本功能,但需要進一步對其功能強化。步進電機可運用于很多場合,可以在系統中添加,WIFI模塊,傳感器模塊,紅外模塊,通過外界環境變化,經過AD轉化,改變步進電機工作情況。紅外模塊和WIFI模塊,可以對電機進行無線控制。
5.6    本章小結
本章主要對本次課程設計做了總結,人員的分工,控制的仿真實現,通過在PC機上搭建模擬平臺來實現對步進電機控制的仿真,并記錄了每個步驟的情況。
  1. #include <reg52.h>
  2. #include <stdio.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};              //0~9段選碼
  6. uchar Way_1[] = {0xfe, 0xfd, 0xfb, 0xf7};//單四拍正轉
  7. uchar Way_2[] = {0xf7, 0xfb, 0xfd, 0xfe};//單四拍反轉
  8. uchar Way_3[] = {0xfc, 0xf9, 0xf3, 0xf6};//雙四拍正轉
  9. uchar Way_4[] = {0xf6, 0xf3, 0xf9, 0xfc};//雙四拍反轉
  10. uchar Way_5[] = {0xfe, 0xfc, 0xfd, 0xf9, 0xfb, 0xf3, 0xf7, 0xf6};//八拍正轉
  11. uchar Way_6[] = {0xf6, 0xf7, 0xf3, 0xfb, 0xf9, 0xfd, 0xfc, 0xfe};//八拍反轉
  12. uchar code time_counter[6][2]={{0xdb,0xff},{0xb7,0xfe},{0x93,0xfe},{0x6f,0xfd},{0x4b,0xfd},{0x27, 0xfb}};


  13. uchar KeyValue;              //鍵值
  14. uchar time;              //定時器次數
  15. uchar way = -1;              //工作方式選擇
  16. uchar run = 0;              //默認初始為停止狀態
  17. uchar speed = 1;//速度調節,擋位1
  18. uint step = 500;//初始步數
  19. uchar num[4];

  20. sbit WE1 = P2^0;              //數碼管位選1
  21. sbit WE2 = P2^1;              //數碼管位選2
  22. sbit WE3 = P2^2;              //數碼管位選3
  23. sbit WE4 = P2^3;              //數碼管位選4
  24. sbit WE5 = P2^4;              //數碼管位選5
  25. sbit WE6 = P2^5;              //數碼管位選6


  26. sbit S = P3^4;//停止
  27. sbit F = P3^5;//正轉
  28. sbit R = P3^6;//反轉


  29. void delay(uint z)//延時函數
  30. {
  31.               uint x, y;

  32.               for(x = z; x > 0; x--)
  33.               {
  34.                             for(y = 114; y > 0; y--);
  35.               }
  36. }


  37. void display(uint n, uint m)//顯示函數,n為步數,m為擋位
  38. {
  39.    num[0] = n%10;//個位
  40.    num[1] = n/10%10; //十位
  41.    num[2] =(n/100)%10; //百位
  42.    num[3] = (n/1000)%10; //千位

  43.    P2 = 0xff; //擋位顯示
  44.    WE1 = 0;
  45.    WE2 = 1;
  46.    WE3 = 1;               
  47.    WE4 = 1;
  48.    WE5 = 1;
  49.    WE6 = 1;
  50.    P0 = table[m];
  51.    delay(5);                           

  52.    P2 = 0xff; //"-"
  53.    WE1 = 1;
  54.    WE2 = 0;
  55.    WE3 = 1;               
  56.    WE4 = 1;
  57.    WE5 = 1;
  58.    WE6 = 1;
  59.    P0 = 0x40;
  60.    delay(5);            

  61.             
  62.    P2 = 0xff;
  63.    WE1 = 1;
  64.    WE2 = 1;
  65.    WE3 = 0;                //步數千位
  66.    WE4 = 1;
  67.    WE5 = 1;
  68.    WE6 = 1;
  69.    P0 = table[num[3]];
  70.    delay(5);

  71.    P2 = 0xff;
  72.    WE1 = 1;
  73.    WE2 = 1;
  74.    WE4 = 0;                //步數百位
  75.    WE3 = 1;
  76.    WE5 = 1;
  77.    WE6 = 1;
  78.    P0 = table[num[2]];
  79.    delay(5);

  80.    P2 = 0xff;
  81.    WE1 = 1;
  82.    WE2 = 1;   
  83.    WE5 = 0;              //步數十位
  84.    WE4 = 1;
  85.    WE3 = 1;
  86.    WE6 = 1;
  87.    P0 = table[num[1]];
  88.    delay(5);

  89.    P2 = 0xff;
  90.    WE1 = 1;
  91.    WE2 = 1;
  92.    WE6 = 0;                //步數個位
  93.    WE4 = 1;
  94.    WE5 = 1;
  95.    WE3 = 1;
  96.    P0 = table[num[0]];
  97.    delay(5);

  98. }


  99. void KeyScan()
  100. {
  101.               KeyValue = 0;
  102.               //列掃描
  103.               P1 = 0xf0;

  104.               if(P1 != 0xf0)
  105.               {
  106.                             delay(10);//軟件消抖
  107.                             if(P1!= 0xf0)
  108.                             {
  109.                                           switch(P1)
  110.                                           {
  111.                                                         case 0xe0: KeyValue = 1; break;            
  112.                                                         case 0xd0: KeyValue = 2; break;
  113.                                                         case 0xb0: KeyValue = 3; break;
  114.                                           }
  115.                                                       
  116.                                           P1 = 0x0f;//行掃描
  117.                                             switch(P1)
  118.                                           {
  119.                                                         case 0x0e: KeyValue = KeyValue; break;            
  120.                                                         case 0x0d: KeyValue = KeyValue+3; break;
  121.                                                         case 0x0b: KeyValue = KeyValue+6; break;
  122.                                                         case 0x07: KeyValue = KeyValue+9; break;
  123.                                           }
  124.                                           while(P1 != 0x0f);//松手檢測
  125.                             }
  126.                            
  127.               }
  128.               return ;
  129. }


  130. void Select(void)//功能選擇
  131. {
  132.               switch(KeyValue)
  133.               {
  134.                             case 1: way = 0;break;              //單身拍正轉
  135.                             case 2: way = 1;break;              //單四拍反轉
  136.                             case 3: way = 2;break;              //雙四拍正轉
  137.                             case 4: way = 3;break;              //雙四拍反轉
  138.                             case 5: way = 4;break;              //八拍正轉
  139.                             case 6: way = 5;break;              //八拍反轉
  140.                             case 7: run = 1;break;              //啟動按鈕
  141.                             case 8: run = 0;time = 0;break;              //停止按鈕
  142.                             case 9:            
  143.                                           {
  144.                                                         speed++;
  145.                                                         if(speed > 6)
  146.                                                         {
  147.                                                                       speed = 1;
  148.                                                         }
  149.                                                         break;              //加速
  150.                                           }

  151.                             case 10:
  152.                                           {
  153.                                                         speed--;
  154.                                                         if(speed == 0)
  155.                                                         {
  156.                                                                       speed = 6;
  157.                                                         }
  158.                                                         break;//減速
  159.                                             }
  160.                             case 11:step += 10;break;              //步數加
  161.                             case 12:step -= 10;break;              //步數減
  162.               }
  163.               KeyValue = 0;
  164. }

  165. void Timer_Init()
  166. {
  167.               EA = 1;              //中斷開關
  168.               ET0 = 1;//打開定時器0中斷
  169.               TR0 = 1;//啟動定時器0
  170.               TMOD = 0x01; //16位計時模式
  171.               TH0 = time_counter[speed-1][0];              //定時
  172.               TL0 = time_counter[speed-1][1];

  173. }


  174. void main()              //主函數
  175. {
  176.               Timer_Init();              //定時器初始化,啟動中斷
  177.               while(1)
  178.               {
  179.                             KeyScan(); //鍵盤掃描
  180.                             Select();  //功能選擇
  181.                             display(step, speed);              //步數顯示
  182.               }

  183. }

  184. void Timer0() interrupt 1
  185. {
  186.               TH0 = time_counter[speed-1][0];              //定時
  187.               TL0 = time_counter[speed-1][1];

  188.               if(run)
  189.               {
  190.                             if(step == 0)              //判斷步數走完
  191.                             {
  192.                                           run = 0;
  193.                                           way = -1;
  194.                             }
  195.                             switch (way)              //選擇通電方式            
  196.                             {
  197.             
  198.                                           case 0:              //單四拍正轉
  199.                                           {
  200.                                                         step--;//步數--
  201.                                                         P3 = Way_1[time++];
  202.                                                         F = 0; //正轉燈亮
  203.                                                         if(time == 4)
  204.                                                         {
  205.                                                                       time = 0;
  206.                                                         }
  207.                                                         break;
  208.                                           }
  209.                                           case 1:              //單四拍反轉
  210.                                           {
  211.                                                         step--;
  212.                                                         P3 = Way_2[time++];
  213.                                                         R = 0;
  214.                                                         if(time == 4)
  215.                                                         {
  216.                                                                       time = 0;
  217.                                                         }
  218.                                                         break;            
  219.                                           }
  220.                                           case 2: //雙四拍正轉
  221.                                           {
  222.                                                         step--;
  223.                                                         P3 = Way_3[time++];
  224.                                                         F = 0;
  225.                                                         if(time == 4)
  226.                                                         {
  227.                                                                       time = 0;
  228.                                                         }
  229.                                                         break;
  230.                                           }
  231.                                           case 3: //雙四拍反轉
  232.                                           {
  233.                                                         step--;
  234.                                                         P3 = Way_4[time++];
  235.                                                         R = 0;
  236.                                                         if(time == 4)
  237.                                                         {
  238.                                                                       time = 0;
  239.                                                         }
  240.                                                         break;
  241.                                           }
  242.                                           case 4: //八拍正轉
  243.                                           {
  244.                                                         step--;
  245.                                                         P3 = Way_5[time++];
  246.                                                         F = 0;
  247.                                                         if(time == 8)
  248.                                                         {
  249.                                                                       time = 0;
  250.                                                         }
  251.                                                         break;
  252.                                           }
  253.                                           case 5: //八拍反轉
  254.                                           {
  255.                                                         step--;
  256.                                                         P3 = Way_6[time++];
  257.                                                         R = 0;
  258.                                                         if(time == 8)
  259.                                                         {
  260.                                                                       time = 0;
  261.                                                         }
  262.                                                         break;
  263.                                           }
  264.                                           default: break;               
  265.                             }
  266.               }
  267.               else
  268.               {
  269.                             F = 1; //正轉燈滅
  270.                             R = 1; //反轉燈滅
  271.                             S = 0; //停止燈亮
  272.               }

  273. }
復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品国产自产拍高清 | 久久免费精品视频 | 国产欧美一区二区精品忘忧草 | 日日夜夜天天 | 欧美久| 羞羞网站在线观看 | 成年人黄色小视频 | 亚洲精品福利在线 | 91视频www.| 午夜视频在线 | 日韩美女一区二区三区在线观看 | 成人毛片视频免费 | 亚洲精品视频免费观看 | www.日韩| 一区二区三区在线看 | 久久成人一区二区三区 | 国产精品视频偷伦精品视频 | 亚洲国产一区二区三区在线观看 | 亚洲在线一区 | 欧美极品在线 | 日本精品一区二区 | 精品粉嫩超白一线天av | 国产乱肥老妇国产一区二 | 欧美成人精品二区三区99精品 | 国产精品成人一区二区三区 | 欧美成人黄色小说 | 成人午夜在线观看 | 精品视频一区二区三区在线观看 | 日韩免费视频一区二区 | 亚洲精品在线91 | 欧美激情视频一区二区三区在线播放 | 亚洲国产欧美在线 | 91看片视频| 国产一区在线免费观看视频 | 国产精品v| 国产精品久久久久久久久久99 | 91精品国产综合久久精品图片 | 人人干人人玩 | 亚洲逼院 | 噜啊噜在线 | 精品久久久久久国产 |