找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1831|回复: 1
打印 上一主题 下一主题
收起左侧

求能点动控制步进机的51单片机,如何修改,求大神

[复制链接]
跳转到指定楼层
楼主
ID:224536 发表于 2017-8-4 10:26 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h> //TB6560输入控制端定义
#define F_DIR 0        //正转
#define B_DIR 1  //反转
sbit CLK = P2^0;
sbit ENA = P2^1;
sbit DIR = P2^2; sbit CW = P3^0; //正转运行按键
sbit STOP = P3^1; //停止运行按键
sbit CCW = P3^2; //反转运行按键
//sbit ADJ1 = P3^3; //调速运行按键
sbit ADJ2 = P3^3; //调速运行按键
unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反转 后加
unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //正转
unsigned int  K;//后加
/**************************************************
sbit ADJ2 = P3^0; //调速运行按键
*********************************************/
bit Run_Status; //运行状态位标志,
unsigned char Run_Dir;//电机运行方向
unsigned int CYCLE;  //周期变量
//=0表示电机在停止状态,可以按键正转、反转均可
//=1表示电机在运行状态,不支持正反转按键,只有先停止。防止强行换向带来的电流过大。 unsigned char Run_Dir; //电机运行方向 #define F_DIR 0 //正转
//#define B_DIR 1 //反转 unsigned int CYCLE; //周期变量 /************************************************************************************************
/** 函数名称: void Delay(unsigned int cnt)
** 功能描述: 简单的延时函数
** 输  入: cnt:0-65535之间的任意整数
** 输  出: 无
*************************************************************************************************/
void Delay(unsigned int cnt)
{
while(--cnt);
}
/************************************************************************************************
** 函数名称: void main(void)
** 功能描述: 主函数
** 输  入: 无
** 输  出: 无
*************************************************************************************************/
void main(void)
{
Run_Status=0; //=0表示电机在停止状态,可以按键正转、反转均可
CLK = 0;
ENA = 0;
ADJ2=1;
while(1)
{
if(!STOP) //任何时候按停止键,电机停止运行
{
Delay(1000); //延时去抖动
if(!STOP)
{
Run_Status=0; //电机正在停止的状态标志
CLK = 0;
ENA = 0;
TR0=0;
}
}
if(!CW&&!Run_Status) //按正转键同时电机不是正在运行时,电机正转运行
{
Delay(1000); //按下延时去抖动
if(!CW&&!Run_Status)
{
Run_Status=1; //电机正在运行的状态标志
DIR = 0; //正转
ENA = 1;
CYCLE=2500; //脉冲频率 定时器设置 10ms in 12M crystal 即100Hz
TMOD =0x01;
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
IE= 0x82; //打开中断
TR0=1;
Run_Dir=F_DIR; //电机运行方向正转
}
}
if(!CCW&&!Run_Status) //按反转键同时电机不是正在运行时,电机反转运行
{
Delay(1000); //延时去抖动
if(!CCW&&!Run_Status)
{
Run_Status=1; //电机正在运行的状态标志
DIR = 1; //反转
ENA = 1;
CYCLE=2500; //脉冲频率 定时器设置 10ms in 12M crystal 即100Hz
TMOD =0x01;
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
IE= 0x82; //打开中断
TR0=1;
Run_Dir=B_DIR; //电机运行方向反转
}
}
/********************************************
if(!ADJ1)
{
Delay(5000); //延时去抖动
if(!ADJ1)
{
if(CYCLE<20000) CYCLE+=1000;
else CYCLE=1000;
Run_Status=1;
TR0=1;
}
}
**************************************/
if(!ADJ2)
{
Delay(5000); //延时去抖动
if(!ADJ2)
{
if(CYCLE>5000) CYCLE-=1000;
else CYCLE=100;  
Run_Status=1;
TR0=1;
}
}

}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表