步进电机加速减速正传反转程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

附录六:源程序

#include "reg52.h"

#define uchar unsigned char

#define uint unsigned int

Ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0 x79,0x71,0x76};

sbit dula=P2^6;

sbit wela=P2^7;

sbit bb=P1^7; //控制步进电机启停

sbit zhuanxiang=P1^6;//键盘

sbit mode_choose=P1^1;//模式选择键

sbit queren=P1^0;//确认键

sbit shiweijia=P1^4; //设置十位

sbit geweijia=P1^5; //设置个位

sbit jia1=P1^2; //加一

sbit jian1=P1^3; //减1

sbit F1=P2^0;//步进电机

sbit F2=P2^1;

sbit F3=P2^2;

sbit F4=P2^3;

uchar flag=1, MotorStep=0;//步进电机标志变量

uchar keyflag=0;//按键次数标识

Uint

a=0,b,TIM,CT=0,Count=0,Count1=0,bai,shi,ge,shi1,ge1,zhuansu=0,yusheshiwei=0,yushegewei=0 ,yushebaiwei=0,c=0,cc=0;

void delay(uchar z);//延时函数

void display(uint a,uchar flag);//显示预设转速函数

void display1(uint c);//显示实际转速函数

void display2(uchar flag,uchar,uchar,uchar) ;

void SetMotor(); //步进电机转动函数

void key(); //键盘扫描

void InitMotor()//步进电机初始化

{

F1=0;

F2=0;

F3=0;

F4=0;

}

void system_Ini()

{

TMOD=0x11; //T1为16位计数模式,T0为16位定时模式

TH0=(65536-200)/256; //重新赋值200us

TL0=(65536-200)%256;

TH1=(65536-46080)/256; //重新赋值50ms

TL1=(65536-46080)%256;

EA=1; //打开总中断

ET0=1; //T0允许中断产生PWM波

ET1=1; //T1允许中断计数

EX1=1; //开外部中断1

IT1=1; //外部中断1下降沿触发方式

TR0=0; //打开定时器0,TR仅仅与定时器计数器有关,与中断无关TR1=1; //打开定时器1

}

void main()

{

system_Ini();

InitMotor();

while(1)

{

key();

// display(a,flag);

display1(zhuansu);

}

}

void key()//键盘扫描

{

if(!queren) //确认键P1.0

{

keyflag=0;

TR0=1;

}

if(!mode_choose) //模式选择P1.1

{

delay(10);

if(!mode_choose)

{

keyflag++; //表示按键的次数

if(keyflag>=3)

keyflag=0;

}

}

if(keyflag==0)

display(a,flag);

if(keyflag==1) //模式1:预设速度

{

if(!geweijia)

{

delay(5);

if(!geweijia)

{ while(!geweijia);

yushegewei++;

if(yushegewei>9)

yushegewei=0;

}

}

if(!shiweijia)

{

delay(5);

if(!shiweijia)

{ while(!shiweijia);

yusheshiwei++;

if(yusheshiwei>9)

{

yusheshiwei=0;

yushebaiwei++;

if(yushebaiwei>=1&&yusheshiwei>=5)//预设值大于150转时,报警

{

yushebaiwei=1;

yusheshiwei=5;

// baojing=~baojing;

}

}

}

}

a=yushebaiwei*100+yusheshiwei*10+yushegewei;

display2(0,yushebaiwei,yusheshiwei,yushegewei);

}

if(jia1==0)

{

delay(10);

if(jia1==0)

{ a=a+1;

if(a>199)

a=199;

}

相关文档
最新文档