• 西北工控自动化网 专业的兰州PCB芯片级无图维修,电路板软硬件开发公司-甘肃先睿工控科技有限公司!欢迎你! 业务咨询电话:0931-8593134 技术支持电话:18609487812

 

先睿工控广告

编程开发
其它的类

首页 》 全屏查看 》


步进驱动器驱动脉冲信号程序源码

关键词: 步进驱动器,驱动,脉冲,信号,程序,源码
描述:

步进驱动器驱动脉冲信号程序源码


作者:代码灵魂  日期:2017/3/29

//*************************12864_driver.c************************
//主程序文件名:main.c
//模块名称:步进驱动器驱动脉冲信号程序源码
//作者:代码。灵魂
//单位:甘肃先睿工控科技有限责任公司
//来源: href="/index.html">WWW.(西北工控自动化)
//入出口参数:                 
//基本描述:本编码开关模块,主要用于需要用到编码开关做为输入的单片机系统。
//           完成将编码开关转换为数据编号的过程。为不带锁脉冲工作模式。
//备注:引用本程序或模块,请保留来源及原作者署名。
//版本:Verion_1.0.0.2               *
//日期 :2017/03/29
//***************************************************************/
#include


 

//*----------------输出位变量----------------/
sbit OUT_A=P2^1;
sbit OUT_B=P2^0;
sbit OUT_LOCK=P2^3;

sbit OUT_TEST=P2^4;

sbit OUT_PLU=P2^5;
sbit OUT_DIR=P2^6;
sbit OUT_ENA=P2^7;
 
//---------------------------------------------*/
bit bSave,bQuick_flag,bIN_DIR,bIN_ENA;

//bit OUT_PLU,OUT_DIR,OUT_ENA;
bit OUT_lock;

code uint PLU_from_w=1000; //先设定外部的数据为常数

uint PLUcount,PLU_from_n;

uchar Global_beilv=0;//定义一个倍率,分为*1 *10 *100 *1000 用1234表示
bit Sudu_Beilv=0;
//-----------------------
void Init_IN_OUT();
void ShowError();
void Delay_ms(uchar ms); 
extern uchar Get_Code_Key(uchar *pCode_Data);

void KeyData_Execute();
void BeiLv(bit out_A,bit out_B);  
void Output_PLU(uint ms);
//-----------------------

void Init_IN_OUT()
{
 
 bSave=1;
 bQuick_flag=1;
 bIN_DIR=1;
 bIN_ENA=1;

 OUT_PLU=0;
 OUT_DIR=0;
 OUT_ENA=1;

 OUT_LOCK=0;
   
}
void ShowError()
{
 if (Global_Debug_Flag)printf("Error Key Info! ");
 ;;
}

void Key_Press_OK()//按下中键的处理过程
{
 if (Sudu_Beilv==1)
 { 
 
  //spend adj mode
  if (Global_Debug_Flag)printf("The PLU_from_n=%u ! ",PLU_from_n); 
 }
 else
 {
  Global_beilv++;
  BeiLv(OUT_A,OUT_B);

  if (Global_beilv>3)Global_beilv=0;
 
  if (Global_Debug_Flag)printf("The Global_beilv=%d! ",(uint)Global_beilv);
  //Beilv adj mode
 } 
 
     if (Global_Debug_Flag)printf("The OK is KeyPress! ");
}

void Key_Press_L()
{
 switch (Global_beilv)
 {
  case 0:
   if (PLU_from_n>0)
    PLU_from_n--;
   break;
  case 1:
   if (PLU_from_n>10)
    PLU_from_n=PLU_from_n-10;
   break;
  case 2:
   if (PLU_from_n>100)    
    PLU_from_n=PLU_from_n-100;
   break;
  case 3:
   if (PLU_from_n>1000)
    PLU_from_n=PLU_from_n-1000;
   break;
 }
 if (Global_Debug_Flag) printf("The Key 'LEFT' is Press Down! ");
 if (Global_Debug_Flag)printf("The PLU_from_n=%u ! ",PLU_from_n); 
 
 ;;
}
void Key_Press_R()
{

 switch (Global_beilv)
 {
  case 0:
   if (PLU_from_n<65535)
    PLU_from_n++;
   break;
  case 1:
   if (PLU_from_n<65525)
    PLU_from_n=PLU_from_n+10;
   break;
  case 2:
   if (PLU_from_n<65435)    
    PLU_from_n=PLU_from_n+100;
   break;
  case 3:
   if (PLU_from_n<64535)
    PLU_from_n=PLU_from_n+1000;
   break;
 }

 if (Global_Debug_Flag) printf("The Key 'RIGHT' is Press Down! ");
 if (Global_Debug_Flag)printf("The PLU_from_n=%u ! ",PLU_from_n); 
;;
}
void Delay_ms(uchar ms)     //显示延时
{
 uchar i,j;
 for(j=ms;j>1;j--)
 {
  for (i=0;i<=130;i++)
  {
      _nop_();
  }
  }
}
 

