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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51单片机控制舵机左右转源码* }( Y; [4 Q) j0 u7 T' q

! J, c. R# ^: `7 h3 U; D& M5 f& b) e

/ w3 |0 |1 h8 S6 z+ X下载:
  u2 u% f4 u. G7 _% x8 j6 |
游客,如果您要查看本帖隐藏内容请回复
8 n! R$ p; _9 g& e  d6 V

& J5 x* Y+ ^8 z. [2 o- c* s* @& C) \

. j8 _$ W: c# Z3 Z预览:- I+ ?2 P! o( b, C
/***********************************************************7 @9 {) A( \; \$ A
版权所有 :河池学院创新实训中心(2/3),刘欢(1/3)
/ w( b( B  K# k1 A: Y  N9 H程序功能 :舵机控制
$ `& u) K( I& V. ~8 B. O9 f4 y. h: ~生成日期 :2009年10月30日 星期五. G4 `$ d/ N% b3 `6 E2 I' s5 f
作  者 :刘欢
; l, k) G( n/ A' d7 p: Z联系方式  :(QQ)281638360  (MSN)sundayboy@live.cn
* J1 U! I- b" n" [: x3 i& c说  明 :51单片机控制舵机,按键实现左转、右转及归位
6 R  J4 y+ p4 q            占用定时/计数器1, i* F' \4 z3 U0 |. N9 O
************************************************************/
6 }2 }- f8 @% x( ]4 U
) V8 R; S1 E8 v, j2 x#include <reg52.h>. i( K) o, {% ^1 j( z' S
#define Stop 0    //宏定义,停止
3 E: q- n) w/ Q#define Left 1          //宏定义,左转
, S; V9 T3 y7 [1 V; K#define Right 2          //宏定义,右转
5 t: ]/ d6 B1 `6 e8 N
. f+ N$ Q  i& b# {7 Z5 m/ E4 h. j  U% U( g' u2 r7 C, c, B2 X
sbit ControlPort = P1^0;  //舵机信号端口7 \6 B! ^6 K4 ^" h1 @3 @
sbit KeyLeft = P1^1;          //左转按键端口9 ?+ |7 g- |9 m1 M  X4 f
sbit KeyRight = P1^2;          //右转按键端口
/ C' J4 ~% o% p& J' ~% T- k2 Msbit KeyStop = P1^3;          //归位按键端口
& n% B5 Q4 x. H( Y: Q, }9 V! l1 e
1 K2 a* B& V$ E+ l4 e$ A- ^3 e, zunsigned char TimeOutCounter = 0,LeftOrRight = 0;  //TimeOutCounter:定时器溢出计数          LeftOrRight:舵机左右旋转标志
) W/ @  _/ O$ ^9 }. B" p7 \) X8 N& M+ F6 I/ U
void InitialTimer ( void )         9 L# [' I" \  W& {. m
{
5 x$ y% T4 I& {! I1 p$ ]    TMOD=0x10;   //定时/计数器1工作于方式1
' n, q! x: U0 w7 C    TH1 = ( 65535 - 500 ) / 256;          //0.25ms
' {' p' c; u$ C- Q  M# ?3 E        TL1 = ( 65535 - 500 ) % 256;
/ q' z; M- O% Y6 {9 A    EA=1;        //开总中断
6 }+ ]+ x( ~' X3 O. E    ET1=1;       //允许定时/计数器1 中断2 ^, h5 V  ~2 K& ]& b
    TR1=1;       //启动定时/计数器1 中断
9 U4 |9 {$ F* c2 ~. E. L5 B}1 C" }% i7 q5 w, f

* d3 W5 x7 k' z# f/ u1 Pvoid ControlLeftOrRight ( void )   //控制舵机函数
0 ~& ^& N4 N- ]5 K# ^- w5 j. ?' n0 M6 L{% z( @( `' ]4 J& `( R; T. G
        if( KeyStop == 0 )0 m  p. [' r1 h' b) t# D7 h
        {7 y4 K- |( \5 `
                while ( !KeyStop );           //使标志等于Stop(0),在中断函数中将用到8 c4 s9 d9 Z% e& R
                LeftOrRight = Stop;& b3 B2 w! N# i! R3 H7 Y
        }
3 [2 M) ^1 ~; B- g* b8 I2 U3 ]" C+ \- L/ R( f5 f
        if( KeyLeft == 0 )9 v1 P  d* A$ E
        {& t- M9 z) w9 Z
                while ( !KeyLeft );           //使标志等于Left(1),在中断函数中将用到
, f+ m, C% k! R+ A1 u3 H                LeftOrRight = Left;1 N! S% [1 Y8 X* b& Y
        }
4 C, I1 F+ `! \! h/ }7 M% i4 H
: ?8 h$ i" t+ z$ H9 W5 X        if( KeyRight == 0 )
3 a2 ^$ @4 L4 z+ o        {1 u3 [5 W# L  ?/ I! O* S1 b% x) p+ E
                while ( !KeyRight );   //使标志等于Right(2),在中断函数中将用到
1 |/ c' d* ]& g$ }& ~( |                LeftOrRight = Right;
8 ~' {8 L' s: D" A7 o; m        }6 `: O8 p1 g5 ?6 R3 a+ Q
9 E* J$ j- J, z0 H# M4 C
}' l1 W! S  W! m

! C. t0 h" X; {0 tvoid main ( void )         //主函数
% Z+ N, h4 I6 i, I5 \. U! {% A. `+ w{
. x5 R% E7 o1 d$ h: q- Q    InitialTimer();
3 {0 `8 S+ o* e        for(;;)
6 l5 s5 h! u; F) Y: N  O        {% {+ J( A: E. M5 Y; Z& S
                ControlLeftOrRight();
" G3 W- [. T# ^+ U* ]3 x8 j  h        }
- A5 V* F9 `$ t. g8 N}
" f0 s6 p$ r/ D) w0 X% C$ K  P4 c: d. P7 g7 X: T
void Timer1 ( void ) interrupt 3  //定时器中断函数
8 `$ {3 N; h* z: v{9 U" W+ s  Q/ z8 N) M/ y& ]' ^
    TH1 = ( 65535 - 500 ) / 256;: f. a4 H1 z" _" r( U
        TL1 = ( 65535 - 500 ) % 256;
+ f' j1 U& I# j$ F1 j: K        TimeOutCounter ++;1 }: x3 n* Z/ n/ T" l$ Z1 `

2 p' G, [, x& T9 Z9 x$ q) D        switch ( LeftOrRight )
: A8 U" b: h0 Y& P: r        {/ U# W2 Q: w2 ?6 E. F+ Q/ Z! ~
                case 0 :          //为0时,舵机归位,脉宽1.5ms
' L& B9 u6 p2 m3 H                {# F. U+ x+ l7 Z; w
                        if( TimeOutCounter <= 6 )' \8 d7 n$ q& R6 j3 t
                        {
5 }, D- p4 l0 e; E: Z5 t7 q0 v                                ControlPort = 1;
0 Y' x% M$ m6 E* M: N7 y9 l! Z1 B& j                        }
) X9 B  Q4 |- w( P                        else
1 O1 p: e+ ^; s/ R, t' t                        {
1 ?7 T6 H- c/ L1 C6 S7 j" |                                ControlPort = 0;: e. _. `; f! r, ]& b+ u4 I: C
                        }: `1 Y* d( N" Q  S+ a' c8 M
                        break;6 j# W+ H; \6 q1 L2 L
                }; P$ C8 G' Z/ _& m
                case 1 :     //为1时,舵机左转,脉宽1ms(理论值),实际可以调试得出! D. C/ P; g4 d: i
                {+ s! K4 t, I  @" K
                        if( TimeOutCounter <= 2 )+ S, \8 |, U& n
                        {
3 ^( C# `7 D4 j5 f                                ControlPort = 1;) I6 E: T$ T9 T0 y, \5 @
                        }4 V. U( s% {- T! E$ P
                        else 7 Y: c/ K; g! H, r
                        {9 z$ @8 c, |' O4 w: v4 h
                                ControlPort = 0;5 h8 U8 ?- S% j& U, D8 ?3 u
                        }
  q( Q6 j$ r- z) a/ v$ ?& z8 e                        break;! E3 {7 j6 q; J9 N
                }
6 Q$ L( {0 W8 P& @- M5 }                case 2 :   //为2时,舵机右转,脉宽2ms(理论值),实际可以调试得出
. E( l/ M. m5 t5 {                {
% c/ C7 W" l, C( t- d% |8 o: l8 d+ R& a                        if( TimeOutCounter <= 10 )
. Q' k! \& ~, w: m                        {8 P# `$ y/ K! a+ l
                                ControlPort = 1;8 f6 ]" N* ^# D6 x
                        }
/ u  W4 ?  {6 a                        else . W3 J" o1 ?. L! h. o" Z/ l' {
                        {+ U  n; o! O1 l0 }5 S
                                ControlPort = 0;7 {1 B2 I' C2 ^) I; D6 U5 x0 ?
                        }
$ E8 U- t; Z) B2 w/ t+ M2 N                        break;
' A/ H; [  R( F- T: A) j; I                }
( j( B: N9 z% ?$ Z  e7 V! ?! t5 r                default : break;" \2 e( }6 c- B: z8 W
        }9 A% {8 F: b9 @/ l( V" c
1 i* ?" s3 S$ r1 N5 O
        if( TimeOutCounter == 80 )         //周期20ms(理论值),比较可靠,最好不要修改
9 [3 b' G# i. w: b        {1 c) F$ o% s; g: c0 ~+ K0 b4 S
                TimeOutCounter = 0;
0 S# X+ x% n% _4 e8 z) R  H, N        }7 K" B( q& d2 H. t  U
}  A) @! z  B+ b4 D# K$ Q. J
( x! P4 }2 ]+ s4 C7 `

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-1 16:11 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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