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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51单片机控制舵机左右转源码
% \! h1 p8 V6 G( j9 u
  C- e& K6 T( j; I, k3 n( K

( C& `$ k/ \9 r3 N  y& g% Q下载:
: h% e6 S7 p0 ]$ s8 u3 X
游客,如果您要查看本帖隐藏内容请回复

5 C% {( C+ ^: B, e$ |. C7 z: m" z# v3 p4 Y  J& X
. o) t  v/ }% P
预览:
0 W/ g1 k( {( d9 f2 ?/***********************************************************
2 C1 z% S6 t; a# ]. G6 x版权所有 :河池学院创新实训中心(2/3),刘欢(1/3)% w0 _0 `9 k0 \3 Y/ o) _
程序功能 :舵机控制
4 w" K2 K: `0 g生成日期 :2009年10月30日 星期五
7 E% d9 g  x+ `3 u: F" M) e作  者 :刘欢
1 R+ {0 X$ E5 w3 C, @& @联系方式  :(QQ)281638360  (MSN)sundayboy@live.cn% Y4 v) x/ k) c; L! j( A
说  明 :51单片机控制舵机,按键实现左转、右转及归位7 m8 n& C# h; p9 ~! C1 w2 S! j' A
            占用定时/计数器1
0 D! R& C7 x  M# V************************************************************/
0 n* D6 j6 j# Q9 {& x( n0 t& o% m$ }% n, u! M1 H; _4 u/ j# L; H
#include <reg52.h>
8 J9 f' c6 k' ]! ?& e% A. D#define Stop 0    //宏定义,停止3 J9 Y3 b( @5 S. d9 _) G  m+ c4 R
#define Left 1          //宏定义,左转
' l5 w0 x- T! l! X/ t, ^#define Right 2          //宏定义,右转7 N- L2 b' O: ?( @1 W  a9 H
. o- I7 O& s4 H) s4 V. ~

4 l5 b, I2 b. M+ k9 a( zsbit ControlPort = P1^0;  //舵机信号端口* _! E# ?# j) a& ]4 Q' i5 T% }$ r
sbit KeyLeft = P1^1;          //左转按键端口: ?  X, ]( k" i
sbit KeyRight = P1^2;          //右转按键端口
) r( z+ q0 t+ r- Zsbit KeyStop = P1^3;          //归位按键端口. Z/ V- l- w" I5 q

5 d4 Q. z  Z$ W7 l( Bunsigned char TimeOutCounter = 0,LeftOrRight = 0;  //TimeOutCounter:定时器溢出计数          LeftOrRight:舵机左右旋转标志, O2 a& ]& L- ]4 e* \$ b7 S$ Y

+ B# e# a$ {( w/ c0 X' N0 O# Vvoid InitialTimer ( void )         
1 Y( w+ q+ s2 P3 Y: F2 [* Z{
2 D; a9 C% l7 p8 J    TMOD=0x10;   //定时/计数器1工作于方式1
; ]7 V: a0 f( ]. }    TH1 = ( 65535 - 500 ) / 256;          //0.25ms
3 D7 z: h* ~$ @0 P" E7 [0 W        TL1 = ( 65535 - 500 ) % 256;/ K/ p* K$ q! |/ i
    EA=1;        //开总中断
4 ^3 t+ `3 M/ a    ET1=1;       //允许定时/计数器1 中断8 `: A- ^, u. H/ a, p
    TR1=1;       //启动定时/计数器1 中断
) q. w5 k+ w  h. o}
. `7 G4 ?! m9 r7 o2 f5 O: w6 B) k: ~8 Y) t$ [% n
void ControlLeftOrRight ( void )   //控制舵机函数
5 S/ w' m" H0 t5 @. E4 n) v{+ k% O5 A. o# u( k( N) _
        if( KeyStop == 0 )
/ r4 S" Y, J8 V: F7 F        {
9 {3 V3 d' Z& \                while ( !KeyStop );           //使标志等于Stop(0),在中断函数中将用到
! M$ P: O+ q9 V' F4 J; j                LeftOrRight = Stop;
- i# }+ |& C( L" n1 _$ t7 m        }
& X# @8 `) N8 G8 z3 K; D2 O
8 e9 ^9 _& g5 z! K: \! w: c6 W9 @  o4 `        if( KeyLeft == 0 )
, f/ B; r7 f5 W$ W4 D/ F        {
0 r* P- \, T8 s: C* }3 `                while ( !KeyLeft );           //使标志等于Left(1),在中断函数中将用到% Q7 \6 `5 t" O0 O
                LeftOrRight = Left;
