
#include "reg52h"
//Motor
sbit F1 = P1^0;
sbit F2 = P1^1;
sbit F3 = P1^2;
sbit F4 = P1^3;
///////////////////////////////////////
//步进电机驱动
unsigned char MotorStep=0;
unsigned int MotorTimer = 0;
unsigned int TIM,CT;
void InitMotor()
{
F1 = 1;
F2 = 1;
F3 = 1;
F4 = 1;
}
void SetMotor()
{
// if(Speed == 0) return;
switch(MotorStep)
{
case 0:
if(TIM)
{
F1 = 0;
F2 = 0;
F3 = 1;
F4 = 1;
MotorStep = 1;
TIM=0;
}
break;
case 1:
if(TIM)
{
F1 = 1;
F2 = 0;
F3 = 0;
F4 = 1;
MotorStep = 2;
TIM=0;
}
break;
case 2:
if(TIM)
{
F1 = 1;
F2 = 1;
F3 = 0;
F4 = 0;
MotorStep = 3;
TIM=0;
}
break;
case 3:
if(TIM)
{
F1 = 0;
F2 = 1;
F3 = 1;
F4 = 0;
MotorStep = 0;
TIM=0;
}
break;
}
}
void system_Ini()
{
TMOD|= 0x11;
TH0=0xDC; //110592M
TL0=0x00;
IE = 0x8A;
TR0 = 1;
}
main()
{ system_Ini();
InitMotor();
while(1)
{
SetMotor();
}
}
/
[ t1 (05ms)中断] 中断中做 PWM 输出
------------1000/(002ms250)=200Hz
/
void Tzd(void) interrupt 1
{
TH0 = 0xfe; //110592
TL0 = 0x33;
if( CT++==20)
{TIM=1;
CT=0;
}
}
希望对你有所帮助,这个亲自试过,可以的!
还有其他控制方式的~
最近正好自己在搞一个小车,经过测试了,可用,有不懂得地方再联系:
驱动用的l298n。
#include<reg52h>
#define uchar unsigned char
#define uint unsigned int
uchar rec_int_flag=0;
void delay_ms(uint x);
void motor_con(uchar angle,uchar speed ,uchar back,uchar direction);
uchar code Fan[8]={0, 0x0b, 0x09, 0x0d, 0x05, 0x07, 0x06, 0x0e};
//1010 ,1011, 1001 ,1101,0101,0111,0110, 1110
uchar code Zhen[8] ={0x0e, 0x06, 0x07, 0x05, 0x0d, 0x09, 0x0b, 0};
// 1110 ,0110 ,0111, 0101,1101,1001,1011,1010
void main()
{
while(1)
{
motor_con(1,20,0,2);
if(rec_int_flag==1)
{
while(1);
}
}
}
void delay_ms(uint x)
{
uchar i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void rev_int(void) interrupt 0
{
rec_int_flag=1;
}
/
函数说明:
direction==0时左轮动,为1时右轮动,为2时直行。
转动角度为(72度angle)。
back==1时代表后退,back==0时代表前进。
speed用于延时speed毫秒来调速。
P0为左轮电机,P1为右轮电机
/
void motor_con(uchar angle,uchar speed ,uchar back,uchar direction)
{
uchar m,n;
switch(back)
{
case 1: //判断前进后退与否 0代表前进
{
for(m=0;m<angle;m++) //前进角度
{
for(n=0;n<8;n++)
{
if(direction==0) P1=Fan[n]; //左转右转或直行。
else if(direction==1) P0=Fan[n];
else {P1=Fan[n];P0=Fan[n];}
delay_ms(speed); //调速
}
}
}break;
case 0:
{
for(m=0;m<angle;m++)
{
for(n=0;n<8;n++)
{
if(direction==0) P1=Zhen[n];
else if(direction==1) P0=Zhen[n];
else {P1=Zhen[n];P0=Zhen[n];}
delay_ms(speed);
}
}
}break;
default: break;
}
}
//功能:直流电机正转调试程序
//编译环境: KEIL UVISION2
//单片机晶振: 无特殊要求
//作者:忠兴电子元件店
//日期:20100817
#include<reg52h>
sbit P2_0=P2^0;//M1启动
sbit P2_1=P2^1;//M2启动
sbit P2_2=P2^2;//M1停止
sbit P2_3=P2^3;//M2停止
sbit P1_0=P1^0;//M1
sbit P1_1=P1^1;//M1
sbit P1_2=P1^2;//M2
sbit P1_3=P1^3;//M2
main()
{
while(1)
{
if(P2_0==0)//M1启动
{
P1_0=1;
P1_1=0;
}
if(P2_1==0)//M2启动
{
P1_2=1;
P1_3=0;
}
if(P2_2==0)//M1停止
{
P1_0=1;
P1_1=1;
}
if(P2_3==0)//M2停止
{
P1_2=1;
P1_3=1;
}
}
}
/-----------------------------------------------
名称:直流电机调速
内容:1、学习目的:利用定时器产生PWM,了解原理和使用方法
2、硬件要求:直流电机 定时器
3、试验现象:按键调速,PWM部分显示速度档位,电机根据档位调节速度 这个需要把电机驱动输入端和PWM端连接起来
------------------------------------------------/
#include<reg52h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit KEY1 = P3^1; //定义调速按键
sbit PWM = P1^5; //定义调速端口
unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 01ms
unsigned char PWM_ON ;//定义高电平时间
//
/ 延时函数 /
//
void delay(unsigned int cnt)
{
while(--cnt);
}
//
/ 主函数 /
//
main()
{
unsigned char PWM_Num;//定义档位
TMOD |=0x01;//定时器设置 1ms in 12M crystal
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
IE= 0x82; //打开中断
TR0=1;
CYCLE = 10;// 时间可以调整 这个是10步调整 周期10ms 8位PWM就是256步
while(1)
{
if(!KEY1)
{
delay(10000);
if(!KEY1)
{
PWM_Num++;
if(PWM_Num==4)PWM_Num=0;
switch(PWM_Num){
case 0:P0=0x06;PWM_ON=0;break;//高电平时长
case 1:P0=0x5B;PWM_ON=4;break;
case 2:P0=0x4F;PWM_ON=6;break;
case 3:P0=0x66;PWM_ON=8;break;
default:break;
}
}
}
}
}
//
/ 定时器中断函数 /
//
void tim(void) interrupt 1 using 1
{
static unsigned char count; //
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
if (count==PWM_ON)
{
PWM = 1; //灯灭
}
count++;
if(count == CYCLE)
{
count=0;
if(PWM_ON!=0) //如果左右时间是0 保持原来状态
PWM = 0; //灯亮
}
}
以上就是关于89C52单片机驱动步进电机的C程序全部的内容,包括:89C52单片机驱动步进电机的C程序、步进电机297 298驱动程序、谁能给一个L298N电机驱动程序(C语言或汇编语言都可以),谢谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)