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

51单片机 程序请教 求大佬帮忙·

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-8-1 10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
这个是我的循迹小车程序,我的问题是小车速度太快了,但是速度降不下去,似乎是PWM用错了。
; U( O1 K" \9 D7 W# h) G本人新手。
$ B6 [+ v0 g8 _7 ]2 q) \- p3 w" |3 i9 H9 b
#include<reg51.h>
9 F0 B$ ^9 B+ G2 D( _#define uchar unsigned char
' h: ^: u3 ~' O0 Y* k#define uint unsigned int   0 D* I9 x- d8 i6 g$ S5 @% s
   sbit PWM1=P2^5;
9 M6 U# _. m% f. |7 g, [, M6 l   sbit PWM2=P0^7;
! r5 U. }* ], n7 m4 Y( L8 H  O   sbit PWM3=P2^4;9 B6 p$ o7 _9 P* ?
   sbit PWM4=P0^4;% v1 N% M; m! _' ^7 y/ \
   sbit IN1=P2^2;//左1前
! _5 p6 w8 ?( I8 P* x# |1 |$ ]9 z   sbit IN2=P2^3;//左1后    ^% {& Q; k) P5 q
   sbit IN4=P3^2;//右1后   ' O: k# e5 a" W
   sbit IN3=P3^3;//        右1前
& G1 K' R/ r; f" D   sbit IN5=P2^0;//左2前                                                                                                     0.
& _. d7 f3 ]- I8 \6 ~9 E+ R7 K   sbit IN6=P2^1;//        左2后5 _( W& W" P7 F7 [  [) S
   sbit IN7=P0^1;//右2前   5 [1 k+ g' F* h6 o% y+ M
   sbit IN8=P0^0;//右2后7 l' K$ h8 n2 F- ]4 s
   sbit Z1=P1^7;//左边第一个传感器4 U' t% e. D- H/ V
   sbit Y1=P1^3;//右边第一个传感器2 Z% W$ H- h2 ]4 x, }
   sbit Z2=P1^6;//左边第二个传感器. P, p% ~; O3 g( k# j1 q
   sbit Y2=P1^4;//右二
4 m& D! w; H2 X4 ^3 W   sbit Z3=P1^5;//中三/ V: i4 X) ^/ b* U$ P# c
   sbit c1=P1^0;//侧灯c1- A  c$ [: J9 T. X
   char count1=0;//计数器12 u1 u! j: ~4 H9 i
   char count2=0;
2 S( y$ l% ^" B$ p4 C   char count3=0;//计数器1
, O" w, v7 L; D" p' P   char count4=0;
5 `* \! W4 J- O2 f2 c   int y=0;
( }. R% O- a' M  M7 G; W   char sd1=0;
' A6 q' M# D0 x, n! Q" u8 Q  i/ E   char sd2=0;8 I7 P: q3 q: M# u: i! M" n) A% H% ?
   char sd3=0;
# o6 i1 p/ X1 e5 U   char sd4=0;% \7 X, b% M: G/ e' g' {" {
   //void delay(char z)3 W. C1 u: c% g3 n" i2 U
   // {
7 i8 h) U5 r' Q. `# b  z+ @         // for(z;z>0;z--)3 I5 m3 p5 ~7 `1 l
      //for(y=0;y<110;y++);
: Q% k3 Z5 [. X" _! ?; n
5 c. n3 S- f- G7 J8 l5 `5 g    //}! U; x- a+ `+ w) y+ N& U4 L
   void forward_turn1()        //左1电机前进1 H# f) V. D# N6 c, }, V
   {
# w5 ~: H6 U+ e: j9 z& s      IN1=1;, k' O1 C: R' a1 ^
          IN2=0;1 N. V7 G: X! T& W( U
          sd1=40;# e6 D! V0 s8 k4 l# Y/ V; _% v
        }' P1 @! @* Z! n# n- N# p. Z
        void stop_turn1()//左1边电机停止
9 T7 R) S( J& X! Q" }6 g        {
1 y& ]2 j) `* M, w% A          IN1=0;& k& ?9 \5 u& G/ Z" e
          IN2=0;
) P8 s4 o: l: h        }
% `6 r$ ~* W' |- q. S0 j; ?   void forward_turn2()//右1电机前 进
5 K& U6 ?( M. O( @   {
0 \. h: G& H6 x* r: f9 F0 n      IN3=0;
8 P, S/ r5 \* R  {# i6 v, G' V          IN4=1; 3 N8 y$ I. }' l/ y0 {, l3 F
          sd2=40;
0 Z4 I( P( W8 N  o7 b   }* i$ Z' S& z2 r' I6 U" T# E5 ]
           void stop_turn2()//右1电机后退
/ K1 y% c& K+ l% I        {# v' m2 a: F4 B7 q0 y; M0 x) q2 h
          IN3=0;+ [. B" G& g, `
          IN4=0;
& k/ i) k5 X+ g3 @         }5 k& j, U( m+ }* ]9 Z4 `$ Z
          void speed1(int count1,int sd1)//左1控
4 J7 X7 m) F0 U0 w5 n' @2 B          {
5 s( G- m' w# _8 [- A, L3 R3 s/ B                  if(count1<=sd1)
0 V9 `: A* Z2 i  C                {* x% [- y! s$ Z7 o: h( N
                    PWM1=1;& G* _8 p& v) u/ n6 i% [( j
        / |' N: W2 j% q8 {
                }, e; I  K% z0 i2 m; h5 E
                else. b9 A! b" r+ E3 _0 b/ a
                {
) F' W4 d8 u; c" c, F                  PWM1=0;! p, P9 M! x* I: m0 ^, `
        / M3 b' [3 u& [$ P( F& d; G+ X
                  }& M- T# y! w3 |7 g5 F1 {" e
          }
) r+ c2 I* H% @& _" b7 c
2 _* e- f  O* P9 V* _         //右1边电机速度控制7 p$ g" E: [. R- g1 P1 Q
         void speed2(int count2,int sd2)
2 j2 x8 t5 W$ U5 o- J5 o- a# D         {2 a/ H; N( ?+ ]+ N; o$ S+ o
                 if (count2<=sd2)& |. O# V0 o# _( l: H; f# Q/ H
                {
# y5 o( G) Y$ z' n( ~                         PWM2=1;
2 Y9 p* n; S. T/ d( q  |4 G                       
, U, s3 O' }0 c9 a! A         }
1 @6 j5 U2 {; O- K! }5 E                else
: X/ g$ u8 E/ C) a7 R7 u0 u3 ]# O0 }         {
9 W5 B9 H9 H6 [8 p3 @                    PWM2=0;
- [6 h5 k4 y' {3 J$ E& T               
# g: _7 ?# h/ I6 g+ \6 `          }
5 v* A- S! C! ?' E6 e         0 c0 x( ^9 }8 Y2 L( A+ j  P  q6 e
         }3 H9 \8 D: R: W$ c3 C: N# z
          
4 l5 m0 y" P1 d# q' t                 0 p- I- g1 W/ G4 n
                  
6 k$ u0 a1 O- k8 ?3 A' M        void forward_turn3()        //左2电机前进. V7 L. U( O) z6 H1 U8 c) Z
   {- G: A8 `1 V! p8 a
      IN5=1;
/ e& _+ f: h" P$ e7 W1 O          IN6=0;
. T! Z  V; _5 t* z          sd3=40;0 {5 n1 l# U# U% b3 `
        }
7 W% @" ]9 a) M8 i, }1 h        void stop_turn3()//左2边电机后退
8 O* L" L" M" Z5 @: F4 K& ^        {: N! X: G, w3 V6 A
          IN5=0;- j' P/ \4 u! e8 {
          IN6=0;
7 X, D, V+ `9 c6 ?/ G        }
" C  f+ \2 @& I4 E. E   void forward_turn4()//右2电机前进
/ p- _9 Z3 S( a8 t+ L! r3 k   {
0 n% x6 O* X  b      IN7=0;
" p! p" c# Q& f4 \( p% w" E+ _, X          IN8=1;
: S" B: c- Y2 @          sd4=40;
4 P, C! v$ b5 n0 v3 j   }6 \5 u" Q# Z# q# r. @/ u
           void stop_turn4()//右2电机后退3 s" M: G8 z: P% l4 v( A, ?. [
        {# N: O$ g  c* H6 ^; f# v& C* s
          IN7=0;( x5 U1 u2 J- e: k
          IN8=0;
$ I# o3 m2 n1 c; t; L3 f& R4 m5 q         }
( H- ~6 _1 Q- h, ~" h" X       
: P8 Y1 K2 o5 m+ b' C            void speed3(int count3,int sd3)//左2控
. i. d" X& l  a5 m0 G. ^          {+ G! s- h  \' |7 z# T
                  if(count3<=sd3)* x9 Q8 V7 q0 g2 o- Y: B
                {
9 T/ W. `6 L, F                    PWM3=1;" `- `$ ?! K$ E8 T: F! Y& L3 D
        3 R5 H" j* E  h: s" |: B  K
                }
, y" G7 ], M  S, e- w/ {                else
4 Y, w( n. |1 [; p' l                {$ o$ b5 [7 ^" Q; O4 h, [
                  PWM3=0;
( P# n7 f1 L3 B8 }: B          
( F# I! X& s1 a: r$ T                 }
, [% i6 f) H9 R0 w          }
9 J' |$ v7 q- V' O
( x' y  j5 @" V- `9 z# b( ?. {         //右2边电机速度控制" V- i" ?! Q. ^, F
         void speed4(int count4,int sd4)
  c+ z& f) O5 y  t         {
$ i/ Z. X: f1 [. k* h& M                 if (count4<=sd4)
' i( l8 U0 _& I                {
2 H  \, p9 p) o0 j# T. P                         PWM4=1;
4 y0 R/ }0 f. i* y7 }; Q       
2 o1 B) P) D$ h, K, p                }* I* {+ h/ L: p; Q" Y5 P# j
                else
4 s) `4 {- W: j                {
# ?; @2 \3 ~. m0 @                    PWM4=0;# X* s6 u" o, ^. }/ ^6 w. X5 h
                 & `0 |# Q+ U. y# E$ l, ]( h
                 }* Y( ~6 ?5 P0 `# n7 t
         
  P: r+ x& v" E# H' q# @( H2 E  R4 [         }, [" J1 f8 G3 _( t
          
" C( j  h3 `, E' \6 G+ @. T          void advance (int ct1,int sd1,int ct2,int sd2,int ct3,int sd3,int ct4,int sd4) 8 Y/ a9 Q' J  w! F5 d9 b
           {          . _+ C/ F' b6 G3 R
              forward_turn1();
2 h; y9 F/ K! {+ A2 Z                  forward_turn2();
0 U' ]( W9 C  |" J1 b, a0 @4 J                  forward_turn3();+ T  G" {' I; O8 j! |
                  forward_turn4();
( H- j3 a+ N* G: Q6 _* p& ]) A
! s: E, D0 y3 ]& ^                  speed1(ct1,sd1);
, K) T7 d6 Z" [5 W$ w. R                  speed2(ct2,sd2);0 Z- }( X% d6 Y% D# O: [
                  speed3(ct3,sd3);
, @, t4 f8 q1 \                  speed4(ct4,sd4);
5 R+ c7 y: o+ }/ n                    
; _& q" H4 V) n6 E" W: B           }//直线前进) k& o6 O# W% J' P& S
           void right_turn(int ct1,int sd1,int ct3,int sd3)//小车右转
7 g5 H% j3 @& ?. T& ]$ O3 Q5 o           {
  R" `7 b( R8 I- t: I                     forward_turn1();
3 d' r6 q3 w/ T0 y. W# u$ ?                     forward_turn3();
1 ]& D" h, R# ]0 j                  stop_turn2();- b& y8 w( p  S0 r/ T& ^9 y5 t( p, S
                  stop_turn4();  f4 ^2 m+ Z8 S, W- g  I( `
                   ) V) M* V6 }1 [
                  speed1(ct1,sd1);
9 F/ U% Y/ s2 z                  1 X. O- ^* N- n: d' Z8 d/ P$ G
                  speed3(ct3,sd3);
! l- B6 C( [( D# N3 P0 s) ^& r3 Q# L! v$ `                  
& M1 H- d! O" e3 L* \7 e          
! y- G0 u9 a! {9 r. M           }
, o) T7 B# O# n, o4 A! g6 C0 K4 s0 i- E. `
           void left_turn(int ct2,int sd2,int ct4,int sd4)//小车左转2 R/ |4 G! o( n
           {# h8 l( j  N/ v
                    forward_turn2();
/ d8 q1 R; f5 n) {8 B4 Y. }2 }; D                 forward_turn4();/ p4 _+ o. {" ~: \- B* J
                 stop_turn1();
8 E( \# F" u5 P, S* A  \                 stop_turn3();7 ]. T# K& e/ \$ r
# X; r, O( E2 ^! Y* ?. \

7 n, i; `' Y; {6 w) H( }' T# z6 ?                 ' ?! ]1 R# u- L- q
                 speed2(ct2,sd2);
) Q" h0 Y+ _+ e# ^5 p( w               
9 d/ Z4 ?/ R# [3 e3 I& a                 speed4(ct4,sd4);
: {, N: j7 r, p/ r/ _' g2 o$ s* P8 v6 q; L" z2 j) z  f5 p
          
; P" c0 E7 C+ I: D          
/ ^  N/ v6 O! ~8 ^5 R) v           }
# Z4 z5 q1 Z5 C# g           main()//主函数' @6 U  P0 i  P* ?
           {1 o- b& D( i2 ?
                   TMOD=0x11;
/ U) s( U% l4 R. c0 |+ p& J                TH0=(65536-1000)/256 ;5 M" X, S( ?, h9 `# P5 L; \4 c# K
                TL0=(65536-1000)%256;
) B$ v: B. Z8 z) z. [/ D  a3 ]                EA=1;
- O& o& M& E, k5 r                ET0=1;
# x* K# e6 h3 @+ T( L- J                TR0=1;/ s* `  U9 r) s

