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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
这个是我的循迹小车程序,我的问题是小车速度太快了,但是速度降不下去,似乎是PWM用错了。! h* J/ E! [& B- l# a/ S9 D0 J/ x
本人新手。
+ f. v% ~9 V' e% M
' y5 `3 O( t) T. {# p#include<reg51.h>
- o6 o' `  X9 E. O1 g#define uchar unsigned char ( Z* `+ O" i0 q7 ]7 c
#define uint unsigned int   1 u- e1 d+ L! `5 z
   sbit PWM1=P2^5;% _" E9 j) i8 Z2 v. L+ j6 x9 I
   sbit PWM2=P0^7;
7 J7 u$ \. x$ ?  C   sbit PWM3=P2^4;0 p* X: `$ K! i0 ~# h. e
   sbit PWM4=P0^4;: B+ H! x% ~: x  e$ @$ n
   sbit IN1=P2^2;//左1前8 Z. u5 `! D, w+ p: s8 h3 E4 J; `
   sbit IN2=P2^3;//左1后  ; n# v' R$ d6 ~! K. L" b
   sbit IN4=P3^2;//右1后   8 Q  `: P3 P" _7 N/ D& Z( ]
   sbit IN3=P3^3;//        右1前
$ J3 ~2 h$ Q# P3 x. s$ E   sbit IN5=P2^0;//左2前                                                                                                     0.
* T8 ^9 ]7 K1 G. P6 m8 Y   sbit IN6=P2^1;//        左2后
8 Q8 U" s- {7 |5 W# n8 ?   sbit IN7=P0^1;//右2前   : Q' @9 q" x$ D5 I4 ^1 z4 L
   sbit IN8=P0^0;//右2后5 I7 G% A% B& O: T
   sbit Z1=P1^7;//左边第一个传感器
9 ^$ T7 l5 y, t& _8 t( O! }   sbit Y1=P1^3;//右边第一个传感器; P+ \6 X, C0 n3 Z0 O
   sbit Z2=P1^6;//左边第二个传感器. ]4 w9 _, L$ Y7 C
   sbit Y2=P1^4;//右二
, o! j6 G- \7 ]1 |% y4 h# c   sbit Z3=P1^5;//中三2 c7 f; M7 v" r& Q" ?
   sbit c1=P1^0;//侧灯c1, m- S- e% J) J- L
   char count1=0;//计数器1; T; J! y9 @8 Y% r6 q
   char count2=0;
" r) U0 _" C4 A$ `   char count3=0;//计数器13 E9 H9 y9 l( L. l! H
   char count4=0;
; R2 I' l1 r2 d9 I* W   int y=0;9 \4 Y1 m) H/ I( l3 O. Q  t
   char sd1=0;. K7 W5 q/ h: H7 ~
   char sd2=0;1 t3 F. F1 e' E5 W' @
   char sd3=0;% H9 {- c! ~& K( B; X( U! ~
   char sd4=0;
1 c5 B% H7 S9 q2 d7 v$ }; |* H   //void delay(char z)
' ]( `7 a5 l& B1 z- q3 v$ v) y   // {
; }2 I( g- {3 V/ y$ A         // for(z;z>0;z--)/ p; e9 k" O3 l; _. q7 Q4 w
      //for(y=0;y<110;y++);
# @) a+ ~$ B- l5 g& i' M7 b7 S5 V4 ?+ x
    //}
* h1 a0 S) d1 n$ l, u   void forward_turn1()        //左1电机前进5 m2 R0 q" p0 w  V$ m
   {
4 M; t$ P% l! w! ^7 Y      IN1=1;
! g: R7 n% R3 Z* R  S          IN2=0;
$ H* B5 q! z: Z/ a          sd1=40;
% w- N  e  }/ b& I" G6 S        }# e# x% Y9 m( I4 i) I
        void stop_turn1()//左1边电机停止; g0 ?$ J& q. @$ v
        {& }- c! R8 {; l! u5 I$ E. g  `
          IN1=0;: d7 i( V3 Z) \7 l8 P1 {
          IN2=0;: G7 E! Z( c& d. j3 B5 A. j" Z) a
        }7 h2 E8 q  U$ o2 R# d
   void forward_turn2()//右1电机前 进) c* q+ S: `  f: u
   {6 \' N5 I/ E( d4 O2 L' F2 o4 T2 D2 M
      IN3=0;
6 g1 i, @5 O" o/ s3 M          IN4=1; * q2 Q; L2 b1 ^( }( p2 X+ k" f9 P' s
          sd2=40;
+ C; V0 j- y& q* p/ k; }4 {3 G/ R   }' b, m' f9 A6 P
           void stop_turn2()//右1电机后退
! a7 Q; J) ]" Q3 R1 ^        {
- z- ]4 ~0 J8 G2 f7 x* J" `+ a* [          IN3=0;
, C, o/ U6 G9 Q& h3 K: U4 K9 N          IN4=0;1 s3 n3 o6 T/ X8 T+ F( D7 r
         }
