找回密码
 立即注册

QQ登录

只需一步,快速开始

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

为什么单片机按键控制电机不动,一直响,求解

[复制链接]
跳转到指定楼层
楼主
ID:858009 发表于 2021-5-18 11:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>           //头文件
#define uchar unsigned char
#define uint unsigned int
unsigned char keyval;   //存储按键值
code BeatCode[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};   //正转
code defeatcode[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转
void delay(uint z); //延时函数
int i;           //变量
sbit S1=P3^0;   //按键
unsigned long beats=0;
void StartMotor(unsigned long angle);
unsigned char tmp;
static unsigned char index=0;

void StartMotor(unsigned long angle)
{
        EA=0;
        beats=(angle*4076)/360;
        EA=1;
}
void moveup()
{
        tmp = P1;
        tmp = tmp & 0xF0;
        tmp = tmp | BeatCode[index];                        
        P1 = tmp;
        index++;
        index = index & 0x07;
        beats--;
}
void main()
{
        TMOD=0x01;
        EA=1;
        ET0=1;
        TR0=1;
        TH0=0xF8;
        TL0=0xCD;
        keyval=0;
        StartMotor(10);   //转动十度
        while(1)
        {
                switch(keyval)
                {
                        case 1:moveup();break;
                }
        }
}
void Time0() interrupt  1
{
        TH0=0xF8;
        TL0=0xCD;
        if((P3&0x0f)!=0x0f)
        {
                delay(5);
                if(S1==0)
                        keyval=1;
        }
}
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

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

使用道具 举报

沙发
ID:277550 发表于 2021-5-18 12:49 | 只看该作者
驱动电压、电流,是否足够,不可以直接单片机的IO驱动的
回复

使用道具 举报

板凳
ID:844772 发表于 2021-5-18 15:00 | 只看该作者
moveup() 里面没有延时啊,步进电机的每步要加个延时,否则转不起来,顶多抖动发声。
回复

使用道具 举报

地板
ID:520967 发表于 2021-5-18 15:05 | 只看该作者
先用指示灯看下控制是否出现错误,在查看驱动电流是否足够
回复

使用道具 举报

5#
ID:808225 发表于 2021-5-18 18:16 | 只看该作者
普通直流电机,51开发板可以驱动的,建议看看代码有没有错。
回复

使用道具 举报

6#
ID:858009 发表于 2021-5-18 18:20 | 只看该作者
漠城 发表于 2021-5-18 18:16
普通直流电机,51开发板可以驱动的,建议看看代码有没有错。

编译代码没有出错
回复

使用道具 举报

7#
ID:858009 发表于 2021-5-18 18:20 | 只看该作者
devcang 发表于 2021-5-18 12:49
驱动电压、电流,是否足够,不可以直接单片机的IO驱动的

使用un2003驱动
回复

使用道具 举报

8#
ID:858009 发表于 2021-5-18 18:21 | 只看该作者
glinfei 发表于 2021-5-18 15:00
moveup() 里面没有延时啊,步进电机的每步要加个延时,否则转不起来,顶多抖动发声。

加延时就出错
回复

使用道具 举报

9#
ID:858009 发表于 2021-5-18 18:22 | 只看该作者
glinfei 发表于 2021-5-18 15:00
moveup() 里面没有延时啊,步进电机的每步要加个延时,否则转不起来,顶多抖动发声。

没有任何反应
回复

使用道具 举报

10#
ID:889094 发表于 2021-5-18 21:40 来自手机 | 只看该作者
什么电机都不说一下,怎么判断?估计是5线4相小电机,换相之间延时要大于100us,这个值要自己试试,从大往小调
回复

使用道具 举报

11#
ID:889094 发表于 2021-5-18 21:43 来自手机 | 只看该作者
qwettyuio 发表于 2021-5-18 18:21
加延时就出错

加延时出错就查出错的原因
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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