|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这是我用MSP430F5529lp写的避障小车程序,用了两个红外避障,跑起来感觉还行,里面用到了库函数,5529的库函数也分享出来了。! N$ ^# y7 B9 W1 I d3 X* N) v
单片机源程序如下:
9 t; X* C7 H6 [; O; T1 b#include <msp430.h>
5 i7 n& W4 ]6 w, M, Y# \$ F1 C. E) k#include<msp430f5529.h>) \& D, Q% [( D# \9 o. ^! f0 G
#include <USER/driverlib.h>
0 j8 h5 N! k$ D& c#include "USER/gpio.h"% _ r: U, ]8 v4 K' v4 v+ w8 ?
#define CPU_F ((double)8000000) //外部高频晶振8MHZ, Y, S& h: Y1 \1 X6 O: v9 F8 F
#define delay_us(x) __delay_cycles((long)x)
0 X' g/ W8 |7 R( p#define delay_ms(x) __delay_cycles((long)(x*1000.0))% X( e- Y' D7 [" ? M
6 ]& n# n# x- ?: _, }
/**
! n, ]( K T, T# X& _+ w! R* main.c# `3 k) @/ ^0 U |" |3 ?' q" D
*/$ |! R0 e2 }( S- T$ I( [- ]1 X: ~
void stop(void)//停车+ [8 K9 {% j# g. m" W. @
{ @( E" |, K1 k+ [4 w
TA0CCR1=800;
+ L- S& P. j5 A: a0 c TA0CCR2=800;
7 L ~% ]$ w2 w! z TA0CCR3=800;
( U$ w! J9 U5 |! g2 C- P& g TA0CCR4=800;) [8 O- ^2 o' W. ]3 ]- }
}4 v ]& g8 F, K3 c
void go(void)//前进1 R: t6 i, R. v0 P0 R& w6 |7 s
{5 K+ a7 j& R5 P! P# Y1 u" @
TA0CCR1=800;
$ g( s- q2 @# r- g2 p' R2 z TA0CCR2=600;
; O0 g' j" b/ K% v. ]" c TA0CCR3=800;
6 E0 P% R& p" g4 ^ w& m TA0CCR4=600;
, [* q, e; I" o! H( M4 H }
/ @5 Q2 x. W9 p' h, ~2 Z; ovoid tui(void)//后退
" P1 ]& S4 d" b6 A9 n( ]1 q{. Y3 e8 x" ^1 k& F
TA0CCR1=600;
$ I$ K2 }. ]5 k `/ e) Z) U7 ? TA0CCR2=800;
% _7 [$ W* @- ^$ O, A( n TA0CCR3=600;
7 y( S* n2 b! }- E& o1 I TA0CCR4=800;
3 b1 z7 I* q( @7 J }. N& i0 S3 s2 m' I+ u
void zuo(void)//左转! u" i/ H- z: C* c
{
9 G& K4 O: B1 |: ], g+ b2 P7 T" o TA0CCR1=800;
) O: z4 s: J: c3 r2 C# |# v TA0CCR2=700;
3 d# Z" b) S8 o* P# B, [) n' x- B TA0CCR3=800;
' R y: R4 S: G/ V' W8 N TA0CCR4=600;
" B" t, E1 | A }: R; I/ J8 m) U, M
void you(void)//右转
7 l8 m, m9 r0 q0 y{6 y5 D& Q0 }0 C+ F' W# A! g
TA0CCR1=800;6 z: c* P, v, y: W$ v
TA0CCR2=600;- {( u; G# j, F' r/ `3 f: f/ Z
TA0CCR3=800;/ R$ n( U7 ^, C1 l
TA0CCR4=700;5 N% y$ l! Z! G; G7 K
}
& j* x# s5 b2 C$ k/ Y% Y; svoid zuo1(void)//大幅度左转
0 C4 F, H" x0 \9 [7 a{
" J( ]8 O/ _: d5 v' [9 W TA0CCR1=800;
" D m, i( o$ o9 K4 _9 n* c6 d TA0CCR2=800;
$ D+ r3 C! @, J5 |- T6 |; D0 \ TA0CCR3=800;
% c: v* p5 p9 k3 n TA0CCR4=550;, @0 c( P9 v6 H4 z3 R
}. P' b- R. O/ h3 F: l' ^
void you1(void)//大幅度右转( w& c) G/ x* d$ J3 T- Y$ h
{4 O% Y5 f7 D9 e0 k9 i3 a; ^0 Y0 D
TA0CCR1=800;2 P- p% m- C9 Q, w+ O
TA0CCR2=550;% d; D! O- ?" b, ~. m& N* U6 l
TA0CCR3=800;
1 E8 p# X1 G! a8 T6 A$ J TA0CCR4=800;' l, a0 ]: R7 H, }9 a# d
}! F5 q) k! j$ n. m& J6 G! k, | W8 c6 \
* H% q: X7 l: }. S
void bizhang(void)
' ~9 P- X# ?9 q/ O [) j{
* d6 c5 V" [ `! I GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1);
) A; s7 e9 ?" ]: ? GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2);) ~2 e' N1 L& ~& B! x* M- H/ L
if(GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1)&&GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//都没有检测到障碍( @3 Y5 x1 `3 w: y
{7 V; K5 o8 m( Z! ^" t
go();$ Z; m9 `" }- }4 l1 i8 j$ K9 ?
}
5 B# D/ b8 E) F& X) P! D! d else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1) && GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2))//同时检测到障碍
2 Q# Q3 i1 o7 e* t3 c& |3 G {
, U/ V: H8 `. r' l" L stop();
% m; {7 h$ w1 a; d delay_ms(1000);
, C3 d" I; Y% x3 D$ @* m7 o tui();
1 J( \9 }* k" t8 | delay_ms(2000);2 @( H" s/ |5 m4 C
you();8 q: |( _- B- C1 A
delay_ms(1200);( S& z! Q% ?! |/ x$ `7 z- X9 m
go();0 D2 c) m/ j5 z/ m8 N9 d3 p4 E
4 h! O' g6 D e% [0 B, g E }
& C4 z8 t% @8 Z3 A else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1))//P4.1检测到障碍(左检测到障碍)
" @" v: y3 ?6 d0 w {8 v3 V6 p! F8 J: \; n
zuo1();" g; Q* F6 Y1 h* j% x
delay_ms(800);+ O& Y) W' c% F9 g" w
go();
/ b1 V+ M7 k7 x0 r }
5 f# B9 `) _! }7 y& w8 E: ] else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//P4.2检测到障碍(右检测到障碍)$ g: I( Q4 ^7 ~" B) }: L% a) r
{
1 `' e0 w$ j6 `7 `. u9 K; R you1();# U: j4 q* z9 c# \. n8 O
delay_ms(800);$ j2 y5 G7 X9 z+ i. ^4 Q+ x/ B' y% Y
go();5 t/ o! W+ q# x ]6 `7 |
}0 s! g$ U- S0 R% n) O2 X+ t! e
else stop();
' q/ } r. G% W0 C8 E2 }) j7 z
9 k( M5 f" n2 n* W6 g* I}4 u; J, M5 j0 S. H' B: D
3 ~+ n2 W( t" a& t5 yint main(void). N7 f3 j- n7 f* T$ H$ e
{, u3 X0 |; m- N
bizhang();. i9 x) j3 _7 m/ d- @
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗8 t2 d2 u6 F% |2 O
P1SEL|=(BIT2+BIT3+BIT4+BIT5);$ ~% s; B4 f- z) t" R' d0 a
P1DIR|=(BIT2+BIT3+BIT4+BIT5);) y M7 l( m6 V2 m: S4 M- m
P1OUT&=~(BIT2+BIT3+BIT4+BIT5);
( X S9 Q$ J/ {! \- X6 i1 T7 Z' b8 v( I, E
GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN1);
; u: b$ ^: ^; G+ V8 d GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN2);$ P. b( C# K7 Z2 D9 [8 k. _0 n4 ]
4 ?" d9 R1 O. }- P0 ?2 [$ _. H TA0CCR0=1000;
I8 B! I$ W. Z+ N TA0CCTL1=OUTMOD_7;
; P% G1 x" N; q1 N( K3 ` TA0CCTL2=OUTMOD_7;
% k' o6 ]/ j9 A! p$ p/ U TA0CCTL3=OUTMOD_7;
* ?6 j9 o0 j7 {9 e* d3 x TA0CCTL4=OUTMOD_7;
s2 o# X9 e+ {$ Y: i
+ o+ g1 x1 ?8 s* w) z" z TA0CTL=TASSEL_2+MC_1;, n G' V' b7 A5 e6 y
& [$ v2 ^7 d% D. F# z* U# k while(1)! K8 z- L9 t( Z
{* u( l3 X( x: }0 r, l
bizhang();
6 S+ Z) `: I4 k# E# U- N4 W } n. o/ g& R: @, f6 m
( t9 k7 N6 |. @, T, N}
! a1 l( P' Z3 e |
4 J% F2 X- ?4 v7 G( T |
|