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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
8 G* T% R2 k  a7 V1 S+ [
3 w* S5 F& p4 e- d4 Z, J2 b2 T# f& d, L) P; @0 a, I
可以通过按键控制角度增减,程序和仿真齐全,可以运行,相互交流。5 g  G8 n# r+ p' A

( Q, Y$ [& h9 `/ X单片机源程序如下:6 Y6 I+ k* B* S
#include<reg51.h>( ~" p' j2 u; ~
* R' A5 x* q& b2 Z
sbit PWM0 = P1^0;
: |8 j* @+ N0 d' y6 l* g5 \sbit PWM1 = P1^1;
- O! O1 l& a! K& U; l0 w5 B. J8 Xsbit PWM2 = P1^2;+ \+ R0 n, J4 `$ x7 }) w; t  S
sbit PWM3 = P1^3;
) y: V0 L0 I) v3 w" H4 S, Csbit PWM4 = P1^4;
/ a/ Q7 R$ p) rsbit PWM5 = P1^5;' O6 @  R4 ~# b' a/ ~7 p! X' c! K  e1 p
sbit PWM6 = P1^6;
6 w* l' S3 d8 a) Bsbit PWM7 = P1^7;( ]: E" w  c6 y9 U8 x

' i" J% f/ W0 x0 }9 y4 s: n1 l9 }sbit ADD = P2^1;
: f& @& K0 E2 i8 z/ E% Ysbit SUB = P2^2;( J3 H' }6 J5 D5 C4 L
/ `, @$ X$ I0 |" h2 j6 w  y9 ~
#define uchar unsigned char
( v) B3 V4 K# I7 R0 D1 I" H0 ]#define uint unsigned int
0 [, n- o$ L$ |! m! k% h
. y/ v' r8 G3 w! _6 V0 _8 ?uint t_up0 = 1500;               
7 ]) P* g/ k! `uint t_up1 = 1500;        //1.5ms- ^) d0 p* t4 ?/ ~" A: n
uint t_up2 = 1500;. [( y. r& h  W! P( u
uint t_up3 = 1500;( V$ D6 e$ E- i& u8 s7 r) Y
uint t_up4 = 1500;" T& l# J; j5 o8 ?# [
uint t_up5 = 1500;2 O/ s: ?0 T* K8 t3 b& h7 C+ J
uint t_up6 = 1500;
) Z: _# U3 h4 S7 W% ]/ suint t_up7 = 1500;- @$ F! w; D% G# U+ P
' ~0 {, Z2 P2 {! ?1 O3 u; K. b7 ]
uint t0_h;6 M: b* s3 z" T
uint t0_l;
; z' v  `( @7 l. M1 |. @+ o& t; q% o  B2 H0 Y( V# }

7 ~' f, c, Y+ w+ `4 B4 A* f( zvoid delayms(uint ms)
5 D1 E4 d: w/ q{        2 D. I5 V% P  G
        unsigned char a,b,c;0 _! ~/ t' S# K! A  z/ N% w
        while(ms--)
5 J+ s2 n- M+ o' k; f        {                1 T/ w0 d+ x; p, X3 Y: d1 |
    for(c=1;c>0;c--)$ Y  C' Q- C7 ]9 E- U" E0 X# ^
        for(b=142;b>0;b--)0 F8 i& c5 F9 q* {* P
            for(a=2;a>0;a--);
& l1 f( N* S0 Z- D. s) A! v        }# j4 b2 U+ n$ r$ w+ B
}
4 ~6 L4 s9 t  i9 L# Y3 m2 Qvoid timer_init()/ n8 h- D$ g8 p! J- q
{- K* ~5 r& ^. }! L5 q( K  W, m
        EA = 1;* p( N6 t8 h: m( |# M8 F& B8 E
        ET0 = 1;$ R$ t3 d4 Q, h% T; v3 n
        PT0 = 1;
" @: Y6 y2 s6 q        TMOD = 0x11;
) M  U3 J7 o" Y: S$ b; i+ |! m        TH0 = (65536 - t_up0)/256;0 ?% R; ?! _* I  `5 h4 ^
        TL0 = (65536 - t_up0)%256;        4 U# n7 ]5 A/ p1 N9 V
}$ U3 O# P- r6 r$ r0 j+ C& R

0 \; ~% I* u5 p. i" i% E* c7 ^& ?uchar t0_flag = 0;
- v2 s4 Z$ O3 K! b  i0 C+ _uint num_max = 65535;       4 l8 }' W, `0 R
uint t_change = 63036;3 r; L4 A! d1 H% M. v# {; P
& |9 |* P0 y( n( Z
uchar error0 = 45;
; G, H- e* I+ @3 f9 S, d: H7 {. ?uchar error1 = 45;
& J% |1 A9 g. Zuchar error2 = 52;
4 I* U5 e1 M3 ^+ w1 Wuchar error3 = 52;* A. d$ ?5 r7 \* b( x) p- q  x( X- ^& T
uchar error4 = 57;4 F7 a% _2 o  V8 y: W& H1 o# N3 p7 h
uchar error5 = 57;
4 F9 p% J, V0 U8 j% P" W: Xuchar error6 = 63;8 [3 @8 y! I4 E" I2 i
uchar error7 = 63;
) F4 O! O; y6 x: j4 V" zuchar error8 = 70;  M8 R% F  o8 m# b
uchar error9 = 70;7 h- G* k! B3 @3 H5 C9 \
uchar error10 = 76;/ h2 |. i1 {6 E, Q; H
uchar error11 = 76;
" p2 z) K6 \5 Buchar error12 = 82;3 }$ |! ~: I0 i3 X) p
uchar error13 = 82;- ]. o. K' ]6 o# }
uchar error14 = 88;
; j- K0 r0 X( d. D/ x1 T/ Q" xuchar error15 = 88;9 U4 i. D" q) U8 I- G

" H6 ^- f1 J1 _: H1 ~void timer0() interrupt 1
: N. W8 _& `3 O) e6 K0 f{
) n6 t3 {- y( O9 X8 Y
4 z1 c4 j0 U! Z1 a        if(t0_flag == 0)+ E3 q, v# K  D# ~
        {* a! U1 J  l  |
                PWM0 = 1;; [& c, t& B& [1 p2 G
                TH0 = (num_max - t_up0 + error0)/256; 9 _+ h" j3 C3 D+ b% R
                TL0 = (num_max - t_up0 + error0)%256;$ G) Q  k: c& L* U/ P; F

5 Q  Q! n7 \+ P6 K' B4 X) n                t0_flag = 1;
7 G/ Y- y, M8 w3 T. k9 M        }
1 b# V, n. t+ e6 [        else if(t0_flag == 1)- u0 w/ [! U: D+ Q2 C
        {0 L$ E$ ?9 _: v
                PWM0 = 0;
9 m* f; X: ]: P- j7 I1 h1 e9 o                TH0 = (t_change + t_up0 +error1)/256;0 M, l! j! ^/ E( l. R% R# x" N) g
                TL0 = (t_change + t_up0 +error1)%256;
* G4 C7 T: ?. a
9 U4 D* J- _- x% F; V+ O) a                t0_flag = 2;3 @9 r; L9 \: o! I7 ^! v
        }
" [* x: B& r, H1 Q4 E        else if(t0_flag == 2)  @6 `+ ^1 ?9 K1 D
        {. [- B- j) D4 y( C$ D( i
                PWM1 = 1;& \2 L2 @7 X9 G, q7 V
                TH0 = (num_max - t_up1 + error2)/256;
# i0 A0 O9 o: ~/ l# o                TL0 = (num_max - t_up1 + error2)%256;
- S7 J1 `; T& U; T' C
( S: q* u( O5 ^# E                t0_flag = 3;7 _0 W, U4 w" S8 B* z
        }
5 X" Q3 e% H& Z# a0 w        else if(t0_flag == 3)
$ n. V  }6 M# c2 G  ?        {
2 o/ S/ v4 d7 F7 P( k6 K                PWM1 = 0;8 |0 A$ [7 a/ z) b3 \$ u9 T/ e
                TH0 = (t_change + t_up1 +error3)/256;
( `5 q0 ^& c$ K1 t7 }- N                TL0 = (t_change + t_up1 +error3)%256;
4 w& O7 ?7 K0 b6 u0 C) ~
3 c  m; ^, N* ?$ ?7 r                t0_flag = 4;
9 Z& U: ~* x4 [, ~( x. t        }
; J, T1 N* _9 X" Y( i        else if(t0_flag == 4)
) x, F! u4 `. [7 P! X+ J! Z        {5 |/ |5 T' x- L# D6 @. V: {
                PWM2 = 1;; M2 L. Q# S2 ?- h6 ?8 X
                TH0 = (num_max - t_up2 + error4)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
- |8 G5 Y3 w* w! ~; l2 p                TL0 = (num_max - t_up2 + error4)%256;
% S+ c- c8 k  s" n* F" I$ {
  T. F. O3 M% s- d; P8 w3 B                t0_flag = 5;: y+ I" v' k) }
        }+ l2 b6 r4 p  h* u7 @% t) k
        else if(t0_flag == 5)+ j1 t  t; ^, D0 s- W, H
        {) P* j/ }; K. _- K" n& Z
                PWM2 = 0;
1 C, K" G, b7 O; x+ f& E                TH0 = (t_change + t_up2 +error5)/256;7 F8 `) `1 ^6 w7 f8 s$ N
                TL0 = (t_change + t_up2 +error5)%256;
& U0 a  G. `. @. @
/ E% O+ a) q' ]+ u  L7 Z                t0_flag = 6;
2 j1 y4 I% }% |' F% S, w- a        }
' P1 Y# M3 q( R% \& u: H# k$ e        else if(t0_flag == 6)
0 y  b, o* x* F: u5 W; q0 u7 O        {
. R% u! A* _) f2 Y4 j- J                PWM3 = 1;
2 ?( P) |4 b; G; s                TL0 = (num_max - t_up3 + error6)%256;
4 B/ X. ^7 A7 H9 ~4 |' ]5 M! o, B/ C5 E' M
                t0_flag = 7;: p, i/ D: a0 }- Q
        }
8 D) ^3 z  `3 a8 l) p        else if(t0_flag == 7)
+ Q* |3 y& k' u, e: v* X9 Y        {4 @0 U' j0 p, H3 r/ j
                PWM3 = 0;
6 \3 F& S; j& T/ ]                TH0 = (t_change + t_up3 +error7)/256;
9 W+ y! M  |) w* N) O( s                TL0 = (t_change + t_up3 +error7)%256;6 N1 e7 H& O: v% v* `$ R

  ~4 j  q1 e8 p, x8 v5 C& D+ }" D                t0_flag = 8;( Y* I4 \: Y- y, J$ l1 w
        }
