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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)1 y9 u0 ?" h2 W' F4 q, W8 \  Y  h
' U7 K' a! v3 f- r, q' O. I* ?
" j7 u  ~+ U: X' p6 |1 X
可以通过按键控制角度增减,程序和仿真齐全,可以运行,相互交流。
( ~& ~! D& E; V. E4 c) n2 y
! c) f. y) K5 b* J4 B2 B单片机源程序如下:* g; X8 @! W5 Q5 e# {8 r9 Y* _
#include<reg51.h>
( ^! k9 o) ~2 D6 y
" V9 D! o! F" k* [( h- Csbit PWM0 = P1^0;
3 C1 n, y! K, t! ]sbit PWM1 = P1^1;
" e/ P( H8 m" U/ j: w& msbit PWM2 = P1^2;
$ X# M  ~6 R# A9 Q& b; T1 csbit PWM3 = P1^3;
: C6 S" _3 v& G2 x( Usbit PWM4 = P1^4;
; C9 @/ K5 r  G; J0 Ysbit PWM5 = P1^5;
. D! o5 ?) V" p4 ~; A0 Nsbit PWM6 = P1^6;( J8 f6 W7 B: \7 j  G% Y
sbit PWM7 = P1^7;
4 Z9 \) G$ r6 O: S# w/ J1 E8 e) K0 ~& M
sbit ADD = P2^1;# F- D% m2 e- u5 {' [
sbit SUB = P2^2;
0 o8 ?7 u$ S# N! }# _1 u
' o2 X* f; `4 ~4 r8 X#define uchar unsigned char: d3 U. [% }2 C+ i
#define uint unsigned int
3 N' a- _; n6 B& V- q5 o& F+ Y. Q+ o+ m$ e) b" s7 ^6 z
uint t_up0 = 1500;               
$ g- h4 g: |# Y. J+ juint t_up1 = 1500;        //1.5ms
' q3 G& N/ _, h+ A+ buint t_up2 = 1500;6 N1 C- a8 H% k1 I7 P/ D
uint t_up3 = 1500;2 k9 u% ]! j& Q& F4 Z; T
uint t_up4 = 1500;
- N4 O& c5 g7 w, J" \. F/ Fuint t_up5 = 1500;
$ H2 k8 V* k" M  A% ]6 muint t_up6 = 1500;
# x& T8 E9 s* i7 `: q  o' N3 V: |6 suint t_up7 = 1500;2 J- K0 v8 [, j. Z, @

7 E! k! _& W4 W4 }9 [( l. {6 guint t0_h;3 ^) {0 l; B6 F. l3 c# B: i/ ~( A
uint t0_l;4 s: F5 H. n( g$ a1 S+ X$ \( s; R# x

+ v) e  q7 j4 U6 u6 m# G. v, h
- V# w8 I: b- z/ Y) ?void delayms(uint ms)
8 ]8 I3 o3 t- U: Z{        4 w: ]2 b5 k  ]: c& a6 `5 s! F/ u
        unsigned char a,b,c;
  O4 ]; Q  A1 _% e        while(ms--)$ U/ {0 [1 B+ Z! G, D1 I+ \
        {               
7 W0 L- `. @9 U5 c) }! J    for(c=1;c>0;c--)" [' b& D  A" i+ T% C4 Q5 z  A
        for(b=142;b>0;b--)1 H6 m0 M7 j( h2 j) e. A4 {  E5 Z
            for(a=2;a>0;a--);7 Y3 ]: C2 g- Z  a# q
        }