" |' L8 `8 H$ ~! R/ ~2 K6 l0 L  d        }
& M7 H& I: V: o/ \% k2 U" @+ q( F
        if( KeyRight == 0 )! F# D. @8 }  O" m/ I$ q
        {
2 D' ~! c8 L6 `9 p                while ( !KeyRight );   //使标志等于Right(2),在中断函数中将用到
1 E9 }9 B- k9 a! \                LeftOrRight = Right;
1 b7 Z. R1 \8 A        }
' ]8 [/ r4 F. q' ~, r8 U6 U6 a6 G) |. g4 I
}
2 J5 O0 p# I; Y; q% `3 W$ ^! k  G
void main ( void )         //主函数
, H* l0 `3 u) P& e  ]{8 D5 s! z" ~5 {/ l% V1 l. d2 t0 c9 @& \
    InitialTimer();3 @( T. J" G. i: g+ c
        for(;;)
5 k: q8 D7 l8 r. u& a- N        {
! n- N) W: Z& D' `, o' n% n7 y                ControlLeftOrRight();& l9 U$ J2 Y: C0 V/ {3 |3 W
        }
# F$ N. R2 o, c- M0 ~8 }}; ~) P5 `) \+ P9 h1 ~

7 k3 m0 |( B; P" q1 o, nvoid Timer1 ( void ) interrupt 3  //定时器中断函数
! z" X2 m" f/ l: T{5 @' n1 `  ?1 _# Y  R  \
    TH1 = ( 65535 - 500 ) / 256;" h, I* K' u- h% ~$ ^& p
        TL1 = ( 65535 - 500 ) % 256;
; k! j0 D: S7 k6 z        TimeOutCounter ++;0 M5 r& Z0 W  l% ]) E# Q

* z4 u: [6 ?6 v1 }: x9 {        switch ( LeftOrRight )
0 ^; w, M* @8 J0 R. J7 [' K/ m        {/ }4 c7 k, @2 ]: L2 W% z3 H0 [
                case 0 :          //为0时,舵机归位,脉宽1.5ms% o3 S) X& V* Z( W8 O8 E
                {
* M1 [1 i6 Q) ?% ~* s; I                        if( TimeOutCounter <= 6 )) F  W5 J! s2 {  b8 M4 U+ S/ N
                        {. V% N+ w7 s7 U: K/ R
                                ControlPort = 1;( f, t3 Z/ N. k8 ?, A' C
                        }
- [' o8 n0 B9 j7 v: S                        else
! ]" |' W9 T4 Y- ?- F# p& |                        {0 F. u8 i2 ^$ k! Y4 p7 e
                                ControlPort = 0;
) t$ F/ f3 H, B$ m  K$ ~& C                        }
; O) y6 ]; K7 D0 h$ k8 |, ]( R* c; H  _                        break;* f) ?( p+ _# u' b
                }
7 W$ L3 r1 \8 l# K2 x                case 1 :     //为1时,舵机左转,脉宽1ms(理论值),实际可以调试得出3 G. z0 `; w1 x, V5 b2 K$ E
                {' e6 m1 j8 i# F6 Q
                        if( TimeOutCounter <= 2 ): q' W9 Y2 T% Y
                        {
2 D+ w8 ]. l9 h( M$ x                                ControlPort = 1;
4 Z/ i9 x5 D) d- _: H- f( I                        }
: C' _4 a" t+ C                        else
0 @; f! T7 K6 I/ _7 U6 Y                        {) v  s6 o3 Z6 o4 ~; r
                                ControlPort = 0;9 A; G3 B. `3 k2 @( h: d5 e
                        }; X1 _' ~6 R; D" b( W" g
                        break;8 U2 P$ A) o! n. D
                }- m& G0 m0 k4 H+ f4 \' m  t
                case 2 :   //为2时,舵机右转,脉宽2ms(理论值),实际可以调试得出& d' r$ V* h% |( g- p6 H* F2 O6 W
                {
: f, ~/ Y/ |4 E. o+ W                        if( TimeOutCounter <= 10 )
6 X3 ^& y7 A0 E4 h8 D* k  i( M; d1 p' q                        {. e% c( g5 K7 l0 b
                                ControlPort = 1;& m. |9 X5 {1 T! n7 L* E8 Z) G- Z
                        }
' ]" n+ m' F5 {) m: g( W                        else
9 Z% I2 \# |; s                        {
+ A- c# p7 H2 i5 E8 C                                ControlPort = 0;
* A+ n+ Q# X* Q( U0 R                        }
6 i9 v& w" D0 ^  I$ `4 I/ O                        break;. f% s* _9 W" Q
                }) ^: |* T& y  L( a
                default : break;
/ p1 K5 N3 T) J  Y        }: F9 G$ ]0 O  K/ j' M9 H! X0 @- s

1 z$ i% Z7 ?3 E        if( TimeOutCounter == 80 )         //周期20ms(理论值),比较可靠,最好不要修改/ C9 U$ D/ c5 A8 T( j' l
        {
$ v. ~4 t. D" ~; b# ?3 i6 b' q                TimeOutCounter = 0;, K! W( y1 R$ H. V# `9 r9 o' C
        }8 H* {: f' y; l/ W; z9 |
}
% u. k2 c3 X' N3 E: {$ M* z
; E* C2 w) |& i2 P( n! b6 }; S

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-15 21:00 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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