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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)& x2 v5 ~- V$ t+ ~

% B5 M- S$ ^! l- r4 D  w- a
5 p! [2 u0 f5 u! {/ j# s: s可以通过按键控制角度增减,程序和仿真齐全,可以运行,相互交流。5 j" f" r8 m. t+ i# _! l

: T1 J5 T* N9 L  u单片机源程序如下:
6 J1 J! M$ T% B8 k; R% Y#include<reg51.h>
# O( V- n# u9 F
/ \3 L6 H$ x7 G8 rsbit PWM0 = P1^0;3 T; H( G- ~' V' M; j" Z) y' n1 |" M
sbit PWM1 = P1^1;
: M7 B) a' S8 t1 usbit PWM2 = P1^2;* }# g7 _6 K/ s% ^8 g8 s; `
sbit PWM3 = P1^3;
" P7 }1 Z' a) Z" Bsbit PWM4 = P1^4;
3 x! x7 X4 j- Osbit PWM5 = P1^5;
- E; {/ ~2 T- t5 c/ W+ Nsbit PWM6 = P1^6;% P! D8 E5 j/ z3 r
sbit PWM7 = P1^7;% z9 F, g& u* S" G, W, p. q1 d

. L1 k7 r* ~7 A! E. F" d% dsbit ADD = P2^1;# y- e  r  F( ?! V# l5 U5 [9 l
sbit SUB = P2^2;
2 V4 _$ u5 v" B2 i# g- N- n/ z0 Z1 p  q& E4 b4 u. x, E
#define uchar unsigned char. }$ \% t0 f5 m! s+ N* ?) o
#define uint unsigned int
' ?  m. d) L- e) w4 s/ v6 i( i# Q% f) k; f0 ~" K4 `- I% @3 A
uint t_up0 = 1500;               
5 s0 P. D. `" Euint t_up1 = 1500;        //1.5ms
9 m  {* O  m" k$ zuint t_up2 = 1500;' g- ~& j1 F: j2 c! Q5 d$ N5 e
uint t_up3 = 1500;; ~5 E5 @! L  \7 N) n0 |
uint t_up4 = 1500;, _! {: a! p+ C  [  ]& o
uint t_up5 = 1500;
2 b! I' a" x: }7 w7 I+ O( y" H2 r/ X; Wuint t_up6 = 1500;" R3 I" H) ~* ]- B
uint t_up7 = 1500;/ O/ l6 I5 A7 l' _7 b) w  F. B: g
  r; F+ f+ l4 h# ~4 }% d# n
uint t0_h;- m$ k! N* x6 @8 v9 ~
uint t0_l;3 T9 M6 P$ [/ Z; Z& w
1 o2 ]% \/ k9 F- }* H7 M
- _* k' G' k+ m3 ^
void delayms(uint ms)( N1 D/ @# ]2 h3 m: `
{        
6 G8 }, n, B8 |) _; h4 C) R        unsigned char a,b,c;
+ {% j& ?% P$ U, G+ a2 _        while(ms--); K& M2 D& i  f) S' d
        {                7 G6 L1 y# D3 `* M9 u3 \/ k
    for(c=1;c>0;c--)
* \  l8 ]) x: f+ Y# E  M        for(b=142;b>0;b--)
: E0 M# Q; q9 ^            for(a=2;a>0;a--);
+ F% K- y% x: _8 n: b; n5 S        }  N% x: j9 H7 j4 v* i8 W
}
4 Y0 D5 v& T" Y  d' ^void timer_init()
' a% ]; Y/ g  V{9 z& y2 k, O/ m6 I' {' |9 j# G) B
        EA = 1;
: w6 E7 x& a9 R2 |7 ]# U        ET0 = 1;" e4 |0 P& I! A) D6 l
        PT0 = 1;
, V" \2 n9 [# l& h        TMOD = 0x11;
/ C) b& y6 H" L; K9 k1 M! |        TH0 = (65536 - t_up0)/256;# r; g  p0 ~% N$ h, q
        TL0 = (65536 - t_up0)%256;        
