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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
这个是我的循迹小车程序,我的问题是小车速度太快了,但是速度降不下去,似乎是PWM用错了。
6 q) r: D1 }; ]本人新手。% T6 |7 u% w3 k- m
% d( T/ p; _/ W. q: I
#include<reg51.h>; J% V/ L& ]. F
#define uchar unsigned char
2 j" f" @& Y& c1 F( v9 o5 k- a#define uint unsigned int   
( C9 l+ V/ Q1 {$ I7 Y$ a   sbit PWM1=P2^5;
: b0 I4 A6 T8 H' O5 ^   sbit PWM2=P0^7;1 P4 V9 X+ [3 }5 c" j( N
   sbit PWM3=P2^4;3 L# B2 z( i9 p8 b- y7 `# S
   sbit PWM4=P0^4;
7 S1 I/ y% a9 X* A   sbit IN1=P2^2;//左1前
+ U$ S! [; w2 F1 ?   sbit IN2=P2^3;//左1后    j3 F5 i  N! d  y% M0 ^8 C" [# ]
   sbit IN4=P3^2;//右1后   
" h. P& [1 x1 {1 e1 ^" @3 i8 |   sbit IN3=P3^3;//        右1前# k4 z5 E- ?/ C
   sbit IN5=P2^0;//左2前                                                                                                     0.: g0 U. P$ d+ e/ Q; p' C
   sbit IN6=P2^1;//        左2后" H" b2 q; Q: p* F% [
   sbit IN7=P0^1;//右2前   
5 p0 Y- S% N. S& Q& y   sbit IN8=P0^0;//右2后9 x0 Y& z' G: w- {- w6 r
   sbit Z1=P1^7;//左边第一个传感器9 w4 O& G; B2 |2 I% t+ a, k5 \% j
   sbit Y1=P1^3;//右边第一个传感器- G! v3 o( ^: E+ G
   sbit Z2=P1^6;//左边第二个传感器
& i; k" F0 u# o8 N5 C6 Y' W   sbit Y2=P1^4;//右二
5 W7 j- X, P5 _   sbit Z3=P1^5;//中三( k3 N1 o- A; Y9 L( r4 j0 ~
   sbit c1=P1^0;//侧灯c1
0 U/ H4 @# i: ?& U3 w/ u+ ^/ ]   char count1=0;//计数器1
0 T  q- x* R% G% B   char count2=0;
$ i3 e' \+ w' O& ?, ^/ q   char count3=0;//计数器1; q2 t% W. p8 x( l/ J
   char count4=0;
* o0 f7 Q( k0 u$ y, R, d9 g/ W   int y=0;
+ N& c) N: y0 X0 n. c   char sd1=0;+ ~; f5 R3 q5 [! _, d
   char sd2=0;
9 @( C. A8 ~, ~" s$ B% Y   char sd3=0;
" }$ C/ [& r7 e5 K5 `   char sd4=0;
: E9 I/ O( u/ {0 a4 d   //void delay(char z)
' K1 u: t6 R: ~) ]+ j; I   // { 0 @  i, i0 ?% @* F9 A* b
         // for(z;z>0;z--)
" X( X- B5 X3 e! ?      //for(y=0;y<110;y++);
( Q( T7 a& \6 E# m* j/ L8 A9 j" i7 m3 u2 h5 h- V
    //}
. m# Y  ?/ ?" Y0 W" E1 k   void forward_turn1()        //左1电机前进" d& z- r* ^4 i- @
   {
9 L3 [  f. u9 I* f+ i2 f1 {2 F  F; r      IN1=1;
* ?6 s1 F: j7 ~6 Z$ i5 `7 k8 A" t6 j          IN2=0;+ }& u2 p. _0 h2 o+ s- M
          sd1=40;
4 G/ |- P, M0 Y- V) f4 `        }
& q# K0 ], r& \1 w4 {+ c        void stop_turn1()//左1边电机停止
( v' n4 _; ?7 e8 |$ P% K) h        {& w! P1 ]5 x* X
          IN1=0;. n" ?; d  [' {3 W
          IN2=0;8 P( M/ o: ?8 u" O& |% o% W
        }
7 G6 _) m# {' v; _" Y" n7 l6 f5 f   void forward_turn2()//右1电机前 进
5 v1 X$ ?0 b% H! b   {) _/ K6 o, e$ w  Y3 V# E
      IN3=0;9 S9 r4 n% ?4 w- u' t! e' @. u
          IN4=1;
* j' ^, K( r; E" v% X' M8 F          sd2=40;6 y- f4 J5 L1 A) L, v% e: U# \
   }
8 P6 n8 o6 _% j& q/ X/ T           void stop_turn2()//右1电机后退+ P, m; Q* B) Q9 |% G9 |0 r
        {
5 B: p( |: |6 m" T3 L" r+ K          IN3=0;
; b* U* b4 x, X& w          IN4=0;1 i) a& a& I( j  F! A) e
         }0 k* J6 P8 h* {- I/ O' _" ]
          void speed1(int count1,int sd1)//左1控; y, ]& j6 K1 N4 _+ ]/ e
          {8 f1 W6 P) ?. Y+ v, X/ J2 Z/ H
                  if(count1<=sd1)
* g. e1 X$ c# l0 Y: I( Y                {0 _2 m/ K1 X# t  y
                    PWM1=1;
" _9 [( i' m9 F) y4 J  f        % Y  @( y7 W4 A" E& U' M8 X" H
                }* ~5 z$ T9 H2 L8 Z' C
                else
3 w/ [" r+ w: n- ~                { # I' U1 {8 r2 f$ T% }
                  PWM1=0;
8 o0 n2 H* ^5 @6 g  H9 {2 V; `        1 |) M1 _4 i5 T2 d' ?
                  }
& i( S2 \4 R' y* n) U8 M3 Q. |" L          }
1 _8 |# r1 }( m; R( s" s4 h5 z% H$ Q. a& P; c9 c
         //右1边电机速度控制7 g7 H6 Y$ ]/ A) R
         void speed2(int count2,int sd2)3 \7 Z# t0 [, h9 p8 W& g
         {
. m1 {8 _# s0 q* v& o7 K# J+ f& w                 if (count2<=sd2)
) K# O0 X6 a" e" ]- J                {0 d% C) h; v  N% `- h$ }
                         PWM2=1;
9 X+ K! w5 U3 \( p) B7 h                        5 W1 O0 ^  {; j- h! f
         }
% s# Y# z, M+ [  I1 H                else' A# `! z( l" _$ @' n8 }
         { & ]* q& j% |! @) r
                    PWM2=0;' G3 Z3 y2 S( H5 H
                * J9 |. W5 B. B1 J
          }
+ d2 t' }; P9 Y# W( I: M$ H4 H% S         2 `. ~2 E/ s  v: u
         }
5 M% Z' v: ^$ a: Z3 `          : u0 n9 M$ |) D' _9 A! V3 J5 f
                
/ Z/ k& @% W1 ?  E4 t                   0 W1 H% D  F8 V/ Q* {  ]8 [5 `2 n; Q# J
        void forward_turn3()        //左2电机前进# E- d8 Y8 D2 K! m: m5 E
   {- S- l$ ]0 R! A4 b% d
      IN5=1;
2 N! Q% \  b( P  b8 K) m          IN6=0;6 J4 ~5 z4 o/ ]+ g: |, q
          sd3=40;/ ]+ o; d- R5 V  O# ]
        }( H9 y( v( L* B0 T7 v3 K
        void stop_turn3()//左2边电机后退
6 ~3 {+ l  T7 ~7 m8 [2 w6 b, G0 q        {" ?% p9 D1 {& l
          IN5=0;
' ]# o) Z9 W8 g! J' z8 G0 ]          IN6=0;& n& g4 m5 C, I1 Z: i8 y& n8 \
        }
0 S% X2 L6 u  Q. D' q! Z( Z   void forward_turn4()//右2电机前进
7 o( d' R  @5 q: [" s+ K$ ?   {
: n+ K6 F% @9 K2 E: U1 }! I      IN7=0;
: i* ^& ]. G& L) O) V. V' x+ U          IN8=1;
# P4 a# I4 i# I( _9 B6 c4 x, U          sd4=40;
4 U  O$ W+ l" r! T% m   }
. k2 d# H5 j; Q           void stop_turn4()//右2电机后退
2 I# B7 W! ?- t/ O( z, e) L        {
: A, H+ |3 `* K- y          IN7=0;0 s) Q9 L% g- Y+ P' G" N/ e
          IN8=0;
% w* U7 @- l, y         }
; ]% m2 ]7 Q3 [! M: Z, [; M       
5 r) g, Y3 d8 E7 E# K6 P            void speed3(int count3,int sd3)//左2控
& b3 h9 f* K6 U1 k3 W* @4 S4 B) f6 `          {
/ b$ v# p+ N2 h; r$ s                  if(count3<=sd3)
! l1 c3 E% s' w" ?3 k. Z                {
* \8 y" W0 X4 x3 X# ]                    PWM3=1;3 ~8 [% c$ K; q7 F+ Y
        ! f. b4 Y9 w; x6 P
                }; r! w4 U: U+ y% D; ?/ c. O
                else
* ~# ?% L' q- H4 R, r: g                {' F# b" E$ X; G
                  PWM3=0;
7 {5 r. H* L- A  I6 s1 }! c          
% R9 x5 G% u9 ?" \; x                 }1 {; c1 I3 G0 ^4 A/ W
          }( Z9 Q+ J' v, r# L' \8 A- ]0 F

9 {0 ]7 @$ ~, i+ N5 u9 b         //右2边电机速度控制$ F4 K, K! r3 ~% h7 |* H
         void speed4(int count4,int sd4)- d! m$ `5 B$ K$ u
         {
+ K- _& p, G2 x+ Q                 if (count4<=sd4)
( Y) M1 i, }! z. `  c7 q$ P                {
9 X( `4 y  J! `8 O2 H                         PWM4=1;
0 k% Z. X  T2 W, Q) Z4 z        6 W3 |6 x: c( K! _) ?% E, A
                }
* b& c" n1 S% W# P/ W, m0 c2 l& [                else
; T( }0 C) e/ y4 s% h                {
( _, H0 r. }$ I9 S) Y! L                    PWM4=0;7 V% Z8 K0 U7 K: c: h
                
* B* L, V; {9 c& g6 E+ Y                 }% @2 t* h, E% U8 n# [
         4 K3 n6 S, o! m7 z# v7 C
         }
2 d# h& r! X/ b* V/ ]          6 I  _3 M$ G4 `' P+ G0 R# S6 Y# u
          void advance (int ct1,int sd1,int ct2,int sd2,int ct3,int sd3,int ct4,int sd4)
8 w) J( L# c% n. Q3 q5 M           {          % g( q' r. x6 J6 ~8 o2 U! a2 E3 k
              forward_turn1();
. a! [5 j# {/ ~: L                  forward_turn2();7 ]3 W# N/ }6 E- N/ M
                  forward_turn3();
% l0 _( z5 q. T: k% ~* T2 K$ H                  forward_turn4();+ _" \+ J3 Z  v3 B; B

: o: T0 D5 J2 d$ J. P, e& ^' C                  speed1(ct1,sd1);* V* P" |% s% \: Q& e3 y
                  speed2(ct2,sd2);3 o2 P4 G0 u3 ?& x; ]( U& f
                  speed3(ct3,sd3);
$ o: h2 A  _3 e# ]' B$ S                  speed4(ct4,sd4);
. W, A+ P- z; h) ]5 @. O                    , B! g6 D2 d" Q- K8 Q
           }//直线前进
0 {4 T& C4 m& q# i/ I% W           void right_turn(int ct1,int sd1,int ct3,int sd3)//小车右转
5 g# ~% S, X* x( ]4 A           {4 k" V% M/ P# \6 w
                     forward_turn1();6 ~' u, @. T( y) @8 m* Y9 Y9 l
                     forward_turn3();
& W4 `9 A0 \$ X                  stop_turn2();
$ q' h1 G4 i6 B' x3 D                  stop_turn4();
9 e0 ^) c" S  J                   2 z! _  x% E7 @5 y& R
                  speed1(ct1,sd1);
7 ?3 g2 L, l* z' d; W: t5 k7 x                  # [% w& L. _! F3 ?  P3 g0 K+ V6 o
                  speed3(ct3,sd3);
4 S& H' C2 k+ b: B( ~$ x                  
" {& A$ b$ p" u          
$ r$ p4 K  H: R4 O" u: X$ `           }' Y& E0 p# [( ^. h! d

; a& q( l$ j3 ^) v: r$ P           void left_turn(int ct2,int sd2,int ct4,int sd4)//小车左转
" @6 b- Z) y& Q5 R3 x- Z' X           {% N' E( J9 A9 o9 @# ]6 f# B4 u2 _
                    forward_turn2();1 C& k6 X7 y/ g9 O6 P
                 forward_turn4();! o0 G$ B) L+ w$ A9 T& I  B& t
                 stop_turn1();; y6 u) i! s9 n" A% j4 T+ S* X
                 stop_turn3();9 a( a$ `! c0 f9 Q1 }( f
7 R1 H( h) n3 Q1 r
4 P( I( |0 h) o, s
                 
2 F) Z, x6 f; B                 speed2(ct2,sd2);& L: ]6 P0 _, I' Y1 g2 C& ^
                ' F9 P9 f& `# p) d0 W  z
                 speed4(ct4,sd4);* h/ x' N  A& V) Y/ T6 r6 `/ f

: n' A/ ^2 L: Z9 ^          
3 l) G# P9 |, Y/ [          
2 Q/ P: B! t! |/ \           }
% r6 k% h" I7 H/ a# ]. N  S           main()//主函数1 A: T8 p4 B! y
           {( ~* r/ o" ?3 r* P  z
                   TMOD=0x11;6 E! g+ y* v" `2 m$ {
                TH0=(65536-1000)/256 ;
0 \! n! F) p: a8 t" z4 L+ s/ p                TL0=(65536-1000)%256;
, L+ l8 D3 r5 h$ ^7 J                EA=1;# \7 o- _' e% c. `
                ET0=1;- N2 g7 m  F' p4 y
                TR0=1;9 b/ ]. r; x7 n/ T% k3 G8 `" D1 Y

# j, c' ?6 U$ ~2 N4 ]! Q2 V7 U' E, R  W: m& x
6 z4 i: I" U3 j" M
                TH1=(65536-1000)/256;0 [9 {- G0 B( p5 }% j+ T& \
                TL1=(65536-1000)%256;9 r8 v  X' U$ P& ]0 E1 O
                EA=1;
* c1 _0 {2 _4 l/ Q9 O                ET1=1;4 X7 R7 D$ v/ @$ l6 c/ e
                TR1=1;+ Y% F( d6 M' K) Y
, i! l' K8 @; L5 H2 q" ?

% s3 Y% E. R6 f               
0 u* p; K) b# b                while(1)" e4 e0 i: g5 X
  {
0 H" w/ W+ |- B! R    if(Z1==1&&Z2==1&&Z3==0&&Y1==1&&Y2==1)//中间感应到,两边没感应
( ~( w" O6 m: c& S4 Y0 a    {% Z) ~3 V% Y. k$ m( z
      advance(count1,500,count2,500,count3,500,count4,500);
2 p+ M0 q) v/ C% `7 |# P    }
3 t2 E/ U6 }* G. u8 a( D    if(Z1==1&&Z2==0&&Z3==0&&Y1==0&&Y2==1)
2 \  t5 F6 q' v6 D    {) _6 \8 u- V  h- {
      advance(count1,500,count2,500,count3,500,count4,500);//中间三个感应/ E0 R/ K# e3 ]
    }* _) h$ l  R" I6 V. E! E
    if(Z1==0&&Z2==0&&Z3==0&&Y1==0&&Y2==0)
