⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s_ motor-key.c

📁 单片机开发系统程序-步进电机键控正反转实验,用按键来控制电机,包含C和ASM源码.
💻 C
字号:
 
/******************************************************************
/*                                                                *
/* ME300B单片机开发系统演示程序-步进电机键控正反转实验            *
/*                                                                *
/* 邮箱: gguoqing@willar.com                                     *
/* 网站: http://www.willar.com                                   *
/* 作者: gguoqing                                                *
/* 时间: 2006/05/30                                              *
/*                                                                *
/*【版权】COPYRIGHT(C)伟纳电子 www.willar.com ALL RIGHTS RESERVED *
/*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!      *
/*                                                                *
/******************************************************************/
    
#include <reg51.h>       //51芯片管脚定义头文件
#include <intrins.h>	 //内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint  unsigned int

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

sbit  K1   = P1^4;       //正转
sbit  K2   = P1^5;       //反转
sbit  K3   = P1^6;       //停止
sbit  K4   = P1^7; 
sbit  BEEP = P3^7;       //蜂鸣器
      
/********************************************************/
/*                                                  
/* 延时t毫秒 
/* 11.0592MHz时钟,延时约1ms                                     
/*                                                      
/********************************************************/
void delay(uint t)
{                           
   uint k;
   while(t--)
   {
     for(k=0; k<125; k++)
     { }
   }
}

/**********************************************************/
void delayB(uchar x)    //x*0.14MS
 {
   uchar i;
   while(x--)
   {
     for (i=0; i<13; i++)
     { }
   }
 }

/**********************************************************/
void beep()
 {
   uchar i;
   for (i=0;i<100;i++)
    { 
     delayB(4);
     BEEP=!BEEP;                 //BEEP取反
    } 
     BEEP=1;                    //关闭蜂鸣器
 }

/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void  motor_ffw()
 { 
   uchar i;
   uint  j;
   for (j=0; j<12; j++)         //转1*n圈 
    { 
	    if(K4==0)
        {break;}                //退出此循环程序
      for (i=0; i<8; i++)       //一个周期转30度
        {
          P1 = FFW[i];          //取数据
          delay(15);            //调节转速
        }
    }
 }

/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void  motor_rev()
{
     uchar i;
	 uint  j;
	 for (j=0; j<12; j++)       //转1×n圈
      {
	    if(K4==0)
         {break;}               //退出此循环程序
        for (i=0; i<8; i++)     //一个周期转30度
        {
          P1 = REV[i];          //取数据
          delay(15);            //调节转速
        }
      }
 }

/********************************************************
*                                                       
*  主程序                                               
*                                                      
*********************************************************/

main()
 { 
      uchar r,N=5;             //N 步进电机运转圈数
   while(1)
    {  
      if(K1==0)
	  {
        beep();
		for(r=0;r<N;r++)
         { 
		   motor_ffw();       //电机正转
 		   if(K4==0)
       	   {beep();break;}    //退出此循环程序
	     }
      }
	  else if(K2==0)
       { 
	    beep();
		for(r=0;r<N;r++)
         {
	       motor_rev();       //电机反转
		   if(K4==0)
       	   {beep();break;}    //退出此循环程序
		 }
       }
 	  else  
	 	P1 = 0xf0;
    }
 }

/********************************************************/  	   	   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -