步进电机驱动正转反转.docx

上传人:b****6 文档编号:7460815 上传时间:2023-05-11 格式:DOCX 页数:16 大小:16.95KB
下载 相关 举报
步进电机驱动正转反转.docx_第1页
第1页 / 共16页
步进电机驱动正转反转.docx_第2页
第2页 / 共16页
步进电机驱动正转反转.docx_第3页
第3页 / 共16页
步进电机驱动正转反转.docx_第4页
第4页 / 共16页
步进电机驱动正转反转.docx_第5页
第5页 / 共16页
步进电机驱动正转反转.docx_第6页
第6页 / 共16页
步进电机驱动正转反转.docx_第7页
第7页 / 共16页
步进电机驱动正转反转.docx_第8页
第8页 / 共16页
步进电机驱动正转反转.docx_第9页
第9页 / 共16页
步进电机驱动正转反转.docx_第10页
第10页 / 共16页
步进电机驱动正转反转.docx_第11页
第11页 / 共16页
步进电机驱动正转反转.docx_第12页
第12页 / 共16页
步进电机驱动正转反转.docx_第13页
第13页 / 共16页
步进电机驱动正转反转.docx_第14页
第14页 / 共16页
步进电机驱动正转反转.docx_第15页
第15页 / 共16页
步进电机驱动正转反转.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

步进电机驱动正转反转.docx

《步进电机驱动正转反转.docx》由会员分享,可在线阅读,更多相关《步进电机驱动正转反转.docx(16页珍藏版)》请在冰点文库上搜索。

步进电机驱动正转反转.docx

步进电机驱动正转反转

/*文件名:

main.c

*功能:

LED显示控制。

*通过GPIO控制步进电机

*说明:

将跳线JP14和JP19全部短接。

****************************************************************************/

#include"config.h"

#defineMOTOA1<<10//P0.10

#defineMOTOB1<<11//P0.11

#defineMOTOC1<<12//P0.12

#defineMOTOD1<<13//P0.13

#definekey11<<16//A-B-C-D

#definekey21<<17//AB-BC-CD-DA-AB

#definekey31<<18//A-AB-B-BC-C-CD-D-DA-A

#definekey41<<19//反转

#definekey51<<20//停止

#defineKEYCON0x001f0000//LED控制字

#defineMOTOCON0x00003c00//MOTO控制字

#defineGPIOSET(PIN)IO0SET=PIN//方便修改置位端口

#defineGPIOCLR(PIN)IO0CLR=PIN//方便修改清位端口

#defineRS1<<9//P0.9

#defineSID1<<6//P0.6

#defineE1<<4//P0.4

#definePSB1<<2//P0.2并行或串行,选择低电平串行模式

#defineRST1<<25//P1.25,复位脚

unsignedcharIC_DAT1[64]="电机运行方式组成:

A-B-C-D单四拍步距角1.8";

unsignedcharIC_DAT2[64]="电机运行方式组成:

AB-BC-CD-DA双四拍步距角0.9";

unsignedcharIC_DAT3[64]="电机运行方式组为A-AB-B-BC-C-CD-D单双八拍步距角0.45";

unsignedcharIC_DAT4[64]="电机反转";

unsignedcharIC_DAT5[64]="电机停止";

unsignedcharIC_DAT6[64]="自动化0901班张凯龙衡海龙步进电机细分控制卢祖起郭亚楠";

voidTransferCom(unsignedchardata0);

voidTransferData(unsignedchardata1);

voiddelay(unsignedintm);

voiddelay_10ms(uint32n);

voidlcd_mesg(unsignedchar*adder1);

voidDelayNS(uint32dly);

voidMOTO_Mode1(uint8i);//A-B-C-D

voidMOTO_Mode10(uint8i);

voidMOTO_Mode2(uint8i);//AB-BC-CD-DA-AB

voidMOTO_Mode20(uint8i);

voidMOTO_Mode3(uint8i);//A-AB-B-BC-C-CD-D-DA-A

voidMOTO_Mode30(uint8i);

/****************************************************************************

*名称:

main()

*功能:

根据表DISP_TAB来控制LED显示。

****************************************************************************/

intmain(void)

{

/*PINSEL2使用启动代码的默认配置,切勿任意配置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)&&(IO0PIN&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)

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延时参数,值越大,延时越久

*出口参数:

****************************************************************************/

voidDelayNS(uint32dly)

{uint32i;

for(;dly>0;dly--)

{

for(i=0;i<5000;i++);

}

}

/****************************************************************************

*名称:

MOTO_Mode1()

*功能:

单四拍程序

*入口参数:

uint8i延时参数,值越大,延时越久

*出口参数:

****************************************************************************/

voidMOTO_Mode1(uint8i)//A-B-C-D

{

initinal();

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);

DelayNS(i);

GPIOCLR(MOTOB);

/*C*/

GPIOSET(MOTOC);

DelayNS(i);

GPIOCLR(MOTOC);

/*D*/

GPIOSET(MOTOD);

DelayNS(i);

GPIOCLR(MOTOD);

}

}

