步進電機驅動正轉反轉_第1頁
步進電機驅動正轉反轉_第2頁
步進電機驅動正轉反轉_第3頁
步進電機驅動正轉反轉_第4頁
步進電機驅動正轉反轉_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、-作者xxxx-日期xxxx步進電機驅動正轉反轉【精品文檔】* 功 能:LED顯示控制。* 通過GPIO控制步進電機* 說 明:將跳線JP14和JP19全部短接。 */#include "config.h"#define MOTOA 1<<10 / P0.10 #define MOTOB 1<<11/ P0.11 #define MOTOC 1<<12/ P0.12 #define MOTOD 1<<13/ P0.13 #define key1 1<<16 / A-B-C-D#define key2 1<&l

2、t;17 / AB-BC-CD-DA-AB#define key3 1<<18 / A-AB-B-BC-C-CD-D-DA-A#define key4 1<<19 /反轉#define key5 1<<20 /停止#define KEYCON0x001f0000 / LED控制字#define MOTOCON0x00003c00 / MOTO控制字#define GPIOSET(PIN) IO0SET = PIN / 方便修改置位端口#define GPIOCLR(PIN)IO0CLR = PIN / 方便修改清位端口#define PSB 1<<

3、;2 /P0.2并行或串行,選擇低電平串行模式#define RST 1<<25 /P1.25,復位腳unsigned char IC_DAT164="電機運行方式組成: A-B-C-D 單四拍 步距角 1.8 " unsigned char IC_DAT264="電機運行方式組成: AB-BC-CD-DA 雙四拍 步距角 0.9 " unsigned char IC_DAT364="電機運行方式組為A-AB-B-BC-C-CD-D 單雙八拍 步距角 0.45 " unsigned char IC_DAT464="

4、; 電機 反 轉 "unsigned char IC_DAT564=" 電機 停 止 "unsigned char IC_DAT664=" 自動化0901班 張凱龍 衡海龍步進電機細分控制盧祖起 郭亞楠"void TransferCom(unsigned char data0);void TransferData(unsigned char data1);void delay(unsigned int m);void delay_10ms(uint32 n);void lcd_mesg(unsigned char *adder1);void D

5、elayNS(uint32 dly);void MOTO_Mode1(uint8 i); / A-B-C-Dvoid MOTO_Mode10(uint8 i);void MOTO_Mode2(uint8 i); / AB-BC-CD-DA-ABvoid MOTO_Mode20(uint8 i);void MOTO_Mode3(uint8 i); / A-AB-B-BC-C-CD-D-DA-Avoid MOTO_Mode30(uint8 i); /* 名 稱:main()* 功 能:根據表DISP_TAB來控制LED顯示。*/int main(void) /* PINSEL2使用啟動代碼的默認配

6、置,切勿任意配置PINSEL2,否則總線會受到干擾 */ PINSEL0=0x00000000; PINSEL1=0X00000000; PINSEL2&=(0x00000006); /設置所有I/O口為普通GPIO口 IO0DIR =MOTOCON; / 配置LED控制I/O方向 LCD12864_init(); initinal(); /液晶端口初始化 while(IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key4)&&(IO

7、0PIN&key5)!=0) lcd_mesg(IC_DAT6); /顯示界面 while(1) if (IO0PIN&key1)=0) MOTO_Mode1(15); if(IO0PIN&key4)=0) MOTO_Mode10(20); / A-B-C-D if (IO0PIN&key2)=0) MOTO_Mode2(15); if(IO0PIN&key4)=0) MOTO_Mode20(20); / AB-BC-CD-DA-AB if (IO0PIN&key3)=0) MOTO_Mode3(8); if(IO0PIN&key4)=0