void BeiLv(bit out_A,bit out_B)
{
 
 switch(Global_beilv)
 {
  case 0:
   out_A=0;
   out_B=0;   
   break;
  case 1:
   out_A=0;
   out_B=1;
   break;
  case 2:
   out_A=1;
   out_B=0;
   break;
  case 3:
   out_A=1;
   out_B=1;
   break;

 }  
}
void KeyData_Execute()    //对按键进行处理。
{
 uchar Code_Num;
 
// uchar *Code_Data=&Code_Num;
   //if (Global_Debug_Flag) printf("The Data Code_Num=%d Inside! ",(uint)pp);

    if (Get_Code_Key(&Code_Num)==0)
 {
    if(OUT_LOCK==0)
    { 
       //if (Global_Debug_Flag) printf("The Data Code_Num=%d Inside! ",(uint)Code_Num);
      //if (Global_Debug_Flag) printf("The Data Come From Inside! "); 
     switch(Code_Num)
     {
       case 0:
     break;
    case 1:   
     Key_Press_L();
     break;
    case 2:
     Key_Press_R();
     break;
    case 3:
     Key_Press_OK();
     break;
   }
  }
  else
  {
   if (Global_Debug_Flag) printf("The Data Come From Extern! "); 
  }
 }
 else
 {
  ShowError();
 }
 //if (Global_Debug_Flag) printf("The Data Come From Extern! ");  
 //PLUcount=PLUcount++; 
}
 

void Output_PLU(uint ms)
{
 if(OUT_ENA==1)
 {
  
    if (PLUcount>=0)    //判断预执行的脉冲数
  {

   // if (Global_Debug_Flag) printf("texs! ");
   OUT_PLU=0;  //输出一个脉冲
   Delay_ms(1);
   OUT_PLU=!OUT_PLU;
   Delay_ms(1);
   OUT_PLU=!OUT_PLU;

   if (OUT_lock==0 )  //如果脉冲锁定,则数据来自旋钮,否则来自外部,
        PLUcount=PLU_from_n;
   else
         PLUcount=PLU_from_w;
   if (PLUcount>0)
         PLUcount--;  //来自外部的数据会减少到0
    
    Delay_ms(ms);      //用来调整速度。
   }
 }
 else  
  Delay_ms(10);        //如果没开启运行功能,就延时好了。即等待。
}

void main()

 

  Init_IN_OUT();
 
   printf_seril_config();
 T_Test(10);
 Com_init();
 
 if (Global_Debug_Flag) printf("CPU初始化成功! ");

 BeiLv(OUT_A,OUT_B);
 while(1)
    {
   KeyData_Execute();
     Output_PLU(10);
     Delay_ms(1);
  OUT_TEST=!OUT_TEST;
    }
}


本信息由  甘肃先睿工控科技有限责任公司 发表于 西北工控自动化网
注意: 转载或分享 请注明来源:西北工控自动化!

在全屏模式下分享,效果更好!


扫一扫 添加通信录 扫一扫 添加微信号


COPYRIGHT ©2008-2018 XBGHZDH CORPORATION ALL RIGHT RESERVED .
COPYRIGHT ©2008 XBGHZDH ALL RIGHT RESERVED .           

        西北工控自动化 © 版权所有

本网站由:甘肃先睿工控科技有限公司独家赞助


总访问量:343027
当前在线:61