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

单片机控制8路舵机转动一定转角 源程序与Proteus仿真图

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-5-27 10:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
, A( _2 n1 X0 \
2 d! }6 G+ u" F, X. B+ D1 M# N. C: d$ k5 z5 _1 _, h" S1 q
可以通过按键控制角度增减,程序和仿真齐全,可以运行,相互交流。
3 S$ o( N  m$ U2 E! u. B. ]; x" |: G$ Q: U* N3 B
单片机源程序如下:1 @* z' O8 s0 y0 @# Z
#include<reg51.h>
( p: `' c2 K; h' [' d) e3 B
7 a$ ]" s) R1 y! Y( D5 l, Xsbit PWM0 = P1^0;
0 |4 f! H" P0 o7 @sbit PWM1 = P1^1;7 `0 J, |9 z7 C8 z
sbit PWM2 = P1^2;+ H# M! j6 b7 Y3 ~) |& ?
sbit PWM3 = P1^3;
% q1 f0 ?7 Z# Q; Qsbit PWM4 = P1^4;
& I6 A" }+ F& x' Q9 {sbit PWM5 = P1^5;
% T7 p" \3 [" I2 k0 `9 ~sbit PWM6 = P1^6;
0 g" }* |/ w! Wsbit PWM7 = P1^7;5 J6 B+ F9 i1 x& @# S7 N& y3 X
- \: ^& t5 L! \& ~3 W) h' B' s, i
sbit ADD = P2^1;
! N9 P  n) Y6 `/ b6 Usbit SUB = P2^2;5 K0 B. K$ I. K* V+ y+ c: |
. u% I) }6 d& I' s4 w+ K! M
#define uchar unsigned char
$ s) q0 U; V5 l, d9 U#define uint unsigned int5 v$ h) T4 w* L, L
8 E& [8 Y. p+ {, L3 a& B8 n) c
uint t_up0 = 1500;               ) K) ~$ s8 E/ w+ I4 @; B
uint t_up1 = 1500;        //1.5ms9 A  V! t( b, Q% _
uint t_up2 = 1500;+ ^- \) h5 Y- L2 F4 s5 D
uint t_up3 = 1500;" R* w0 F, s" |5 Y# ]; X
uint t_up4 = 1500;3 x- b' l- r! i! \- T
uint t_up5 = 1500;
8 P. Z; Y3 c1 H6 l3 `) c  J  duint t_up6 = 1500;5 J9 \" y* W. y5 X
uint t_up7 = 1500;5 ~9 H) b4 l. u: [; j1 D

9 Z* I8 C' Z5 ?3 O- a3 l2 M* puint t0_h;+ {4 |% v4 c- y' Y$ b% N" k! k
uint t0_l;
8 O' A2 z/ o% M) d) e6 A( C
! j4 A7 H+ b; @% M5 p0 c+ m
0 G. y0 ~4 w3 K1 r: zvoid delayms(uint ms)
4 u+ v8 r5 p( Y7 }( g: @% E{        
1 c( R: ]. L, S8 ^2 a- E        unsigned char a,b,c;
8 u; m) d. ?7 k' Q$ X/ ?        while(ms--)
  h7 A6 B8 Z; L5 L! a3 H        {               
6 E8 ^1 e) Q. b) V. G8 ~    for(c=1;c>0;c--)' \: X  S( ~6 p; _7 e1 |3 q
        for(b=142;b>0;b--)8 j2 W. R$ w) h$ T! S
            for(a=2;a>0;a--);' f  [) ]% q0 w: i
        }
, K4 q4 z6 Q' n& f4 U! P}
; r% V1 L! \4 b' c6 L$ c( D% cvoid timer_init()  Z( P8 ^, P8 j/ C
{
% ^( x$ s- R$ `- G: B" x- P; Y# S- f        EA = 1;4 [# ]3 M1 s" ^
        ET0 = 1;# U- X3 K2 I7 Q
        PT0 = 1;
