找回密码
 立即注册

QQ登录

只需一步,快速开始

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

位置控制程序

[复制链接]
跳转到指定楼层
楼主
ID:147079 发表于 2016-11-9 18:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//接线:主板的VCC +12V GND分别接位置对象的+5V +V GND;
//主板中插上位置对象控制板,信号接口接对象的信号接口,CLK_mcu,K1,K2分别接CPU的P14,P15,P16;
// JD1接到MCU的P1口 独立键盘的KEY接口接到MCU的P1口 短路帽打在右方。
// KEY0- 右运动0.25MM; KEY1- 左运动0.25MM;
// KEY2- 右运动1cm; KEY3- 左运动1cm;
// KEY4- 右运动5cm; KEY5- 左运动5cm;
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit en=P1^0;                  // 定义P1.0口
sbit rst=P1^1;                 // 定义P1.1口
sbit ccw=P1^2;                 // 定义P1.2口
sbit hf=P1^3;                  // 定义P1.3口
sbit clk=P1^4;                 // 定义P1.4口
sbit k1=P1^5;                  // 定义P1.5口
sbit k2=P1^6;                  // 定义P1.6口


void ShortDelay(void)
{ uchar x,y;
  for(x=0;x<5;x++)
     for(y=0;y<125;y++)
              _nop_();
  return;
}


void outclk(uint a)
{  uint i,j;

while(a--)
    { en=1;                  // 定义P1.0口
      rst=1;                 // 定义P1.1口
      if((k1&k2)!=0)         // K1,K2限位置判断
        {clk=1;
         for(i=150;i>0;i--)           //200
         for(j=150;j>0;j--);           //200
         clk=0;  
        }
      else {rst=1;en=0;}  
    }   

}

uchar  key(void)
{uchar key_num;

   if( ( P2 & 0x3f) != 0x3f )        //判断按键
   {
       ShortDelay();                //消除抖动
       if( ( P2 & 0x3f ) != 0x3f )
           {

          switch ( P2 & 0x3f )             //将按键码转换成键值
          {  
             case  0x3e: return  key_num=01;  
             case  0x3d: return  key_num=02;
             case  0x3b: return  key_num=03;
             case  0x37: return  key_num=04;
             case  0x2f: return  key_num=05;
             case  0x1f: return  key_num=06;
             default :   return  key_num=00;
          }
           }
          
   }
   return key_num;
}

  char code dx516[3] _at_ 0x003b;  
void main(void)
{ uchar b;

while(1)
{

   b= key();
   switch(b)
      {                //4步走1CM设定走5Cm 半应该是200的为了调整误差所以少4步 (10CM为多8步)
        case 00:rst=1;break;//0
        case 01:ccw=1; outclk(1);break;//1    右运动1步
        case 02:ccw=0; outclk(1);break;//2    左运动1步
        case 03:ccw=1; outclk(40);break;//3          右运动1CM
        case 04:ccw=0; outclk(40);break;//4   左运动1CM
        case 05:ccw=1; outclk(196);break;//5   右运动5CM
        case 06:ccw=0; outclk(196);break;//6  左运动5CM
        default:break;
          }
}
}


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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