历史上的今天
返回首页

历史上的今天

今天是:2024年10月15日(星期二)

正在发生

2019年10月15日 | 51单片机按键控制舵机

2019-10-15 来源:eefocus

#include

#define Stop 0    //宏定义,停止

#define Left 1      //宏定义,左转

#define Right 2      //宏定义,右转



sbit ControlPort = P1^0;  //舵机信号端口

sbit KeyLeft = P1^1;      //左转按键端口

sbit KeyRight = P1^2;      //右转按键端口

sbit KeyStop = P1^3;      //归位按键端口


unsigned char TimeOutCounter = 0,LeftOrRight = 0;  //TimeOutCounter:定时器溢出计数      LeftOrRight:舵机左右旋转标志


void InitialTimer ( void )     

{

    TMOD=0x10;   //定时/计数器1工作于方式1

    TH1 = ( 65535 - 500 ) / 256;      //0.25ms

    TL1 = ( 65535 - 500 ) % 256;

    EA=1;        //开总中断

    ET1=1;       //允许定时/计数器1 中断

    TR1=1;       //启动定时/计数器1 中断

}


void ControlLeftOrRight ( void )   //控制舵机函数

{

    if( KeyStop == 0 )

    {

        while ( !KeyStop );       //使标志等于Stop(0),在中断函数中将用到

        LeftOrRight = Stop;

    }


    if( KeyLeft == 0 )

    {

        while ( !KeyLeft );       //使标志等于Left(1),在中断函数中将用到

        LeftOrRight = Left;

    }


    if( KeyRight == 0 )

    {

        while ( !KeyRight );   //使标志等于Right(2),在中断函数中将用到

        LeftOrRight = Right;

    }


}


void main ( void )     //主函数

{

    InitialTimer();

    for(;;)

    {

        ControlLeftOrRight();

    }

}


void Timer1 ( void ) interrupt 3  //定时器中断函数

{

    TH1 = ( 65535 - 500 ) / 256;

    TL1 = ( 65535 - 500 ) % 256;

    TimeOutCounter ++;


    switch ( LeftOrRight )

    {

        case 0 :      //为0时,舵机归位,脉宽1.5ms

        {

            if( TimeOutCounter <= 6 )

            {

                ControlPort = 1;

            }

            else 

            {

                ControlPort = 0;

            }

            break;

        }

        case 1 :     //为1时,舵机左转,脉宽1ms(理论值),实际可以调试得出

        {

            if( TimeOutCounter <= 2 )

            {

                ControlPort = 1;

            }

            else 

            {

                ControlPort = 0;

            }

            break;

        }

        case 2 :   //为2时,舵机右转,脉宽2ms(理论值),实际可以调试得出

        {

            if( TimeOutCounter <= 10 )

            {

                ControlPort = 1;

            }

            else 

            {

                ControlPort = 0;

            }

            break;

        }

        default : break;

    }

    

    if( TimeOutCounter == 80 )     //周期20ms(理论值),比较可靠,最好不要修改

    {

        TimeOutCounter = 0;

    }

}


推荐阅读

史海拾趣

创都(CAX)公司的发展小趣事

除了技术创新外,创都公司还以其精准的市场策略著称。在电子产品更新换代日益加快的背景下,公司市场部门深入分析了消费者的需求和市场趋势,成功预测了未来一段时间内的产品走向。基于这些分析,创都公司提前布局,推出了多款符合市场趋势的新产品。这些产品不仅满足了消费者的需求,还引领了市场潮流,为公司带来了丰厚的利润。此外,创都公司还积极开展品牌推广活动,通过线上线下多种渠道提升品牌知名度,进一步巩固了市场地位。

Fractus公司的发展小趣事

1999年,Carles Puente博士和Ruben Bonet联合创立了Fractus公司,致力于将几何结构天线技术商业化。公司成立之初便取得了重大突破,获得了全球首个分形天线和多重分形天线专利。这些专利不仅展示了Fractus在天线设计领域的领先地位,也为公司后续的发展奠定了坚实的技术基础。

E-Switch公司的发展小趣事

在E-Switch的发展历程中,品质一直是公司最为重视的方面之一。公司始终坚持严格的质量管理体系,从原材料采购到生产流程控制,再到产品出厂检验,每一个环节都严格把关。正是这种对品质的执着追求,让E-Switch的产品在市场上赢得了良好的口碑。

Adam Tech公司的发展小趣事

