多舵机控制程序.docx

上传人:b****6 文档编号:7445861 上传时间:2023-01-24 格式:DOCX 页数:8 大小:15.40KB
下载 相关 举报
多舵机控制程序.docx_第1页
第1页 / 共8页
多舵机控制程序.docx_第2页
第2页 / 共8页
多舵机控制程序.docx_第3页
第3页 / 共8页
多舵机控制程序.docx_第4页
第4页 / 共8页
多舵机控制程序.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

多舵机控制程序.docx

《多舵机控制程序.docx》由会员分享,可在线阅读,更多相关《多舵机控制程序.docx(8页珍藏版)》请在冰豆网上搜索。

多舵机控制程序.docx

多舵机控制程序

多舵机控制程序

/*

*Copyright(c)2009,jinzhikai

*Allrightsreserved.

*  

*文件名称:

多舵机.c

*文件标识:

舵机

*摘   要:

8舵机控制,8路舵机初始脉冲分别是1ms,,....

*采用C52芯片,C52基本电路。

*当前版本:

*作   者:

*完成日期:

2009年3月10日

*

*取代版本:

   

*原作者  :

jinzhikai

*完成日期:

2009年3月4日

*

*/

#include<>

#defineuintunsignedint

#defineucharunsignedchar

sbitledlk=P1^0;

sbitsmglk=P1^1;

sbitsmgbitlk=P1^2;

 

sbitdj0=P2^0;        /*设置舵机信号输出端口*/

sbitdj1=P2^1;

sbitdj2=P2^2;

sbitdj3=P2^3;

sbitdj4=P2^4;

sbitdj5=P2^5;

sbitdj6=P2^6;

sbitdj7=P2^7;

    tha0=(65535-1000)/256;                    /*设置tha0代表TH0初值,0代表第一号舵机,a代表高电平,b代表低电平*/

    tla0=(65535-1000)%256;

    thb0=(65535-(20000-1000))/256;

    tlb0=(65535-(20000-1000))%256;

    tha1=(65535-1100)/256;

    tla1=(65535-1100)%256;

    thb1=(65535-(20000-1100))/256;

    tlb1=(65535-(20000-1100))%256;

    tha2=(65535-1200)/256;

    tla2=(65535-1200)%256;

    thb2=(65535-(20000-1200))/256;

    tlb2=(65535-(20000-1200))%256;

    tha3=(65535-1300)/256;

    tla3=(65535-1300)%256;

    thb3=(65535-(20000-1300))/256;

    tlb3=(65535-(20000-1300))%256;

    tha4=(65535-1400)/256;

    tla4=(65535-1400)%256;

    thb4=(65535-(20000-1400))/256;

    tlb4=(65535-(20000-1400))%256;

    tha5=(65535-1500)/256;

    tla5=(65535-1500)%256;

    thb5=(65535-(20000-1500))/256;

    tlb5=(65535-(20000-1500))%256;

    tha6=(65535-1600)/256;

    tla6=(65535-1600)%256;

    thb6=(65535-(20000-1600))/256;

    tlb6=(65535-(20000-1600))%256;

    tha7=(65535-1700)/256;

    tla7=(65535-1700)%256;

    thb7=(65535-(20000-1700))/256;

    tlb7=(65535-(20000-1700))%256;

uchardj_set(uchardj_num,uchardp,uchari)    /*设置dj_set函数,确定选择计数器初值,dj_num表示舵机号,dp表示电平,i为1等于TH0初值,i为0等于TL0初值*/

{    

    if(dp)

    {    if(i)

            switch(dj_num)

            {

                case'0':

                return(tha0);

                break;

                case'1':

                return(tha1);

                break;

                case'2':

                return(tha2);

                break;

                case'3':

                return(tha3);

                break;

                case'4':

                return(tha4);

                break;

                case'5':

                return(tha5);

                break;

                case'6':

                return(tha6);

                break;

                case'7':

                return(tha7);

                break;

            }

        else

            switch(dj_num)

            {

                case'0':

                return(tla0);

                break;

                case'1':

                return(tla1);

                break;

                case'2':

                return(tla2);

                break;

                case'3':

                return(tla3);

                break;

                case'4':

                return(tla4);

                break;

                case'5':

                return(tla5);

                break;

                case'6':

                return(tla6);

                break;

                case'7':

                return(tla7);

                break;

            }

        

    }

    else

    {    if(i)

            switch(dj_num)

            {

                case'0':

                return(thb0);

                break;

                case'1':

                return(thb1);

                break;

                case'2':

                return(thb2);

                break;

                case'3':

                return(thb3);

                break;

                case'4':

                return(thb4);

                break;

                case'5':

                return(thb5);

                break;

                case'6':

                return(thb6);

                break;

                case'7':

                return(thb7);

                break;

            }

        else

            switch(dj_num)

            {

                case'0':

                return(tlb0);

                break;

                case'1':

                return(tlb1);

                break;

                case'2':

                return(tlb2);

                break;

                case'3':

                return(tlb3);

                break;

                case'4':

                return(tlb4);

                break;

                case'5':

                return(tlb5);

                break;

                case'6':

                return(tlb6);

                break;

                case'7':

                return(tlb7);

                break;

            }

    }        

}

 

voidmain()

{

    uchardj_num=0;

    ucharhl=1;

    ledlk=0;

    smglk=0;

    smgbitlk=0;

    ET0=1;

    ET1=1;

    EA=1;

    TMOD=0x01;                                /*选择0号计时器,16位计时器*/

    

    TR0=1;

    TR1=1;

    TH0=(65535-1000)/256;

    TL0=(65535-1000)%256;

    while

(1)

    {    for(dj_num=0;dj_num<8;)

        {

            while(TF0)                        /*发生中断循环*/

            {

                if(!

hl)                        /*判断低电平中断,换舵机端口*/

                {

                dj_num++;

                }

                switch(dj_num)                /*按照舵机号,相应端口置反*/

                {

                    case'0':

                    dj0=!

dj0;

                    case'1':

                    dj1=!

dj1;

                    case'2':

                    dj2=!

dj2;

                    case'3':

                    dj3=!

dj3;

                    case'4':

                    dj4=!

dj4;

                    case'5':

                    dj5=!

dj5;

                    case'6':

                    dj6=!

dj6;

                    case'7':

                    dj7=!

dj7;

                }

                hl=!

hl;

                TH0=dj_set(dj_num,hl,1);    /*调用dj_set()函数设置计时器初值*/

                TL0=dj_set(dj_num,hl,0);

                TF0=0;                        /*清除中断*/

            }

        }

    }

}

编写了一个多舵机控制程序,不知道能否应用,有示波器的朋友帮忙测试一下。

感谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1