- Q5 ]" W' N" X: ]; ^) i& f( e}
0 ^* m* Y. _$ [1 qvoid timer_init()
$ C) C3 W* h9 g4 e8 x+ Y{
8 }) e4 ]! l/ J! a& [3 P: e        EA = 1;
9 G" c5 v0 P( Z2 {) h        ET0 = 1;1 \! {, o- \) }8 ~3 W
        PT0 = 1;
# ]0 R. V% m$ `1 ^& y        TMOD = 0x11;
3 E) {: [. o6 r1 u0 n7 R        TH0 = (65536 - t_up0)/256;
7 f( q  F7 e  g4 o8 G        TL0 = (65536 - t_up0)%256;        
, g9 J5 t! M1 H( T% p0 @$ P& g}
# Q9 g4 Q! I5 J) b# K) l+ T3 h& s- c4 s" L
uchar t0_flag = 0;
- I+ p8 V$ B7 L. d2 zuint num_max = 65535;       . ~; F, t5 p9 s9 }$ i0 A4 c4 Q4 e
uint t_change = 63036;* j4 v: H0 y" P7 Q) g2 M
. x/ d' E. A) G4 q' }# U
uchar error0 = 45;
  V9 s. z; c7 T% {  i1 duchar error1 = 45;+ v9 y, L: k( k2 q+ c: v
uchar error2 = 52;! [$ E/ F/ a& Q( B+ F7 P, t0 a1 ]
uchar error3 = 52;
) @2 Z) Q$ i6 _, d, Vuchar error4 = 57;
  u0 p! m7 ~  x2 H+ {- U2 r9 Wuchar error5 = 57;
3 |+ ?4 S* i9 r1 `+ @+ j8 f: @% H; c% Guchar error6 = 63;3 R+ D1 T4 P0 V+ g5 i
uchar error7 = 63;$ f3 _0 g# V& F# [) x
uchar error8 = 70;% C" r' @+ `& |; Y$ _; p+ U5 x
uchar error9 = 70;
, V/ Y0 t0 `& l8 s% \5 k% Y, cuchar error10 = 76;. Q- p1 ]* R" Z: V6 N* o* L
uchar error11 = 76;0 A/ ^. |7 |$ H- h
uchar error12 = 82;
: X2 R+ }6 z: k) Puchar error13 = 82;9 ^4 d: f( P' `1 b9 q* X' w
uchar error14 = 88;
. r$ j6 w: G. {9 r' w/ i, a# F8 z3 v3 d# Yuchar error15 = 88;
# \$ D7 r* S. i- M. Z, g% [* f1 `# K% G! o; b8 k5 [3 [( u/ r! \
void timer0() interrupt 12 m* A4 b! U5 ^0 M( G2 Y& c
{4 r' D' S# D5 r! ]: v$ L1 z2 |" n

" u# p2 Z- k3 L/ }  r  C, e        if(t0_flag == 0), r1 \% }" ]7 O+ }/ B4 `4 n
        {
2 N( ~4 }5 m6 r9 ?  A0 s' P                PWM0 = 1;1 G  A  U& ]3 {
                TH0 = (num_max - t_up0 + error0)/256;
( X; B1 P5 z) k                TL0 = (num_max - t_up0 + error0)%256;/ ^' M, G# N( w: ]+ d  M3 Q6 s
# a  i0 |$ b9 @* }/ J
                t0_flag = 1;
+ b& ~1 I* @* ^) L4 ]        }! @/ `2 R9 j3 l8 U; a
        else if(t0_flag == 1): _3 @" _7 I" d) y
        {+ m$ T/ M; J5 N- |% r
                PWM0 = 0;; x8 H3 D" g7 k$ n5 B0 h
                TH0 = (t_change + t_up0 +error1)/256;) b/ H9 A/ l0 W8 j" P: Q
                TL0 = (t_change + t_up0 +error1)%256;* A( H& N+ L+ H! @/ _( S6 i
% ?! _6 V, q2 F1 H
                t0_flag = 2;
4 n6 }, P% H% G5 \# E        }- }8 r* I1 L9 Y! R
        else if(t0_flag == 2)& c9 l0 r9 i& K' N. i
        {
5 c) \' p3 C1 F: A2 T& k+ p# v3 c                PWM1 = 1;& s% r, q1 a; }' G. v/ V
                TH0 = (num_max - t_up1 + error2)/256;6 c0 i0 J  y* z- u. V
                TL0 = (num_max - t_up1 + error2)%256;
! w$ H( A* Z0 E% T3 a7 {
; d) T! w0 z8 N! o- {                t0_flag = 3;
  V3 v6 L! e2 G        }7 B. ]0 c; l' ^- ]# Q
        else if(t0_flag == 3)
  u/ D9 }2 R% s+ |0 N        {" V9 v' J$ D, [9 v+ D) C% @. {
                PWM1 = 0;
4 A* v+ g5 i+ r/ `: M                TH0 = (t_change + t_up1 +error3)/256;3 H- c/ ^/ J5 j" e& @
                TL0 = (t_change + t_up1 +error3)%256;/ p( h9 S- X8 R4 Z
! f1 D& Y3 C$ z* `
                t0_flag = 4;
, }7 M( R- V8 ?  ?! C) ]# j        }
; l& y9 m- f5 Z" ~        else if(t0_flag == 4)
& ?5 J2 t+ A4 m( X+ t        {
& R7 E' A8 b8 O0 j: p3 g                PWM2 = 1;
# v( }9 W% u- {                TH0 = (num_max - t_up2 + error4)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
7 C( i* s9 w9 W0 k. D) z) d9 A$ O                TL0 = (num_max - t_up2 + error4)%256;
+ w! }; \, @& s) ]+ J/ L; _3 A2 E- N$ K1 U' p3 o
                t0_flag = 5;