: m- d: h  y# U# s! P% d9 V          void speed1(int count1,int sd1)//左1控1 }. F, g2 n/ k0 p: w  P
          {# ^* ^* n2 ~& U$ K8 h' r# F4 F
                  if(count1<=sd1)
5 i$ p% w2 Y+ X, z9 G! U0 x2 u: M                {
4 f6 Y1 ^4 i* H/ p# |  h5 x8 @* G                    PWM1=1;
8 j! q2 ?( K! t1 o# A       
- _6 I' y  {, f: H                }
. O- {, e3 Y% T: L* D                else
1 d1 }2 O) B' `  J( H/ U                { " U1 a- T9 v0 R4 j6 y# Q
                  PWM1=0;6 u' c# j' N' Q' }$ ~# z% }* ~
        1 c' f# v/ E- J
                  }
+ N" G" Y: e( _& z' u          }
/ s; d( `7 [+ N% V( p- J3 k& J
9 y" M* X4 F, Z. w9 E/ ]         //右1边电机速度控制+ n8 ^$ R8 @, M6 {- r0 ]
         void speed2(int count2,int sd2)
" g. W8 U0 @; `  C         {
" w! }  g) E( J9 ]                 if (count2<=sd2)" C5 n: q. x' X; N6 L6 v, v$ Z1 m
                {
* ]; y  O3 T9 W" t                         PWM2=1;- Y# C2 L* f0 L7 ~+ S& u
                       
% P& ]% k: A5 i4 H* y" U. T* ^& z9 Y         }
3 l& X/ s# E$ g8 U, l% I. L4 q                else
% T( @: k+ @6 `9 s7 W         {
9 n: r$ a/ c: t3 m                    PWM2=0;
, s0 h1 \& g' k; P  j                6 a2 }& d/ O8 Y9 l9 d+ t3 y
          }# Q* U0 f1 t. e1 G8 e: v" u' k
         
! C* M$ ~# f; s  S% [7 X$ r- c% M         }- p' ]- F, v* Z# h' V* O
          
/ {0 ~1 J9 C3 Z! _                
/ |& K0 b6 T6 L* s) j) c% y                  
6 S1 J* l0 O# T& A1 H" n        void forward_turn3()        //左2电机前进
( t4 ~1 ?! D6 i. n9 d: T; m   {
. p% _+ g! p* J, N8 Q      IN5=1;2 c3 R% i& u- N1 t' ~8 l
          IN6=0;+ {7 u0 s% P# \9 o+ B" ?
          sd3=40;- o" n" X7 `) u2 L9 m
        }/ G' e8 Q) V3 a. [' d: l6 O
        void stop_turn3()//左2边电机后退) `- a- F4 F1 `. a$ b
        {4 |: g5 ^5 Q# ]( U; X9 [# P& P
          IN5=0;& O2 L& J6 Z8 ?4 @# ^3 I
          IN6=0;
8 }$ z0 d) Y+ E        }1 q) l" W0 r; O! r6 j
   void forward_turn4()//右2电机前进% |: E9 X1 u$ [& W# [& n7 y# p
   {
5 Z# ^  M  N" [/ g      IN7=0;
8 ?2 h( L/ I% G2 s          IN8=1;( U! k: D" \1 d; _* V2 U
          sd4=40; ; Z% B7 O/ U3 P6 z# Z, A
   }; S0 d- D  ~# i+ K
           void stop_turn4()//右2电机后退0 j8 u, p0 J8 s1 a- l- ]
        {' r& A6 I! M! ^
          IN7=0;! m' q# ?& i+ y. K
          IN8=0;$ f- p6 \" a& P7 W. s3 C: }- X
         }6 l' U. f: g# V! C" B$ M2 j/ ?! D
       
0 j0 _# l! I$ [            void speed3(int count3,int sd3)//左2控8 }3 C% E3 v5 z- R9 P9 y5 n
          {
0 f0 }  d1 B5 ^# b8 f/ l                  if(count3<=sd3)
6 `3 a( Q5 X7 D" X                {, ]* D  G( {7 W9 I+ Z1 X
                    PWM3=1;+ f5 j9 w: ?0 Z) u8 U8 J
       
# \  c: K' }  B6 z# m: w& F. A) P                }
# R8 ]8 ~" T, t9 E" P                else * \* A& W/ Z6 q! J  O
                {
5 N4 ^3 u2 h. U1 [                  PWM3=0;
# {# K1 @5 S$ k$ T$ O          
$ a! S! }0 R4 y9 w' r! l0 \                 }& X3 f* B" r+ ]' ]8 ^
          }0 i. X. c! y6 s0 ~' T/ ?
9 `- C  e1 @! B
         //右2边电机速度控制6 Y  o8 H+ C0 [
         void speed4(int count4,int sd4)
0 A' I3 N, H0 L0 T% H+ {         {
5 j  z+ Q' v( |4 W3 _+ m6 D* A                 if (count4<=sd4)
7 c( K) p- D) j& q                {# R4 x1 B- `4 \" G7 [0 g
                         PWM4=1;
6 M0 m9 v  \5 m% m6 u        4 y8 l- \  Y0 t% d. a! `
                }
; b, ~6 C" Z- H                else
+ z# Y5 N$ T; s; C( P                {
( H% R" E; a& b0 R! S! R, {  r; [1 D                    PWM4=0;
# n. a( Q- A' h                
4 Z4 Y. A( D1 ]6 h                 }
. b; T" c& T1 }/ p         
5 J' i$ P  }2 [1 W         }0 D5 u* _! A- N$ }
          
9 f; w8 Z/ b" H$ m" I$ K' ~% Z/ I          void advance (int ct1,int sd1,int ct2,int sd2,int ct3,int sd3,int ct4,int sd4) 3 S' T3 v- j& N$ u; s
           {         
$ B' I5 a0 _/ ~              forward_turn1();: f* C# M# L" `! r' N, [
                  forward_turn2();
. m5 Q- ?3 A* K6 R$ P: X3 H                  forward_turn3();  b3 |4 }# y/ F6 b3 R3 v- B" L
                  forward_turn4();) C: P$ r- k, ~" J