' k/ A+ R9 J/ B+ ~        else if(t0_flag == 8)
- `# s/ w7 C- C        {& m/ f5 Y$ K8 G; Q
                PWM4 = 1;. O: K' m; o/ I5 T" q$ P2 s
                TH0 = (num_max - t_up4 + error8)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä; z7 C( @7 [, x* S+ K
                TL0 = (num_max - t_up4 + error8)%256;
$ l$ t' Z' ^, w9 b& N/ M2 R  R' i( P* b- \, P& x% ]# H
                t0_flag = 9;' Y( A, u9 s. j- W! n7 F' Q
        }
  w2 t  C: }0 q        else if(t0_flag == 9): R( X) N% F2 V1 R+ _
        {$ {/ d: v0 E, h/ A
                PWM4 = 0;
. F2 S2 g& X  Q- s9 l7 O                TH0 = (t_change + t_up4 +error9)/256;4 z# p/ A0 ~7 `% D6 C- R1 {8 c8 s6 l
                TL0 = (t_change + t_up4 +error9)%256;* Z) B8 T+ M2 e2 G" Q

/ p  a" k7 ]0 i                t0_flag = 10;
+ u' ?. E, N) A3 g5 w8 A1 Q        }
* }1 Q: p5 e! {  j9 W, A        else if(t0_flag == 10)
# D7 k+ D% P% i" z        {1 ^3 |7 R: ^4 u2 {3 _7 F" f4 z
                PWM5 = 1;
7 v% F% V$ {/ ~5 D- A                TH0 = (num_max - t_up5 + error10)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄ걼䠠i  p0 L3 W  g- C* v) P; f
                TL0 = (num_max - t_up5 + error10)%256;
1 U6 U" R' i, i4 Z2 O; C! O
, W8 f% k- H# e# X6 D                t0_flag = 11;- D* y' S6 r3 m) \7 i. t) x* p
        }
