|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这是我用MSP430F5529lp写的避障小车程序,用了两个红外避障,跑起来感觉还行,里面用到了库函数,5529的库函数也分享出来了。
4 @ I2 \5 z3 [2 n3 C单片机源程序如下:1 C% c* G) I5 I
#include <msp430.h>7 ~. I y7 E. E3 u6 a, x; T. }
#include<msp430f5529.h>
" R, t. y8 n5 m" z#include <USER/driverlib.h>6 z- X h8 H) z9 ~8 Y9 D8 K
#include "USER/gpio.h"
. p% ^. ^& S! G3 C: q0 e' D' d#define CPU_F ((double)8000000) //外部高频晶振8MHZ! a3 W6 S# F# x' N7 m: Q ^
#define delay_us(x) __delay_cycles((long)x)
$ P) k) I) b' K0 ^1 A9 B#define delay_ms(x) __delay_cycles((long)(x*1000.0))" K% Y& g Y- @6 U& w, E* n D
" R3 g- I6 Y" M6 x% |* [
/**
# N( q1 v q% U: _4 r* main.c) b, Q2 X ^6 d4 P2 X
*/
7 t. v: c7 U: a9 Wvoid stop(void)//停车, B$ B" Y9 d1 v4 ?% u* h/ D4 }
{
/ ?" v6 F* O" n( ~2 e! j, P- S TA0CCR1=800;9 @( D& h+ e* T) J% e2 j' {1 V
TA0CCR2=800;
1 x& G2 g: ?7 z- ^3 V1 i5 K TA0CCR3=800;. @* d6 k: S8 b$ y
TA0CCR4=800;
( ^. R+ F- Q2 L! t1 s& P+ l4 j* x }, I' v7 H6 C8 l* M: H Q8 j
void go(void)//前进$ i; F, M; J, `" L# I
{0 }! _& Z. e# u" |* q" _6 q1 Z
TA0CCR1=800;- c5 Z6 k! x8 D) |) r5 ]7 M
TA0CCR2=600;! U( L2 y% F, {, `
TA0CCR3=800;1 i6 c9 Q8 B0 z# W! n, ]
TA0CCR4=600;
* P8 l& N: k) p& p1 A' _ }3 [* d& K/ d2 Q" m. w
void tui(void)//后退
& u3 A4 Y" k, Q( g{
) M( s* o7 m+ W( Q8 D TA0CCR1=600;2 Z- K- ?. B T8 U7 V$ r
TA0CCR2=800;
: `: S$ f3 _0 T1 I) \! d TA0CCR3=600;! K# w+ M, C% n' I
TA0CCR4=800;2 F: n; p) O& A( {. p
}5 I3 w% o* G7 u1 u- W/ s+ B B' Z/ o8 p
void zuo(void)//左转9 @9 ~& v1 @4 S; f, q2 Y/ x
{
6 ]& @' b0 C7 j TA0CCR1=800;3 G8 u5 I. \+ m/ p6 @, E
TA0CCR2=700;
0 k/ P7 {9 O- b- K2 | TA0CCR3=800;. _! Y6 X+ y& c1 N9 f) H0 R6 J
TA0CCR4=600;
) n* r: h# x$ | }6 S6 d5 j& w2 c5 w+ \: S" ?
void you(void)//右转+ Y* i. I2 ^4 D5 R& [
{
: u0 k, p% d" D3 M0 X TA0CCR1=800;$ I7 a8 s% p' p% o) a1 m0 `
TA0CCR2=600;
4 D$ T1 v0 S' |3 W6 v* } TA0CCR3=800;! P5 K ^5 R( y6 X
TA0CCR4=700;
! w+ G5 E6 H1 q }
6 L% }- x' Y) m0 B/ e+ D( g- m2 Q5 mvoid zuo1(void)//大幅度左转
: g9 C8 x( |+ k2 |- K# X$ @{
0 b3 O( y# @: g! V TA0CCR1=800;0 Y/ `% _' L' L6 P$ t
TA0CCR2=800;' }4 l; ^# _# E9 i
TA0CCR3=800;
1 f1 Z6 M$ n& @# P TA0CCR4=550;3 y9 P) N$ j1 ]9 F
}
! o3 ^8 y; R2 g& v* j# ]$ N0 g' X& ]void you1(void)//大幅度右转( p9 u! W0 i, E, P3 C2 B
{2 I) y% u9 n4 e+ P# ?+ ^
TA0CCR1=800;' ]* ?' n; {. |) e' z2 ]! V8 Y
TA0CCR2=550;
7 M* o; r" X0 h& {0 b: ?& o: A9 | TA0CCR3=800;
P8 c. y# [" s6 B4 h1 Y. |* x TA0CCR4=800;8 b7 v$ E& k6 [) u5 G4 o% [' V
}) B* Z/ d' V ~9 @" `* f3 o
" _- n' H# z# D% Y4 _, U+ W
void bizhang(void)
; y# j4 M' }) i5 W6 Z+ ]1 f2 C1 ^ b K{' G# E0 p; t' X+ h; `
GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1);* O ^+ d, m8 C2 j- e
GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2);2 p( e. I7 `' e1 x
if(GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1)&&GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//都没有检测到障碍
9 Q& ]+ y! s4 O% N! X {0 d! P. z1 g1 E9 ~7 x
go();) i2 P d1 ^ ]( W+ ~9 J
}( |/ L$ }7 C+ _: K
else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1) && GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2))//同时检测到障碍
& L, \9 ~7 {' P( v. e+ w {! P" J/ @' Q" z& s$ }; H' O. l
stop();5 i1 l+ N0 ?/ F! J
delay_ms(1000);' H5 R8 Z t& W; K
tui();
7 h9 S j1 g* E0 i& s0 |2 b+ {# r& C. ` delay_ms(2000);; _: y0 U% d4 X
you();; Z) P( G0 w) ?5 M2 I
delay_ms(1200);
- e+ K) [& x( n3 J, D- _ go();
- S @/ V2 _0 c9 z
8 ^7 ?2 T* W$ A7 l( \ }
/ C7 C. v% Z. }7 z else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1))//P4.1检测到障碍(左检测到障碍)1 C* y& E9 g8 _/ P$ o4 Q
{
& M9 A. ^2 z8 s( X1 M/ W zuo1();* d% f! n* |$ ^* O# U, q
delay_ms(800);
9 t1 _" s" `: h0 n8 ^/ A go();
" O3 l3 K( N, k }, {$ f- _' B+ f1 H
else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//P4.2检测到障碍(右检测到障碍)
+ Y+ n+ l- i9 q8 H3 g {9 s$ W" F4 v: V3 e* V _" H1 u
you1();0 k5 ?% b6 ~7 j% X( R, z3 h
delay_ms(800);
, r, B1 Q6 c7 A( Z go();$ f4 S9 y8 }# K& n( o# ]5 B2 `
}
; o7 Y6 u/ I m5 q7 o( X6 | else stop();
* o. e7 g, J% u! Z( N/ @) o7 O6 w r4 Q- y
}
8 ~" x+ H$ b# N( I" X V- S$ F( h N3 a- Z
int main(void)* g' @0 a2 m+ n/ v8 v$ v
{
; G; J- p/ J% q: T" A bizhang();+ U( t/ h4 ~* k$ u' l
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗& ^ v- }8 C2 Z5 Y0 }
P1SEL|=(BIT2+BIT3+BIT4+BIT5);& E! m0 B7 _; F* S. x4 E
P1DIR|=(BIT2+BIT3+BIT4+BIT5); d" F. [; E( I' n+ x
P1OUT&=~(BIT2+BIT3+BIT4+BIT5);6 W; O) L1 [( y/ P0 c- R6 U
+ F& `* U2 C+ I* J' q Y GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN1);/ k! C5 Q- D7 _3 M
GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN2);
2 S/ x, E3 Q6 T
! t: I: t8 {4 U* P2 g3 k* s9 ? TA0CCR0=1000;' Q6 L4 J5 o- V; R/ X) P
TA0CCTL1=OUTMOD_7;! j6 w! X0 }, e/ G% }3 [
TA0CCTL2=OUTMOD_7;' t) u2 V1 h7 {. {, G$ \
TA0CCTL3=OUTMOD_7;
9 {" p. w+ b3 \( [- o. e TA0CCTL4=OUTMOD_7;9 I$ ~8 m' `4 f% G) }
6 [( W, i& a" U, M# E5 _- w0 U
TA0CTL=TASSEL_2+MC_1;
( d! j) W$ s4 q* ^; x; [
, v$ g+ j" U# r1 n; P while(1)4 D. [( M Y/ D% c# e$ X8 F# L; W
{
* a) Z3 }# ~& c5 Z bizhang();
/ o) w4 ` |' q+ A, R }; g5 R* G* F/ V9 i( d
/ ?" q: s. w: K4 \. }% [7 H9 ~" K}
3 m) R1 i! S# C4 R- Y- S, _ |
/ C+ ~) d" ` q0 q9 c9 r1 l) i |
|