jacob_ 发表于 2010-3-11 17:49:40

发个舵机测试的51程序。

#include < reg51.h >
#include <intrins.h>



unsigned char code LED7Code[] = {~0x40,~0x79,~0x24,~0x30,~0x19,~0x12,~0x02,~0x78,~0x00,~0x10,~0x88};

unsigned char TIM0H;
unsigned char TIM0L;

unsigned int NUM;

void delay(unsigned int i);

sbit K1=P2^7;                //++
sbit K2=P2^6;                //--
//P0 口为 PPM 舵机信号输出
//P1 口接1位数码管输出


/*********************************************************
主函数
**********************************************************/
voidmain()
{


                TMOD=0x11;

            TH1=0xb1;
            TL1=0xe0;   
   
                        EA=1;
   
                ET1=1;       //允许定时/计数器1 中断
               TR1=1;       //启动定时/计数器1 中断

               TH0=0xfa;               //1.5ms定时               
               TL0=0x24;
       
                ET0=1;
            TR0=1;
               
                NUM=1500;

            while(1)
                        {       

                                if(K1==0)
                                        {
                                                delay(5);
                                                if(K1==0) NUM++;
                                                if(NUM>=2000)NUM=2000;
                                        }

                                if(K2==0)
                                        {
                                                delay(5);
                                                if(K2==0) NUM--;
                                                if(NUM<=1000)NUM=1000;
                                        }

                                P1=~LED7Code[((NUM-1000)/100)];

                                TIM0H=((65536-NUM)/256);
                                TIM0L=((65536-NUM)%256);
                       

                        }
}


/*********************************************************
中断服务函数
**********************************************************/
void Time1(void) interrupt 3
        {
           TH1=0xb1;               //20ms定时               
           TL1=0xe0;
           P0=~P0;
   
                TR0=1;

        }

void Time0(void) interrupt 1

{
       

        TH0=TIM0H;
        TL0=TIM0L;
        P0=~P0;

                TR0=0;


}

void delay(unsigned int i)
{
    char j;
    for(i; i > 0; i--)
      for(j = 200; j > 0; j--);
}

jacob_ 发表于 2010-3-11 17:53:54

初入模型,买了个舵机和电调。每次运行都要用遥控器,感觉麻烦。网上找了找。买个舵机测试器要近50块。网上找的时候,说就是一个单片机。呵呵。就买了一个单片机,功能还多多。以前一直不知道单片机时什么东东。正好买来学习。这是学单片机1个星期的成果。:)。还是比较简单的程序。大家指教。

feixingxia 发表于 2010-3-20 23:12:59

回复【1楼】jacob_
-----------------------------------------------------------------------

请楼主发个电路说明应用,供大家学习

jacob_ 发表于 2010-3-23 18:08:54

这个你用个51的最小系统板就可以了。唯一要说明的是晶振是12Mhz的。如果不是12Mhz,一些参数要改一下。

外围电路就下面这些。

P2口,接按键

sbit K1=P2^7; //++
sbit K2=P2^6; //--
//P0 口为 PPM 舵机信号输出
//P1 口接1位数码管输出

很简单

数码管可以不要。对系统没有任何影响,就是不太直观。

highnose 发表于 2010-3-23 18:15:28

请问,分辩率有多少啊?

jacob_ 发表于 2010-3-25 13:46:27

1ms-2ms 步进为1ns,1000步 1/1000的分辨率。

wuxin999 发表于 2010-4-7 23:00:00

留个记号,以后再看

sky_walker 发表于 2010-4-7 23:23:18

支持下吧

n44303 发表于 2010-5-22 20:44:23

留下记号。

woshinlb 发表于 2010-8-26 23:15:13

怎么个测试法,或者,测试原理

zhenhuah 发表于 2011-1-15 17:51:56

mark

Aluken 发表于 2011-2-16 23:46:53

很实用啊!!感谢!!!

myem007 发表于 2011-3-15 20:41:39

你这个P0口怎么定义的呀,程序没说明?

dalong 发表于 2011-3-21 13:01:47

顶一下

jacob_ 发表于 2011-4-4 21:47:41

回复【8楼】n44303
-----------------------------------------------------------------------

P0口接舵机信号输入,按++,--就可以控制了

jacob_ 发表于 2011-4-4 21:48:59

回复【12楼】myem007
-----------------------------------------------------------------------

//P0 口为 PPM 舵机信号输出

jacob_ 发表于 2011-4-4 21:49:49

回复【8楼】n44303
-----------------------------------------------------------------------

用51单片机模拟PPM信号,关于遥控器的PPM信号。可以百度一下。有介绍的。

sherlockljt 发表于 2011-4-23 00:12:09

mark
页: [1]
查看完整版本: 发个舵机测试的51程序。