' Q. C7 a0 q. E: x* [4 y        }3 ~8 k9 Q5 j, }0 W& Y
        else if(t0_flag == 5)
/ b' a8 t9 Y& p- D& c1 S        {; i7 b0 F4 `+ u* Y
                PWM2 = 0;
5 g3 Z7 ?0 c& b0 q5 A                TH0 = (t_change + t_up2 +error5)/256;% E7 q+ S4 U" r- U7 G/ c" z
                TL0 = (t_change + t_up2 +error5)%256;( K- A3 y! w3 J5 k/ ?4 N7 W

# R+ G9 O: G: E" U  y  [; A                t0_flag = 6;
' z7 M: M2 L4 R4 X        }- P3 }, o* k% U8 L' r) Z
        else if(t0_flag == 6)$ z' ?( U, a) b! X. K- w
        {
: j( ^* C, g+ T: {  P8 l, C                PWM3 = 1;! Z5 _+ b- \9 F" a
                TL0 = (num_max - t_up3 + error6)%256;' y$ I' b0 |3 Z2 b) p' R  G

1 v" s$ k9 y" D$ F5 v4 o/ Q                t0_flag = 7;
- H. f" F, F" L+ f. N, C        }! y# o9 s0 a$ ]/ ?, ~+ \
        else if(t0_flag == 7)
! I( c+ `( g/ u  c- U        {
8 h3 O/ A4 p' }  [                PWM3 = 0;0 U- T* c9 \  w
                TH0 = (t_change + t_up3 +error7)/256;
+ h5 {- V$ s% @$ X                TL0 = (t_change + t_up3 +error7)%256;
4 ]7 r) u& `& b+ G2 a6 L0 |0 F$ Z0 a; [, @9 K
                t0_flag = 8;
4 H5 x) O* p" l+ S4 E! v' q4 {        }
8 F, K$ H+ r6 X  M: x. F! `; M        else if(t0_flag == 8)) x1 G% m, o9 B* C( t
        {" h: \9 X& B- T: Y- @
                PWM4 = 1;
- s; N# b& `" K& d  |, R2 M$ K5 e; [                TH0 = (num_max - t_up4 + error8)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
. \2 X8 z- R. f7 q1 }# U                TL0 = (num_max - t_up4 + error8)%256;
* {  Q4 q- V& U$ E
" M- c7 ?% S! B4 u; R                t0_flag = 9;
; q/ w. h. k: n: I6 p' l3 k- E        }  y4 K! \7 k5 ~( f8 i
        else if(t0_flag == 9)
" a3 k) h# @9 F% u% C* e6 Y        {
2 p- c$ J7 R( }1 {8 c% y                PWM4 = 0;# R- y9 j! e7 H3 e6 U0 T
                TH0 = (t_change + t_up4 +error9)/256;3 d% T& K8 f- E# h
                TL0 = (t_change + t_up4 +error9)%256;
# E+ o2 a. l7 C: }0 ^/ K" k  v& B5 t
                t0_flag = 10;
' ^3 O. K# X0 ?. u1 |3 Z        }! L3 s% c! f) j- U: L
        else if(t0_flag == 10)
8 d% j( t+ y, V) ?9 s+ s' N8 A) j        {
- A4 t4 b3 I6 f1 t5 `0 r" g0 F                PWM5 = 1;4 P* O* }7 s0 ~& n1 Q2 C
                TH0 = (num_max - t_up5 + error10)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä+ n) z! V. e+ H3 d% X
                TL0 = (num_max - t_up5 + error10)%256;8 h3 t* J9 P0 w" K

  J6 s! U9 }6 c8 a8 ?7 t                t0_flag = 11;# K% w3 y) |# D& g6 y
        }
% m& X  x9 M$ Z) Q8 m( ]$ f        else if(t0_flag == 11)2 _, p. i. ?8 q" x, m: Z+ @
        {
( r0 G- P2 G7 \( G' E- A                PWM5 = 0;, S4 v+ z7 ^, S8 A
                TH0 = (t_change + t_up5 + error11)/256;
0 X" w6 J! V0 l) |3 K, J                TL0 = (t_change + t_up5 + error11)%256;  E& y  t0 F- o. b/ q! M, H0 r7 B
$ l: w( P" ~3 s3 ?8 J1 @
                t0_flag = 12;8 Z) v$ E" ]" h7 ?4 A1 ~) {' T0 T
        }# h! q( r+ e6 k
        else if(t0_flag == 12)
8 S. ?5 r8 H: I; Q' Q/ G: A        {( [$ d3 L8 Q7 f" m
                PWM6 = 1;% Y6 m6 I8 H. H2 e
                TH0 = (num_max - t_up6 + error12)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
+ C; @. P$ ]  J$ i5 f5 t                TL0 = (num_max - t_up6 + error12)%256;3 j! B$ v0 j: a( x, n* K) T8 j) X

/ {/ z) V$ s5 ]                t0_flag = 13;9 j! [; E5 X( y2 W4 T
        }# \. [4 Z5 K2 a8 q+ V7 t
        else if(t0_flag == 13)0 f. k6 l% x. P5 N2 L7 z! l- @
        {
4 u; M! e2 i# s8 U- H                PWM6 = 0;; D7 g6 {  D* d+ n
                TH0 = (t_change + t_up6 + error13)/256;8 n+ g4 l6 L! p6 t
                TL0 = (t_change + t_up6 + error13)%256;
4 x$ B8 u! L- k8 T. b# n* K, y' Q3 v& k" s+ Q
                t0_flag = 14;
7 \8 q: U6 q& q% |5 N        }' S/ i  b6 c; \; d
        else if(t0_flag == 14)
7 r; Z" @; U9 j: e; X6 Z        {. {6 s. T" }( O) g3 ]8 N
                PWM7 = 1;
/ s6 N2 Q. ^* p* L5 k+ S! I3 @                TH0 = (num_max - t_up7 + error14)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
) w7 \/ s' Q" B" Y8 ]* j; |                TL0 = (num_max - t_up7 + error14)%256;
# D7 X) l  E6 _( J9 }4 l( m- U* P! D2 g
                t0_flag = 15;
2 q$ ]% h$ y$ P" ~) i5 W, G7 @        }! @6 z$ a0 V3 p/ A% [: W; P
        else if(t0_flag == 15)
$ s, c' B5 I. `; }! x. R        {  B" b- s# y6 }+ J6 R4 H
                PWM7 = 0;
( T" Q3 E' i+ B% N8 u. ?1 N$ e                TH0 = (t_change + t_up7 + error15)/256;
" V9 y% C9 P# P/ z4 F5 b                TL0 = (t_change + t_up7 + error15)%256;/ S* A4 K. \* G6 v' @3 ]
9 Y( V1 y$ \( x7 j3 C# U- H3 o
                t0_flag = 0;
0 q  Y* u3 D$ D. |! O; H' @. N        }6 c  L# V- l# o$ P
. x+ T7 a5 z/ i( u/ `
}3 r% f3 k7 ?% e6 d
void main()& c/ r" N8 v& B6 D/ C
{
5 W: w7 G- n9 G' \: t, i        uint t_while;) }; f9 v$ b! k* `
        timer_init();' |7 T! G6 I3 j4 a8 K  m
        TR0 = 1;
7 v+ y, e% @: u+ M. ~        while(1)
0 W) G6 C, x# P        {4 V+ o+ p0 b! O6 c5 G4 F
( T4 }8 |+ p, U& _7 A$ V
                if(ADD == 0)
9 u$ Y) @5 x5 l0 ^! w; ^                {- e7 o' @! f( q# ]7 m* N
                        delayms(2);
4 p1 m% d, g+ _/ y% m                        if(ADD == 0)5 T1 O6 h5 n% t. C" U
                        {
7 l5 a' K/ E2 M/ G; ?2 b                                if(t_up0 <= 1950)( ?0 U, J3 l% F& m
                                {
* m# M% B: G* j% K% l                                        t_up0 = t_up0 + 50;
0 O9 l! y  L' V                                        t_up1 = t_up1 + 50;+ j" {" f+ x' D
                                        t_up2 = t_up2 + 50;" U; @3 ]- R; e' I0 s4 h
                                        t_up3 = t_up3 + 50;
* b5 r+ {( u' ^# l                                        t_up4 = t_up4 + 50;+ w1 G: ?) x. A& l1 S. ]/ O2 e! z
                                        t_up5 = t_up5 + 50;' X& L& Z+ W6 }' c5 h, i
                                        t_up6 = t_up6 + 50;
8 b  _' F) p: |/ z                                        t_up7 = t_up7 + 50;
1 y( n. h; ?4 p* v+ d9 {                                }
: C! O( U0 }+ m+ {8 A
$ T3 Q. y0 q, T' \                                t_while = 50000;$ ^: e4 s5 j0 U) l
                                while(t_while--)                //8 T& L- |9 X$ X; Z
                                {
. x6 n8 Z! n" n* H1 T( a6 L8 F                                        if(ADD == 1)
4 w9 s1 b# M, \0 k# H; Q0 g                                                break;
, v1 K4 d% }8 ]$ i8 `                                }9 Y, j2 b1 a2 K3 ?7 s2 D- S
! d  `( X+ Y! ^
                        }, t3 P8 c4 O& d6 o
                }
* C0 [! k( J: M# v5 ?0 _+ W3 B" m
5 R* K. j! g* Y; e                if(SUB == 0); p' {% v; C) W9 t+ f
                {
$ \  r8 N, I. M! S+ ]                        delayms(2);
% }$ a9 Q: \+ p$ M7 Z                        if(SUB == 0), ?7 \4 ], p. Q8 Q3 s% s- m6 a
                        {
8 K) O# z7 V$ y  o) |$ y                                if(t_up0 >= 1050)
% c0 r  B$ I, @+ Y( S. B# C- h                                {$ w5 t; z. Q3 b& A) l4 B, h
                                        t_up0 = t_up0 - 50;
+ ]% [% S8 a/ F+ `; \                                        t_up1 = t_up1 - 50;. W8 C, m# b% k1 V- ^
                                        t_up2 = t_up2 - 50;" L6 [& V) {. z7 o% _3 t
                                        t_up3 = t_up3 - 50;
: F( a2 E3 W- b9 a; K                                        t_up4 = t_up4 - 50;
$ t; C- v' O9 k! D                                        t_up5 = t_up5 - 50;* l8 a1 |  A$ Q. p4 R" ?
                                        t_up6 = t_up6 - 50;
) E3 T- a4 Y4 i% S                                        t_up7 = t_up7 - 50;) Y2 n) c/ p/ T% P+ y
                                }! U9 }# Q9 @3 N- V+ r6 ?

8 q7 ]. e1 e0 ^9 q+ b                                t_while = 50000;
: E0 t: G1 E4 t                                while(t_while--)
1 V; i& N( e+ {/ j                                {4 ?+ s& N8 E0 b; s
                                        if(SUB == 1)
+ y0 @# ^$ [  q+ N7 E; B1 C                                                break;8 L- o& r. u/ a* P( Z7 v7 Z: {
                                }) o) U7 P6 E& n7 o/ E
4 q1 \; J# Y' Z0 r/ t4 w- n: ~8 d
                        }
( S2 x/ A- X$ T* v. b                }! Q  ~7 i; C7 m6 A8 X' v
        }1 k- H% B2 K+ W. g& G, v0 S" V
2 R9 W" Q; B# r) ?- K
}8 t& M3 _, \/ G4 `

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-19 16:28 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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