8、) MOTO_Mode30(10); / A-AB-B-BC-C-CD-D-DA-A if(IO0PIN&key5)=0) / 停止 initinal(); lcd_mesg(IC_DAT5); IO0CLR=MOTOCON; ; return(0);/* 名 稱:DelayNS()* 功 能:長軟件延時* 入口參數:dly延時參數,值越大,延時越久* 出口參數:無*/void DelayNS(uint32 dly) uint32 i; for(; dly>0; dly-) for(i=0; i<5000; i+); /* 名 稱:MOTO_Mode1()* 功 能:單四拍

9、程序* 入口參數:uint8 i延時參數,值越大,延時越久* 出口參數:無*/void MOTO_Mode1(uint8 i) / A-B-C-Dinitinal(); while(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key4)&&(IO0PIN&key5)!=0) lcd_mesg(IC_DAT1); /顯示漢字界面1 /* A */ GPIOSET(MOTOA); DelayNS(i); GPIOCLR(MOTOA); /* B */ GPIOSET(MOTOB); Del

10、ayNS(i); GPIOCLR(MOTOB); /* C */ GPIOSET(MOTOC); DelayNS(i); GPIOCLR(MOTOC); /* D */ GPIOSET(MOTOD); DelayNS(i); GPIOCLR(MOTOD); void MOTO_Mode10(uint8 i) / A-B-C-Dinitinal(); while(IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key5)!=0) lcd_mesg(IC_DAT4

11、); /* D */ GPIOSET(MOTOD); DelayNS(i); GPIOCLR(MOTOD); /* C */ GPIOSET(MOTOC); DelayNS(i); GPIOCLR(MOTOC); /* B */ GPIOSET(MOTOB); DelayNS(i); GPIOCLR(MOTOB); /* A */ GPIOSET(MOTOA); DelayNS(i); GPIOCLR(MOTOA); /* 名 稱:MOTO_Mode2()* 功 能:雙四拍程序* 入口參數:uint8 i延時參數,值越大,延時越久* 出口參數:無*/void MOTO_Mode2(uint8

12、i) / AB-BC-CD-DA-AB initinal(); while(IO0PIN&key1)&&(IO0PIN&key3)&&(IO0PIN&key4)&&(IO0PIN&key5)!=0) lcd_mesg(IC_DAT2); /顯示漢字界面2 GPIOSET(MOTOA); GPIOSET(MOTOB); DelayNS(i); GPIOCLR(MOTOA); GPIOCLR(MOTOB); /* BC */ GPIOSET(MOTOB); GPIOSET(MOTOC); DelayNS(i); GPI

13、OCLR(MOTOB); GPIOCLR(MOTOC); /* CD */ GPIOSET(MOTOC); GPIOSET(MOTOD); DelayNS(i); GPIOCLR(MOTOC); GPIOCLR(MOTOD); /* DA */ GPIOSET(MOTOD); GPIOSET(MOTOA); DelayNS(i); GPIOCLR(MOTOD); GPIOCLR(MOTOA); void MOTO_Mode20(uint8 i) / AB-BC-CD-DA-AB initinal(); while(IO0PIN&key1)&&(IO0PIN&ke

14、y2)&&(IO0PIN&key3)&&(IO0PIN&key5)!=0) lcd_mesg(IC_DAT4); GPIOSET(MOTOA); GPIOSET(MOTOD); DelayNS(i); GPIOCLR(MOTOA); GPIOCLR(MOTOD); /* DC */ GPIOSET(MOTOD); GPIOSET(MOTOC); DelayNS(i); GPIOCLR(MOTOD); GPIOCLR(MOTOC); /* CB */ GPIOSET(MOTOC); GPIOSET(MOTOB); DelayNS(i); GPIOC

15、LR(MOTOC); GPIOCLR(MOTOB); /* BA */ GPIOSET(MOTOB); GPIOSET(MOTOA); DelayNS(i); GPIOCLR(MOTOB); GPIOCLR(MOTOA); /* 名 稱:MOTO_Mode3()* 功 能:單雙八拍程序* 入口參數:uint8 i延時參數,值越大,延時越久* 出口參數:無*/void MOTO_Mode3(uint8 i) / A-AB-B-BC-C-CD-D-DA-Ainitinal(); while(IO0PIN&key1)&&(IO0PIN&key2)&&(

16、IO0PIN&key4)&&(IO0PIN&key5)!=0) lcd_mesg(IC_DAT3); /* A */ GPIOSET(MOTOA); DelayNS(i); GPIOCLR(MOTOA); /* AB */ GPIOSET(MOTOA); GPIOSET(MOTOB); DelayNS(i); GPIOCLR(MOTOA); GPIOCLR(MOTOB); /* B */ GPIOSET(MOTOB); DelayNS(i); GPIOCLR(MOTOB); /* BC */ GPIOSET(MOTOB); GPIOSET(MOTOC); Del