, ^8 E4 e7 F$ U; w
                  speed1(ct1,sd1);# g: N7 `) w+ W3 k
                  speed2(ct2,sd2);& f1 H( A5 w7 J
                  speed3(ct3,sd3);9 }- r: i5 y1 }0 M6 o, J& r
                  speed4(ct4,sd4);# U- r, V9 t! a4 @4 z5 g+ n
                    ! q' D# m+ s* \3 }& p
           }//直线前进% |/ N! R0 q! S6 D7 g
           void right_turn(int ct1,int sd1,int ct3,int sd3)//小车右转* e$ v5 o# n* O5 ~& y1 y
           {
5 \* {; f/ n% X( y- i9 X                     forward_turn1();& `1 F% U) a* |/ r( D
                     forward_turn3();
0 w( l$ V* w% G- n  s5 W# h                  stop_turn2();' B3 `6 `2 g. y. [& [
                  stop_turn4();
: W) ]7 ~8 }$ N0 r' |( f/ X1 F; \6 C                  
$ B7 y- ^4 h$ H, w& L  h                  speed1(ct1,sd1);
: q  v8 Q' q* ~( @- S% ~# S1 E                  4 e4 V: T  e- C
                  speed3(ct3,sd3);
, G, A1 u& T, P, ?+ \* T                  
/ L3 l4 D# W# @& w3 I1 C0 {           " W  M- `% {- v3 L4 J' w- d7 V
           }5 |  ^! l8 x- c" Y5 I

! O2 z6 F4 B' k3 B           void left_turn(int ct2,int sd2,int ct4,int sd4)//小车左转) p5 d( n6 C# C; @6 F% P9 z# u
           {
# ~) f: [6 O0 L/ J' V$ t  v                    forward_turn2();
7 J6 I, a" L2 ]+ `' p                 forward_turn4();
) G% q% _% s4 O1 B5 G' t                 stop_turn1();
1 t0 V4 k  x. L8 C3 X5 b                 stop_turn3();% C! d. a) i2 M, N5 ?* m. x

3 I, w8 E( ]* P+ E
, X, q: e& J2 t" {6 X                 
2 t$ w7 Q( F" i! y+ ~( j                 speed2(ct2,sd2);- j7 X4 N. s% Q
                & G& d' G! u; _7 b! _3 j
                 speed4(ct4,sd4);& @& s6 |0 ?8 k" A

' S: ]* h) S  r2 s) t( A- ]- K           . r* |1 J( O2 ]' i
          
$ z6 c9 T7 _: ]# n+ k           }
3 C; O, `9 \% b+ _: n, t           main()//主函数
9 x: P2 F* |5 d" k% Y: ^% V           {
# h- U( h3 p- d2 R! Y  m                   TMOD=0x11;
4 a5 k) j; j1 ^. T4 o) U8 \  s                TH0=(65536-1000)/256 ;/ f# {  f- ~, d" y- U
                TL0=(65536-1000)%256;$ B2 a! U) ~, E
                EA=1;& k4 a5 U- F8 N6 ^9 P+ t6 M9 A
                ET0=1;& S" Z5 Y0 m- n; \1 [. O
                TR0=1;
& {2 w0 ?' p: ?: f3 P; C2 L# S  l! t3 t9 K* x

4 f% w% O) t6 s+ ~1 P+ O+ Q$ `4 `$ F; g* u
                TH1=(65536-1000)/256;& G0 i- @9 M8 W2 a% J# H3 W
                TL1=(65536-1000)%256;
" k! M3 m; B) U4 f( \" P6 z                EA=1;+ P0 Y5 b0 }6 L0 x" Y8 z/ P& @
                ET1=1;, Y& I$ ~" u$ J6 Z3 R; a
                TR1=1;% ^' v4 U. K9 n. N* j0 e4 N

( W: ^& p# N5 n  m, e6 z& Y( d3 p8 N
/ }' E' F; j3 m/ [0 c0 h7 s                7 r. m. [. M& C
                while(1)
  r  P& p) C' J- |( n  [( z/ X  {
9 u9 y3 P' u" S' `' O2 g0 J    if(Z1==1&&Z2==1&&Z3==0&&Y1==1&&Y2==1)//中间感应到,两边没感应$ f5 o( v5 X, c
    {
8 j$ I  g# D- ~+ n. v      advance(count1,500,count2,500,count3,500,count4,500);( D: T0 c* M0 z  p- C0 Y4 p
    }! O9 X1 ~: E3 P3 s/ s3 _
    if(Z1==1&&Z2==0&&Z3==0&&Y1==0&&Y2==1)
4 a8 ]& A& m! c1 W! S  O% j    {  C) H: f0 ?; x1 X6 j
      advance(count1,500,count2,500,count3,500,count4,500);//中间三个感应
, h1 A0 }" ^8 u) w& O$ V    }
7 l) d8 M2 D$ K    if(Z1==0&&Z2==0&&Z3==0&&Y1==0&&Y2==0)
2 \5 C) a3 @! w* Z, Q    {
7 d( `6 s, ?+ y; x. B      advance(count1,500,count2,500,count3,500,count4,500);//中间五个感应
: Q6 g, w+ E5 ^    }
' A/ D& l% T; w  O1 W; g# W  e$ p$ s6 g7 o

. [; F2 R  L2 i+ p' V" n8 M; n    if(Z1==0&&Z2==0&&Z3==0&&Y1==1&&Y2==1)//左侧三个都感应到5 F- V; X& {' N
   {
8 `# V2 X( z1 V: u3 u& o   left_turn(count1,200,count2,700);
! R: q; V1 t$ B/ q- z   }( @: `4 S' T" S7 O$ p2 s( b
    if(Z1==0&&Z2==0&&Z3==1&&Y1==1&&Y2==1)//左侧2个都感应到6 ?1 ]$ ^- S5 F# R) \
   {
6 T% Y/ l7 t9 z   left_turn(count1,200,count2,700);
9 V. K) Z7 L# P8 \  I5 i4 G6 |1 J   }4 O6 n! ~: T; }  V- d) y
    if(Z1==1&&Z2==0&&Z3==1&&Y1==1&&Y2==1)//左2都感应到6 m# T4 i) y, U) H. M; j) I
   {
0 j$ q1 H$ M# Q8 ~3 s   left_turn(count1,200,count2,700);
* h, P; e( @: k/ ]' e/ V% r   }
5 P* v# m( z! Z& B+ j/ b+ Q+ n- ~    if(Z1==0&&Z2==1&&Z3==1&&Y1==1&&Y2==1)//左1感应到
: Y: B" f9 ]/ t1 C( r   {
5 r: V2 w& x4 [   left_turn(count1,200,count2,700);
: m+ ^3 p( k4 a1 W- n( h   }
0 y3 I4 V% u- M1 M- G! `   if(Z1==1&&Z2==1&&Z3==0&&Y1==0&&Y2==0)//右侧3个都感应到
' c' E) V0 O! q; |        {, U, T7 z* f6 t% e* w1 j3 N: H
        right_turn(count1,700,count2,200);. ~1 S6 C% X6 q1 D
        }% i8 |2 e" n# j, e) [- ]& Y
        if(Z1==1&&Z2==1&&Z3==1&&Y1==0&&Y2==0)//右2都感应到: N3 u: y* z  j# s
        {  O& K; W& B/ W7 k: d
        right_turn(count1,700,count2,200);7 ^& Z) |; a& D% F# i* v" Q2 I. f
        }* k' Z& k) j, B+ J# O2 W% x
        if(Z1==1&&Z2==1&&Z3==1&&Y1==0&&Y2==1)//右2感应到
