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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)9 c& y* Q% {2 e; K- d
" p8 b) a' [1 |5 A5 Y

' q0 A3 F& v& |: o# [% p: ]可以通过按键控制角度增减,程序和仿真齐全,可以运行,相互交流。* i7 B6 V/ M  g4 `# }4 j- s
$ m/ x# A6 p, X( f# M1 Z
单片机源程序如下:
3 \  |( w$ d! m4 h( D% |* |" G' o#include<reg51.h>
2 d2 y' V+ [0 Q3 F+ e& C8 `- V& |. v9 @2 A4 _# X5 V% Z' x* s& ~
sbit PWM0 = P1^0;0 Z/ [2 U# S5 ?; P
sbit PWM1 = P1^1;4 f, \  H* h' F0 D7 D
sbit PWM2 = P1^2;
, ?' ?5 U4 O  A. ~* {# D8 R8 Osbit PWM3 = P1^3;
8 g0 t- l; ^( Q! I/ ?7 Fsbit PWM4 = P1^4;
+ @/ x8 T: A+ f6 b7 Osbit PWM5 = P1^5;3 q% f+ N; ]# Z3 |6 A! E
sbit PWM6 = P1^6;
1 F5 |' ?& }9 T. W6 ~sbit PWM7 = P1^7;
7 @" B# n" c0 a- [6 F3 b. ^6 @1 @& M4 v+ _  w- ^1 ~
sbit ADD = P2^1;
" L" D0 {4 e6 ?, Usbit SUB = P2^2;, h# d, V% H" I8 h! D) b

, n( p7 G. h- [#define uchar unsigned char4 H( o. g5 C# g+ z( S+ D+ k% L  o
#define uint unsigned int  p; E7 ~6 @) P; I* E
7 ~: k$ Y4 D2 T4 n
uint t_up0 = 1500;               
" c7 v* w% i- M9 }3 V, buint t_up1 = 1500;        //1.5ms
/ P% K  i; W$ [8 l# o: E3 |6 q0 j1 e5 nuint t_up2 = 1500;$ b6 e7 X) D; u
uint t_up3 = 1500;
* z, H5 I0 O) B8 L- G: R( r6 E6 xuint t_up4 = 1500;
$ p2 f5 e6 N( |5 g4 Euint t_up5 = 1500;
/ B/ n* B( G0 u. t: X' q: s. y! Suint t_up6 = 1500;
$ U8 F& H0 d- n# G3 Vuint t_up7 = 1500;9 b( g" w$ M3 q, K
0 r9 p$ e+ ~, I5 v  g
uint t0_h;3 E8 J2 B% C+ o% P, {' f
uint t0_l;: T) u; X* F8 h" Y8 I
% H! v' D( K( \

# ~7 l0 \1 }+ a( \void delayms(uint ms)
! i6 s* n% ~/ P4 e8 o! U{        
7 Y7 B9 W2 m5 R* S# X; [        unsigned char a,b,c;. h' J( m$ v. z1 p
        while(ms--)
. n& T2 i1 D: o% t2 o( ~$ |# x        {                " g: K( }' _/ w# b& U
    for(c=1;c>0;c--)! a, h, g6 {$ B
        for(b=142;b>0;b--), K, T- o% K" |- p  q/ d
            for(a=2;a>0;a--);
# W$ E; x5 }0 Y- n* {7 k        }, A# e0 X. E2 _, O! ^2 L
}& w1 z3 r$ n% G$ x
void timer_init()
5 H2 ^6 Q) b* ~( z; M( u& T6 V. h{$ M0 f; s2 f# T  w' B  i) D5 l4 k1 }
        EA = 1;, y# @. t9 h8 _' o
        ET0 = 1;
! C( C: o2 C; }1 ~3 r        PT0 = 1;, U* [2 \( J, x
        TMOD = 0x11;
* h$ v3 N$ j& l7 v* E, [        TH0 = (65536 - t_up0)/256;
+ `, P  g& `8 m9 v* h        TL0 = (65536 - t_up0)%256;        8 T' M& C$ \' w1 b
}& l% e& n* f% n5 ?% Q4 B
2 r. n- ^( {* E6 D
uchar t0_flag = 0;
2 P) o6 X( D- w; ~uint num_max = 65535;      
0 ]) L) ?4 k, O& Guint t_change = 63036;
. j. Y( k! w/ |: u' H' j+ K9 e. z6 R4 W: j/ c
uchar error0 = 45;, s" C3 F( p2 O* d
uchar error1 = 45;, [1 ~- }, G: \- o1 m) I1 m8 K5 |) Z
uchar error2 = 52;
0 `) v6 }7 U, \4 v5 e% [; w$ Euchar error3 = 52;
( y, I6 }; g! X: ?* F4 A2 R: h! muchar error4 = 57;! x8 r4 C6 p  ^6 g4 {, d& |: G
uchar error5 = 57;
; `1 S  ^; s9 t& R! d6 f! Fuchar error6 = 63;: _7 L4 |8 C9 p# `; M  d' a
uchar error7 = 63;
8 J' y3 c* R7 |4 Fuchar error8 = 70;
& L% K& ?: c7 {; M+ |uchar error9 = 70;) L) n$ h, a% w: t( w% N
uchar error10 = 76;( j% L  Q2 K, S7 V  v* ~
uchar error11 = 76;
# }( T4 w& S/ |* p, N( J* w8 x- Z/ Wuchar error12 = 82;* H. `3 l. v9 C- [6 b% U2 v) \' ^
uchar error13 = 82;/ I% u& G* O: u8 m& \
uchar error14 = 88;
0 E" o+ ^$ a4 u- |  K: {# T4 ^2 }uchar error15 = 88;& [3 m, S  f( ~

5 G6 g1 F- `: mvoid timer0() interrupt 1
7 Z! W. ~$ b' h{; d6 D7 J, a" s& f
8 G# b) |# A; _7 ?- c& z- z$ X
        if(t0_flag == 0)
) D5 z2 j9 ~: c+ a) U' E* k        {( H0 z8 Q  y2 T* @. {
                PWM0 = 1;9 K! B# X) C* ~$ D$ _2 v
                TH0 = (num_max - t_up0 + error0)/256; $ D3 L. G: m; Y( b2 p8 `
                TL0 = (num_max - t_up0 + error0)%256;  N' G1 P. f7 O* W! K
% r/ p1 v0 |4 P3 h
                t0_flag = 1;/ J, \. [+ X1 e; T
        }: v# e1 K+ X/ N0 L( Q) F
        else if(t0_flag == 1). y6 Q8 H1 [8 Z# R: r
        {
2 s6 u+ N& s. p( Z. u( A) r4 D$ B                PWM0 = 0;
- G( y$ S: t/ T                TH0 = (t_change + t_up0 +error1)/256;
" z# R8 u- F5 a' a/ b+ J5 i. b7 m                TL0 = (t_change + t_up0 +error1)%256;8 C1 ?  U; s! h8 k1 Q2 G' p& X

/ m% b/ m. B1 s' ^7 r! k                t0_flag = 2;
! a7 O" Z' w& ]4 b3 W: V        }
$ g  n2 c  e- d" s3 d        else if(t0_flag == 2)
4 p6 F! }7 {! w" I5 d        {
& {5 k. m2 s: n% Z! _3 J4 l, l                PWM1 = 1;4 p, L* t- }9 S( }2 m6 C! c
                TH0 = (num_max - t_up1 + error2)/256;
4 T2 K- F( |* w4 K                TL0 = (num_max - t_up1 + error2)%256;
( b0 V3 r8 W. n( C. w6 ]
( U& V8 U  t! m. P8 P- v                t0_flag = 3;
% B# i4 H0 |. ?! G8 ~/ \5 h9 u        }. x$ _% w3 Z" m& r0 O9 j2 a" }: I
        else if(t0_flag == 3)
7 @% q: P8 l8 a% S8 r        {. T& D5 N, G: M/ c# N7 p+ X6 i
                PWM1 = 0;- {1 ]# G  }" x" l
                TH0 = (t_change + t_up1 +error3)/256;) b! t3 T; d+ I" l. _/ |7 j
                TL0 = (t_change + t_up1 +error3)%256;
  `8 t7 h# F2 [* Y
$ j/ r8 _8 w! L/ T& ^                t0_flag = 4;
  Z/ n0 S: Y* o7 o        }
1 }+ p( I2 f2 L3 }+ f+ C3 D0 o7 e        else if(t0_flag == 4)
8 ~! W4 D, u4 S$ b# Q( Y$ D        {
% P! |4 t* K$ k" y                PWM2 = 1;
$ t: l. e. P8 V5 y( h9 h5 J                TH0 = (num_max - t_up2 + error4)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä, P% |& V# Q9 A" O- m* b- R
                TL0 = (num_max - t_up2 + error4)%256;
+ M3 i! _! M6 t! e6 Q
1 O  z( e, t9 S5 g% q5 h                t0_flag = 5;$ b9 W) Z8 v* i. z* }2 X, V% C, _$ S
        }, W/ f  }/ D, Y% J& o4 q* i/ o
        else if(t0_flag == 5)4 T9 N+ W( ~, V. ?8 K
        {8 C- C9 P2 Q) I
                PWM2 = 0;
$ ~- V6 U8 c5 n$ O/ s& V& |( ^. A                TH0 = (t_change + t_up2 +error5)/256;3 l/ F8 b& p" c( X, ]8 @
                TL0 = (t_change + t_up2 +error5)%256;2 U( ^0 O7 F+ U& ?0 L, \4 z. m

: B3 J' K. G$ F4 d# U! W                t0_flag = 6;* q* O! C) N; c* s# E
        }. G- H9 [4 q4 R! v0 N
        else if(t0_flag == 6)
' N/ B( j" i6 K/ E+ R( v. D        {# ?: z  g1 c8 M, C) m2 s: z
                PWM3 = 1;2 [) M* \! z0 V
                TL0 = (num_max - t_up3 + error6)%256;
# ]4 g5 m& H( D6 x8 b: t: s2 T9 o5 V4 T
                t0_flag = 7;, w* I/ C# O6 D6 @& F5 I( M+ \
        }
/ h1 R' f' p" j$ a" l; |% d        else if(t0_flag == 7)7 {- G9 k& i' |" W
        {8 A4 [; ]1 n5 |+ `+ a
                PWM3 = 0;& k0 {, y  G5 x
                TH0 = (t_change + t_up3 +error7)/256;  o1 P1 b6 D, L# e7 p5 F
                TL0 = (t_change + t_up3 +error7)%256;% s. U, Z0 b4 f& X  S2 _

$ n& e2 y# r# B! o" c. b0 H- f                t0_flag = 8;; _) t$ o) ?2 h* I1 p% k- T
        }3 {* S0 y% [) @
        else if(t0_flag == 8)* w5 w/ n' U, E+ p4 w
        {2 ]! P  T  r! s0 {4 d2 h$ _
                PWM4 = 1;* a% m; x( R1 g. v0 z  ?# C& Q2 a$ ]1 }
                TH0 = (num_max - t_up4 + error8)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä" ]8 U# d& _& d$ g" [, @
                TL0 = (num_max - t_up4 + error8)%256;" O$ @* Z# \8 T( y* T* O
  ]" t, E9 y, ^" M
                t0_flag = 9;, W7 F$ [! `6 w% [
        }( G7 C1 x; J( z+ w8 }0 d$ @
        else if(t0_flag == 9), ?3 A* a+ x7 x/ ~9 E& {
        {; }/ c8 J8 n; H
                PWM4 = 0;4 w& b1 j- p- u6 i9 d# y
                TH0 = (t_change + t_up4 +error9)/256;
! ]; W: ]  {  S5 ~- E4 d' J. Z                TL0 = (t_change + t_up4 +error9)%256;9 r8 q4 y( J  {% B1 y8 S6 }3 H8 H

) A! {, q1 F9 t1 s                t0_flag = 10;3 w7 m+ c8 {0 g
        }
9 H5 @" s& y( t, |, ^; ^        else if(t0_flag == 10)
% v! [* v- r- W- _. D; J        {
+ T' E" r2 b) M7 I9 B5 P- _+ B; Y                PWM5 = 1;8 N. }/ B. ~/ T* H9 z
                TH0 = (num_max - t_up5 + error10)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
- j3 r# G& b! f" v9 z, V2 C8 t                TL0 = (num_max - t_up5 + error10)%256;# ~6 B; ?3 a3 [9 J

: |6 V8 a: o4 @" Q9 E                t0_flag = 11;
% p; d9 w' M; p4 K' V9 V  s) P# y        }
& D+ T8 Y+ i' G5 [        else if(t0_flag == 11)( e( m6 e- [0 ~$ n
        {  L; s$ [: t! {9 [0 ~2 |
                PWM5 = 0;. c9 p6 `  N3 R7 B3 t$ Q: I
                TH0 = (t_change + t_up5 + error11)/256;4 V/ A$ V/ `) I. l
                TL0 = (t_change + t_up5 + error11)%256;
- D6 \4 ^9 W% j8 J* r
! r8 v2 o" w0 u$ k  @% s' J8 B                t0_flag = 12;
+ z- c, J! O: _3 m        }1 T- @2 Y# i- ~, k* w' t, U1 u
        else if(t0_flag == 12)& e( L; }5 E, [3 V0 j& L  n
        {( E7 o/ e1 m) l! [# |
                PWM6 = 1;$ v. H- U+ Z% s" q# @, S
                TH0 = (num_max - t_up6 + error12)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä* I. h! H; b( K. |  e1 f  ^
                TL0 = (num_max - t_up6 + error12)%256;
0 A: B" z9 }, d6 h$ a) i3 Q- p: q) q6 }# S
                t0_flag = 13;
& l; e* e3 s: Q2 H; l' \( A        }
$ g2 ?* ~+ s% A0 r8 j% A. H5 j5 R4 ]2 ^        else if(t0_flag == 13)
* n. Y8 L. X. S+ T/ Y        {8 A5 q, \+ y4 b: @1 ^. U6 A; ^
                PWM6 = 0;5 ^4 D' v7 b) ~# e
                TH0 = (t_change + t_up6 + error13)/256;
6 P( \# x, X' m5 N5 n5 ^& ~                TL0 = (t_change + t_up6 + error13)%256;
4 x9 V% Q) Q% k/ z- ]: S2 O$ F$ r# [+ w
                t0_flag = 14;
! o( a9 G' A) a* }) i1 d* }2 E        }
! E: A! J8 c1 D2 x3 s. P) D        else if(t0_flag == 14); R0 j; |! A# g) k
        {' n( Y% y* ?; Q
                PWM7 = 1;+ a' t; {; o+ j
                TH0 = (num_max - t_up7 + error14)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
. p9 D1 u0 G+ v' p. @9 Z                TL0 = (num_max - t_up7 + error14)%256;/ z. D* g; y/ {

$ Z  |% x, |1 p                t0_flag = 15;
3 I0 j8 ?- x6 O        }7 L! E7 l/ D8 R2 }, J
        else if(t0_flag == 15)
4 d+ K: D: I2 m$ V8 k- U        {7 G. t  n; U; U1 {4 E# d9 \
                PWM7 = 0;
) x! [  n/ P5 b+ l3 @) f0 o                TH0 = (t_change + t_up7 + error15)/256;
0 S+ H# r- p0 P9 g/ w1 o7 L* ^                TL0 = (t_change + t_up7 + error15)%256;/ N' e5 T5 W# W: b- R

: {& k$ q; ^" N5 o8 }( W+ V                t0_flag = 0;
  f2 `; @1 o4 }( u        }4 E* j, O2 n- V6 i; O8 D, _
& ?1 ^' x8 h- J8 t; G* ]8 Y
}
9 r; M8 m9 h% E% Y) J1 ]void main()
- T3 l5 F/ y! h{4 v0 K5 M0 c/ p# g' T' w
        uint t_while;, k: Q+ ^0 S% A! p& p; M
        timer_init();, k1 S7 I; w7 g, V! p
        TR0 = 1;
; `; l, A7 O9 ]' U3 o        while(1)
8 Q8 V1 k/ c7 y- o        {5 o& n, k* d. K; k
$ m' P$ T4 s5 C/ S
                if(ADD == 0)  W; u; W  `- P/ Q  k
                {/ Y) R/ |* l) G7 U( G% M
                        delayms(2);
6 i0 e1 _! M! f3 b; Z4 p+ _                        if(ADD == 0)
! }" g/ Z2 y( l5 V                        {% E( |, C& Y! ]/ ~4 g% p8 N
                                if(t_up0 <= 1950)
; S+ v7 g9 H* u2 }& H                                {
# L8 ?# _; ]3 c* {                                        t_up0 = t_up0 + 50;
/ }' q5 d! s& \4 [* f8 D                                        t_up1 = t_up1 + 50;
/ ^* ~; h2 j+ i# L; W                                        t_up2 = t_up2 + 50;
8 @- O, f; q) T! L% i* I                                        t_up3 = t_up3 + 50;) `1 R: `0 ~1 \" N3 O
                                        t_up4 = t_up4 + 50;9 S, Z& @; O% x- {
                                        t_up5 = t_up5 + 50;' q1 v$ p3 ^* z* [: E+ y$ M
                                        t_up6 = t_up6 + 50;
4 [9 z% ~, r% z3 |3 _" @                                        t_up7 = t_up7 + 50;. T  w% r' T! a+ R
                                }
$ `$ c; A9 k) u+ O9 S) H
9 a' c: [1 \% _% Q! k& ]% c                                t_while = 50000;
- W. N, }7 I3 B, W1 M& C  J                                while(t_while--)                //
' ~, T6 i2 l- O" Q+ b/ e                                {; a7 O- U" o$ b5 H/ q" l$ w. |
                                        if(ADD == 1)
1 P  J4 ?* g% W# J                                                break;& c; s. k& K! w$ r) F4 G: m: ?
                                }! E. f$ ~# X2 |( B

4 f& x* q1 L; }8 Y- O                        }
9 M( ~1 E$ |' x2 Z3 h' A8 e5 I+ |                }, o: @  o; j7 h" f

  b7 F, P: i/ k' o! C                if(SUB == 0): r9 |/ h8 _8 L
                {
$ q' i) L8 i% h& c/ ^                        delayms(2);6 S( B5 _" Z2 @9 I2 E
                        if(SUB == 0)
' q9 u6 m3 e% e7 q( K3 T# w( v                        {5 _" i5 X* D: p/ L0 b
                                if(t_up0 >= 1050)
0 z6 a( ^7 z. |6 k6 Z: }% ?# J0 i                                {
+ h$ @! U* M. V+ Z9 |3 f( T                                        t_up0 = t_up0 - 50;$ W7 ]2 z9 C1 E: ?
                                        t_up1 = t_up1 - 50;' ~9 U1 f+ G3 t- I: [  v* m
                                        t_up2 = t_up2 - 50;
/ C( d& t* K# H+ ^" a. E; D( G                                        t_up3 = t_up3 - 50;
* [& W5 ~5 T- [, G! h$ G, l5 d! g                                        t_up4 = t_up4 - 50;
8 `  j# p  B/ t7 ~7 N, t$ k) @& g  m                                        t_up5 = t_up5 - 50;9 M. {( P4 f- F4 j, J
                                        t_up6 = t_up6 - 50;
3 D2 B/ G! p* I. O* m+ D6 q4 K- O% ~                                        t_up7 = t_up7 - 50;
) c$ l( Q1 z( D8 _8 R( t! N4 N0 x                                }$ m$ h& b: Q$ G# z) {% ]: {  H9 u
. m- x5 n4 H+ Z- X: T- V
                                t_while = 50000;
0 N( Z: ~3 i+ `0 A+ g+ A                                while(t_while--)
$ b( P$ r0 n- Y                                {
& x7 s# C1 C0 D9 H: C* u" B$ I                                        if(SUB == 1)
" d0 k& h1 m( C) G9 d, s! |                                                break;
9 Y2 f. E/ ]& ]8 G                                }
/ k7 w+ l5 Y* ?3 k
/ z$ n9 F% N6 N) G* A                        }
! ?: z0 u! d7 g% S4 ^  S* T: M0 @1 \# w3 G                }
1 W  J. e$ n9 R# K        }, F: m' G8 m7 T' L

- O9 B$ P  J6 G* Z# x) ^}0 X) W3 W$ J) H/ u" K

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

1.JPG

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 05:21 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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