3 p4 m8 V3 @& s  W9 E7 Z}
! b4 f$ }) T; `' n5 U& ?# f  v6 f7 ^- Y$ q/ f( a2 S
uchar t0_flag = 0;7 f' r2 p$ C3 }( \
uint num_max = 65535;      
, U% l; X3 H/ ?0 s8 Ouint t_change = 63036;
8 y$ h( M1 i% D9 j4 o+ O( h
; v: A0 \3 n3 f7 M, Zuchar error0 = 45;, H6 R6 d) D' q; j; d
uchar error1 = 45;
# M7 \  Q+ Y4 [% I& L6 o5 K4 I) }uchar error2 = 52;3 {& n4 D4 V7 r2 j5 e% }# J
uchar error3 = 52;3 i$ I3 b# r6 [$ X
uchar error4 = 57;
. U# c" z6 z3 ~9 j9 s# m( I$ D. S1 yuchar error5 = 57;4 |: y; a" h5 E' Z3 W% R8 x  N4 |# t) r
uchar error6 = 63;7 b) O1 E9 G& B+ _
uchar error7 = 63;1 V6 Z$ l" z4 F3 w
uchar error8 = 70;
. X" y+ W% T( X# Duchar error9 = 70;
4 d1 O; d% L4 d, Iuchar error10 = 76;- t: }! ]4 ]* ?7 Z) Y* K
uchar error11 = 76;
0 d! V- A5 f3 G. I: Y% _uchar error12 = 82;
* K% u0 ^1 V& q" P) P1 [( quchar error13 = 82;
" I8 S0 _: z! k) ~( Y; Buchar error14 = 88;  ~; y0 s- i5 T! W( K% b
uchar error15 = 88;
: V# J  \3 G; L* D+ x: ~  B* b- F1 _% A
void timer0() interrupt 1. m( N) ?( J: l  g! y% V+ \: b# Q0 g
{
# }! X- f  L! T
& b+ Y5 ?) V' K        if(t0_flag == 0)2 _. j. Z, H: ~( e
        {
0 f8 f+ z; u* c5 v3 j7 N1 _" O. c                PWM0 = 1;
8 E. D+ q) z5 B, s0 }- e9 L" p                TH0 = (num_max - t_up0 + error0)/256; 6 L3 Y9 Y0 M- h* X9 }1 p
                TL0 = (num_max - t_up0 + error0)%256;/ N8 U" n% s) F' D& J3 }
8 ^3 ^8 M/ S% K. F5 ~, [
                t0_flag = 1;0 r2 }$ h) T6 }7 I
        }
! s: H; _3 N2 U% Z; Z2 X        else if(t0_flag == 1)
, Y. Z2 T+ U& @: B' k  Z! L        {
( M! F$ g) O0 E. N; M8 t                PWM0 = 0;
; l1 `- o3 Q6 o, F0 U                TH0 = (t_change + t_up0 +error1)/256;* W  J; ?- |( v' T* o; q' R$ a: w+ r
                TL0 = (t_change + t_up0 +error1)%256;6 l4 g" y# P8 z+ Q

: q7 H) r) h& M8 Z* u4 [3 ~                t0_flag = 2;& v- H: D% @7 N& c) v) U
        }6 K& u) T; n) Z7 A" B' G! x
        else if(t0_flag == 2)
0 R" z) T2 }3 P/ f' K  @! n& m        {# i2 x6 c1 v" O2 c; Q$ l1 p
                PWM1 = 1;; g6 G+ s" g5 N8 |
                TH0 = (num_max - t_up1 + error2)/256;1 v" I$ O! M; D- k. c
                TL0 = (num_max - t_up1 + error2)%256;
* X. V$ t8 `" f3 x3 E; `3 e$ @$ e1 G$ S! X1 m% @1 L9 I  {* l
                t0_flag = 3;4 B# H# ?  f* W% b* D$ h
        }* M0 ]2 b3 L# D
        else if(t0_flag == 3)
1 J* A7 Q% N3 ?$ S% i2 [        {2 ]) K/ D/ I- t0 G) P
                PWM1 = 0;1 p3 g7 t9 k6 K8 @* t: x8 ~% L' n
                TH0 = (t_change + t_up1 +error3)/256;
