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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
这个是我的循迹小车程序,我的问题是小车速度太快了,但是速度降不下去,似乎是PWM用错了。/ m3 S3 I3 W  S5 J2 Z! V
本人新手。
& G; [1 J; X' Z
% R! f& n1 n% a; v% h. K* o1 N#include<reg51.h>0 j+ v8 h7 n/ C) X8 W3 r
#define uchar unsigned char
; B, G2 F% f. t. O; C#define uint unsigned int   
2 j- G4 p2 q. O   sbit PWM1=P2^5;8 V" }0 ~+ U, h4 o+ _: U
   sbit PWM2=P0^7;  T- z* Q- g* q( M6 E, H; Q
   sbit PWM3=P2^4;
1 O! y0 w7 j6 `. P   sbit PWM4=P0^4;3 H* D3 h6 C1 c( ?5 y
   sbit IN1=P2^2;//左1前
; @) m0 E! d! v; J   sbit IN2=P2^3;//左1后  + A2 Q6 R% L0 s  s2 C
   sbit IN4=P3^2;//右1后   # I- {6 N, M' ^3 w
   sbit IN3=P3^3;//        右1前( B0 @: M. k! J6 A6 ~9 c1 \
   sbit IN5=P2^0;//左2前                                                                                                     0.  ~0 e7 f9 [8 l: ^* i9 w! R
   sbit IN6=P2^1;//        左2后
7 p# M9 u8 {$ g3 H: L) S& {( [   sbit IN7=P0^1;//右2前   
/ y8 c# w5 E1 q   sbit IN8=P0^0;//右2后
2 V3 k* c! T, f0 Q! r! s   sbit Z1=P1^7;//左边第一个传感器
9 Z8 W% V$ h: R' }  J  F% z' _6 Y   sbit Y1=P1^3;//右边第一个传感器4 G$ V0 D7 a$ r* F
   sbit Z2=P1^6;//左边第二个传感器, _2 T3 X: j  S# R
   sbit Y2=P1^4;//右二
" N5 v$ f5 M- A+ l1 O   sbit Z3=P1^5;//中三
0 ]  i" }3 C# v5 C( x4 U0 d1 q   sbit c1=P1^0;//侧灯c1
  h" C5 ?; X% d, H   char count1=0;//计数器1
6 n6 W2 \3 _, A/ d   char count2=0;
1 y1 q) A% @% u2 d! s   char count3=0;//计数器1
" v: v+ B. z- c# |8 x/ _   char count4=0;- M6 @; p9 X: v; |) x% X7 X! Y; h3 d$ i
   int y=0;
9 V0 K" H4 N- K6 s6 k6 E! V4 K   char sd1=0;' P& U+ s5 R! Q9 P
   char sd2=0;
/ f  V5 Z/ r( t- O4 ?1 `* p7 `   char sd3=0;! S: |. o; f7 [
   char sd4=0;
9 ?  t+ ?- \; H" o) {4 Z! X8 F   //void delay(char z)
0 y" I7 N. t$ U1 {- s% q! h   // { 6 ]0 C  P& G2 k+ |
         // for(z;z>0;z--)5 j* p1 {9 X5 z" x* X
      //for(y=0;y<110;y++);
! P) f7 }! \; [, I* x3 V! x4 ]' O/ Q
    //}$ h1 |* Z! Y, a% e* t0 T
   void forward_turn1()        //左1电机前进. P- m3 h$ e" v3 c# m- ^
   {
% W* ]" r9 N' l1 u      IN1=1;5 [" K2 |3 L9 c7 `. h1 o
          IN2=0;3 O9 {/ d  c, o
          sd1=40;
  |4 f  ~6 E# W( `" @        }
9 ~/ H2 i. `& W: o( F) o+ D5 E1 C7 I        void stop_turn1()//左1边电机停止" m( K1 t' x4 y' |( a# v  A
        {
- B9 X8 @- v) e$ y9 V  ^& Y          IN1=0;
) o& \# r: ~7 s, x. x! P          IN2=0;
5 ?  U6 g2 _3 m5 K3 F        }
  x& a2 k  a8 e  B2 }4 J1 r   void forward_turn2()//右1电机前 进
  a( W% }& D  F; x2 Z7 ]   {; y1 |0 \/ ]/ n0 P& d% u0 @
      IN3=0;
1 f  E- p0 B4 S0 v9 G; T          IN4=1; - s" m6 q% B4 @* n4 W  u1 w' Y
          sd2=40;
. r# B2 \1 n! b6 C& ?   }0 j. G9 p8 h4 N' w  l$ n
           void stop_turn2()//右1电机后退
: }- ~& p+ g0 ]# O: r. x, f; s; v        {6 z1 _+ f. i$ L9 ^
          IN3=0;
$ l& h  l5 z! O! o5 ^/ a  P- I          IN4=0;
' j7 @: t3 U- w# k& u" v* H2 I         }1 ]. B6 x5 P: j
          void speed1(int count1,int sd1)//左1控( f7 E) ?) \6 }5 t4 O( a
          {5 @9 [1 _; A- ?' u7 D
                  if(count1<=sd1)
% I/ Z7 w# e# B  k1 k                {
% X  O1 s' J8 J) j- B7 j                    PWM1=1;
- E8 A( o4 t% [. M8 V8 j$ L        # P- f* h# \5 f& k
                }
+ L; G& Z2 @5 S2 g3 ~                else1 z$ ]4 H. K# }6 b" J
                {
" f: N$ |% f8 Z" z- N0 l                  PWM1=0;6 i9 C: w( s7 g1 k3 _7 |
       
. r1 |6 a9 j3 z                  }' ~& a7 m8 @3 E+ q: M" R
          }
9 }( L# ]7 _! j7 y2 e+ o6 v0 L- Z
         //右1边电机速度控制' R' V  ~6 D: ^2 A
         void speed2(int count2,int sd2)
# g# Z7 S8 n2 w! M! L         {' n4 e5 E3 t  D3 `, S3 o* u
                 if (count2<=sd2)
- c& w  |( g* X, l+ G                {1 W5 u) i7 `  L% F! n1 d3 ]
                         PWM2=1;
/ S4 r# ?6 V' |                       
) _7 Z! U- [, g3 S# W/ r         }( ~2 F- x" j* s$ N0 E3 v* h
                else
0 _' P: C' U' e* M( i# b( A         { 6 F9 @* E6 F7 l7 B0 z8 [1 x" Q/ m
                    PWM2=0;' j9 X) S7 x. C) G4 b0 j
                , _2 X2 O& O- F  [
          }& ]/ m$ J- i" e$ s; ?
         : |+ g9 M. @, g9 D; w
         }
4 H: T9 w1 y* F6 K( U4 W5 s6 p, N          ) m* _" f0 G6 p
                
& u6 ~, h+ V4 n3 e2 O                  
( U0 P- K! P1 N" m7 w' Z9 g        void forward_turn3()        //左2电机前进
$ P* U' K; o* n: f+ R1 B/ {/ J$ u+ \   {9 Z0 s- T. e  {
      IN5=1;
* W" N2 V5 U& H2 k0 \% i( h1 I2 A& A          IN6=0;9 @, z1 Q* ^8 q; F1 ^; W, F
          sd3=40;8 m  C1 D8 z, s! F
        }9 N  `  K# }& C3 V" Z- m
        void stop_turn3()//左2边电机后退0 F, p$ U0 N5 W8 N+ p" A
        {% C7 H3 A# ?! [7 z/ Q" E
          IN5=0;
5 n0 p/ `6 H5 F% h+ F, z9 ~! D          IN6=0;
3 R) p0 i* b' M  v        }% _( L3 c* {9 |
   void forward_turn4()//右2电机前进: Y6 H4 l0 b% s  ^8 f  N
   {; Q% M- E  Q# V% ^7 ], P; Y  p! C
      IN7=0;# _; U' Z2 i- e3 p5 H" H
          IN8=1;9 N0 e! i" K8 f7 X
          sd4=40;
2 T4 M) ]# y; b- I$ u) @   }
. z( ?2 V+ O( h( D4 \           void stop_turn4()//右2电机后退
% n3 @2 {* A& d0 W. `' v        {, L( F0 n+ V8 u2 \$ R5 ?! |9 Q
          IN7=0;
# t+ y4 X( K1 q' ?4 u8 j          IN8=0;
6 D. u" J; V" F: L2 D         }
" C- Z  X& s2 x, f7 i        " ]6 T9 D) A$ b
            void speed3(int count3,int sd3)//左2控
4 O4 b5 s3 a* B7 \8 |; l& J; g          {/ e. I, N: v9 d7 U# q( O
                  if(count3<=sd3)
, Q! R( H; ^* G4 ^                {1 R4 O- R, q% R: D) z  `7 h
                    PWM3=1;
; J4 t, t/ E& S) g       
$ ?1 w) G8 j2 K# b( r3 R% J5 K                }
; F  a: m! K) ~+ D+ l1 T                else ( [! O% {. x( M; v
                {# _6 [# y1 u  S. s& ?; C  W/ E
                  PWM3=0;
8 J2 ?8 R" V, B' b* U* I          # H3 U, V( {* a9 S5 M* P" y
                 }
) y, O2 o$ p1 _- \          }
2 C$ c+ [5 w3 R# a1 L1 K
" u) h* [5 T  Z" ^( k" H         //右2边电机速度控制
* {* n. u+ y' x9 s* p: B# J         void speed4(int count4,int sd4)* r+ n, r* l- \& Y5 p0 B
         {$ @* Z0 L& A/ a5 ~% B. k
                 if (count4<=sd4)! ~* L% D6 |# x6 \7 W
                {
4 a; P. ^: D/ }                         PWM4=1;
  w. M' u5 L1 s; F2 o8 H       
* p7 S9 V4 o4 V) y1 Y  p                }
. C' V& Q: y, L" K                else" G( a+ Z* U3 w$ N
                { ' b  t  Z9 G' B3 B7 \, h9 r8 K
                    PWM4=0;
" e' @, l* h) M+ z0 L0 B                 ( ~7 ~! \; f4 E( R' `0 }
                 }8 ^9 }7 d9 N$ ^3 Q8 x; [! N
         2 C2 s2 `9 Q6 T' w0 n4 d7 r3 a
         }2 w; e" ~% }! e7 y9 g8 S+ w2 n5 F
          
0 T* I$ c! X/ ?          void advance (int ct1,int sd1,int ct2,int sd2,int ct3,int sd3,int ct4,int sd4)
5 d, _, W6 y. B: ]. W" O' j           {          9 v/ @" i. v6 V$ F2 J. m
              forward_turn1();
( S4 D- P) j2 o                  forward_turn2();
7 b# i  o( r% R+ C: y                  forward_turn3();
- s0 ]. g5 M5 J* \% k  p; i! {2 B                  forward_turn4();7 R: |% W9 u9 W/ `1 s

$ r& z0 I# j$ D# Q; E                  speed1(ct1,sd1);$ C% k( {% ?1 @' U  ]
                  speed2(ct2,sd2);
! v, o& o8 c  \6 X                  speed3(ct3,sd3);' a9 f# i8 Y, I- L. R- q! @1 k
                  speed4(ct4,sd4);; a3 ^  e; `1 ~, z
                    + u  i" _' `/ m7 |" Q
           }//直线前进  w# t2 @% }8 Y( \: \% h
           void right_turn(int ct1,int sd1,int ct3,int sd3)//小车右转
0 [8 N( c% W2 E$ a$ w8 Q           {: V) q7 F: p0 ^: {: v& J* u& C3 e
                     forward_turn1();) U6 m3 U9 i( k) m$ H
                     forward_turn3();
8 n) n. Z& w$ [* ~0 s) }                  stop_turn2();
+ _3 Z6 C9 X6 `) ]                  stop_turn4();/ f$ U" S  x4 `2 L0 Q
                   " C' r- \( \- ~9 A  m# _8 p! K. \6 ]
                  speed1(ct1,sd1);
( ]0 v" e, \$ V% S% {8 O                  
' {* u# W7 L- U9 X8 H1 L                  speed3(ct3,sd3);
% P4 S: b) L: }, O3 e. q  L                  
$ \5 E: ]9 w% J4 |! I0 H          
- c0 N$ _1 B* Y, S  I4 y           }
7 E9 Z+ l" R1 d3 X" {/ k! H- \0 g0 g' `( D1 z+ e9 E7 |
           void left_turn(int ct2,int sd2,int ct4,int sd4)//小车左转
0 P1 c% U8 F. b1 l           {, o6 Y5 @1 k7 ~2 o
                    forward_turn2();
3 D+ U$ e1 C! z7 L* U2 m- z  c+ M                 forward_turn4();
4 y3 O3 ?. |/ h3 r                 stop_turn1();# J, _5 c: o' [6 M/ X& \
                 stop_turn3();8 {4 Z9 T2 ?5 l6 Q$ i: w- }
; q7 `* s: s7 Y

* N, q5 ]$ K. j/ J. A                 
: G8 W" x* q) v" l3 u                 speed2(ct2,sd2);' D; E# |7 j2 K  V: e
               
3 m# @7 _: @5 [/ ^+ ~; p6 K                 speed4(ct4,sd4);
8 F8 x5 [: U) s2 Q2 ]8 s5 b" V
; ^3 ~5 {7 P- u" g          
* _9 E: q4 c% A5 d/ j- C& {           ! q5 o: g# j# n
           }) h5 R4 ~: y6 W' [7 n9 N9 H
           main()//主函数
5 g8 m8 l' d/ I2 v& ~7 i8 `           {6 d2 ]3 i6 m# f0 {7 X" o) y0 k
                   TMOD=0x11;
4 d' _3 Q  |7 p8 A) H( {                TH0=(65536-1000)/256 ;7 X' S: t6 D) B3 }0 k
                TL0=(65536-1000)%256;) n" ^# R  q! F! V( T3 ?
                EA=1;8 Z! B) _1 E3 t6 h5 j* ^4 `, }9 k  k' O
                ET0=1;( m, l- g! ~4 k/ c0 z  z( a) c% l
                TR0=1;0 V! _- @$ B6 M7 A; D

' H8 M* A4 t$ \+ @- ]
, E; q) A2 E5 V  P! q( \+ q) r" d( ^% {# G; y& |
                TH1=(65536-1000)/256;  W5 f- k/ U9 j; ~$ O) [6 b& x( _, c
                TL1=(65536-1000)%256;
; N$ k6 v" V5 W: A  ^- ]9 W) N4 ~                EA=1;* P* `) b8 e- J; n8 A
                ET1=1;7 t1 }3 k! m5 ~2 A6 \3 y
                TR1=1;
