| 
 | 
	
    
 
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册  
 
x
 
这是我用MSP430F5529lp写的避障小车程序,用了两个红外避障,跑起来感觉还行,里面用到了库函数,5529的库函数也分享出来了。+ v( @( g4 E8 J/ a) V# v8 t 
单片机源程序如下:, u* S% N* [* |& e3 g- q 
#include <msp430.h> 
! |9 h* B* n/ M) G% _/ Y4 o#include<msp430f5529.h> 
& l8 y! U/ v2 J, [  K! h#include <USER/driverlib.h>6 w/ l: z' U+ p* ^  B: B 
#include "USER/gpio.h"4 K* q4 y$ F, [ 
#define CPU_F ((double)8000000)   //外部高频晶振8MHZ8 H; x: d7 p7 z/ v! [/ } 
#define delay_us(x) __delay_cycles((long)x): F7 V( ^2 B! F3 K8 ^. x 
#define delay_ms(x) __delay_cycles((long)(x*1000.0)) 
4 P# F9 L% G4 B  M% v0 r/ g( q/ i 
/**% @; X$ c7 p; [( c& l 
* main.c& Q- d3 G# O  \( f9 D* t 
*/ 
) R& G; Y6 B+ `7 u  ]; C" S$ nvoid stop(void)//停车+ k$ }6 y) R" P  ]' g+ b 
{ 
7 k: ^3 g) Z, l7 A    TA0CCR1=800; 
& f: ]9 ]* L# k( H% m, B/ a" O    TA0CCR2=800; 
0 G& Z5 H1 o. q2 e0 ?/ x    TA0CCR3=800;2 h/ e& f( ], L1 E8 _ 
    TA0CCR4=800; 
3 l9 o1 M% |  O    } 
) B, X& a+ n9 yvoid go(void)//前进 
  @) N: W% n5 _3 e! R% a! n{; F! `1 J& u% M1 n! [( T2 M 
    TA0CCR1=800;, P" G) u- d3 Q' ] 
    TA0CCR2=600; 
' H+ T* r1 g8 y% \    TA0CCR3=800;" z4 E) _5 j1 S1 }- [ 
    TA0CCR4=600; 
+ o5 x0 D5 P/ k" I    } 
, Q' _3 `" y/ @- o' Qvoid tui(void)//后退 
% D+ D' {& M6 J( d{ 
# x* n5 k8 A& W5 \% T! ?    TA0CCR1=600; 
; B( W7 u1 m4 l: U    TA0CCR2=800; 
6 ?. S' E2 [4 ?2 v  U/ b    TA0CCR3=600;' T6 G$ m# O/ W  A% \9 G# I 
    TA0CCR4=800; 
( J2 m. G% g+ d5 @    }  R7 G' D( {& ]1 r7 c3 d 
void zuo(void)//左转 
9 B0 U, R, r- M7 K! T8 e{ 
+ Y2 S! P. ?4 ]1 E    TA0CCR1=800; 
4 H' c$ o! c0 l$ [$ m' l, r* w    TA0CCR2=700;( l7 N9 s! X4 U5 Z2 s! Y: w 
    TA0CCR3=800;' z" {0 t! \4 u1 {5 c 
    TA0CCR4=600;0 u+ b! j0 W7 K$ t+ x 
    } 
3 r) k+ t/ l& ~. k/ i! ?8 W: Nvoid you(void)//右转5 J2 O" R$ b1 g0 f6 Q  e2 L 
{ 
/ H: ]0 V0 G/ e& l8 t* \! {. h$ m    TA0CCR1=800;, F( m; @! u1 x4 x  l- L  ` 
    TA0CCR2=600;( {# R% K) e6 Q9 b/ x5 u0 {8 c. L 
    TA0CCR3=800; 
6 ]8 j6 G: W" p    TA0CCR4=700; 
) F7 [  r9 n, Q+ t2 G    } 
, G4 @8 f6 F% m5 z( Avoid zuo1(void)//大幅度左转 
1 l, `2 C& y7 Q; d/ s: a{ 
* O6 o& [9 W! I7 ]    TA0CCR1=800;$ u# X6 q$ y. Q9 _1 Q6 E5 I# v 
    TA0CCR2=800; 
. x4 g5 b: L9 M( }  ?    TA0CCR3=800; 
  V5 F4 \2 {. A1 o$ C/ Z2 S" ^% i    TA0CCR4=550; 
1 ?+ i1 b- j- ]+ V+ @( f, t% U- B    } 
3 k0 q1 s& v, s2 A6 hvoid you1(void)//大幅度右转- J. x8 [- @2 Z0 Y- d& b; Z 
{ 
( f0 K6 [$ h9 V6 K    TA0CCR1=800;% {2 H' d, g, `  x 
    TA0CCR2=550;3 b: x1 p5 p" _. O% R 
    TA0CCR3=800; 
3 w( t/ _* S3 |( P) C( l8 F; W' q* e    TA0CCR4=800;- y5 v8 G; X6 R' B 
    }7 x9 B- [: i2 {0 I+ l- H! { 
3 |" M- [4 I, s# X. g- r& n 
void bizhang(void)* _1 }: y3 Y5 j3 L 
{) j5 P; K4 I6 m/ ]1 U  ^ 
    GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1);# e9 P! {7 s' Y0 k 
    GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2);" l! f" T/ ^; p! T4 ~ 
    if(GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1)&&GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//都没有检测到障碍) H! R; U8 [3 Q2 y% Q& \8 v# {0 I8 { 
    { 
8 y# C* C  L( J6 b6 m1 w/ H  ^  P        go();% n: [1 v: o- @% y1 B& ~ 
    } 
) p2 ]0 i0 j+ {  B# \. a+ W; ~7 h6 c3 g& h    else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1) && GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2))//同时检测到障碍' X! H0 m- _9 R' m. d- [ 
        {2 U$ z( ?9 T2 s1 K 
            stop(); 
- _; U6 w. F3 j* r            delay_ms(1000);* u' z1 ^$ w& n, [8 H7 X& ]6 Q/ A 
            tui();4 A* u6 t4 n2 T8 @( b1 @: L5 k9 P 
            delay_ms(2000);; B; A8 L) t4 F0 D* u1 q! i* k9 Y. o 
            you(); 
$ c. _+ E8 ~/ ~% u7 A. Z            delay_ms(1200); 
( A5 [0 b7 {0 s. ^. R            go();! Z/ M8 f: j- e3 W5 i4 {8 c) N; C 
 
) m& p* z: ~/ ^# N8 ?5 }* z        }2 ]) H0 |. e1 u% o  v 
    else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1))//P4.1检测到障碍(左检测到障碍) 
6 u7 `; e$ H# i3 x8 w  V- d; e   {0 u0 a2 h: d2 O$ p 
       zuo1();5 _2 O' m! c% I& q 
        delay_ms(800);5 W; j: g0 N- N* G$ j, g+ P. l 
        go(); 
( F$ `2 N7 }+ H% t) ]7 t1 ^* t    }3 W5 S: G5 {( G5 |# e- Y9 |8 X 
    else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//P4.2检测到障碍(右检测到障碍) 
# e; b& t; Z  y9 m$ O5 E. ?% U0 r    { 
0 j3 |/ @9 C: [+ _         you1();0 Q- a5 l8 F6 U1 N  k  `$ t+ J 
        delay_ms(800); 
" b: d# \, T- K        go();+ f5 ^+ `& p! e/ S+ B/ C/ g, H  T; F 
    }6 U3 _0 }6 a: B8 H 
    else stop();; W1 g9 y  J, ]8 h: l/ P 
0 W+ h! |: o8 t 
} 
4 ^3 V& S  u6 a* @# K6 ^% q4 C 
" y7 D7 Y' i, Cint main(void) 
' N+ Z' K. h; w7 z, d# h{/ N1 [3 c8 v+ L7 N 
     bizhang(); 
# p/ G8 A2 {+ G, D    WDTCTL = WDTPW + WDTHOLD;   // 关闭看门狗% ~/ U& C- F! o: j# n* @* E7 D; @  T 
    P1SEL|=(BIT2+BIT3+BIT4+BIT5);; v6 C9 I/ K9 ]' k 
    P1DIR|=(BIT2+BIT3+BIT4+BIT5); 
" h( w& ^7 I* y2 a    P1OUT&=~(BIT2+BIT3+BIT4+BIT5);9 `! g3 Y1 k( r7 _ 
( l, N3 ]) p  }* K3 T6 q 
    GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN1);3 w; T4 ?) z) G9 N 
    GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN2); 
9 e4 i$ M& O; g/ m0 F1 h8 i  ~5 `  v8 ` 
    TA0CCR0=1000;* X: M/ ]/ \4 s7 d+ ?% x9 x 
    TA0CCTL1=OUTMOD_7;3 l6 v0 ^6 J3 b; z 
    TA0CCTL2=OUTMOD_7;& D$ X$ u/ m* Q$ O, J1 C 
    TA0CCTL3=OUTMOD_7;( o# g5 c, y- w# w: x 
    TA0CCTL4=OUTMOD_7; 
; I) a: @# l" g+ ?/ }: M, I- j5 |6 G8 o4 n. w 
    TA0CTL=TASSEL_2+MC_1;" c& e. s; B' B; m 
$ |7 _: T0 c: q 
    while(1)% o8 g( d- a8 J* S3 H+ T 
    { 
/ e& i; z& ]& _0 X. a        bizhang();3 t! @% {5 d+ _* {$ X" s 
    }8 D9 G& @2 }8 d 
( ^+ k' {9 ?& F6 G9 {' C 
}0 [6 V9 n7 |  f( z* a7 n# U3 i 
 |   ; X. n: z9 O$ q1 J8 _. K0 Q 
 |   
 
 
 
 |