0 \$ I# e/ T% t- ]( O8 v+ H# o8 {        {! ?' V2 [( T3 y' v# a0 Z) m
        right_turn(count1,700,count2,200);( i- x% u4 [7 ?) e
        }
  X9 [0 q( U8 L: P! d% L( |' i! j        if(Z1==1&&Z2==1&&Z3==1&&Y1==1&&Y2==0)//右3感应到
! J* I: z' R2 z7 y  I+ H        {
: P1 p" j4 L6 n( f+ {0 ^        right_turn(count1,700,count2,200);
' l1 C, @% p  \+ h) B- I        }5 D) H/ M+ ?& ?& g* [# M+ r, }/ w
7 D) {8 A1 O% a, Y6 N8 Z
  }
8 ^1 J: T8 y, t    }
9 T; @; m4 |  E/ T+ l* @: f
$ _# k: Z9 Y$ ^! ~+ x- `1 }# i) E
8 ]) Y8 Y; O' o  k# v% j          
6 a6 ^* j3 F" u2 d) Q  V2 e' Z0 j; K+ U4 c$ m3 Q  k
        , K  U/ ^# P( f" H' |: n2 B0 o; k
          //中断服务器2 Z8 Z) G# f* k' x/ t6 r4 H
          void Time0() interrupt 1 5 A; Y2 s! C$ R
            {
) z8 D8 q- _; n8 P+ c; v                   TH0=(65536-1000)/256;
5 t3 z0 u2 E$ Q3 K7 C                   TL0=(65536-1000)%256;
2 Q# Q# }# I  V/ M) Z- ]5 w8 ^                   count1++;
& e; O# O! Z! P& g/ o' N7 c7 [                   if(count1>=1000)8 L0 m7 P, G) S  H. X, n) y
                   count1=0        ;: T, Z0 M! h3 {4 [
                }
; E1 d  ^: Q% ^0 u, g4 P/ n( |
% ]) k# [. _) y# k3 N           void time1() interrupt 33 ^1 l/ o6 m- J% R8 Y
           {
+ F" n1 @) }* i! i% A                     TH1=(65536-1000)/256;8 Z& j) v, J: H7 p; z3 w0 X
                  TL1=(65536-1000)%256;
3 T, g( T( N; i- Z3 i                  count2++;% O) O8 Z+ v3 }% X8 ^' c
                  if(count2>=1000)
9 |* p" [" D# C) l, V                     count2=0;6 b: F( W3 r# J% b1 B* s) ]
           % A6 H) f/ D& ?9 A% ~: n; ~5 j
           3 L- _: G& Y1 \
           }' C0 w- w9 u! F& k# F/ x. ]. @- Q' K
          
9 F, x6 t0 ]1 H
9 W; b2 h0 t# S; w) E3 Y9 M- d* v" Y. |# H1 x8 ~

9 O* @1 f7 I* }" u3 n1 u
' k. C$ \3 r8 j# i2 O$ m; T
4 a1 P4 G# v1 ^$ }5 P7 C& I% L- \" l3 D" w  f8 d! r( c
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2019-8-29 14:03 | 只看该作者
       char count1=0;//计数器1; h2 I9 u0 L6 u; ~! b& ]
       char count2=0;* ^- ]4 X! d9 o5 @. u" |# d: M
       char count3=0;//计数器1
    * n( A1 U5 [' X" y- Z3 r* ~   char count4=0;: 6 U' t5 ^: W- M0 j1 z  @) e( V
      i% x+ Q  L$ T
    把变量改为int类型
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-18 23:03 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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