! W; d8 X/ b" T4 H6 O        TMOD = 0x11;
) d8 ?2 c/ Y. C9 P. q% x, w        TH0 = (65536 - t_up0)/256;% g8 [. M& a- n% E( j) j
        TL0 = (65536 - t_up0)%256;        8 f3 A0 f$ v( u- @9 }( O: Y
}% f- ^" {' h1 t) w' I
  e, H8 x7 s* a: \
uchar t0_flag = 0;
% \( L5 a- p* l$ ~2 t  p. j) x" ?uint num_max = 65535;       : v9 P( U; A: S8 m! Z
uint t_change = 63036;
  @& J+ D% r1 Q* }
/ \9 f: _1 m3 ?5 C' Juchar error0 = 45;
# P( S" u; u* d! b2 suchar error1 = 45;8 x6 p) U, h2 b) `
uchar error2 = 52;9 D$ O% N9 x" o' q6 s2 d1 Q+ d* A
uchar error3 = 52;; _9 n/ m% T- Q
uchar error4 = 57;* l' m' Q) a$ {* y+ o' }' p) a4 b
uchar error5 = 57;
1 e, s$ ?1 |" O" y7 Wuchar error6 = 63;: `& a6 c/ X/ J9 E) n: s
uchar error7 = 63;
0 X4 n7 }3 n) Z6 Tuchar error8 = 70;% ~' {0 |% f1 H) K& S# {
uchar error9 = 70;
' U) z: `, }0 ]5 G4 Q1 |2 muchar error10 = 76;3 S; h; r( B6 R1 d# w% ^
uchar error11 = 76;
0 T* S( o! Y5 I) muchar error12 = 82;
2 r2 m2 W3 c1 uuchar error13 = 82;# f5 a3 o# d* H' Z+ G
uchar error14 = 88;7 r& [5 S$ ?0 X& ]3 o; @2 O1 D
uchar error15 = 88;8 X* D. X9 S5 s) U' T& o$ K