17、ayNS(i); GPIOCLR(MOTOB); GPIOCLR(MOTOC); /* C */ GPIOSET(MOTOC); DelayNS(i); GPIOCLR(MOTOC); /* CD */ GPIOSET(MOTOC); GPIOSET(MOTOD); DelayNS(i); GPIOCLR(MOTOC); GPIOCLR(MOTOD); /* D */ GPIOSET(MOTOD); DelayNS(i); GPIOCLR(MOTOD); /* DA */ GPIOSET(MOTOD); GPIOSET(MOTOA); DelayNS(i); GPIOCLR(MOTOD); G

18、PIOCLR(MOTOA); void MOTO_Mode30(uint8 i) / A-AB-B-BC-C-CD-D-DA-Ainitinal(); while(IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key5)!=0) lcd_mesg(IC_DAT4); /* D */ GPIOSET(MOTOD); DelayNS(i); GPIOCLR(MOTOD); /* CD */ GPIOSET(MOTOC); GPIOSET(MOTOD); Dela

19、yNS(i); GPIOCLR(MOTOC); GPIOCLR(MOTOD); /* C */ GPIOSET(MOTOC); DelayNS(i); GPIOCLR(MOTOC); /* BC */ GPIOSET(MOTOB); GPIOSET(MOTOC); DelayNS(i); GPIOCLR(MOTOB); GPIOCLR(MOTOC); /* B */ GPIOSET(MOTOB); DelayNS(i); GPIOCLR(MOTOB); /* AB */ GPIOSET(MOTOA); GPIOSET(MOTOB); DelayNS(i); GPIOCLR(MOTOA); GP

20、IOCLR(MOTOB); /* A */ GPIOSET(MOTOA); DelayNS(i); GPIOCLR(MOTOA); /* DA */ GPIOSET(MOTOD); GPIOSET(MOTOA); DelayNS(i); GPIOCLR(MOTOD); GPIOCLR(MOTOA); /* 名稱:delay()* 功能:延時程序*/void delay(unsigned int m) unsigned int i,j; for(i=0;i<m;i+) for(j=0;j<50;j+);/* 名稱:delay_10ms()* 功能:延時程序*/void delay_1

21、0ms(uint32 n) uint32 i,j; for(i=0;i<n;i+) for(j=0;j<2000;j+);/* 名稱:initinal()* 功能:LCD12864字庫初始化*/ initinal(void) delay_10ms(4); /大于40ms的延時程序 IO0SET=PSB; /設置為串行工作方式 delay(1); IO1CLR=RST; /復位 delay(1); IO1SET=RST; /復位置高 delay(10); TransferCom(0x30); /8bit設置。RE=0.G=0,圖片顯示關 delay(100); TransferCom

22、(0x0C); /D=1,顯示開 delay(100); TransferCom(0x01); /清屏 delay_10ms(1); TransferCom(0x06); /模式設置,光標從右向左加1位移動 delay(100);/* 名稱:lcd_mesg()* 功能:在LCD12864上顯示漢字*/void lcd_mesg(unsigned char *adder1) unsigned char i; TransferCom(0x80); delay(100); for(i=0;i<32;i+) TransferData(*adder1); adder1+; TransferCom(0x90); delay(100); for(i=16;i<64;i+) TransferData(*adder1); adder1+; /* 名稱:SeddByte()* 功能:發送1字節數據*/void SendByte(unsigned ch

溫馨提示

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

評論

0/150

提交評論