+ s4 l7 F- A+ S  ?7 U6 H        else if(t0_flag == 11)
7 ^2 p" ^) {5 ^' ^) O        {  z0 f, R: \. B; A3 C
                PWM5 = 0;- n0 P9 b, b6 C3 |( m+ L
                TH0 = (t_change + t_up5 + error11)/256;
# E! H9 J, s' P/ y) W+ p$ B4 _: m                TL0 = (t_change + t_up5 + error11)%256;# j0 X. D6 C9 n6 u
% U( T' o7 {" ?5 f
                t0_flag = 12;$ J4 B& R8 L" ?. `+ V+ k' P5 P
        }8 `" g. ?# G" o5 [1 P. Q
        else if(t0_flag == 12)
; ?# F5 T+ b+ a9 {$ ]4 ^* t( f, k        {
& b9 ^$ j& ?! K6 U* s                PWM6 = 1;
* c/ N# [. C0 R8 S! B9 i6 _                TH0 = (num_max - t_up6 + error12)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
( N  k! \; i1 ^/ A- Z                TL0 = (num_max - t_up6 + error12)%256;6 i- W& S- ~# ?0 K9 f/ @

  c4 t) H- I9 f: `6 p2 h                t0_flag = 13;. M8 ^3 Q: _' y" n
        }