voidMOTO_Mode10(uint8i)//A-B-C-D

{

initinal();

while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key5)!

=0)

{

lcd_mesg(IC_DAT4);

/*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()

*功能:

双四拍程序

*入口参数:

uint8i延时参数,值越大,延时越久

*出口参数:

****************************************************************************/

voidMOTO_Mode2(uint8i)//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);

GPIOCLR(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);

}

}

voidMOTO_Mode20(uint8i)//AB-BC-CD-DA-AB

{

initinal();

while((IO0PIN&key1)&&(IO0PIN&key2)&&(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);

GPIOCLR(MOTOC);

GPIOCLR(MOTOB);

/*BA*/

GPIOSET(MOTOB);

GPIOSET(MOTOA);

DelayNS(i);

GPIOCLR(MOTOB);

GPIOCLR(MOTOA);

}

}

/****************************************************************************

*名称:

MOTO_Mode3()

*功能:

单双八拍程序

*入口参数:

uint8i延时参数,值越大,延时越久

*出口参数:

****************************************************************************/

voidMOTO_Mode3(uint8i)//A-AB-B-BC-C-CD-D-DA-A

{

initinal();

while((IO0PIN&key1)&&(IO0PIN&key2)&&(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);

DelayNS(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);

GPIOCLR(MOTOA);

}

}

voidMOTO_Mode30(uint8i)//A-AB-B-BC-C-CD-D-DA-A

{

initinal();

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);

DelayNS(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);

GPIOCLR(MOTOB);

/*A*/

GPIOSET(MOTOA);

DelayNS(i);

GPIOCLR(MOTOA);

/*DA*/

GPIOSET(MOTOD);

GPIOSET(MOTOA);

DelayNS(i);

GPIOCLR(MOTOD);

GPIOCLR(MOTOA);

}

}

/*************************************************************

*名称:

delay()

*功能:

延时程序

**************************************************************/

voiddelay(unsignedintm)

{

unsignedinti,j;

for(i=0;i

for(j=0;j<50;j++);

}

/*************************************************************

*名称:

delay_10ms()

*功能:

延时程序

**************************************************************/

voiddelay_10ms(uint32n)

{

uint32i,j;

for(i=0;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(0x0C);//D=1,显示开

delay(100);

TransferCom(0x01);//清屏

delay_10ms

(1);

TransferCom(0x06);//模式设置,光标从右向左加1位移动

delay(100);

}

/****************************************************************

*名称:

lcd_mesg()

*功能:

在LCD12864上显示汉字

*****************************************************************/

voidlcd_mesg(unsignedchar*adder1)

{

unsignedchari;

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字节数据

*******************************************************************/

voidSendByte(unsignedcharDbyte)

{

unsignedchari;

for(i=0;i<8;i++)

{

IO0CLR=E;

if((Dbyte&0x80)==0x80)

IO0SET=SID;

else

IO0CLR=SID;

Dbyte=Dbyte<<1;//左移一位

IO0SET=E;

IO0CLR=E;

}

}

/***************************************************************

*名称:

TransferCom()

*功能:

向LCD12864发送命令

****************************************************************/

voidTransferCom(unsignedchardata0)

{

IO0SET=RS;

SendByte(0xf8);//11111,RW(0),RS

(1),0

SendByte(0xf0&data0);//高4位

SendByte(0xf0&data0<<4);//低4位

IO0CLR=RS;

}

/*************************************************************

*名称:

TransferData()

*功能:

向LCD12864发送数据

**************************************************************/

voidTransferData(unsignedchardata1)

{

IO0SET=RS;

SendByte(0xfa);//11111,RW(0),RS

(1),0

SendByte(0xf0&data1);//高4位

SendByte(0xf0&data1<<4);//低4位

IO0CLR=RS;

}

/***************************************************************************************

*名称:

LCD12864_init()

*功能:

LCD12864端口初始化函数

*****************************************************************************************/

LCD12864_init(void)

{

IO0DIR|=(E|SID|RS);//设置为输出

IO0CLR=(E|SID|RS);

IO1DIR|=RST;

IO1CLR=RST;//复位

delay

(1);

IO1SET=RST;//复位置高

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2