这是个步进电机驱动板,上面有单片机,可以下载程序的,可以用按键控制步进电机,下面的扩展接口是接传感

这是个步进电机驱动板,上面有单片机,可以下载程序的,可以用按键控制步进电机,下面的扩展接口是接传感,第1张

这个扩展借口是用来连接一些外部模拟信号的,比方说可以外接一个电位器,通过旋转电位器来控制步进电机的转速。比如外接一些传感器,通过这个接口来获取传感器的模拟量,至于怎么利用这些采集到的模拟量,那就看你自己准备怎么弄了

你的正反转子函数写的就是按键按下动抬起按键就停止,拿正传具体点儿说

if(StepMotor_P==0)代表按键按下,才会执行子函数,如果你按键抬起来就不会执行里面的子函数,弄个中间变量让函数自锁一下,吧最后面的while(!StepMotor_R);改成while(1),在这个子函数里面插入其他两个 *** 作的中间变量赋值 *** 作,并在程序头检测,这样可以跳出这个子函数循环,执行其他动作

我发觉单片机在程序执行完后会自动从头开始重新执行程序,包括所有的初始化。每次重新开始都会执行你这个whlie(!flag)。。所以一般都是写完初始化之后,把要执行的程序放到一个while(1)的死循环里面,这样单片机就不会从头开始重新执行一遍程序。。。。

#include "reg52h"

#include "INTRINSH"

#include <absacch>

#include <mathh>

#define uint unsigned int

#define uchar unsigned char

void check_addr(void); /

地址核对

/

uchar code slave_addr[4]={00, 01, 02, 255};

/

从机地址

/

uchar idata T0low, T0high,common_count,input_order,cmd_in_permit,interval;

uchar sent_ok,speed_change,start_up,start_end,address_true,i;

uint y1;

uint

code

add[100]={60006,62771,63693,64154,64430,64614,64746,64845,64922,64983,65033,65075,651

11,65141,65167,65190,65211,65229,65245,65260,65273,65285,65296,65306,65315,65323,65331

,65339,65345,65352,65358,65363,65368,65373,65378,65382,65387,65390,65394,65398,65401,6

5404,65407,65410,65413,65416,65418,65421,65423,65425,65428,65430,65432,65434,65435,654

37,65439,65441,65442,65444,65445,65447,65448,65450,65451,65452,65453,65455,65456,65457

,65458,65459,65460,65461,65462,65463,65464,65465,65466,65467,65468,65469,65469,65470,6

5471,65472,65472,65473,65474,65475,65475,65476,65477,65477,65478,65478,65479,65480,654

80,65481};

sbit P2_0=P2^0;

/

作输入步进电机的脉冲信号发送口

/

sbit P2_2=P2^2;

/

作输入步进电机的旋转方向信号发送口

/

sbit P1_0=P1^0;

/

作串口输出信号的使能口

, P1_0=0

时接通串口

,

输出信号

/

sbit WD=P1^7;

/

看门狗

/

main()

{

P2_0=0;

P2_2=0;

/

步进电机的旋转方向待试验后确定

/

P1_0=1;

/

开机时需要关断

,

串口发送功能

,

需要时再接通

/

WD=1;

/

看门狗先为

1

,电平翻转为喂狗

/

i=0;

common_count=0;

cmd_in_permit=0;

input_order=0;

interval=0;

address_true=1;

speed_change=0;

start_up=0;

2

start_end=0;

sent_ok=0;

//

允许发送

EA=1;

/

开放总中断

/

TMOD=0x21;

TH1 = 0xFD;

//

波特率

9600

TL1 = 0xFD;

SCON = 0xd0;

//

设定串行口工作方式

PCON &= 0x00;

//

波特率不倍增

SM2=1;

TR1 = 1;

ES=1;

//

启动定时器

1

T2MOD=00;

T2CON=0x00;

RCAP2H

=0xEE;

//

T2

的预置值

0xA600,25MS

0xB800

20MS,0xCA00

15MS,0xDC00

10MS

0xEE00

5MS

RCAP2L =0x00;

TR2=1;

//

启动定时器

ET2=1;

//

打开定时器

2

中断

do

{

if(address_true==1)

{

address_true=0;

check_addr();

}

if(start_up==1&&start_end==0)

//

第一次启动

{

y1=add[common_count];

T0high = (uchar)(y1>>8)

/

y1

的高

8

/

T0low = (uchar)(y1&0x00ff);

/

y1

的低

8

/

TR0 = 1;

ET0=1;

/

允许

T/C0

中断

/

start_end=1;

}

if(speed_change==1)

{

if(interval>=0&&interval<=0x63)

{

if(interval>common_count)

{common_count=common_count+1; }

if(interval<common_count)

{common_count=common_count-1; }

}

3

speed_change=0;

}

if(sent_ok==1)

{

sent_ok=0;

P1_0=0;

for(i=0;i<=20;i++) {_nop_();}

TI=0; SBUF=T0high;

while(TI==0);TI=0;

TI=0; SBUF=T0low;

while(TI==0);TI=0;

P1_0=1;

for(i=0;i<=20;i++) {_nop_();}

SM2=1;

}

}

while(1);

}

void timer0(void) interrupt 1 using 3

{

P2_0=~P2_0;

y1=add[common_count];

T0high = (uchar)(y1>>8)

/

y1

的高

8

/

T0low = (uchar)(y1&0x00ff);

/

y1

的低

8

/

TH0=T0high;

/

8

T0high

送定时器

0

TH0/

TL0=T0low;

/

8

T0low

送定时器

0

TL0/

}

void timer2(void) interrupt 5 using 2

{

TF2=0;

/T2

溢出中断需软件清

0/

speed_change=1;

//

速度可以改变标示,以便主程序处理

WD=!WD; /MAX813

喂狗

/

}

void inte_SERIAL() interrupt 4 using 1

/

串口

0

中断服务子程序

/

{

uchar key_in

key_in=0;

if(RI)

{

#include <reg52h>

unsigned char code F_Rotation[4]={0x08,0x10,0x20,0x40};//正转表格

unsigned char code B_Rotation[4]={0x40,0x20,0x10,0x08};//反转表格

void Delay(unsigned int i)//延时

{

while(--i);

}

main()

{

while(1)

{

unsigned char i;

unsigned int j;

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

{

for(i=0;i<4;i++) //4相

{

P1=B_Rotation[i]; //输出对应的相 可以自行换成反转表格

Delay(500); //改变这个参数可以调整电机转速

}

}

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

{

for(i=0;i<4;i++) //4相

{

P1=F_Rotation[i]; //输出对应的相 可以自行换成反转表格

Delay(500); //改变这个参数可以调整电机转速

}

}

}

}

以上就是关于这是个步进电机驱动板,上面有单片机,可以下载程序的,可以用按键控制步进电机,下面的扩展接口是接传感全部的内容,包括:这是个步进电机驱动板,上面有单片机,可以下载程序的,可以用按键控制步进电机,下面的扩展接口是接传感、L297和L298控制步进电机c程序问题,不知道为什么按键只有按住不放才会实现正转反转,急求解,谢谢!、求解释:步进电机程序运行后,按键二次后,中断是在第二个while产生的,程序为什么还能执行第一个while等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10115815.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存