本帖最后由 tangchop 于 2011-6-30 13:26 编辑
上午没事,找了段c改了下。精密合页也送到了,一分钱一分货,负重可以40kg,手上感觉转动没有缝隙!很好,就等明天木板出来了。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P3^2;//按键二启动正转
sbit k2=P3^3;//按键三启动反转
sbit k3=P3^4;//按键三停止
uchar code ffw[4]={0x02,0x04,0x08,0x10}; //反转
uchar code rfw[4]={0x10,0x08,0x04,0x02}; //正转
void delay(unsigned int i)//延时
{
while(--i);
}
void motor_ffw()
{
uchar i;
uchar j;
for(i=0;i<2880;i++)//丝杆转120mm2个钟头
{
if(k3==0)
break;
for(j=0;j<4;j++)
{
P1=ffw[j];
delay(575);//这个参数C下面不准,汇编很准,但是不会调用,实际不断调试,目前45分钟误差1分钟内
}
}
}
void motor_rfw()
{
uchar i;
uchar j;
for(i=0;i<2880;i++)
{
if(k3==0)
break;
for(j=0;j<4;j++)
{
P1=rfw[j];
delay(300);//这个数字故意让反转加速,网上看到一段改进漂移对极轴方法,用照相镜头在赤道仪关闭时拍一段星轨,然后同样条件下打开赤道仪拍一段星轨,中天和东西地平各一次,对比星轨是否重合可以精确判断极轴位置。
}
}
}
void main()
{
uchar r,n=64;//这段没看懂,可能和最有一句电平置为首位有关,这个数字我试其他不行,得是一圈步锯角个数的整倍数。
while(1)
{
if(k1==0)
{
for(r=0;r<n;r++)
{
motor_ffw();
if(k3==0)
break;
}
}
else if(k2==0)
{
for(r=0;r<n;r++)
{
motor_rfw();
if(k3==0)
break;
}
}
else
P1=0xfe;
}
} |