4 Y; W! G9 B7 A% K4 d        else if(t0_flag == 13)" Z- T& V( k; U% M5 ?8 ]
        {
; }1 T: n+ s  X                PWM6 = 0;
+ b' k2 G/ n/ d1 \  s6 l                TH0 = (t_change + t_up6 + error13)/256;( I  s9 i4 ^$ a8 K
                TL0 = (t_change + t_up6 + error13)%256;
' V& D0 P2 h7 [, |7 E8 q' m+ O+ l9 S- R) }. C9 ~4 y' Z* h' D- V2 G
                t0_flag = 14;' o, e/ R7 `5 a" H) x' S% r
        }/ t8 G  n9 A. r% Q. n5 J
        else if(t0_flag == 14)& a( z: U" p; Y3 F. p& e: [! j
        {
- H0 B  M6 i( \3 Z5 y. M9 _                PWM7 = 1;
- D6 M( M8 U7 U                TH0 = (num_max - t_up7 + error14)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä: }2 s% E6 A; o# w4 x* A* b
                TL0 = (num_max - t_up7 + error14)%256;
, ]4 W" d5 A0 h! q+ W9 X/ P# U+ b, X" z5 D( j+ H9 V* F0 `
                t0_flag = 15;1 s( r- P# |; R( Q+ O' Q
        }
! L$ y& [7 ?% s- Z8 k( [  a        else if(t0_flag == 15)2 [4 ]; i! t4 U. ^
        {/ Y( }. B+ ^8 n) z! `/ z8 c
                PWM7 = 0;& y! Y) Y; e1 L
                TH0 = (t_change + t_up7 + error15)/256;
0 {/ Y+ h9 ~7 @                TL0 = (t_change + t_up7 + error15)%256;* ^, Q2 Z6 E/ y5 x, p3 m7 J& m2 |

9 j$ R/ g: \- w. D0 `% {3 n                t0_flag = 0;
  k6 \, z  T: n( g1 f        }
: t% s* g& f) k' \
% C) z* P  W0 X; T: q}& x. q' }& A/ w$ X8 @. }* C
void main()" T! k6 w* c; j$ l) J5 D: `  o
{
# v  I# ~- ]3 K+ t$ e        uint t_while;
7 U8 w& S, C. u* R; Z; _        timer_init();) y2 r$ n2 U# I) [; B
        TR0 = 1;
, E6 _6 o: X5 C        while(1)
' n1 n  Z  a6 I        {9 T# Z9 y  {  o

+ @" [: }) X  ]7 Z- t; g, H- P                if(ADD == 0)
" t8 v5 W1 h: i+ _7 R                {
8 B$ w  n* r. z0 O: F9 |                        delayms(2);4 x  [0 y4 j! L" C$ a2 i0 X
                        if(ADD == 0); U  z# `0 v3 W1 ~7 i+ E+ ^) y
                        {1 m6 j% ?: G8 |, z
                                if(t_up0 <= 1950)" Y7 W$ P- m$ W4 ?
                                {
* r; V0 W* X( [7 b/ d                                        t_up0 = t_up0 + 50;
# @$ V2 H3 [" s" K& [) s- q                                        t_up1 = t_up1 + 50;
; C% C) y/ \% C. C( a2 x                                        t_up2 = t_up2 + 50;
* K- x7 O' I0 u                                        t_up3 = t_up3 + 50;; o  q7 Q+ S7 t* h' O, o( v
                                        t_up4 = t_up4 + 50;: P2 L. Q. o. t+ C
                                        t_up5 = t_up5 + 50;
, E$ ^  k) t9 n  ^+ R# O                                        t_up6 = t_up6 + 50;
- r7 D: T% l) P3 F                                        t_up7 = t_up7 + 50;
' R: G% x& S  v" l% G3 c                                }7 M+ R% f- |' Q1 V( U% u
1 Z  b- R; V# T4 W) f, w
                                t_while = 50000;- s$ r2 j. o9 P# N- S
                                while(t_while--)                //
2 f% d" o4 q! [                                {
% b; `8 }% G. e1 p7 @# ?! {1 z2 }/ L( M                                        if(ADD == 1)% W% }0 ~6 r* I7 `2 t1 K
                                                break;3 o* ]  h( P% d* Y
                                }  C  M; C$ o4 [/ n9 I

, Q5 Z  ]( I8 R" r: V* B                        }
- \$ }9 |/ K- |7 M7 g6 f* O                }
% v6 @/ J3 g9 h9 m: ?. D
6 G( y+ _: m- c; L; j                if(SUB == 0)
+ D$ d. N3 K1 c+ d% b3 P                {/ m' a' T4 X. z! ~: j: j$ z
                        delayms(2);
( m( d+ s# y% V( o* g                        if(SUB == 0)2 b$ o/ }) T# A9 `2 i6 X! i, P
                        {; E( D  v- e  Y3 ]4 ]- Q
                                if(t_up0 >= 1050)
5 U- \2 ~0 c5 X" _                                {
* `5 H" c( f, N- g/ W0 e                                        t_up0 = t_up0 - 50;
7 G! W% S: z! ?. D- c8 D                                        t_up1 = t_up1 - 50;
$ o, w5 V" [; k4 }+ A                                        t_up2 = t_up2 - 50;( S5 |* ]7 y: Z; E5 h% X1 g
                                        t_up3 = t_up3 - 50;; v; L+ z' ?- h% w% n
                                        t_up4 = t_up4 - 50;; g" f& [) S4 Z& v$ M# V2 [
                                        t_up5 = t_up5 - 50;
. `+ B# ^/ m( {7 e# L                                        t_up6 = t_up6 - 50;  C/ s! N6 o+ J- `; i7 R
                                        t_up7 = t_up7 - 50;# m0 w/ ^  g: [! h- f& i
                                }7 Y- d( R# E! X  s7 u* Y& A2 \0 j

' V7 p0 M. Z4 c% q/ O' m8 V# O                                t_while = 50000;
3 @' Z  P( ?% R+ Q3 e                                while(t_while--)# w+ p% S* N: Y1 ~% N, K+ x
                                {: ~+ \; V6 u' F7 f
                                        if(SUB == 1)
7 D0 ]9 U0 w6 {  [2 Z                                                break;
4 Q: S" F# O, p4 J* H' w6 r2 ~                                }
. a! Y5 I$ J9 s! E/ c- u
& _# o7 T" h$ V; j9 y; T                        }( F: [  \, n  X
                }
7 r* N0 Y4 ?- }2 T6 ], L- F) Y        }6 t% s0 C* ~" `7 i7 `' |  a

1 n: a4 f' k( J) b1 {}, K$ j# k3 y  ]/ I) q; q

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

1.JPG

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-4 23:51 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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