标题: AT24C02+5线4相步进电机,没有使用24C02的页写和页读,掉电后重启步进电机会回到初位 [打印本页]

作者: CZ1    时间: 2019-11-8 12:15
标题: AT24C02+5线4相步进电机,没有使用24C02的页写和页读,掉电后重启步进电机会回到初位
/*
实现功能是开机电机归位,按下按键K1可控制电机顺时针转动0-140°(理论值),按键K3控制电机逆时针旋转0-140°,但是不能超过初始位置。
*/
#include<iic.h>
sbit K1 = P3^2;  //按键K1
sbit K2 = P3^1;  //按键K2
sbit K3 = P3^0;  //按键K3
sbit led1 = P2^2;  //最大位置指示灯
sbit led2 = P2^3;  //初始位置指示灯
bit h1=0,h2=0;
void delay(unsigned int h)  //延时函数
{
while(h)
{
  h--;
}
}
char zhuan[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};  //顺时针
char fan[]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};  //逆时针
int num ,i=0,k;
void igt(void)     //步进电机归位程序
{
num = At24c02Read(2);     //读取AT24c02里面2的地址(储存的是上次记录的步进电机最终停止位的地址)
delay(1000);
while(num)        //如果num不等于0,既步进电机没有归位则运行程序进行玩归位
{
  for(i=0;i<8;i++)
  {
   P1=fan[i];
   delay(100);
  }
  num --;
  At24c02Write(2,num);
}
}
void shunzhuan()  //按键K1控制电机顺转
{
if(h1 == 1)
{
  if(K1 == 0)       //判断 K1按键是否按下   由于没有使用中断所以是通过单片机扫描检测
  {
   delay(10);      //消抖
   if(K1 == 0)      //再次判断K1是否按下
   {
    for(i=0;i<8;i++)    //运行8拍
    {
     P1=zhuan[i];
     delay(100);
    }
    num ++;
    At24c02Write(2,num);  //将运行次数记录进AT24c02
   }
  }
}
if(num > 200)
{
  h1 = 0;
  led1 = 0;
}
else
{
  h1 = 1;
  led1 = 1;
}
}
void fanzhuan()     //按键K3控制电机反转
{
if(h2 == 0)
{
  if(K3 == 0)       //判断 K3按键是否按下   由于没有使用中断所以是通过单片机扫描检测
  {
   delay(10);      //消抖
   if(K3 == 0)      //再次判断K1是否按下
   {
    for(i=0;i<8;i++)    //运行8拍
    {
     P1=fan[i];
     delay(100);
    }
    num --;
    At24c02Write(2,num);  //将运行次数记录进AT24c02
   }
  }
}
if(num <= 0)
{
  h2 = 1;
  led2 = 0;
}
else
{
  led2 = 1;
  h2 = 0;
}
}
void init_motor()  //手动控制电机归位,按一下就ok
{
if(K2 == 0)
{
  delay(10);
  if(K2 == 0)
  {
   igt();
   while(!K2);
  }
}
}
void main()   //主函数
{
igt();
delay(10000);
num = At24c02Read(2);
delay(10000);
led1 = 1;
led2 = 1;
while(1)
  {
  shunzhuan();
  fanzhuan();
  init_motor();
}
}


//这里只是main.c而已,完整函数在附件中。我使用的是普中开发板(入门板,大概50rmb左右的)

新建文件夹.zip

2.2 KB, 下载次数: 13

完整程序


作者: yzwzfyz    时间: 2019-11-9 09:21
在原始位置上做个标记,程序检测这个标记,再加上你的运行记录,就可以达成你的目的了。
作者: CZ1    时间: 2020-3-5 22:56
yzwzfyz 发表于 2019-11-9 09:21
在原始位置上做个标记,程序检测这个标记,再加上你的运行记录,就可以达成你的目的了。

发错位置了,这个我是有标记的,所以掉电后可以回到初始状态。






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1