/ W5 F/ C& d0 k                TL0 = (t_change + t_up1 +error3)%256;; C+ R7 k( g2 {, j# m
" U$ ~* C& ^3 I! n
                t0_flag = 4;7 R: j6 G- @& J: |  ?
        }
" {! B0 @: K; m& b7 O        else if(t0_flag == 4)# H0 H; t3 t( ^) j9 W
        {
9 q6 m1 Z7 O  ~0 |5 w                PWM2 = 1;/ V4 V3 g1 ]; Z# }) N' O+ q/ i
                TH0 = (num_max - t_up2 + error4)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä! |( C: q, M0 D
                TL0 = (num_max - t_up2 + error4)%256;
% W3 w1 [' k( Q* }5 z
  _' {, T: q3 g1 }. h                t0_flag = 5;
5 ~/ \( @$ G  n        }
0 ^! R9 w/ ~4 K+ v        else if(t0_flag == 5)3 b2 X/ g1 W7 Z2 ^& J4 N7 d
        {. E' X5 n" f: n5 J
                PWM2 = 0;
: b" C1 F& v2 T. L                TH0 = (t_change + t_up2 +error5)/256;- `0 A: `% p- m, [
                TL0 = (t_change + t_up2 +error5)%256;
6 q* d8 b" j2 T6 t" t6 p' A
# O9 C- E; b+ G1 H" ^                t0_flag = 6;; t. h& t0 ^4 s$ @3 [4 r$ t
        }
6 L7 W" ^; s$ W/ \        else if(t0_flag == 6)
7 h# k5 L! z, m& t. M) C: N        {7 D% `9 c$ q  _6 l7 N; i
                PWM3 = 1;! F6 j1 B% y' S; l
                TL0 = (num_max - t_up3 + error6)%256;+ }6 ]& B3 F, B0 W, n' Z6 x
6 c% U! |3 p. j/ L6 k/ z8 ^
                t0_flag = 7;
2 O% s( ^+ ?  b: p" s# e        }, M+ n- Q, v4 v& v4 D
        else if(t0_flag == 7)5 G, N, w4 q; [3 j; J
        {
/ a0 O0 p; @+ }7 U1 Q4 h                PWM3 = 0;$ ?3 f$ d- r8 {9 v7 }3 F1 N
                TH0 = (t_change + t_up3 +error7)/256;
0 G9 ?; w6 t- w" s3 t                TL0 = (t_change + t_up3 +error7)%256;: Q. z3 a! X, U  ?8 ~

4 [. l/ i2 e" c$ Q8 n                t0_flag = 8;7 C# k" j0 m0 ?+ P
        }
/ }$ ]# q) ^8 n& j- O        else if(t0_flag == 8)
( j6 K. ]  y( q$ L        {
( U- Y0 s+ F( D- g                PWM4 = 1;2 g* x' ], x) B
                TH0 = (num_max - t_up4 + error8)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä8 F* P# s  Z. k- x) s
                TL0 = (num_max - t_up4 + error8)%256;
8 U% w7 {2 e6 x; ~' s5 x8 ^
+ D# V0 Y5 x& Q4 d                t0_flag = 9;: `3 \% T6 W, Z  f4 u0 q
        }
4 ?1 _) {7 [8 m* d9 Z        else if(t0_flag == 9)
0 z+ L8 Y( c# X/ M( ]9 m1 S        {. V+ o3 A* r6 U7 h/ X5 f& x
                PWM4 = 0;
' i; i* U; {# e* U5 v, }                TH0 = (t_change + t_up4 +error9)/256;* T, X& G, A7 K% M
                TL0 = (t_change + t_up4 +error9)%256;: y6 K) T2 b" P% [% i
( a8 [  d' K+ F0 x3 O0 f: K, s
                t0_flag = 10;
) G' t8 k7 I9 @3 h: o% Y/ u        }
4 H1 t" t9 H) |7 h        else if(t0_flag == 10)6 |5 u  j+ N+ G" A
        {
  M  m! G; U* ^4 Q  z% I# W: j' o                PWM5 = 1;
- @+ {7 ^% t# D% B$ ~0 |                TH0 = (num_max - t_up5 + error10)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
6 N$ Z4 a, m. e                TL0 = (num_max - t_up5 + error10)%256;9 v2 m+ `$ o+ v* e" h3 |* |( `

1 y. f/ {  ]+ P, b  e8 T+ S: z0 g  S                t0_flag = 11;
7 P6 m1 v  k9 `& N, K        }. O' Y6 O8 ?! I9 A# ?, u  l
        else if(t0_flag == 11)
4 @! \. `4 O% x        {) L# [& \4 W1 J6 w! o; M
                PWM5 = 0;
; z8 j) L% R8 x) ^5 @                TH0 = (t_change + t_up5 + error11)/256;8 k" G: a6 z7 a( Y9 S; X7 u" v! |
                TL0 = (t_change + t_up5 + error11)%256;7 \" o5 U; S3 c- c
1 c7 P0 l9 x. C$ G
                t0_flag = 12;
( z/ ]1 s8 B) R: R4 T        }: Q0 x4 R: m* \6 h: g7 j
        else if(t0_flag == 12)
: Q. _( Q3 W+ r5 _        {1 h0 T) A2 g6 R& {9 N, \
                PWM6 = 1;3 [( @' R5 P) C. T& K
                TH0 = (num_max - t_up6 + error12)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
9 h' g5 O& C( N* ~7 R: }$ u$ v                TL0 = (num_max - t_up6 + error12)%256;
* Q7 i6 m9 R, A6 C: h4 u  o5 L8 l: v/ x! t) f7 x
                t0_flag = 13;
1 w& Q$ c8 C0 l, c        }+ G% C* j8 N9 L
        else if(t0_flag == 13)2 e3 L: H0 d: c) E6 E; }9 d
        {
8 g  q. _+ V7 _- W6 R                PWM6 = 0;0 j9 G, D7 C' Z
                TH0 = (t_change + t_up6 + error13)/256;
9 u6 c; _! Q9 g8 M  j6 e3 P+ `                TL0 = (t_change + t_up6 + error13)%256;& _" ?+ I- J9 q

% w2 W5 E9 _! q                t0_flag = 14;: m0 d8 g) p. k  I
        }9 d! T  B+ M8 |9 k4 O- C
        else if(t0_flag == 14). r  l. J1 x# ]2 y9 s* ^
        {1 e, _; J, f) P5 b' C3 |8 d1 J
                PWM7 = 1;
( V' W( L* ~; j- a                TH0 = (num_max - t_up7 + error14)/256; //+£¿êÇÎaáËμÖÏûÖ′DDóï¾ä»¨μÄê±¼ä
: ^4 O$ j* ~, a$ c+ W                TL0 = (num_max - t_up7 + error14)%256;
7 q' R9 \/ `% ~) ~0 M1 M5 k
0 D( C: e& z5 I! J, s- H7 t' C                t0_flag = 15;) W/ U6 C! S3 h/ A4 r: P
        }
) [( ^+ @1 w2 j' U! G: z        else if(t0_flag == 15)
  s  Z7 I/ W3 Y$ H" F        {
, V8 M8 r! R; j+ Z- v. L, w- m                PWM7 = 0;7 q8 `9 ~$ ^, R" e) o
                TH0 = (t_change + t_up7 + error15)/256;
2 s' W) }& H' A" F# e3 J                TL0 = (t_change + t_up7 + error15)%256;5 Q, C2 u- {5 |/ F1 y" m, q

1 M' X7 R4 O- ?: }! D                t0_flag = 0;
4 M! {, k0 I6 C& @% G& K        }
2 b+ G' V& S  A/ G
# e7 u; C7 e! T1 P}3 P7 L6 f3 O9 w+ M
void main()
! `& d# R2 X" h) t" J! }6 E{% j: R- ^3 d8 ]8 R. ^
        uint t_while;
9 e% J. d' @% }4 M. F% \6 Z        timer_init();$ q5 B* U. F+ C# e' w
        TR0 = 1;% K6 j  [) ]0 s( X" W
        while(1)
& ?, v3 e/ L3 A; ?2 h; I" ~6 D        {8 ^4 d7 L* i$ w5 S* J1 K* @

8 H( a3 Z+ M' U, ~' P; u5 u                if(ADD == 0)
9 W* e6 X( \" |; V9 H+ F! U                {: |' C- A8 {2 G* Z/ c$ X" Y
                        delayms(2);8 `7 n3 |- y6 ~% H5 V  [  f. M" r5 s
                        if(ADD == 0)
. E% u3 s7 N! V+ {' S                        {) V8 B9 L) t) h; O' G7 d
                                if(t_up0 <= 1950)1 J* H% C8 n" m5 ?; `2 w' }
                                {
4 w6 z. o/ u# r/ D* Q/ F                                        t_up0 = t_up0 + 50;1 U7 j5 ]+ w% V3 M1 X
                                        t_up1 = t_up1 + 50;
/ x: f* I0 a7 K! f4 b/ C                                        t_up2 = t_up2 + 50;
; E  T( u( Y  r8 a: r' B                                        t_up3 = t_up3 + 50;
; ^( w( A5 U4 o/ W6 c! b                                        t_up4 = t_up4 + 50;
) ], X$ y% P6 @* Y* n, l' g( Z                                        t_up5 = t_up5 + 50;- g' u# f+ B6 t2 x
                                        t_up6 = t_up6 + 50;) z) F9 E* P" q4 W+ ~" H
                                        t_up7 = t_up7 + 50;! i1 m/ n8 v0 ]7 |+ ^9 {% s6 V
                                }
# j, J. b4 D' a3 C  {$ G
$ g" V1 |# x+ S% ]                                t_while = 50000;
! g2 W$ {7 w: e- {; n& y! J                                while(t_while--)                //
3 V& Z$ E  ?" B4 |! S+ s                                {9 s4 r6 m4 b3 ^: ]
                                        if(ADD == 1)5 M3 r! u3 ], O
                                                break;
4 w8 ^0 v/ Z1 c6 ?! H8 X0 [                                }
/ _7 O9 y# M3 c
3 y% Y# w* Q& s: @0 n0 ]7 v                        }" v, I! b6 I$ q5 _8 O. G
                }1 u$ N& g! O: n7 [7 D2 H

7 D8 ~& U- B2 K* N. J                if(SUB == 0). [8 G3 d/ |, z7 {, `8 B8 Q6 Z
                {
9 Y/ L! W0 K: F+ K' f* I. P                        delayms(2);
" H$ i. _% z) ~$ z$ P+ {                        if(SUB == 0)
" H+ M7 G& F+ A! L! z- E                        {+ U. ~: P5 E5 c' G: l$ i
                                if(t_up0 >= 1050)+ J, F  P4 K: f
                                {
- p. H: z* n* d& S; @7 A                                        t_up0 = t_up0 - 50;
. G, ?9 @- O7 Z' n' L) ?                                        t_up1 = t_up1 - 50;
  V3 u2 t" w8 G) B  T8 e: e: h0 @                                        t_up2 = t_up2 - 50;
1 ^8 b7 `6 K) S4 c$ B                                        t_up3 = t_up3 - 50;1 ~# u+ O/ }7 N
                                        t_up4 = t_up4 - 50;
3 G3 E: w2 S0 R* B9 _. M                                        t_up5 = t_up5 - 50;7 r6 ?% F, s+ q) H. S1 Q+ X  A3 @
                                        t_up6 = t_up6 - 50;
% D1 @% }2 f3 e6 l                                        t_up7 = t_up7 - 50;4 Z& {) f! `) \( b  W% P5 B+ ^, W# o
                                }7 d2 _" Q. e2 ~# v" C
( T" Z7 V/ i; i
                                t_while = 50000;& O: C  w- z( a
                                while(t_while--)4 \0 I3 n* ]  [+ D
                                {  M+ l3 k: ]0 b
                                        if(SUB == 1)8 N0 V, O+ Y3 `
                                                break;
3 I( W8 C* l: F5 ]$ `  y                                }
( F( q3 @$ j6 \5 }3 C
  [/ U$ h- n# W5 J) L7 k! U' s                        }
; f$ w  o/ }4 G" P% M2 R                }
0 Y" p% A1 E& l3 y3 F( H        }: d7 b& k1 x( m% k
5 C. V; }/ ^' u6 Z/ T
}3 L" F% o) J/ A$ ?1 y

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

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

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

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