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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)# ~/ t3 G% w- U! U& p. t
3 M: x' {$ L; p+ ]  h6 q, i

* A% t; p1 k2 o$ [* A' @可以通过按键控制角度增减,程序和仿真齐全,可以运行,相互交流。! M. o1 D/ @* a2 @% t) k) ^

; d; h2 {" Q4 O( M. l单片机源程序如下:
# |, N& |! z6 D3 }4 c* ~#include<reg51.h>
# ]6 G) S2 C" C2 i& q* H
% p  F' ~; ]. I- bsbit PWM0 = P1^0;
  T* S7 [$ c2 P& P6 F7 a$ l3 ]sbit PWM1 = P1^1;
9 Y; }- Q. \, U4 j3 ^% s- g" ^( ~sbit PWM2 = P1^2;
0 A; K; @, y0 @4 O7 j# k/ z; Isbit PWM3 = P1^3;
" b, s' _  l5 @# l% j4 Qsbit PWM4 = P1^4;
1 T% y9 m' B9 U/ ]+ vsbit PWM5 = P1^5;
7 u7 @4 Q4 B$ I1 ~( Qsbit PWM6 = P1^6;
0 p# B7 R* Y% Psbit PWM7 = P1^7;$ b5 g3 N$ v' Q; r) ]
- T/ {6 k: ]1 O0 j" B8 r
sbit ADD = P2^1;  `: x5 B; h3 m9 I' |
sbit SUB = P2^2;
& i% \( F* s. q7 [) u9 E. s  X/ T+ O+ U
#define uchar unsigned char6 r) R5 L5 s6 @' n! d6 Q
#define uint unsigned int' j# g2 L7 Y. ?2 M' c

2 P& p6 H) y- juint t_up0 = 1500;               
' f0 Q2 w, @2 ouint t_up1 = 1500;        //1.5ms( Z, M5 Y% q7 F5 d$ ~0 A
uint t_up2 = 1500;. _( O% p7 C' ^" |! R3 f# b
uint t_up3 = 1500;: _" Q; i0 }( e+ z# M* @
uint t_up4 = 1500;
! n& e, C5 R/ I1 o4 H6 @  Nuint t_up5 = 1500;9 s! H5 K. P+ w" E7 \4 L- B+ z2 M
uint t_up6 = 1500;+ k, h) c5 o' N3 Z5 W! i
uint t_up7 = 1500;/ O) I9 Q" y3 z4 }( X
! \; ~- O8 `+ c. i* x! F
uint t0_h;7 }/ t" {8 s. _" [9 Y
uint t0_l;( D3 @0 Q* E! ~
) ?$ P( w. J( N' N: Y" b
( B$ L+ [" P, O* a
void delayms(uint ms)3 u, V8 Q8 D+ G) M0 p9 ]0 H; w, }
{        5 h' Y& X8 Y6 a) q! e/ v
        unsigned char a,b,c;
0 u( J- H+ j- E, \! V, u  z        while(ms--)
$ `& g( V% d9 W% s) z) J& R        {                6 |0 Y, Q# W! v/ Z* k/ \
    for(c=1;c>0;c--)0 ?- K, M3 d  h& a& I: L
        for(b=142;b>0;b--); P9 c- {* ?8 ~7 F8 Z5 z9 f- Z
            for(a=2;a>0;a--);
2 n6 O9 }: g# ~5 c        }
. ^& r1 y5 c1 w}
- C: c( \. C, s4 T- k1 D9 `void timer_init()! n. u% B0 i- p+ k, P$ H% C& n
{/ [  ^9 @  @) L+ G# y9 t6 G4 |: Q
        EA = 1;7 t% O) |( B! V$ n: D! t
        ET0 = 1;, b5 Q5 t( v8 a0 W3 `
        PT0 = 1;0 I' ^4 K9 o9 C" x) ~) n
        TMOD = 0x11;
7 e- P: P4 L4 V0 e9 S  P' ~' Z" A* [        TH0 = (65536 - t_up0)/256;
# {5 {8 U3 o2 I5 ?        TL0 = (65536 - t_up0)%256;        / H2 c! L: D' j8 W$ L2 |8 Y& @
}/ T6 ?; L) U8 Z; x0 t' d( V
+ K5 o- @7 ~6 P/ W$ _
uchar t0_flag = 0;
) p0 W7 Q* _& [" x$ P& Zuint num_max = 65535;      
, c: ]% l% X  Kuint t_change = 63036;
% R* U' {0 ?8 J3 K" t1 d4 s' I- L
uchar error0 = 45;2 X: `+ Q+ ~' m; |8 u) i
uchar error1 = 45;
8 n. R: W. v3 Q. euchar error2 = 52;
# ?0 b( R& K7 L: k! Q1 auchar error3 = 52;' ^% v9 M% V' t2 Q
uchar error4 = 57;
5 f! _2 t  X" O+ h8 K. zuchar error5 = 57;' C8 ~, G- g: R
uchar error6 = 63;' o7 p  ]3 D, f/ d
uchar error7 = 63;6 x# n2 b7 d" ^3 o$ y# I% _# o
uchar error8 = 70;$ b8 ?" n' O1 @: ^& l* F
uchar error9 = 70;
- O9 p0 ?& w6 ]uchar error10 = 76;( ^/ z- f1 f6 v8 B
uchar error11 = 76;2 P  K8 }: I& [; q, G: M
uchar error12 = 82;
# R8 x+ c4 x$ M  F8 _; auchar error13 = 82;* I9 d4 j; }1 E7 ?: J2 S" v2 v, B
uchar error14 = 88;
, M4 t' E9 A+ ]9 k! \uchar error15 = 88;8 B/ \# |5 B& G

; j" Y2 U! x2 a  b5 I& p1 }0 xvoid timer0() interrupt 1
, z5 O5 B+ f- y{
. m9 y9 {6 D& E0 ~# Z3 e% T' [3 n: [) J8 ~* ]. }
        if(t0_flag == 0)
1 a# D7 b" o; u- Y* s5 w5 Y9 y        {. `" T' ?8 S* n+ R. F: C5 _/ x# i
                PWM0 = 1;
% O; g3 O0 ^, `; z# U: z9 `1 \                TH0 = (num_max - t_up0 + error0)/256; ( A1 W: }& K, I" A
                TL0 = (num_max - t_up0 + error0)%256;8 O2 L: g& y2 D: [! H
2 K! E" c. T& ]1 ?8 D! j
                t0_flag = 1;* u$ o4 V% X+ z, o4 X3 t
        }3 M) J- Z" d8 b
        else if(t0_flag == 1)
6 g3 o6 N6 Q1 ^* Y8 j1 t        {# U1 Q1 D! N" H  I- A
                PWM0 = 0;
3 l0 e: e- c2 C% u; I4 a# b                TH0 = (t_change + t_up0 +error1)/256;0 a1 D" A4 D# P- J6 U- Z
                TL0 = (t_change + t_up0 +error1)%256;
- p1 K3 U* W: f" B; U% ]$ Y# r3 N7 D" @2 E, ^; k
                t0_flag = 2;
# ]& ^& Q  @& `$ J% n        }
4 v8 ]; [' b7 F. _' L+ z        else if(t0_flag == 2)- }" @& e% W- B! E, [/ ~( k$ p
        {/ n) i4 O) \. }) }( K; a# Q
                PWM1 = 1;4 j3 c  [) Y1 w
                TH0 = (num_max - t_up1 + error2)/256;3 K$ k4 {$ m! U* v
                TL0 = (num_max - t_up1 + error2)%256;: o& W% H/ Q# m+ @
6 w3 h# A( q  Q' o, {+ U- A
                t0_flag = 3;# v1 O/ ]. l, @! L7 a# u  V: M
        }/ }3 B0 F" m; O3 d% W* `
        else if(t0_flag == 3)
, d3 [/ u! \. T8 H; B; U        {. s8 X0 X* D; h) a/ L6 l! j2 z# D
                PWM1 = 0;) M3 k$ W/ ^  t( m9 m7 d0 R
                TH0 = (t_change + t_up1 +error3)/256;
' \/ E% w: X! C. u                TL0 = (t_change + t_up1 +error3)%256;
6 M) x9 X& L+ u, t5 p/ ~8 P% U3 H& f% z1 o" _
                t0_flag = 4;. k, b1 ~4 {+ [1 v; H: p2 F. A
        }
: e' o! z9 Y( s        else if(t0_flag == 4)8 v/ N+ \+ o: p6 R8 r* T5 g- U
        {
6 q9 q' n% u5 `1 ?0 J' `                PWM2 = 1;
2 v. K" w7 ]! `/ _  H8 [& |& l) \                TH0 = (num_max - t_up2 + error4)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
0 l6 U4 |7 z' N" d- n* \                TL0 = (num_max - t_up2 + error4)%256;
0 h9 l" e, [# P4 j4 T' D
( M+ a% d$ P& U9 {& H0 ]+ V                t0_flag = 5;
6 q1 N- C+ m9 ^/ \        }
1 V5 j; f* ~% c" a        else if(t0_flag == 5)
% G4 g8 \0 P1 b        {0 F# G8 [5 X. [
                PWM2 = 0;! F0 _# w2 g! l/ e9 P1 b, U+ B
                TH0 = (t_change + t_up2 +error5)/256;
! Y4 ?+ m3 M+ d; v! u                TL0 = (t_change + t_up2 +error5)%256;
+ s# ^; p; \" U! h- y( o: v2 k7 o( }/ n5 K7 Y& d# I
                t0_flag = 6;  J9 N+ b( C$ P8 \( d6 Z; d
        }3 o# w' Q% }; q5 k5 ^1 V: E/ y' h* Y
        else if(t0_flag == 6), f" @/ ~7 x- S2 ~6 G( V) ]& S
        {: Y- X0 _+ S' J
                PWM3 = 1;& m, B5 ]. y  |8 u' C8 V$ `3 x
                TL0 = (num_max - t_up3 + error6)%256;
! p! U! @8 ^- I7 i, _1 X# m0 }" ]$ w& r9 u, i
                t0_flag = 7;# k, k! A/ h- Z" w9 x
        }  L& G! k3 |; A
        else if(t0_flag == 7)5 r( N9 G5 ^: `3 t6 l; V- @
        {
/ b4 H4 O+ `' y8 [9 d                PWM3 = 0;
9 G+ B: k7 S1 V                TH0 = (t_change + t_up3 +error7)/256;
: f7 j+ |" k% }: o                TL0 = (t_change + t_up3 +error7)%256;
4 R& k( d' g9 Q/ G
2 L* z3 T) U0 g! w' x                t0_flag = 8;/ b9 P7 X; k. I; d, ?/ Z
        }4 e2 ]3 }( N/ \6 T: U9 R
        else if(t0_flag == 8)
! P% s+ I7 ^- {1 Y5 q        {
% b0 [  f9 l3 J. ?: @( p/ ~! G                PWM4 = 1;
! W; w" K1 T, E. c& R6 _                TH0 = (num_max - t_up4 + error8)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä1 M: L1 T+ N) g$ a
                TL0 = (num_max - t_up4 + error8)%256;- L0 v! ~0 e2 P6 A! h! d
+ E2 U" Z2 n& `1 b7 R" k  P
                t0_flag = 9;
* Q  r' |; A% e0 F: q: X        }
6 T0 M3 a, @( L  z. H5 v4 x        else if(t0_flag == 9)9 t2 B  z* j# W+ z
        {
' r7 ?$ l9 \' `) p4 z4 Y                PWM4 = 0;7 i1 C# z+ ^7 A- r! U0 a# D
                TH0 = (t_change + t_up4 +error9)/256;/ M8 \+ N0 F! V. _; [( e8 A
                TL0 = (t_change + t_up4 +error9)%256;' C5 _( n& G' e4 Y
3 [/ S$ b: U" {& O3 K
                t0_flag = 10;
5 T. I; S' a+ @9 A0 p. x4 P! g$ [        }" a1 F2 @9 t. O6 `9 B. ^" h; ?
        else if(t0_flag == 10)! m% {6 V* Y% W
        {3 A& W  U* c9 u" n
                PWM5 = 1;
0 ?( Z. C( j5 L. l# _3 u                TH0 = (num_max - t_up5 + error10)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä, c9 T+ b5 G$ C: |7 F
                TL0 = (num_max - t_up5 + error10)%256;
) j, v' T1 i( W6 q" F) w
8 V) [/ _. ?3 d                t0_flag = 11;
! ~! }" Z3 V4 s5 d2 z        }  I' \! P2 v. j+ ?% f1 L7 Z
        else if(t0_flag == 11)
; E; Q5 Y2 Q( z6 R% l; p! Z        {
( r( z$ T' |# F                PWM5 = 0;
' M  L2 T) y5 a. ?  D, Z                TH0 = (t_change + t_up5 + error11)/256;: g( b- ]/ g5 A  G
                TL0 = (t_change + t_up5 + error11)%256;7 h4 }0 z: Z# Z. H% z
1 {7 S( R; g$ n" A
                t0_flag = 12;
3 r- S; z4 U" o/ Y        }
1 m9 V# n# z, Y7 n+ ^: O' Z        else if(t0_flag == 12)+ W9 S4 Q5 l2 d7 N" v1 ?: ?0 F& f
        {
) w  z( ^; o) s  |: Y* i                PWM6 = 1;
. v6 L& Y9 ?9 s0 f                TH0 = (num_max - t_up6 + error12)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
5 }# c( n3 d4 q9 D( A0 ]                TL0 = (num_max - t_up6 + error12)%256;  ?$ m4 k0 t. @
  O5 |. ~# ]* D/ E
                t0_flag = 13;
0 O* J- p5 v4 z5 U        }
2 {/ Q8 m: @7 q7 `% `, C5 z9 U3 q        else if(t0_flag == 13)8 c( S, [$ F' @8 w  E
        {" v6 S" A5 \1 n' q! O: U/ y
                PWM6 = 0;
# P. D( ^: T6 i6 \                TH0 = (t_change + t_up6 + error13)/256;0 x; \$ b  V3 D% T  j1 D
                TL0 = (t_change + t_up6 + error13)%256;% A3 ~$ Y* `( ?( G

' E% f  p4 Z" W* v0 p' C                t0_flag = 14;4 q' }& `1 ~( ^' R: ?( {1 d$ s" ^, S
        }' K) z) y7 s1 a% b' d0 e
        else if(t0_flag == 14)) M& U  r* h6 ~, ?. B' M
        {
- W3 H. R( x. _9 A( ^6 D                PWM7 = 1;
, p& v8 w# y; O( p1 q. E3 [# J                TH0 = (num_max - t_up7 + error14)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä; l( k! |: y8 z; O; D  I1 a& Z/ Z4 \
                TL0 = (num_max - t_up7 + error14)%256;% ?0 i6 A# {" ?. q0 l+ z* V6 p
1 N! g* e. u1 _! f. [1 |8 V7 V
                t0_flag = 15;
% @. R; x( c9 _6 h* G7 s! X        }
- e1 n$ Y% p* r0 I, b        else if(t0_flag == 15)- ^- l$ Q9 o% A8 H) Q, K$ V9 Z, C$ t
        {
5 O4 s% T. a% n7 V                PWM7 = 0;
2 Q. w2 b# N: V3 Y: `                TH0 = (t_change + t_up7 + error15)/256;' [3 ~. F- l( ^
                TL0 = (t_change + t_up7 + error15)%256;! D7 y5 c% W, E$ `2 m1 t2 H

# w$ X' f; K  S, c# }2 u& ^  y( V1 z" Y                t0_flag = 0;2 _  y! \& Q2 K6 V5 N8 H+ Q
        }
+ X5 R$ P! R  B/ E2 h- R8 H+ E7 _" ~- w  d) @* T
}# H3 {3 t' w$ d, H4 S( s6 F! H9 ]
void main()
1 l9 X9 G# p+ e' |{
, Y+ q, |4 b4 D% F* L1 s% R3 U        uint t_while;, b" n7 r% `# U- X, F. B4 N6 [* \
        timer_init();0 l! C: h. c9 N  }4 B- V. c4 T
        TR0 = 1;
5 ~2 j3 ?& P* m3 B  Q        while(1)
8 {# [" x7 y0 E( p        {
5 M* y+ p" A1 H* _5 H1 ]- X: i6 o
+ v# h& D; ]3 \, }, o' R                if(ADD == 0)
5 O! [: B, C7 C/ x, U                {
: V# ^1 }1 m: b' c" ~/ i! U+ J                        delayms(2);
4 G! U+ P, q4 J6 a. V0 ?. O                        if(ADD == 0)' j  b" ]; g& f/ o5 Y5 a9 |
                        {
% ]% Q2 V1 P+ S- n* F" \                                if(t_up0 <= 1950)
5 a4 v  n1 T% W1 y. j' G0 N) o                                {
& T) g4 R& q; U% N) E4 P$ c; i! ~                                        t_up0 = t_up0 + 50;( \5 N# j" d: @  B
                                        t_up1 = t_up1 + 50;; s# M( U0 Q! o) e# ^8 f
                                        t_up2 = t_up2 + 50;
0 A+ q( E) g* \: F4 @5 [                                        t_up3 = t_up3 + 50;
: d; G2 s' q0 j$ Q# J                                        t_up4 = t_up4 + 50;! w2 |0 a# Z. s, s6 h3 L2 s
                                        t_up5 = t_up5 + 50;/ Y  Q0 e" ]1 J2 ]
                                        t_up6 = t_up6 + 50;5 L: c/ ?0 d) d) q
                                        t_up7 = t_up7 + 50;3 \" m/ x& e9 M% l0 w" W
                                }
/ E3 Y) q4 s5 W, \4 i
* q  C" l* @4 f0 L4 \7 w4 ~                                t_while = 50000;7 Z5 }2 n, f& [8 H1 p2 y" g
                                while(t_while--)                //
6 s: r. k: _$ [9 w                                {% d* i/ v/ \1 m1 a( R) S. S
                                        if(ADD == 1)
$ u0 p1 ^- x* M* [                                                break;
. n! ~, D) Z- C0 J2 u                                }
% {8 o7 j$ B9 B: E% K- m, l( a* q
: u# W0 y( g5 C( F' c0 W  t                        }
* M1 W, z, S7 t: x% E                }
% I/ r# |6 c% l2 a6 o
% K# s6 ~& v8 I! F  g( v+ _                if(SUB == 0)
$ T( m8 P* P# D5 k, Z; }                {  e4 W' \$ p, j
                        delayms(2);/ }3 z0 y: U8 ]! S/ J  E( @
                        if(SUB == 0)
/ }7 {' r$ J; F% c6 Q* b6 b                        {) K; ?% r9 }+ C8 x  ?
                                if(t_up0 >= 1050), C7 p" Z" O( g
                                {
+ k/ s, _: U7 X; e, V# @                                        t_up0 = t_up0 - 50;
" p/ S* W# |2 E8 y/ u7 l  H) H                                        t_up1 = t_up1 - 50;5 S, N, Z9 b0 i) g- O
                                        t_up2 = t_up2 - 50;- j- T- ]9 @4 b# o9 }2 k
                                        t_up3 = t_up3 - 50;" @( y7 D* W; V4 y9 W: h- }8 B2 m, p
                                        t_up4 = t_up4 - 50;! t% ~' u" c0 z* ~  u) a
                                        t_up5 = t_up5 - 50;% ?9 {. x* k" p9 f/ o
                                        t_up6 = t_up6 - 50;
# M3 U8 F0 C. e& x  t5 @                                        t_up7 = t_up7 - 50;: a% _* o+ _8 H
                                }
1 v' `1 L" n" t7 @7 j4 }# p
+ F& c6 n# U/ b( ?- `                                t_while = 50000;1 g$ _# I1 J$ J, l  p4 ?; n. Q! y
                                while(t_while--)
+ i: {2 k% I: Z! @! P                                {
" Z9 c$ t# K& `& ]                                        if(SUB == 1)
9 O# |* o% L# v; R  t9 r                                                break;% J" @# ^; q8 v
                                }
8 }/ H# ^4 u$ i% Q/ r
. V6 {$ o2 j& N3 e                        }
9 Q# [6 k# s& B9 N5 c1 f. t9 y5 _                }  w1 s. G8 T( ?' {- d" B3 u. c# F
        }* J5 t, }6 N0 y) m
# v" G. R4 P2 B9 X1 M) o: M
}
, C5 F# e+ h. E/ e

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-7-19 09:48 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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