6 k, b) `+ Q4 Q* B7 Y6 i; D' c' c) ~void timer0() interrupt 1
' k+ t3 n6 H' H+ ?{
  z8 F/ T2 u3 l% [
8 G5 w# M1 i( L' v( q        if(t0_flag == 0)0 H. Y6 O; U7 `
        {
: F' N& I" @% B. J% \0 e                PWM0 = 1;
' a! u$ y7 s7 s+ q$ A/ W; w  O                TH0 = (num_max - t_up0 + error0)/256;
1 ^+ @( |) V* h5 c: f                TL0 = (num_max - t_up0 + error0)%256;
" A! e% P$ }! D- s' U/ x" P* R! T. Z+ P& v' d0 f) c
                t0_flag = 1;" w" b3 F' y9 i2 h2 G
        }% i4 N' w* {2 h+ |" G8 Z% y
        else if(t0_flag == 1)9 a+ ]0 |# e4 r! H. |1 y- ]
        {
( z+ \) U2 j5 k& o0 \# P                PWM0 = 0;
2 Y1 _3 `" R5 F: F8 W! r                TH0 = (t_change + t_up0 +error1)/256;: m  ]' K- z$ F6 \% ^3 I! N
                TL0 = (t_change + t_up0 +error1)%256;
: v' x% g1 p* }2 S. U/ f" U: K4 k! x4 ~1 W4 @2 W/ r/ r* r6 J
                t0_flag = 2;# p* ^3 l$ j' y3 g5 {( A' y
        }2 k* l) @8 z$ |7 I
        else if(t0_flag == 2)( \6 ]1 O, g! y/ x  g0 ~5 [
        {
! i% b: l& q( u( [! W% M                PWM1 = 1;5 g. o3 f2 z- t2 e, Q6 m
                TH0 = (num_max - t_up1 + error2)/256;8 P9 P% f/ v) R
                TL0 = (num_max - t_up1 + error2)%256;
/ H7 t* e4 W) J. c) \
' C  ^; o/ L* Q4 ?3 [                t0_flag = 3;
8 c7 m: z! o5 b4 G        }2 e5 K( l. w' L3 y5 H/ t* T
        else if(t0_flag == 3)) O3 p( i% y; K- T) N
        {+ h! o' O) h! v! w% I
                PWM1 = 0;
- W! Y$ i+ ~$ G# w* ^7 d                TH0 = (t_change + t_up1 +error3)/256;
4 k# d6 o. H8 P9 b2 n                TL0 = (t_change + t_up1 +error3)%256;# R2 M; t+ L/ \; W/ h: ?2 w) a

3 r# i% I0 M: B" O0 L                t0_flag = 4;
8 A5 M" y- @9 V+ u' d6 v" D8 x" \        }$ k2 e  u# e, S/ L! [
        else if(t0_flag == 4)
" Q0 |1 E# B5 z1 f9 ~- u1 L        {
5 I: A' ^* w# w% X% @8 v                PWM2 = 1;
9 w% r3 t: S! G                TH0 = (num_max - t_up2 + error4)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä* w- t- T; U. e, Z' o) S% t
                TL0 = (num_max - t_up2 + error4)%256;
- q# ^4 \4 ^& F9 h* x6 P$ j8 b6 H- X  J
                t0_flag = 5;
4 p8 q  D' [  T9 K- h4 s        }
! X3 z- n9 ]2 y) Q        else if(t0_flag == 5)0 ~! H- \- r. d; Y) }! u
        {# M! n  Z/ |6 }  F% Y5 G
                PWM2 = 0;
3 D9 Q! D4 ?+ v1 t' x9 ?' \+ P                TH0 = (t_change + t_up2 +error5)/256;( {5 Q3 I+ S7 [$ T( P: ~( i2 O/ U
                TL0 = (t_change + t_up2 +error5)%256;
; E- x* r; _( |' A% x: D" X" }$ m$ B& U
                t0_flag = 6;
; o# S8 l2 W! V; _% p0 R        }
( A$ `5 A9 H' n) W, T5 v  X        else if(t0_flag == 6)$ ~9 W' ]/ J2 {4 B, t* u
        {" T. ?% v9 R6 G0 S$ @
                PWM3 = 1;) s7 X. U1 W( l$ _: I
                TL0 = (num_max - t_up3 + error6)%256;2 V  B, h5 ?9 v+ L5 X: [$ G; j+ P
9 _+ y& D& v. c5 i# ?1 f* p+ y2 s
                t0_flag = 7;
, S/ G/ \, T( E        }
, F) y. C# S& D& ~        else if(t0_flag == 7)
9 f! z) F2 ?0 P        {
: t; Q$ W) i, w7 c1 E                PWM3 = 0;
8 a( {, p, k" |: l                TH0 = (t_change + t_up3 +error7)/256;
4 _- F/ i7 K9 e5 b  @                TL0 = (t_change + t_up3 +error7)%256;0 A# s$ }' y# d+ ]+ {" ^
; q  U9 U5 V1 s' j" W
                t0_flag = 8;
% Q0 m4 W0 j' k0 K3 K        }
. q% }7 c* U+ a! T  I        else if(t0_flag == 8)( B$ x# P3 Y4 A; ?; A% I, F
        {0 }1 [1 ]9 x( i- _) Y, f/ U
                PWM4 = 1;
$ G: A+ [) Y& \/ F1 i' d                TH0 = (num_max - t_up4 + error8)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä4 `5 O) z" T( y) n& \& m2 r+ \
                TL0 = (num_max - t_up4 + error8)%256;4 ^( Q- N  A4 c6 g* i! K8 @, c
- X( K& C' e& i# I
                t0_flag = 9;) v) f0 A# M9 k* p9 h
        }& J4 O7 C! R3 V: r- {
        else if(t0_flag == 9): W0 R" x6 J5 [% B( i
        {1 W2 p" n+ q. S- E+ t5 j
                PWM4 = 0;# i, o  H. ^- o  R5 T- g! K  `
                TH0 = (t_change + t_up4 +error9)/256;
9 U8 a; b, n2 @% L: J                TL0 = (t_change + t_up4 +error9)%256;
8 |7 G: K6 w( u3 d4 u  D4 a9 [+ D& \# V6 V
                t0_flag = 10;
$ W' E7 Y4 j2 W- r% V; x+ j6 L        }8 ]: j& B; |" y8 _- L* Y  k
        else if(t0_flag == 10)8 S7 u* {8 f0 d+ k1 ?0 v$ e
        {4 L$ n# R0 A# i) \: w
                PWM5 = 1;0 D' F+ b% k% \* r4 V! Z& \2 K& E
                TH0 = (num_max - t_up5 + error10)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
/ \5 R8 ~8 y' `. q) D4 h* l                TL0 = (num_max - t_up5 + error10)%256;; h4 E( `1 B0 L8 |# p+ V, z, g$ p
* l- E9 f3 X. e/ O. {& N
                t0_flag = 11;
9 f) v7 K2 l0 Q: A8 o6 \( ~        }5 W1 U  ~* y. h/ G% [8 r; s2 @
        else if(t0_flag == 11)
( b, z% y  f4 x5 A% ^: I        {
' K) J0 K2 Z0 v, [. p2 v                PWM5 = 0;7 E4 l2 L/ T! A% L. ~" c' B
                TH0 = (t_change + t_up5 + error11)/256;4 \* Z) z) @6 V  t+ n; m5 k; c
                TL0 = (t_change + t_up5 + error11)%256;+ D5 H9 {8 o$ `

  }: @6 l' h8 V) t( @9 J                t0_flag = 12;2 n& I2 N. x% ^# k5 k
        }, n+ S  ]9 N- z1 C' g
        else if(t0_flag == 12)- O' R& q: b6 ~/ K; s
        {9 L% W5 c/ F; z% }
                PWM6 = 1;
, ?; k& f5 m+ E4 W1 Y  t2 Q  m                TH0 = (num_max - t_up6 + error12)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
% [; l( d+ j: a4 O4 M; ?                TL0 = (num_max - t_up6 + error12)%256;# v. e' q2 T% N8 G- e6 Z( Q% Q( O

/ }3 l6 T' P3 i  B8 D                t0_flag = 13;7 p: h3 @" M5 [- y
        }% ^5 d! Q1 V% b& r! M
        else if(t0_flag == 13)6 m; E! G* Z5 P/ ~
        {2 V7 v0 M0 q, i1 y
                PWM6 = 0;
/ J# v4 t* t& o' ]4 Z                TH0 = (t_change + t_up6 + error13)/256;/ j( @" ?, {! q/ k0 ?
                TL0 = (t_change + t_up6 + error13)%256;; b- D% G  S( C0 n+ K3 Y, `

2 N7 L4 J8 H1 v. t4 i# Z+ f( v; M" m                t0_flag = 14;1 [5 S' l5 Y% e1 L2 ]
        }" ?( A$ u7 ]: s
        else if(t0_flag == 14)
/ y! @3 |+ _! T* \( B* t  e( }& ?- H        {9 r# e2 A1 J' D2 {) {
                PWM7 = 1;
# C4 g( E* a, E  H2 ?9 `& g3 I6 r6 L                TH0 = (num_max - t_up7 + error14)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
2 j7 C4 c( w) y8 C: S                TL0 = (num_max - t_up7 + error14)%256;
  U% I0 V: C! T& g
& p* I# ]! B( J2 I+ j                t0_flag = 15;
9 |' X0 D3 W1 z        }
; }1 w3 m1 @- A9 }; a        else if(t0_flag == 15)4 X. k/ |( Z; |* Y% c
        {
, o2 Y! i5 c- X3 i: m8 k- J" U5 {: o% T                PWM7 = 0;
# d  g) a! o' G                TH0 = (t_change + t_up7 + error15)/256;
% i* A1 z2 g# r+ r! W7 z                TL0 = (t_change + t_up7 + error15)%256;
/ ~1 {( Q5 ^* k! n% K/ f
/ m1 {" U( c: _$ e! @( L1 D/ U                t0_flag = 0;
7 h) C2 s1 W! _) c4 r        }8 `2 j+ V5 J3 [, p, P; r

9 |5 _4 u* h9 a1 Q0 {& V}
+ {: d8 d1 R7 d* O6 \void main()8 O6 L% T% W, ?2 [
{3 K: S' G. {6 |9 q8 J7 I6 s
        uint t_while;: y2 G! g8 r9 n& K! |  [
        timer_init();
5 z4 X; t# M- ~  \/ w6 _! s        TR0 = 1;7 S2 B, Z3 K% R* b+ w
        while(1), x! ]' X) h# x' I+ |  g* Z
        {
$ B, m* V" o" y# j+ a2 ^: T3 {5 H  q/ j
                if(ADD == 0)
' r' x+ m! E4 x                {% p  q; k2 j- K% ^# _+ e
                        delayms(2);& P" ^- V/ C. N
                        if(ADD == 0)( s  v8 }; h8 ~. ~$ K+ f  H
                        {
: W% u( q* E2 n# ?& f                                if(t_up0 <= 1950)
( d8 j3 y& J$ l" J- n  }; j( ?; [                                {# ^1 ~: X  r! c
                                        t_up0 = t_up0 + 50;4 s* a) _' v5 `5 x6 Z$ T0 s
                                        t_up1 = t_up1 + 50;
, g3 T$ Y+ G" h0 }1 c9 a                                        t_up2 = t_up2 + 50;
% D+ J, I. A/ {! C! v                                        t_up3 = t_up3 + 50;
) ?, f* S: x( m) a# A7 V1 L                                        t_up4 = t_up4 + 50;
  W4 g! h) A9 {; X                                        t_up5 = t_up5 + 50;* Y8 o+ c% H) v4 x  h" U
                                        t_up6 = t_up6 + 50;
2 z! m$ @! Q( E* ~1 I                                        t_up7 = t_up7 + 50;$ |% Y6 m$ J- m3 @- M
                                }
( }2 z$ \6 a$ A) w. Q5 p
3 d* \2 d8 I; n; y" z                                t_while = 50000;
! \0 U" Y8 U$ z, X4 }                                while(t_while--)                //
- N. H4 f( _4 _+ w3 O& R                                {/ F  O& K7 q# L, k  U% k' \
                                        if(ADD == 1): |) u; c6 p2 d# Q8 `- V8 Q/ B9 W
                                                break;
; T7 K. r4 _! S' q                                }
4 M  ]: A+ t3 P2 U' R- s8 s1 r5 C, |1 D4 {5 w/ K  @. e2 t
                        }
/ n/ O& R; n: j0 V) T: s                }
$ {- H2 j" g: O( D$ \' c; W2 c  @/ Z: }
                if(SUB == 0)7 z# O- g1 g6 \  Y: o5 l
                {
. I" a3 ]' `- V" y; s3 J                        delayms(2);( W2 g8 j  K3 E' X
                        if(SUB == 0)
: E6 O9 o4 H% Z) z) q                        {) t/ U4 ]/ @" \6 Y  E9 k
                                if(t_up0 >= 1050)
; U7 p# `9 B2 g& U0 G- U& _) p                                {* M# H+ f$ {) b4 z7 ^; h& `3 O
                                        t_up0 = t_up0 - 50;
7 U  n: |% i1 i3 p6 r3 m1 X                                        t_up1 = t_up1 - 50;
3 Z0 X: L9 N: |8 j                                        t_up2 = t_up2 - 50;" c/ A& o/ s9 N* t9 k
                                        t_up3 = t_up3 - 50;' h6 W4 S% ?5 ~' q$ l2 v
                                        t_up4 = t_up4 - 50;& d  ?) R6 ]" e; v; b& A
                                        t_up5 = t_up5 - 50;
. R) l$ l. ~. ~( a2 q; J                                        t_up6 = t_up6 - 50;
) V9 |) A) c* K! Z                                        t_up7 = t_up7 - 50;( a2 q( z! `9 b, c* }: i
                                }4 E( m+ F6 V9 t( X
' [. L- v1 K6 T, L* C! v
                                t_while = 50000;6 }& ~  s4 h  y. t' F( B% S
                                while(t_while--)9 O! \  F# C) o( P
                                {
  I2 l0 p3 e: q                                        if(SUB == 1)
! S' U( P' Z$ h" F& }9 P                                                break;
7 ?6 G' }& d  G                                }
, n& i5 c' B  j7 t
' Z+ r" [! G6 i, B                        }
7 b% T3 A. X, F; N                }( A; I! k9 g8 n5 ]/ k8 ~  k0 m
        }( O! k; W+ \7 f! j3 D
- {( h' b% ], A
}
+ C; t+ r) ]7 v% C2 l! j& t6 p

1.JPG (48.69 KB, 下载次数: 1)

1.JPG

该用户从未签到

2#
发表于 2022-5-27 11:30 | 只看该作者
有原理图,有程序,可以好好学习学习了。(#^.^#)

该用户从未签到

3#
发表于 2022-5-27 15:03 | 只看该作者
原理图,有程序,可以好好学习了,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-15 22:15 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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