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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51单片机控制舵机左右转源码* O% E5 ?5 f6 [4 ?8 G; i
+ `7 m2 K2 M( \7 L: i/ H

# j: g; ^! a9 r. h* u; }下载:
6 C& b  P- M; c
游客,如果您要查看本帖隐藏内容请回复
1 w. c8 b0 s; ~, _- q/ H( x# T
2 Q- e, e* l! P  F8 E
5 ?1 `9 A8 I, ^) [; C- N+ M6 v$ M
预览:
5 e' W2 |! @; ~5 p- @+ n3 `/***********************************************************
% h# A; L% b% N4 B4 g1 g" q版权所有 :河池学院创新实训中心(2/3),刘欢(1/3); z$ Q, O0 D: p6 i/ e
程序功能 :舵机控制0 c; Z  s# A3 o: A4 E' A: E
生成日期 :2009年10月30日 星期五  J0 E, c% Y; ~7 F( v- W# i
作  者 :刘欢
6 }! n0 M& T7 c7 s0 _联系方式  :(QQ)281638360  (MSN)sundayboy@live.cn8 @0 |4 E6 h7 l5 a/ c" y8 o8 p* f
说  明 :51单片机控制舵机,按键实现左转、右转及归位
" _; D8 |6 v6 Y' W/ b/ `1 o            占用定时/计数器1
: A% s; n5 P! y************************************************************/4 ~  d. M* U3 z# Z; m2 F

& Z- [) p7 U( t#include <reg52.h>
7 ?8 j  A/ q% b6 D; b$ M#define Stop 0    //宏定义,停止
2 L' Y* Y; E( u& N+ w) i#define Left 1          //宏定义,左转
+ M: ~9 s; {/ j6 ]6 U( k& x3 `3 Q  f#define Right 2          //宏定义,右转
: U3 G6 a: K: T% E! }1 r' ^9 x9 [9 `
: b* G1 G2 Z( C( A1 a7 W/ b; n! T9 Q" m" X% c7 x4 _
sbit ControlPort = P1^0;  //舵机信号端口
+ R0 D( h7 p  k# T$ b) r& Lsbit KeyLeft = P1^1;          //左转按键端口
5 p' t  w) L/ v4 U+ L: G- Usbit KeyRight = P1^2;          //右转按键端口, L& S7 b2 _3 i# C+ v) E& c  Q
sbit KeyStop = P1^3;          //归位按键端口
( u. F4 M1 ?% B1 l6 H' a3 V. E& o: s! i6 H0 S% W# P
unsigned char TimeOutCounter = 0,LeftOrRight = 0;  //TimeOutCounter:定时器溢出计数          LeftOrRight:舵机左右旋转标志4 O8 p: Y  p& J" ?$ }0 n* }

7 Z; L: g9 S( Evoid InitialTimer ( void )         
# \: k/ n% Q9 ?; |) q) j- f{& x& l6 p4 F$ L$ t
    TMOD=0x10;   //定时/计数器1工作于方式1, z) g& w. A7 N) H1 S2 Y
    TH1 = ( 65535 - 500 ) / 256;          //0.25ms) e  {* X3 p, R
        TL1 = ( 65535 - 500 ) % 256;
) ]9 c: ^: ?- l2 A( S0 p    EA=1;        //开总中断
2 K% O8 _6 v8 l, u$ U$ d    ET1=1;       //允许定时/计数器1 中断# J  A! ^) V8 X$ ]# \5 O
    TR1=1;       //启动定时/计数器1 中断# m9 \! H9 b) O9 |4 \
}  A3 G/ T- M) K

, L2 r- O3 [1 X2 Y8 I7 uvoid ControlLeftOrRight ( void )   //控制舵机函数9 V" S$ K2 C, w5 o( R) `7 q
{; T: F/ Q, b( _1 l2 ^  R
        if( KeyStop == 0 )# D* k) z1 ~+ p" i; W$ J/ o
        {" i. n( @1 d* i; t$ J% k
                while ( !KeyStop );           //使标志等于Stop(0),在中断函数中将用到( z* ]0 z- K& [' W0 k
                LeftOrRight = Stop;" f( t! u+ ]  @5 O; ]& I0 U* ~
        }
- h, v* |+ [+ O- l' H( M9 }
! ]: [0 h  s3 u5 N2 q0 e" f        if( KeyLeft == 0 )+ c: _! x) x9 x
        {# N$ T3 E: y' M2 r. ]: V
                while ( !KeyLeft );           //使标志等于Left(1),在中断函数中将用到1 v1 a: q( e' b
                LeftOrRight = Left;
3 c/ L2 T$ S6 ?- O1 Q/ D; V: a4 d. M        }
" e7 @# H3 k5 w" F
  S/ s2 S! }0 x' M4 g$ T0 `        if( KeyRight == 0 )" W$ @0 u! y: V* ?3 `$ [: p5 s
        {
' D- a2 ^( a, O6 |4 B1 R% k                while ( !KeyRight );   //使标志等于Right(2),在中断函数中将用到8 G, \; @' v, S# ]8 y# {
                LeftOrRight = Right;
2 ?2 G. ^$ }$ @: J3 w4 V, Y! E        }
8 D0 t8 t0 B8 j5 W; z2 j7 r: Q1 R6 M9 o* \9 V9 V
}
1 d% ?) H1 z# W& r0 t, K& n6 ?0 r+ m( r
void main ( void )         //主函数) l7 s9 O2 j# l
{
2 _0 o8 p4 ^+ p    InitialTimer();9 j% O6 H6 ?! \( U2 v2 ^4 O
        for(;;)5 w0 e! P& ]: {0 Z# p. F
        {6 z$ @/ ]: X' M
                ControlLeftOrRight();
; E' z- @+ P: m1 G* H- j        }1 J) s( ?: K! N. U3 t0 r
}
' o7 T! y0 b  ^5 s4 |
# Q4 j2 x8 I& P2 c4 }5 Rvoid Timer1 ( void ) interrupt 3  //定时器中断函数
2 r* W0 `$ E, s3 w) P{' W' m  j# A) p; G4 u8 y
    TH1 = ( 65535 - 500 ) / 256;6 M- q5 \8 x' e% T% ~
        TL1 = ( 65535 - 500 ) % 256;
5 j* |1 Z0 V# d( ]  w6 d: D        TimeOutCounter ++;
+ ^# s9 l8 Y, n0 L$ m  F8 ~
+ x  O  v  ?+ O& \9 b: ~9 x4 P+ ^        switch ( LeftOrRight )
( k# R3 e0 i6 h* M$ a        {& M$ x, ^' @: j5 f( f
                case 0 :          //为0时,舵机归位,脉宽1.5ms
3 S9 D5 k; E& t& D7 ~                {7 v( u; F; }, r6 M
                        if( TimeOutCounter <= 6 )1 G+ l  t! f7 i2 U0 c7 [
                        {- w" ^8 S+ j! d
                                ControlPort = 1;
+ b; W  P- x9 ^+ v                        }' Y" W; \' N6 s7 f3 ~( k: j% L
                        else
" Q% x4 v# [! A; a1 ^2 l3 z/ M                        {$ n) j# G/ U: D8 I9 v
                                ControlPort = 0;
- n! w- ~! u# ?, \+ V! B                        }4 K0 m* D( I3 n6 W; X$ f) F. @
                        break;4 O  g1 n2 g7 p0 E
                }
2 V6 }, U; Q1 _3 C                case 1 :     //为1时,舵机左转,脉宽1ms(理论值),实际可以调试得出9 J! T) t- i9 p- F
                {- A, O: K, W( S. f9 x$ A2 b$ r
                        if( TimeOutCounter <= 2 )) X9 ?& v6 w2 Q! I/ i2 ^8 }! ?& V
                        {* m, @& z3 H, B* r: {
                                ControlPort = 1;
; e; F8 R% o+ w9 F                        }
# s/ J% Z/ N) i3 r- {1 R4 W                        else ' s: o$ q% [0 b9 N1 T0 {) K
                        {
/ Q5 |& {% e; U9 b                                ControlPort = 0;* _$ J0 P2 \7 o4 K; f
                        }
" |1 ~. ?' `  h: K. J7 J* t                        break;$ g6 Z" h* X0 C  P+ o
                }- s0 L3 i5 {9 c2 y/ c
                case 2 :   //为2时,舵机右转,脉宽2ms(理论值),实际可以调试得出
- c* V: b4 b9 o5 o                {2 L+ V( C4 Y3 I; V& ^
                        if( TimeOutCounter <= 10 )
$ n2 }. z" x; m6 r& ~" x; q                        {& _9 i& S0 _6 D* j
                                ControlPort = 1;
& R: d+ N. P9 c( q+ e/ }* m" t                        }, w; L+ O3 q$ O* S2 T
                        else 9 n1 g, {! T2 T! j) t; |; b8 U
                        {$ y& b, C4 p5 d, ~
                                ControlPort = 0;3 V$ Z5 z* ^; x
                        }9 r2 I9 W) m6 W8 F* d; y
                        break;
: b4 }2 p8 F0 H- G9 T  W# Z                }
4 i8 X5 L- Z; x4 J" y                default : break;! U0 ?/ r1 \* e; W) R
        }8 S8 L! }( P" E2 j& X/ H, P

, C" }: ^7 c+ Y/ `' L- t5 D        if( TimeOutCounter == 80 )         //周期20ms(理论值),比较可靠,最好不要修改
, L( l% y) s  O8 W        {4 F, k% A; Y3 @/ Q
                TimeOutCounter = 0;$ V* P+ u; F+ l9 T7 S
        }
$ B+ x5 Q6 x/ o3 b2 h. @( P$ ?}
+ k+ n3 e" p  _+ Y) L7 `7 {9 [/ w
" N. t# M" T4 q' p0 {5 f

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-31 01:39 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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