/* 文 件 名:main.c
* 功 能: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<<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 KEYCON 0x001f0000 // LED控制字
#define MOTOCON 0x00003c00 // MOTO控制字
#define GPIOSET(PIN) IO0SET = PIN // 便修改置位端口
#define GPIOCLR(PIN) IO0CLR = PIN // 便修改清位端口
#define RS 1<<9 //P0.9
#define SID 1<<6 //P0.6
#define E 1<<4 //P0.4
#define PSB 1<<2 //P0.2并行或串行,选择低电平串行模式
#define RST 1<<25 //P1.25,复位脚
unsigned char IC_DAT1[]=\"电机运行式组成: A-B-C-D 单四拍 步距角 1.8 \";
页脚
.
unsigned char IC_DAT2[]=\"电机运行式组成: AB-BC-CD-DA 双四拍 步距角 0.9 \";
unsigned char IC_DAT3[]=\"电机运行式组为A-AB-B-BC-C-CD-D 单双八拍 步距角 0.45 \";
unsigned char IC_DAT4[]=\" 电机 \";
unsigned char IC_DAT5[]=\" 电机 \";
unsigned char IC_DAT6[]=\" 自动化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 DelayNS(uint32 dly);
页脚
反 转 停 止 凯龙 衡海龙步进电机细分控 .
void MOTO_Mode1(uint8 i); // A-B-C-D
void MOTO_Mode10(uint8 i);
void MOTO_Mode2(uint8 i); // AB-BC-CD-DA-AB
void MOTO_Mode20(uint8 i);
void MOTO_Mode3(uint8 i); // A-AB-B-BC-C-CD-D-DA-A
void MOTO_Mode30(uint8 i);
/****************************************************************************
* 名 称:main()
* 功 能:根据表DISP_TAB来控制LED显示。
****************************************************************************/
int main(void)
{
页脚
.
/* PINSEL2使用启动代码的默认配置,切勿任意配置PINSEL2,否则总线会受到干扰 */
PINSEL0=0x00000000;
PINSEL1=0X00000000;
PINSEL2&=~(0x00000006); //设置所有I/O口为普通GPIO口
IO0DIR =MOTOCON; // 配置LED控制I/O向
LCD128_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);
if ((IO0PIN&key2)==0)
MOTO_Mode2(15);
if((IO0PIN&key4)==0)
MOTO_Mode20(20);
if ((IO0PIN&key3)==0)
MOTO_Mode3(8);
页脚
// A-B-C-D
// AB-BC-CD-DA-AB
.
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 延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void DelayNS(uint32 dly)
{ uint32 i;
for(; dly>0; dly--)
{
for(i=0; i<5000; i++);
}
}
/****************************************************************************
* 名 称:MOTO_Mode1()
页脚
.
* 功 能:单四拍程序
* 入口参数:uint8 i 延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void MOTO_Mode1(uint8 i) // 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);
}
}
void MOTO_Mode10(uint8 i) // 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()
* 功 能:双四拍程序
* 入口参数:uint8 i 延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void MOTO_Mode2(uint8 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);
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);
}
页脚
.
}
void MOTO_Mode20(uint8 i) // 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()
* 功 能:单双八拍程序
* 入口参数:uint8 i 延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
页脚
.
void MOTO_Mode3(uint8 i) // 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);
}
}
void MOTO_Mode30(uint8 i) {
initinal();
页脚
// A-AB-B-BC-C-CD-D-DA-A
.
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()
* 功能:延时程序
**************************************************************/
void delay(unsigned int m)
{
页脚
.
unsigned int i,j;
for(i=0;i } /************************************************************* *  名称:delay_10ms() *  功能:延时程序 **************************************************************/ void delay_10ms(uint32 n) { uint32 i,j; for(i=0;i 页脚 . } /************************************************************* *  名称:initinal() *  功能:LCD128字库初始化 **************************************************************/ initinal(void) { delay_10ms(4);                            //大于40ms的延时程序 IO0SET=PSB;                           //设置为串行工作式 delay(1); IO1CLR=RST;                          //复位 页脚 . delay(1); IO1SET=RST;                           //复位置高 delay(10); TransferCom(0x30);                    delay(100); TransferCom(0x0C);                    delay(100); TransferCom(0x01);                    delay_10ms(1); TransferCom(0x06);                    delay(100); 页脚 //8bit设置。RE=0.G=0,图片显示关 //D=1,显示开 //清屏 //模式设置,光标从右向左加1位移动 . } /**************************************************************** * 名称:lcd_mesg() * 功能:在LCD128上显示汉字 *****************************************************************/ 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<;i++) { TransferData(*adder1); adder1++; } } /****************************************************************** *  名称:SeddByte() *  功能:发送1字节数据 页脚 . *******************************************************************/ void SendByte(unsigned char Dbyte) { unsigned char i; 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() *  功能:向LCD128发送命令 ****************************************************************/ void TransferCom(unsigned char data0) { IO0SET=RS; SendByte(0xf8);                                  // 11111,RW(0),RS(1),0 SendByte(0xf0&data0);                             //高4位 SendByte(0xf0&data0<<4);                          //低4位 页脚 . IO0CLR=RS;   } /************************************************************* * 名称:TransferData() * 功能:向LCD128发送数据 **************************************************************/ void TransferData(unsigned char data1) { IO0SET=RS; SendByte(0xfa);                                   // 11111,RW(0),RS(1),0 SendByte(0xf0&data1);                             //高4位 SendByte(0xf0&data1<<4);                          //低4位 IO0CLR=RS; 页脚 . } /*************************************************************************************** *   名称:LCD128_init() *   功能:LCD128端口初始化函数 *****************************************************************************************/ LCD128_init(void) { IO0DIR|=(E|SID|RS);                       //设置为输出 IO0CLR=(E|SID|RS); IO1DIR|=RST; IO1CLR=RST;                               //复位 delay(1); 页脚 . IO1SET=RST;                               //复位置高 } 页脚              
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务