* Z" f& C8 i6 I+ L* \. p$ O+ K7 _0 K  h1 B: `7 j

( S. Q4 ?; d* Z, t9 f                TH1=(65536-1000)/256;
7 j! C4 B- R5 k                TL1=(65536-1000)%256;
8 ?( C3 x7 S, ]                EA=1;# ~. s% ?( ~6 V2 E- M! i
                ET1=1;! O1 E! l' W4 x7 S
                TR1=1;' p- H' D: K# ?, `1 H6 M
" a. T1 }1 H2 Q, j7 O  ^7 L8 ]
; q( Y0 O: q: T! u  L( |
                : t. q: J" i# c3 ]
                while(1)  m" k% `0 D/ Z1 }9 f* X: U
  {  I8 C# X9 y  p. B. a
    if(Z1==1&&Z2==1&&Z3==0&&Y1==1&&Y2==1)//中间感应到,两边没感应9 S" K  d, E8 a& |% P
    {9 ~% ?/ M; v% z" J  @
      advance(count1,500,count2,500,count3,500,count4,500);
- k/ Y  p" @6 _" u( ~7 y1 s    }5 k  B# q7 \( B# G
    if(Z1==1&&Z2==0&&Z3==0&&Y1==0&&Y2==1)
3 _/ h$ F2 ^/ H: g) J$ w    {
( d1 y3 G9 [/ F. g! `      advance(count1,500,count2,500,count3,500,count4,500);//中间三个感应+ q$ l4 m3 r* _/ @# L, W3 Z/ v
    }
  N, y/ w0 |$ t  O  Z    if(Z1==0&&Z2==0&&Z3==0&&Y1==0&&Y2==0)+ s* k3 ~# ?* Y
    {; r' b* S4 Y+ Y  a6 ]; a% t
      advance(count1,500,count2,500,count3,500,count4,500);//中间五个感应3 k5 F7 b( r+ n/ ]- ~. @! Y
    }
7 F% @: d5 n. e" g1 L& ~7 L4 v) n: v$ I, Z
& m- A4 o. ^$ B
    if(Z1==0&&Z2==0&&Z3==0&&Y1==1&&Y2==1)//左侧三个都感应到4 _* S5 B; u: w' D' W! j
   {- r1 v- G( V/ l2 ?
   left_turn(count1,200,count2,700);! T2 W1 i9 F1 [" Q
   }& w, V2 b/ ]0 E' o8 P) n
    if(Z1==0&&Z2==0&&Z3==1&&Y1==1&&Y2==1)//左侧2个都感应到8 l. o6 T0 e. z' M; P
   {* L5 F0 n# O, L. Q
   left_turn(count1,200,count2,700);& h, ^% ~$ l$ l. w5 Y! Q  h
   }
( M4 A! [6 o4 w3 q* F+ i! s& C8 s- j    if(Z1==1&&Z2==0&&Z3==1&&Y1==1&&Y2==1)//左2都感应到2 t/ n1 v# |( N5 n5 r/ `
   {: N! G3 c8 `/ [/ m0 L
   left_turn(count1,200,count2,700);
8 T  u8 r* B8 y" [8 `0 o1 d5 Y5 r   }" w( Q, M. ^9 u7 _! q9 Q; x6 |
    if(Z1==0&&Z2==1&&Z3==1&&Y1==1&&Y2==1)//左1感应到
$ K8 |! m: g& J1 J4 S   {
; f) O6 r* j* E# W6 l7 @+ u6 w' x   left_turn(count1,200,count2,700);
2 o' L: m5 {2 C8 h   }; t1 B( d: G, q1 G9 n$ L0 u3 X
   if(Z1==1&&Z2==1&&Z3==0&&Y1==0&&Y2==0)//右侧3个都感应到
, A3 l1 e. ?  J* M        {
" q8 H0 o$ H! N/ T+ O" |4 q        right_turn(count1,700,count2,200);6 P9 b$ n# z7 @4 b
        }
3 {* L% ]3 }% N8 d$ c9 n        if(Z1==1&&Z2==1&&Z3==1&&Y1==0&&Y2==0)//右2都感应到
* D$ R7 f4 b5 }% k* Q  U        {- z0 C! z! O4 F9 a
        right_turn(count1,700,count2,200);8 K5 g+ j8 y& a: {  Z; h
        }
1 H5 y1 _* y7 ^) d( `; `& Q# ?        if(Z1==1&&Z2==1&&Z3==1&&Y1==0&&Y2==1)//右2感应到/ x' `6 F$ d: J; U, x0 s' Y7 c; ^
        {) |) g- H. {) Y% S. a! X
        right_turn(count1,700,count2,200);4 h  T' c: [2 k5 e5 l( I! c; Q
        }4 Z1 j6 U) a! v
        if(Z1==1&&Z2==1&&Z3==1&&Y1==1&&Y2==0)//右3感应到
+ I( m0 ^0 \, z/ F. O$ l        {
; h7 ?) `4 c$ @        right_turn(count1,700,count2,200);) s7 T, D3 b% Q9 i
        }: C0 e: v4 ^0 x: F( v5 s  P

( z& e# k* V& ?0 P. m- @  }
/ u2 y/ T/ N* ]6 \% k+ E* U+ \) \    }
$ J0 [# I" h7 A8 `$ E; _2 g$ [- \! O- @& `* c1 ]- s# X
# `6 s  G2 D7 U1 {, h% P
          ! ^0 p) }& u+ D) ~* j1 h3 {# i$ C

  {9 w8 W7 c! \7 a        5 O4 W- A2 w  m; q! @
          //中断服务器# L( q. ^. J5 N( p3 K# h: k0 I
          void Time0() interrupt 1 9 L* |4 f+ ]0 _3 p
            {
1 q* D( f* s; q5 B% I5 l3 g9 {9 m                   TH0=(65536-1000)/256;4 t! R) ]5 D( i/ E
                   TL0=(65536-1000)%256;! D( N* m+ |% w6 f: ]
                   count1++;
4 d% Q' \: R1 Y                   if(count1>=1000)
( `# t% ]4 e. U* v& d- [1 ?                   count1=0        ;/ {1 b; n# t: c1 l5 [
                }
2 p- ~9 G' `" E( D1 v0 m1 Z4 Y4 b1 \# l5 `  y$ n, H) x
           void time1() interrupt 3
+ {9 B5 `  y! Y4 @           {
' G: k2 d5 ~" J) D1 n- j) g                     TH1=(65536-1000)/256;
. [! ?  ^( T+ G; ^$ U# V                  TL1=(65536-1000)%256;6 C# @* N2 @: H. u0 u
                  count2++;, v: H: e7 U" m* E
                  if(count2>=1000)
) k. p2 ~6 i$ U7 h                     count2=0;$ `( B$ Y/ ^' J- B
          
6 A# |6 c8 L+ n7 n; N( K! Q" y          
2 @6 h2 {+ a- _5 v1 j           }
0 l3 O& W0 n' A. ^% C9 k2 n          # H' p; I. m) p

% \$ Z: r7 w, p
6 U: ~& h8 H; \( [( K% e5 A6 H0 Z; q0 H
! W& m/ g# `! X" M

/ ~, B8 h' E4 m& M- S+ I" Q, A( ]2 M2 f/ U% C' k$ c$ h
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2019-8-29 14:03 | 只看该作者
       char count1=0;//计数器1# X" R3 o& H- P! d. K$ F
       char count2=0;
    + d% C9 Z7 }/ q: @% \) g   char count3=0;//计数器1! a' }, H4 O: o! I
       char count4=0;: - J/ Z  O2 D( s' `3 z
    2 s6 P& p0 B- F, F5 P2 r: m+ c
    把变量改为int类型
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-27 15:43 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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