51+l298n+步进电机

news/2024/12/4 3:39:15/

目标:51+298n+电机转一圈+按键检测

可以完整带动298n模块,

//*********************************************
//Developer:Saber
//Project:Motor Control
//Time:2018/4/18
//*********************************************
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned intstatic unsigned int count;
static unsigned int endcount;
//八拍驱动方式正转表 A-B- --> B- --> B-A --> A --> AB --> B
// --> BA- --> A- --> A-B-
uchar upstep8_table[]={0x05,0x01,0x09,0x08,0x0A,0x02,0x06,0x04};//四拍驱动方式正转表 A --> B --> A- --> B-
uchar upstep4_table[]={0x08,0x02,0x06,0x01};void delay(uint ims);               //变量延时函数
void Interrupt0_Init();				//中断0初始化
void MotorSpeedOrDirection(uint var, uchar state);        //控制电机转速和方向
void ConStep(uchar var);			//步进控制器
void MotorStop(void);    			//停止void main()
{unsigned int sum=0;P1 = 0x00;count = 0;Interrupt0_Init();while(1){MotorSpeedOrDirection(1, 0);}
}//******************************
//		步进电机停止函数
//作用:停止
//******************************
void MotorStop(void)
{P1 = 0x00;
}//******************************
//		外部中断0初始化函数
//作用:初始化外部中断
//******************************
void Interrupt0_Init()
{EA = 1;TMOD = 0x11;ET0 = 1;//	TH0=0xFF;
//	TL0=0x28;TH0=(65536-1000)/256;TL0=(65536-1000)%256;TR0=1;
}//******************************
//		中断处理函数
//作用:定时器0的中断处理
//******************************
void timeint(void) interrupt 1
{
//	TH0=0xFF;
//	TL0=0x28;   //216----234us
//  定时器定时1msTH0=(65536-1000)/256;TL0=(65536-1000)%256;count++;
}//******************************
//
//延时i ms
//******************************
void delay(uint ims)
{endcount=ims;count=0;do{}while(count<endcount);
}//******************************
//		步进电机驱动函数
//作用:通过变量var控制电动机的转速高低,通过变量state判断电动机的正反转
//			state:0 正转,state: 1 反转
//使用8拍能够实现比较平滑的转动,使用4拍时电机震动比较大。
//******************************
void MotorSpeedOrDirection(uint var, uchar state)
{uchar i=0;if(!state){for(i=0; i<8; i++){P1=upstep8_table[i];delay(var);}}else{for(i=7; i>0; --i){P1=upstep8_table[i];delay(var);}}
}//******************************
//		步进控制函数
//作用:通过变量var控制旋转圈速
//******************************
void ConStep(uchar var)
{uchar i=0,j=0,m=0,k=0;while(k++<var){for(i=0;i<20;i++){for(m=0;m<20;m++){P1=upstep8_table[j];j++;if(j>=8)             //每8次一个循环j=0;delay(1);}}}
}

修改后的

//*********************************************
//Developer:Saber
//Project:Motor Control
//Time:2018/4/18
//*********************************************
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//八拍驱动方式正转表 A-B- --> B- --> B-A --> A --> AB --> B
// --> BA- --> A- --> A-B-
uchar upstep8_table[]={0x05,0x01,0x09,0x08,0x0A,0x02,0x06,0x04};uchar i=0;
void main()
{if(i<=8){P1=upstep8_table[i];i++;}else{i=0;}
}		

问题是:电机一直响,不转。

没有电机引脚初始化


http://www.ppmy.cn/news/521540.html

相关文章

uniapp验证码登录

<view click"sendCode" :class"phone.length 11 ? btn2 : " class"btn">获取短信验证码</view> ***************************************************************************************************************************…

hdu 1869

一个最短路径的变形&#xff0c;解决问题的思路也开阔灵活&#xff0c;其实都是万变不离其宗 六度分离 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 726 Accepted Submission(s): 275 Problem Description …

sgu495

不多提。 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAXN100000100; int n,m; double dp[MAXN]; int main() {while(~scanf("%d%d",&n,&m)){double ans1.0;dp[1]1.0;for(int i2;i<m;i)…

UVA1598

思路&#xff1a;每个优先级队列分别存储sell和buy&#xff0c;每个指令后都判断是否产生交易 package test;import java.util.Comparator; import java.util.Iterator; import java.util.PriorityQueue; import java.util.Queue; import java.util.Scanner; import java.util.…

hdu1698

/* 分析&#xff1a; 线段树水题&#xff0c;成段更新成段查询(总共只查询一次)。 线段树学的太菜了&#xff0c;被这水题虐了&#xff0c;弄了一上午- -I 2012-07-10 */ #include"stdio.h"struct segtree {int l,r;int mid;int val;int flag; }T[300011];void build…

HDU 1598

将边先排序&#xff0c;然后从最小的边开始枚举&#xff0c;当发现需要查找的两个点在一个并查集里面的时候就计算差值&#xff0c;并与min比较。 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring>using namespace std…

UVA1599

题目&#xff1a;https://vjudge.net/problem/UVA-1599 思路&#xff1a;先反向做一次bfs&#xff0c;求出各点到终点经过的最少结点数量。然后正向做一次bfs&#xff0c;每次都选取颜色最小的路径&#xff0c;同时要保证距离的值刚好减1&#xff0c;如果有多条路可以走&#…

UVa1589

/* 题意很简单&#xff0c;就是黑方只剩下一个将&#xff0c;红方还有很多子&#xff0c;而且当前的残局是红方正在将军&#xff0c;判断红方是否已经将死黑方 红方只有四种棋子&#xff0c;帅&#xff0c;车&#xff0c;炮&#xff0c;马&#xff0c;因此按照每个棋子的运算…