标题:
51单片机+l298n驱动步进电机转动效果不明显
[打印本页]
作者:
noheadgaga
时间:
2024-1-23 15:40
标题:
51单片机+l298n驱动步进电机转动效果不明显
采用三个按键控制电机的正反转,但是电机的转动效果不明显
51hei图片_20240123154010.jpg
(593.57 KB, 下载次数: 20)
下载附件
2024-1-23 15:40 上传
以下是单片机代码:
#include <REGX52.H>
#define uchar unsigned char
uchar flag = 0;
uchar a=1,t=100;
uchar code tab1[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
uchar code tab2[]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
uchar upstep4_table[]={0x08,0x02,0x06,0x01};
void delay(uchar ms)
{
uchar j;
while(ms--)
for(j=0;j<100;j++);
}
void keyscan()
{
//按键一
if(P0_0==0) //如果K1按键按下
{
delay(20); //延时消抖
while(P0_0==1); //松手检测
delay(20); //延时消抖
flag = 1;
}
//按键二
else if(P0_1==0) //如果K1按键按下
{
delay(20); //延时消抖
while(P0_1==1); //松手检测
delay(20); //延时消抖
flag = 2;
}
//按键三
else if(P0_2==0) //如果K1按键按下
{
delay(20); //延时消抖
while(P0_2==1); //松手检测
delay(20); //延时消抖
flag = 3;
}
else
flag =0;
}
void time0_init() //定时器T0初始化
{
TMOD=0x01; //设置定时器0工作方式1
TH0=(65536-50000)/256;//定时50ms取高八位
TL0=(65536-50000)%256; //取低八位
ET0=1; //开定时器0中断使能
EA=1; //开总中断使能
TR0=1; //开启中断
}
void time0() interrupt 1 //定时器T0入口函数
{
TH0=(65536-50000)/256; //定时50ms重新赋初值
TL0=(65536-50000)%256;
keyscan();
}
void main()
{
uchar i;
time0_init();
P1 = 0x00;
P2 = 0x00;
while(1)
{
if(flag != 0)
{
if(flag == 1)
{
for(i=0;i<4;i++)
{
P1 = upstep4_table[i];
delay(t); // 延迟t毫秒
}
// flag =0;
}
else if(flag == 2)
{
for(i=0;i<4;i++)
{
P2 = upstep4_table[i];
delay(t); // 延迟t毫秒
}
// flag =0;
}
else if(flag == 3)
{
for(i=0;i<8;i++)
{
P2 = tab2[i];
delay(t); // 延迟t毫秒
}
// flag =0;
}
}
else
{
P1 = 0x00;
P2 = 0x00;
}
}
}
复制代码
作者:
laoxu
时间:
2024-1-24 07:05
运行频率太低了.
启动后, 要逐步加速(减小延时时间 t).
作者:
glinfei
时间:
2024-1-24 09:34
单四拍的时序有问题,怎么会出现0110 。没看接线不知道八拍的对不对,还有键盘程序有问题啊,它处理时间可能超过中断时间。
作者:
lkc8210
时间:
2024-1-24 10:19
中断里不要用延时!
中断里不要用延时!
中断里不要用延时!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1