分享一款基于STC15W408AS单片机设计的TB6560可编程步进电机驱动器
/****************************************************
主控为STC15w408as,
****************************************************/
#include<STC12C5A60S2.H>
#define uchar unsigned char
#define uint unsigned int
/********************************************************
控制位定义
********************************************************/
uint j=2,xx=0,g=0,i=0,s=2;
static uint ss=0; //ss为静态
sbit shi_neng1=P1^1;// 使能控制位1
sbit fang_xiang1=P1^0;// 旋转方向控制位1
sbit mc1=P1^2; // 脉冲控制位1
sbit shi_neng2=P3^7;// 使能控制位2
sbit fang_xiang2=P3^5;// 旋转方向控制位2
sbit mc2=P3^6; // 脉冲控制位2
sbit qd=P2^0;// 启动
sbit tz=P2^1;//停止按钮
sbit zz=P2^2;//正转按钮
sbit fz=P2^3;//反转按钮
sbit jia=P2^4;//加速按钮
sbit jian=P2^5;// 减速按钮
sbit jt=P0^0;// 急停按钮
/*******************************************************************
* K1 开机按键
********************************************************************/
void key_1(){
if(qd==0){
shi_neng1=1;//开机
shi_neng2=1;
i=1;
}
}
/*******************************************************************
* K2 关机按键
********************************************************************/
void key_2(){
if(tz==0){
shi_neng1=0;//关机
shi_neng2=0;
i=0;
}
}
/*******************************************************************
* K3正转按键
********************************************************************/
void key_3(){
if(zz==0)
{
if(ss>180){ ss=0;
if(zz==0){
fang_xiang1=0;
fang_xiang2=0;
}
}
while(zz==0);
}
}
/*******************************************************************
* K4反转按键
********************************************************************/
void key_4(){
if(fz==0)
{
if(ss>180){ ss=0;
if(fz==0){
fang_xiang1=1;
fang_xiang2=1;
}
}
while(fz==0);
}
}
/*******************************************************************
* K5减速按键
********************************************************************/
void key_5(){
if(jian==0)
{
if(ss>180){ ss=0;
if(jian==0){ //注s至少为2不能少于2
s+=1;
}
}
while(jian==0);
}
}
/*******************************************************************
* K6加速按键
********************************************************************/
void key_6(){
if(jia==0)
{
if(ss>180){ ss=0;
if(jia==0){
if(s>=2){
s-=1; //注s至少为2不能少于2
}
if(s<2){
s=2; //注s至少为2不能少于2
}
}
}
while(jia==0);
}
}
/*******************************************************************
* K7 急停按键
********************************************************************/
void key_7(){
if(jt==0){
shi_neng1=0;//关机
shi_neng2=0;
i=0;
}
}
/******************************************************************
定时器配置
*******************************************************************/
void ConfigTimer0(){
TMOD=0x01;//将定时器0,1都设置为模式1
TL0 = 0x0C; //设置定时初值 500us 内部晶振12M 发出1KHZ脉冲为最高速度 大于1KHZ速度降低,只能为偶整数倍降低
TH0 = 0xFE; //设置定时初值
TR0=1;//开启定时器0
ET0=1;//开定时器0的中断
EA=1;//开总中断
}
/******************************************************************
T0定时器
*******************************************************************/
void timer0_ISR() interrupt 1
{
TL0 = 0x0C; //设置定时初值
TH0 = 0xFE; //设置定时初值
ss++; //按键延时用
if(i==1){
j--; //j-1的结果即为降低的倍数j-1=2,2为原来速度的一半跟细分一样
if(j==1){ //j必须为1不能为0并且j赋值最少为2因为j--,j=0时会变成999
j=s;
mc1=~mc1;
mc2=~mc2;
}
}
}
/********************************************************
主函数
********************************************************/
main()
{
shi_neng1=0;// 使能控制位1
fang_xiang1=0;// 旋转方向控制位1
shi_neng2=0;// 使能控制位2
fang_xiang2=0;// 旋转方向控制位2
// i=1;
// mc=0; // 脉冲控制位
ConfigTimer0();
while(1)
{
key_1();
key_2();
key_3();
key_4();
key_5();
key_6();
key_7();
}
}
页:
[1]