步进电机加速减速正传反转程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}