8 |7 h6 c7 C; ^, O/ q
; L' M- p% L: s9 j) h) y
& M4 \- ~* `6 Q! M# v                , S% F  U# @) x/ F* @5 @% Q
                while(1)6 {  L8 V8 M5 {( E0 Z
  {
7 |+ j# L2 n1 G8 Q% J1 Q, Y    if(Z1==1&&Z2==1&&Z3==0&&Y1==1&&Y2==1)//中间感应到,两边没感应
. a# f, g- L8 j    {
, T" F0 R% O6 Y5 t      advance(count1,500,count2,500,count3,500,count4,500);# _, E. q' ?6 h" r$ c
    }
0 [; M7 q2 E" f$ o    if(Z1==1&&Z2==0&&Z3==0&&Y1==0&&Y2==1)
6 ~7 l. I6 s! N3 N    {% D2 j9 }% I* h7 L
      advance(count1,500,count2,500,count3,500,count4,500);//中间三个感应
8 K' m% o9 \% {" t    }
$ }3 R5 L  N/ a    if(Z1==0&&Z2==0&&Z3==0&&Y1==0&&Y2==0)7 [4 t7 b0 ?: X& w' Q
    {5 V6 e+ v1 R/ P8 v
      advance(count1,500,count2,500,count3,500,count4,500);//中间五个感应/ S. f1 F. g2 H9 M
    }, d: O! S" o3 y9 D0 E: P1 r

% U. U/ [1 y# d' ^/ L% ^0 ?& g7 _* Q( t+ c) d
    if(Z1==0&&Z2==0&&Z3==0&&Y1==1&&Y2==1)//左侧三个都感应到- j4 K! t; E1 _7 p6 p
   {' X: _# [' g1 \) r; N7 k
   left_turn(count1,200,count2,700);5 q! h' s: W6 z: x
   }
, O; @. y/ h3 X# R8 Y2 F1 }    if(Z1==0&&Z2==0&&Z3==1&&Y1==1&&Y2==1)//左侧2个都感应到( J- h0 D6 J3 F" S. k9 E! o$ s$ s% n
   {
( K4 K, V3 f/ c6 p   left_turn(count1,200,count2,700);
( G7 H) o. W$ r: U( J   }+ x8 l8 G* ]# d
    if(Z1==1&&Z2==0&&Z3==1&&Y1==1&&Y2==1)//左2都感应到) D' \% B# {( b( V8 A6 }
   {" G6 P( _* a8 H
   left_turn(count1,200,count2,700);
' U( m* m, }1 C' s/ @0 ^/ v   }- m4 F" H1 B* p1 T6 V
    if(Z1==0&&Z2==1&&Z3==1&&Y1==1&&Y2==1)//左1感应到
( p7 n+ A3 N2 O   {1 l( s* }; c  e8 Y
   left_turn(count1,200,count2,700);
' U0 A7 R- B+ Q% N  y+ {   }- d0 H3 r" S( L# y) S+ }7 @- N
   if(Z1==1&&Z2==1&&Z3==0&&Y1==0&&Y2==0)//右侧3个都感应到8 c6 y6 c& x7 X( p; M! ]
        {
) @- x" |- k' y4 r  I' q% \  r. E        right_turn(count1,700,count2,200);
; m  x" G0 f2 J        }
- d5 @( l9 }3 u8 \+ T        if(Z1==1&&Z2==1&&Z3==1&&Y1==0&&Y2==0)//右2都感应到
% m! a( j" q" Q, D1 Y        {
: P% b9 d* w  K# ]" _6 m2 Z+ W) I        right_turn(count1,700,count2,200);; |/ \# q( ^. {4 N  [, q& |# F
        }/ o  X# F5 o0 D1 B' p6 q( {; @
        if(Z1==1&&Z2==1&&Z3==1&&Y1==0&&Y2==1)//右2感应到
1 j# T' g+ ^% ?% `& E7 b        {: G8 g) K5 n- e( W
        right_turn(count1,700,count2,200);4 V* F2 d& ^% Q; ]6 @3 T, y
        }