# v9 R! l: ]5 C5 A; J    {$ E8 O: C2 h$ U+ L0 |1 V; D; h
      advance(count1,500,count2,500,count3,500,count4,500);//中间五个感应
) `1 ?; `6 k( i- l    }
' V: i% x2 |  I- a5 ~( p9 i: v6 D8 s

* Z1 i) b* z% P4 `0 e+ ~  C+ i6 J    if(Z1==0&&Z2==0&&Z3==0&&Y1==1&&Y2==1)//左侧三个都感应到. x: Z6 f8 e  e) X+ V+ U
   {8 a; f1 K) L1 H6 U$ g2 M
   left_turn(count1,200,count2,700);9 y% d& s! }# i8 ]7 E6 o& ?7 m  e! e  J
   }) k; [2 U9 h7 ]. ~' j+ w1 s6 B
    if(Z1==0&&Z2==0&&Z3==1&&Y1==1&&Y2==1)//左侧2个都感应到
2 F8 ^7 b. |% T1 C   {
4 v% P6 H4 X9 Y; l  z" i; N2 J   left_turn(count1,200,count2,700);- X3 u! b4 l$ D
   }
, V3 e, r/ c/ y. f7 [9 k    if(Z1==1&&Z2==0&&Z3==1&&Y1==1&&Y2==1)//左2都感应到4 k" ?% e, `5 h5 B
   {8 f5 B: w  B. g* p+ e9 Q. F
   left_turn(count1,200,count2,700);
6 e- e. [- @* O   }. z& V: \& Z* j6 h8 d
    if(Z1==0&&Z2==1&&Z3==1&&Y1==1&&Y2==1)//左1感应到
1 p1 V: s6 s, K: X   {
' T1 t+ i! a7 F: f6 ~: Q   left_turn(count1,200,count2,700);
4 L: q% q2 J- u   }$ D4 r, w- d& M
   if(Z1==1&&Z2==1&&Z3==0&&Y1==0&&Y2==0)//右侧3个都感应到
! l6 W1 u8 ?* J5 Q% C* [' U6 X        {% Q- `* M* f: }9 A; C/ z% I+ K" O
        right_turn(count1,700,count2,200);
7 V  f( m* `2 F; m! U        }% }, C- ~$ [8 ^) o9 {& Q
        if(Z1==1&&Z2==1&&Z3==1&&Y1==0&&Y2==0)//右2都感应到
% |# {. Y' O* i, x- J4 S        {, g) U7 c  z* O, x
        right_turn(count1,700,count2,200);6 q, ?- A- D/ q# D* d
        }
% d- ?9 J+ C9 f2 v1 R5 T* W        if(Z1==1&&Z2==1&&Z3==1&&Y1==0&&Y2==1)//右2感应到3 }! B- N' H* {/ l) H; V
        {9 _1 \9 J6 n6 ?' p: r4 h
        right_turn(count1,700,count2,200);6 ~' ]) h! N2 s4 f9 k5 }
        }4 w2 n. P9 a8 p7 x( k/ W
        if(Z1==1&&Z2==1&&Z3==1&&Y1==1&&Y2==0)//右3感应到
, E9 d+ z1 O+ {4 o        {
( t& h; R  J7 Z& ~1 B( q' F& O; M        right_turn(count1,700,count2,200);
" R4 s; p$ J1 K- E9 j        }$ T- a+ ~8 s. J- C/ ]. \6 F
0 o1 W* K% C5 P2 Z; h( d# k+ u
  }1 N# l8 N" r! J( u
    }  p. I: Y  g7 U# J, G9 t9 n- i
  f1 s! t, t/ h, e, m+ E! k
9 `! t% Q! u5 Y7 K# E0 p+ a
          
" h. J; _+ G6 c- }1 p9 r3 n
$ k8 }7 V" s+ K' F! u1 M* }/ e        5 D9 [9 P7 }3 O+ g" k0 F3 \
          //中断服务器% |3 |/ f; Z' q) S2 w5 r' v
          void Time0() interrupt 1 / D; D# [0 Z1 N. R7 j7 @; H1 Q
            {6 n3 J% `: d# u! X) u. F7 n
                   TH0=(65536-1000)/256;1 u7 o2 R# B& u" G
                   TL0=(65536-1000)%256;
; Y; b* Q" P8 I+ K8 u% c                   count1++;% z+ J0 S, R: g$ n
                   if(count1>=1000)
( f+ S( S6 y5 w( A: O) m0 C                   count1=0        ;3 B- `3 T" k1 L1 a7 D+ F# R! L& B' u
                }
, y# E1 Z7 W  G  k% a$ y1 w3 j, J# C2 L' c
           void time1() interrupt 30 ~0 ~$ Y% h1 H. F6 R4 G* V
           {# U* i  V, N8 Z% t$ v
                     TH1=(65536-1000)/256;6 g6 |0 l' P" u8 s
                  TL1=(65536-1000)%256;0 ^# h: }$ K" b4 S
                  count2++;' s# G: H4 ]! C0 o6 k1 H. c
                  if(count2>=1000)( H& Z+ i7 H  k0 m. K6 J
                     count2=0;9 Y; Z; k; E. w( |* ]+ [% c1 E
           7 u: M' r, o4 `6 w3 |' N, p
           / ~% {1 `6 x5 {/ f& v$ ]
           }8 Q3 T, u' B4 i9 L' B6 A
          . u% s) Y# Y: `% F+ p8 R, z
9 l7 S" U- R! y9 h6 D

" k5 w' a  Q$ k7 l2 }
* m: O- i1 h/ B' E" H7 f2 n' H( R; l! N1 s) l" j
# k" G$ E) _. `$ H  M3 `
4 ]1 ~; R/ U9 B5 R1 {
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2019-8-29 14:03 | 只看该作者
       char count1=0;//计数器1% ^& B3 i2 b: o6 {/ S* U  q4 @! \
       char count2=0;
    & k( G- a% g0 @0 {8 w   char count3=0;//计数器13 |8 M3 {( j  N
       char count4=0;: - ~! y3 y. x: y5 c* r

    , v, [9 P# W8 {: y把变量改为int类型
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-11 07:05 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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