找回密码
 注册
关于网站域名变更的通知
查看: 706|回复: 2
打印 上一主题 下一主题

51单片机控制舵机左右转源码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-18 10:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
51单片机控制舵机左右转源码
/ k! p( R; Y$ y1 L" P, k
8 v' F- Y, L+ S
; g% E6 }0 B" s3 p/ q% S5 ^) [7 I
下载:% J) Q* j1 {: ^1 M" |
游客,如果您要查看本帖隐藏内容请回复
( a& Z4 X7 `. [' E
8 y( F4 l8 ]- l" ]$ A; {1 @; l
  c" N( R( [6 z+ |
预览:
# R/ t( c2 ~' [2 s& ?" E/***********************************************************8 Q4 Y* {  Z6 }9 v
版权所有 :河池学院创新实训中心(2/3),刘欢(1/3)+ P. e8 t- [: P' S$ |; T2 T% T
程序功能 :舵机控制
7 o! ]( O) K( `# J- S生成日期 :2009年10月30日 星期五
$ x  e1 f7 _1 i4 {2 y7 r) \9 Z5 A作  者 :刘欢
% P) X7 L* k8 [) ?8 Z( ^/ c联系方式  :(QQ)281638360  (MSN)sundayboy@live.cn
4 c/ f3 W2 F! J( G4 j9 f说  明 :51单片机控制舵机,按键实现左转、右转及归位; e$ O- `) O0 d, A
            占用定时/计数器1
( O2 h2 h. K  i$ p$ q$ Z$ A9 @************************************************************/7 Q  b: r& s; o- d3 @& |
( m- V4 z/ ~7 T* @0 \
#include <reg52.h>
+ n+ M6 s) X" k- x) N( ^1 @#define Stop 0    //宏定义,停止6 s1 G! W2 S1 n% }
#define Left 1          //宏定义,左转3 `# P, L) e. o1 c
#define Right 2          //宏定义,右转, p, g9 P) A4 d1 D8 p. ]

, W" o$ u7 `# V
  L% z9 t' _% h2 Ksbit ControlPort = P1^0;  //舵机信号端口6 Y5 h; Q7 [2 n! \
sbit KeyLeft = P1^1;          //左转按键端口
5 p* A6 a2 M# g' g+ a) y2 j7 A# Xsbit KeyRight = P1^2;          //右转按键端口
( K' ^7 @  d0 p, xsbit KeyStop = P1^3;          //归位按键端口
% ^' \! U  J7 M% N, `* {; }. c
unsigned char TimeOutCounter = 0,LeftOrRight = 0;  //TimeOutCounter:定时器溢出计数          LeftOrRight:舵机左右旋转标志. b' i8 S5 o+ S5 f+ U7 {7 j
7 p% J8 l. C! E+ R8 r
void InitialTimer ( void )         
' f% |5 e# Y2 s2 v7 ^7 Q{
: z( V6 ^6 |! c1 I    TMOD=0x10;   //定时/计数器1工作于方式1# m7 @7 {0 B5 M4 X* s
    TH1 = ( 65535 - 500 ) / 256;          //0.25ms+ |3 C0 d+ `. v. b$ I; d( a( s
        TL1 = ( 65535 - 500 ) % 256;
3 G* m  M& J; ^% I" f3 E3 g2 f& q9 ^/ I    EA=1;        //开总中断
7 Z# Y) f8 L: t: t5 w    ET1=1;       //允许定时/计数器1 中断/ D7 ~" c+ D/ I7 {( R* D
    TR1=1;       //启动定时/计数器1 中断
9 [6 F* k* e0 r5 v0 J" ?  c' \6 a}; m3 u" p. h' t# X

" H! Y& W4 N: \3 S" c2 avoid ControlLeftOrRight ( void )   //控制舵机函数7 y8 ~; ~  X. i8 \0 Z
{
  z9 e( L. H4 v3 p  ~/ A8 v        if( KeyStop == 0 )
# C+ \6 S. `0 Z7 i4 b9 y5 r( o        {
& a7 w: Z. v" z, `$ N7 s                while ( !KeyStop );           //使标志等于Stop(0),在中断函数中将用到" l5 n1 q" z) [6 w4 n9 q9 N( H
                LeftOrRight = Stop;, S# x( S3 h; Q( V) d' e' Q# T
        }, h. n0 G. L7 Y; V! l, ?$ y: o

6 N* Q1 f9 M3 W7 Y/ C8 n        if( KeyLeft == 0 )
, K1 \& N/ t! M/ i9 r- `1 k" n        {
+ w" H- v1 ^! E- O) \) Q* X                while ( !KeyLeft );           //使标志等于Left(1),在中断函数中将用到  A: E1 c' _% {7 ?5 f% J5 c% z: a
                LeftOrRight = Left;
2 E# B; t" Z& Q2 a        }
. Q! G. E! Q: h; |+ B
* ~! I5 p9 j% L4 g& \        if( KeyRight == 0 )/ T! M: _% Y9 P& T- G# Y
        {' Y6 V6 F7 E2 ~. H/ R% x
                while ( !KeyRight );   //使标志等于Right(2),在中断函数中将用到
) u" I9 Q9 V1 z& M. C                LeftOrRight = Right;
) f& M3 `' c9 i$ V' x        }
, I8 @8 }  ?0 B+ e2 ~7 S0 D8 N; [
; r3 M" N$ J! `  y& q" E}+ E6 c5 u* ]" e

0 }* ^% I/ S# f( Rvoid main ( void )         //主函数
' k# A* R* G3 I; |{$ Y3 i1 C, X9 N" Q
    InitialTimer();
1 Q( X) }0 K3 u7 P5 Y        for(;;)# Z. T5 h; ~, @4 L9 E# G
        {: {- k; ~7 b& M' a0 \2 S& [
                ControlLeftOrRight();
1 D- _$ _  I+ ?9 H        }1 V) @6 {' S8 w# P& Q* l
}8 w- }, n- C3 C# g# Q6 z

) O1 E+ O7 l; \7 K$ ivoid Timer1 ( void ) interrupt 3  //定时器中断函数% J8 Q, C* p" H7 e$ D! z
{
3 Y& c7 h+ ~7 x' A3 q/ Q, p    TH1 = ( 65535 - 500 ) / 256;
2 R/ N  ]. H4 y6 x, [        TL1 = ( 65535 - 500 ) % 256;
4 w4 A" r( v9 S  r        TimeOutCounter ++;/ K) j/ W* C4 @3 K8 U" ?
4 f. k; c4 k5 U/ x
        switch ( LeftOrRight )
: n# `9 K7 U, {1 a# }. v        {
  D# K3 F) W+ P# n; n; J                case 0 :          //为0时,舵机归位,脉宽1.5ms! E, w+ f6 s7 {' o
                {
9 `+ P' d8 Z" H  |; X3 S; v3 x                        if( TimeOutCounter <= 6 )( V: M. \5 U/ ~- m5 B
                        {0 i2 p4 h& {$ U8 e
                                ControlPort = 1;
0 L5 w2 m4 z$ ^/ E* C                        }% t; Z/ p1 ^5 @0 p+ H3 C' m
                        else 1 ]/ [( k3 C7 [8 t' B
                        {
7 X9 ~3 c4 T( V; h) k0 E  V                                ControlPort = 0;
! N& Q+ m" p9 m) ]9 {. u$ B  m4 T                        }
. S/ J) P! `' m' _+ p                        break;
" b: H/ z- |" W5 i. L+ z" I                }
% N# n2 x8 E! `7 e8 ?- f                case 1 :     //为1时,舵机左转,脉宽1ms(理论值),实际可以调试得出
7 I5 a& @: S$ [& @/ u7 f                {  m: N$ w- s, Y7 Y
                        if( TimeOutCounter <= 2 )
3 q: S0 f7 c8 p4 E& w9 e                        {
( n+ s4 n1 B/ A$ W                                ControlPort = 1;
& x5 ~$ c  L5 |6 S                        }
  `4 |; `: p, @( ]6 y' S3 z! M                        else 2 r1 Q8 k% V2 [5 F! M! H
                        {
* P3 @- G3 o! {+ W# O                                ControlPort = 0;4 U! f$ W7 [$ W
                        }
' S0 ~5 m9 e; I/ e6 v( c                        break;
  V$ C. r% H6 M9 m) G: L                }
! {2 _, A7 K7 M/ o" Y                case 2 :   //为2时,舵机右转,脉宽2ms(理论值),实际可以调试得出
& A' D% t$ e! B3 _! o! }% p3 z                {  X7 ]' W* r' U4 D
                        if( TimeOutCounter <= 10 )9 F* b5 B+ h- _: I& Z
                        {$ P+ r9 E. W% p9 A. d" ~  ^+ ^
                                ControlPort = 1;
1 r% t7 F6 j" s                        }2 b' b, X; O- W. M( |1 R7 g
                        else
; \# o: Y3 r3 h. g) W' q                        {
! G/ @5 L' m7 f0 L  ^" q, G6 B& f6 U                                ControlPort = 0;( Q' w9 q8 O" t. ]4 I4 P
                        }% O0 `. Q* _( T5 x# ]- F
                        break;  K7 D' G/ v5 U' K# f  U9 v
                }
' M/ L: m6 _* j1 P# G2 C" {5 n                default : break;+ i! \3 b+ u+ @
        }8 z9 t' t0 X* E

3 l1 z$ w) P: X% b        if( TimeOutCounter == 80 )         //周期20ms(理论值),比较可靠,最好不要修改
6 ]/ E9 _0 p' m: Z6 E0 p        {
6 y8 j/ k7 q# m: K- d. z+ s  l                TimeOutCounter = 0;
# {( P( N2 S: s$ z        }
6 G* N& n% M/ Y& _4 T2 R' J+ w}
, s) h4 u) @& F- T
# S: F  C. S% s; C; H. b: m7 J

该用户从未签到

2#
发表于 2019-1-18 11:20 | 只看该作者
看看楼主的代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-19 14:34 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表