* C* g! v& i7 `5 r5 C! `        if(Z1==1&&Z2==1&&Z3==1&&Y1==1&&Y2==0)//右3感应到8 t" A7 K- }/ I
        {
* t+ S( R& i- U1 i  L. E& g: S- v        right_turn(count1,700,count2,200);! ], M* ?( I" ~; [4 K
        }* Q. |( I- F6 }8 D# V4 Q

. V) `( x8 N% d. j& P4 |* b# X  }
4 v& V! |, K9 J& O- d6 y+ J6 G& m/ c    }
/ \0 f# k4 n2 j( A2 z& f3 f9 z, d6 {8 ?; }2 T# Z* O, y

. y9 K6 A& H& O" G! ^          
; e9 z4 Y0 L0 X/ j" \: F) p* K* T7 w( ?2 ~4 u) w
        2 c8 x7 Q( |: ~6 R
          //中断服务器4 t4 K4 j0 I7 d: j. w7 y
          void Time0() interrupt 1
  \& V" E) T% [& M            {) ~+ p7 @1 y% W. w5 K8 p: a$ }* S
                   TH0=(65536-1000)/256;, t5 z! Q2 p7 \4 A" g$ B
                   TL0=(65536-1000)%256;) j5 W4 @. @# U9 ~# E
                   count1++;
6 b* j1 ^% l& z# J                   if(count1>=1000)
+ |$ g6 n) y' n9 Y1 d                   count1=0        ;
9 q4 a7 o+ ]1 L                }
- s9 j& q. L' H
& ]' U6 ?! L  f# }# s2 f' R           void time1() interrupt 3
5 T- ^4 x  g+ p0 s/ R9 z. l           {# z4 y! M, X( a: r; v) c' j
                     TH1=(65536-1000)/256;$ {; L+ U; z2 x) v
                  TL1=(65536-1000)%256;
8 v2 r9 p1 [7 W3 n$ s4 T                  count2++;7 W' L* c( m+ k
                  if(count2>=1000)5 ~1 I6 e( l- E+ T6 u
                     count2=0;: Z4 k" I; v- w% z, o0 F* p
           2 y: N! w9 V7 t& r
           ; E9 c$ H. H  z2 _; D
           }+ ?" k; o3 b( y8 x
          
; D) n' c, K) a- o! o1 i$ V. l( f) r1 N( i; {4 w

6 [' z, }& _( O  N8 O" u$ V; d+ [" S7 o% r

# b/ K3 {. V6 S8 }) E: \4 d, i' h2 S; i

" G7 t, G* w1 }9 ^% P
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2019-8-29 14:03 | 只看该作者
       char count1=0;//计数器19 k2 C" ]# ~) H) X
       char count2=0;
    % @9 G. M0 V* i3 l4 P; A   char count3=0;//计数器1
    8 c8 M* Z; ^) w. r   char count4=0;:
    . ~- d. w! D; O$ j1 g+ |: r7 I) y* F1 d4 o
    把变量改为int类型
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-22 21:22 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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