Adam Tech公司成立于1987年,总部位于美国新泽西州。创业初期,公司面临着资金短缺、市场竞争激烈等诸多困难。然而,创始人凭借对电子连接器行业的深刻理解和执着追求,带领团队克服重重困难,逐渐在市场上站稳脚跟。公司最初的产品线相对单一,但凭借着高品质和可靠的性能,逐渐赢得了客户的信任。

胜利(VICTOR)公司的发展小趣事

1968年,胜利公司(VICTOR)在台湾创立,创始人李明怀揣着对羽毛球运动的热爱和对品质的执着,决定进入羽毛球用品制造行业。他带领团队克服技术难关,不断研发新产品,逐渐在市场上崭露头角。

General Semiconductor ( Vishay )公司的发展小趣事

面对电子行业的高度周期性和市场波动,Vishay凭借其强大的技术实力、丰富的产品线和灵活的市场策略,始终保持在行业内的领先地位。公司通过持续的技术创新、成本优化和“一站式”服务,赢得了广大客户的信赖和支持。即使在行业低迷时期,Vishay也能保持稳定的增长和发展。如今,Vishay已成为全球最大的分立半导体和被动元件制造商之一,其产品和服务广泛应用于工业、计算机、汽车、消费品、电信、军事、航空和医药等多个领域。

问答坊 | AI 解惑

国内designhouse清单

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 请大家继续追加、我会整理出清单。 一、国内TV DESIGN HOUSE: 上海这边的有全景、 奇普、英诺、pixelworks、 trident、ST、高清、 天柏、复旦微电子、先锋、上广电、大亚、戎讯、协和、华 ...…

查看全部问答>

LED魔术摇棒设计

本帖最后由 paulhyde 于 2014-9-15 09:06 编辑 在网上找到的一个设计任务,大家一起来讨论一下啊! 1.设计任务 设计一个LED魔术摇棒。 2.设计要求 (1)系统供电:2节AA电池; (2)CPU:采用MCS-51系列单片机89C2051; (3)显示组成: ...…

查看全部问答>

国赛无线类题目合集

本帖最后由 paulhyde 于 2014-9-15 04:13 编辑 国赛无线类题目合集  …

查看全部问答>

请教wince 中的多fat32分区问题

目前我在uboot中增加了一个fat32分区,现在总共一个binfs分区,一个1m的fat32分区,剩下的就为另一个fat32分区。在系统起来后存储管理器的属性中能看到part00,part01,part*02。第一个是binfs分区,后两个为fat分区,感觉part01好象没有mount上, ...…

查看全部问答>

内核模式可以调用win32api吗?

在EasySys中,在内核用了一个MessageBox,系统蓝屏了,哦也.. 在内核模式可以调用win32api吗?为什么可以/不可以? 另外,有没有关于内核函数的查阅文档?最好是chinese..谢谢…

查看全部问答>

小问题,大分贴,PLC通讯基础问题!

以前一直是做应用软件,很少接触到工控这块。PLC仪器是omron SYSMAC CPM2AH,通过RS232串口连接通讯,目前我这只有一些地址表(比如00011、00100、00102、01307)等等,我看了网络上的说明只明白大致获取、写入状态命令格式,其他的大致不知道怎样 ...…

查看全部问答>

大侠救命,关于pxa310 eboot烧写问题!

开发板是 pxa310 handheld platform development kit 烧写软件是用 marvell(R)XDB JTAG Debugger(SDT2.1) 在烧写中出现的错误是: Executing Initialization Script... Downloading burn algorithm to the target... Error: Operation failed! ...…

查看全部问答>

利用单片机10位AD采集温度?

用的10k温度传感器,怎么编程会取得比较准确的温度。…

查看全部问答>

LED数码管的安装

主要材料:LED护栏灯;护栏灯安装卡子,防水变压器,LED护栏灯主控器,LED护栏灯分控器, 辅助材料:公 母插头,超五类网线,两芯电源线,自攻螺丝,胶粒等 LED外控护栏灯安装步骤: 第一步:先将LED护栏灯安装到墙体上:在墙体上打孔,装膨胀螺 ...…

查看全部问答>

LCD单层菜单翻滚的实现

在很多项目中我们都需要菜单,特别是多层菜单应用比较广泛,但是写一个能够很方便移植的多层菜单非常麻烦,我们这里就先研究一下单层菜单的翻滚的实现方式。   下面就以一个例子来说明此菜单的具体实现方法:   1. 假设本菜单使用在1 ...…

查看全部问答>