历史上的今天
今天是: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; } }
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 请大家继续追加、我会整理出清单。 一、国内TV DESIGN HOUSE: 上海这边的有全景、 奇普、英诺、pixelworks、 trident、ST、高清、 天柏、复旦微电子、先锋、上广电、大亚、戎讯、协和、华 ...… 查看全部问答> |
|
目前我在uboot中增加了一个fat32分区,现在总共一个binfs分区,一个1m的fat32分区,剩下的就为另一个fat32分区。在系统起来后存储管理器的属性中能看到part00,part01,part*02。第一个是binfs分区,后两个为fat分区,感觉part01好象没有mount上, ...… 查看全部问答> |
|
在EasySys中,在内核用了一个MessageBox,系统蓝屏了,哦也.. 在内核模式可以调用win32api吗?为什么可以/不可以? 另外,有没有关于内核函数的查阅文档?最好是chinese..谢谢… 查看全部问答> |
|
以前一直是做应用软件,很少接触到工控这块。PLC仪器是omron SYSMAC CPM2AH,通过RS232串口连接通讯,目前我这只有一些地址表(比如00011、00100、00102、01307)等等,我看了网络上的说明只明白大致获取、写入状态命令格式,其他的大致不知道怎样 ...… 查看全部问答> |
|
开发板是 pxa310 handheld platform development kit 烧写软件是用 marvell(R)XDB JTAG Debugger(SDT2.1) 在烧写中出现的错误是: Executing Initialization Script... Downloading burn algorithm to the target... Error: Operation failed! ...… 查看全部问答> |
|
在很多项目中我们都需要菜单,特别是多层菜单应用比较广泛,但是写一个能够很方便移植的多层菜单非常麻烦,我们这里就先研究一下单层菜单的翻滚的实现方式。 下面就以一个例子来说明此菜单的具体实现方法: 1. 假设本菜单使用在1 ...… 查看全部问答> |




