|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这是我用MSP430F5529lp写的避障小车程序,用了两个红外避障,跑起来感觉还行,里面用到了库函数,5529的库函数也分享出来了。
7 d& z. A3 J/ F! g0 @4 j3 H单片机源程序如下:; W# G1 C3 x9 l6 s, t8 ]
#include <msp430.h>2 x, T* j6 ~, b2 s) @# e }' a2 B
#include<msp430f5529.h>. |, r; T& U5 q2 u; R* a& U# H4 q
#include <USER/driverlib.h>
) c2 y7 w) s( p/ B$ v) P s#include "USER/gpio.h"
0 U; C$ w: M3 |6 s#define CPU_F ((double)8000000) //外部高频晶振8MHZ% }! o/ g' S, N5 e* j. I: r
#define delay_us(x) __delay_cycles((long)x)
8 |& N6 n. v( i' d4 p#define delay_ms(x) __delay_cycles((long)(x*1000.0)); }' Q5 ^1 r; H- \% c
) ?; D0 Y' ?8 O0 ^8 \2 R
/**5 H; b+ g/ ] M7 w0 r, i
* main.c
# y0 l0 c) R5 T*/3 O* g8 K6 h6 Z& J& D9 n8 E0 r
void stop(void)//停车$ c6 q# E) j; Q
{1 j8 q0 K( G5 z9 X* M
TA0CCR1=800;
5 q# }$ _# G" \4 I6 P TA0CCR2=800;
. g) P7 o# A+ {" s- y+ @: [7 | TA0CCR3=800;
i9 F# d) \4 q TA0CCR4=800;& E- x/ N* {1 B( c" s8 }- \
}
7 i/ F2 n5 I; a$ X# K. S. ?! Y3 H; D8 qvoid go(void)//前进5 ?' q$ N+ x( y$ a
{
; _: A3 _5 b' B; A' L Y TA0CCR1=800;+ \4 e8 u5 o# F& H- a$ y9 \. w: f! G
TA0CCR2=600;
$ [2 {5 T* `( A3 z. e. A4 G0 H J( Q3 q TA0CCR3=800;8 Y6 A! g1 i3 W4 Z* x2 Y+ ^
TA0CCR4=600;
1 T9 k7 U" o/ u! y" M) }. q! J1 Z# t }" w" `5 g# A2 U% S3 S
void tui(void)//后退
: Z' U3 K7 |( C' |{4 y: g$ s( I3 y( x
TA0CCR1=600;
! y/ x0 Q! {, Z ] z: p/ {) z TA0CCR2=800;5 t- L9 T0 i7 ]
TA0CCR3=600;1 E- ~" P" h& j2 W; @6 s5 \1 ]
TA0CCR4=800;' z) `$ k/ R2 o
}/ j5 o7 K t, u: J3 ^, G f
void zuo(void)//左转% Y6 }! W* G* K& p5 f4 }. a
{ }& V0 e N* @
TA0CCR1=800;+ h4 H3 U3 N+ U
TA0CCR2=700;. _4 z3 V8 ~& M6 c6 v
TA0CCR3=800;4 I; J' X$ g4 K$ @
TA0CCR4=600;# z, |. j* i9 _ H4 l8 t
}
9 L. m7 a4 Y- X+ {void you(void)//右转5 P6 m; P, ~# z. r
{
: K$ K, ?6 O4 k9 a' H; C2 S TA0CCR1=800;
, g- K5 n& p& v: [5 o0 D. Q+ Q TA0CCR2=600;
- T- m6 o- x8 u1 K1 G% v TA0CCR3=800;
/ w, C0 u/ [) N x: ]; z4 h1 b( A TA0CCR4=700;' B3 X& g" m( G0 `7 G5 b8 w
}
1 f" J7 `3 @* T! Xvoid zuo1(void)//大幅度左转
* j+ d0 f4 U1 \" U9 b{
6 K* `: b6 f$ Y TA0CCR1=800;" L, i3 K/ V/ J2 k# Q0 w
TA0CCR2=800;' Z' }1 x( q5 L+ p
TA0CCR3=800;' X$ H0 e5 a9 u
TA0CCR4=550;" n2 N. p- Y& {. q4 V
}6 t- z( U& s9 S) L9 w! W. w
void you1(void)//大幅度右转6 W& R& R* y6 Z Y% x
{
v8 |0 F) p; b- ]% n TA0CCR1=800;
5 X3 q' R5 f* @( L TA0CCR2=550;" `6 ?9 G2 M7 K
TA0CCR3=800; j+ t; o3 l1 ^5 C$ Y2 [( ?; G
TA0CCR4=800;
3 X- K/ J2 _+ @& E0 Y _/ c }9 j! b- v( }$ i! m8 v8 l. F% U+ n
! q) x2 S# S4 w- R1 \
void bizhang(void)
; D# s/ c1 M0 a1 p8 C{) t5 s' e0 U5 `) V! A3 E! K% e
GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1);
1 ?4 X. ^( @2 J2 k! a GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2);; I* y1 E* p/ z& e& P
if(GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1)&&GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//都没有检测到障碍
$ O& S# T, K# N" w. U {) I* V1 Q% v" H0 c" J% A$ L" E
go();% Q! z5 z/ B( s' I! G* a
}
4 c+ J! Y8 k4 b else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1) && GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2))//同时检测到障碍. ]# Z) B8 j$ Q3 H
{, t* Q2 |/ {! w! H9 }) m! O
stop();
- T! A% M2 ]$ g delay_ms(1000);
& v4 B( H7 c2 p) I$ F5 C tui();
' z/ {/ t* H# y1 ]0 p1 x! ? delay_ms(2000);
( X% b" g; ?! B you();* @2 t& r: z. _
delay_ms(1200);, h% G4 t) b9 z% f' J" A1 g4 m! i* }; T
go();
4 ]$ M) o" j# o& o$ ^
' L: @' K; L& K- K, M4 S }# l) E- }! ^! r1 m5 v1 |
else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1))//P4.1检测到障碍(左检测到障碍)1 O1 R2 ~; B D; G- B; k6 s
{
7 e3 Z1 B. A( X' i( W8 W zuo1();1 U) G1 a5 i+ o
delay_ms(800);
. r2 l$ i/ i; _# ]. \2 B7 w go();
, c, m0 [4 M! O) P3 b( t4 \ }
" {5 x) P4 e: @% b) M else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//P4.2检测到障碍(右检测到障碍)' ]8 v/ f4 e+ C a' w
{9 r* K+ L' s1 E$ R2 U7 x4 a
you1();5 ]8 J7 v0 P. G
delay_ms(800);
8 e. x; u# u% x; Z' w; s go();
/ V$ B5 B; C: c3 f }$ g: }) u6 Y) R1 q
else stop();
6 l2 K" m" q- e
, e. x0 B6 M9 |% Y: c% I% |}1 u5 h/ V; r; T* g6 q& l$ ^
) |- _# L6 t( l1 z2 t+ aint main(void)
* b1 C/ i# s7 J# m ]. V6 ?; i$ [{
* ]* y' J( v7 |' G$ o" e bizhang();
0 |* {) A) L G- |& Q$ ` WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗, z. e; {. G, c; a1 }+ d2 A
P1SEL|=(BIT2+BIT3+BIT4+BIT5);
' F# x M/ S0 ^$ T2 G P1DIR|=(BIT2+BIT3+BIT4+BIT5);5 v+ O6 T0 ^7 P; B, o4 M+ v! b2 i. J
P1OUT&=~(BIT2+BIT3+BIT4+BIT5);+ {5 h0 ^- D9 c$ c* X, L# g
! c# y5 p, n) @1 p) F' t& f4 |
GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN1);; z0 j: b' i, F4 F
GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN2);& E/ R+ {% F1 q4 M" }# Z8 l
" q: U# \. k+ N+ c& N TA0CCR0=1000;8 r/ F/ w9 A; C9 w
TA0CCTL1=OUTMOD_7;5 `1 @* F3 i. S, _! c" X
TA0CCTL2=OUTMOD_7;
5 T5 N# c# k. i) [2 { TA0CCTL3=OUTMOD_7;$ d, z' M: Y9 q7 t
TA0CCTL4=OUTMOD_7;
- [8 L. [+ D: a8 h Y4 M( z9 V5 Z. @) M. h) R' L
TA0CTL=TASSEL_2+MC_1;' C$ m& T/ n8 k: M
4 ]2 |0 O6 Y# `! J7 z while(1)
1 l: X! x) `; ~" M6 `1 E3 W {6 G, ^4 V+ G8 t% L2 l: s; S: z+ A
bizhang();
/ H' Y; j& W. {- W4 K4 b$ Q+ R, | }( g& T1 h+ s+ d+ [3 N) P
1 G$ y! m: h% A6 i8 \' b- Z2 w}
& Y8 i; ~4 \$ a |
9 C( s4 ~, k; _% r |
|