|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这是我用MSP430F5529lp写的避障小车程序,用了两个红外避障,跑起来感觉还行,里面用到了库函数,5529的库函数也分享出来了。
( m1 i/ V+ b! f& L9 W/ Q$ B7 K# j, Y) C单片机源程序如下:% ]; W* L* }+ X( H
#include <msp430.h>
- Y7 c6 X( W7 V- b m1 D, `#include<msp430f5529.h>( M3 Z3 `6 w" o% h* |3 e; m( d. p$ k
#include <USER/driverlib.h>
# k: z9 F4 l) U. N) R#include "USER/gpio.h"
2 Q" r1 e, |# j" y% [#define CPU_F ((double)8000000) //外部高频晶振8MHZ0 p/ ]% J9 Z) Z( ^$ _1 X4 k
#define delay_us(x) __delay_cycles((long)x); B- P7 @/ V' D. S5 f/ }
#define delay_ms(x) __delay_cycles((long)(x*1000.0))6 K- S, a0 ?# O& H; z' g9 p# \6 k# G
y, B$ H/ c3 F# B/**
: ]& r4 @8 C) b1 C) h8 p* main.c2 Z3 J3 |$ o( D5 k. F3 Q: f, v
*/
) x: h% o/ x5 i. G8 K) c% M1 ivoid stop(void)//停车 F' }; F6 [: R, ^$ D" D
{( T4 k+ ^& I* Y
TA0CCR1=800;
' ^2 o4 y/ ^4 V" E TA0CCR2=800;
2 q( K+ m) [) t* n; I. K" y0 k# k# B TA0CCR3=800;* U3 V2 i, w* p5 n0 c
TA0CCR4=800;
! b8 o! p. ]" j5 ]% H }7 |8 r# Q* _3 t- _, J
void go(void)//前进
8 L% Y4 X7 {! q0 i{
* Y: S# z! v" \5 Z0 M$ A TA0CCR1=800;) c5 A y, }. i2 w& \& d
TA0CCR2=600;1 E& t8 U. x- B% E
TA0CCR3=800;
: h% {# ?/ j* s: R7 G* L6 K TA0CCR4=600;
% i; z1 m. u% H1 j+ L6 A }4 c A8 h8 @8 h! V
void tui(void)//后退8 p% O9 G, @0 B5 r; J
{& p2 H$ J5 ^2 _2 k: R, \" h& H; p
TA0CCR1=600;
1 e( U; b9 a- H, J5 l+ v TA0CCR2=800;
' t. W! d" D Z; H TA0CCR3=600;* X4 z0 F/ h+ f) B0 E
TA0CCR4=800;0 Q% G# |/ h1 V6 C) @
}8 e" `5 ]* K( v
void zuo(void)//左转, F" `0 K/ S5 k7 R2 X" W6 o
{
% p7 X& G0 b _ TA0CCR1=800;
" x6 {% ]( u, P$ f- ^ d) c TA0CCR2=700;6 [5 \/ N4 C8 a) i# e7 R: u% X& r/ f
TA0CCR3=800;
M2 V$ a" k" @; ]/ E& l$ Y5 g TA0CCR4=600;
( L4 W+ p4 {% I" y, i7 b }. w1 U6 i6 \, V1 [/ p' D7 {
void you(void)//右转. O# Z* `9 g/ L+ l
{' }% R0 i+ |/ h" S: a9 A. o
TA0CCR1=800;0 x) S# b* W3 q+ n
TA0CCR2=600;; U c$ G: R; }2 X
TA0CCR3=800;/ u/ S& k u) z" s# u4 }: v
TA0CCR4=700;) m5 E( ]0 S5 s7 v- C5 F: O$ g
}0 _5 |4 v; v9 m' a4 k1 b
void zuo1(void)//大幅度左转
5 C! C" `; {# y& \1 W{. C" `+ }1 [0 F0 W1 @( X
TA0CCR1=800;
- y+ T4 Q8 Q( |6 m# D, E TA0CCR2=800;
# d* A, O( w4 T2 b1 a TA0CCR3=800;
; J6 o' T/ c& R, J) k TA0CCR4=550;
. ~- t3 B5 x+ [/ j }
; f9 v& T) y6 Mvoid you1(void)//大幅度右转
. d7 s1 Q6 T" f# r R{9 I( f' z% y/ Q8 K; v- P. o
TA0CCR1=800;3 L3 T& h2 {+ j G
TA0CCR2=550;2 x& G: g3 ?% r3 v2 F% I3 D
TA0CCR3=800;
/ N6 X. D6 v) \% c/ R- O1 ?: v TA0CCR4=800;: N v& a3 _8 c2 o7 h, Q) m5 T; B
}- S. Z* j9 L8 y% [; m
( q6 O/ A6 C* T6 ~
void bizhang(void)' K8 Z G/ a. y
{
- [" ?* v7 W% |1 S GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1);+ L" [) ^1 g' l4 i7 p1 p
GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2);
/ _7 p5 Z+ m' f4 g. v/ A if(GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1)&&GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//都没有检测到障碍0 M* s5 b7 |- Z! u- e
{
0 g6 J o0 r3 k" I! j1 w9 ^3 P [ go();
# B" n# v" r; b* m }0 C' U3 u5 G& z; P# A. x
else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1) && GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2))//同时检测到障碍
$ }3 m$ N" n/ [- \- E! j {- i" B8 ^ v8 n: @1 Y
stop();
6 O* r: H* y1 T0 w' z& f+ J* @( ^3 z9 H delay_ms(1000);4 n/ k7 @) K7 F+ r% E
tui();
; f/ t1 W$ E+ ` l; H9 b: } delay_ms(2000);
" J' t- }2 V8 W1 s- K @! v you();
( \ v1 O& x3 t. H0 |( y! L delay_ms(1200);
% M/ O7 e" i4 f `% q* x l# O go();
7 {. ~0 ?5 h) x; M; r4 F; U
\- H) A8 p3 j/ O5 j' t }& M- T* V D6 Y. v0 q
else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1))//P4.1检测到障碍(左检测到障碍), ~6 T$ W3 e5 K( I8 g
{1 E' h% j( r$ Z- k4 @2 b9 o; N8 K; T
zuo1();
! d' [+ \' H1 v5 ~ delay_ms(800);
5 k( X3 _/ g7 ], Q4 r go();
# j/ U+ d4 w3 F }% t3 C0 @; _# {. F, v9 x" U/ u* n
else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//P4.2检测到障碍(右检测到障碍)
" [9 D* g9 r+ u6 T4 P {& g, m8 {/ ~1 F" t2 z) J. `4 z
you1();' S! s' q9 j, u+ H
delay_ms(800);# O+ b* r* s; l3 I4 H: h
go();1 z% `* h( ~" m6 \ ^% _( [8 l
}7 y1 m" h# }! k5 S4 C
else stop();- b8 M: U3 g+ f9 o) n
6 O, i2 k. H" G
}
3 Z1 H) `- v6 c! y: H2 o0 v1 Q$ L# m% x
int main(void)6 l; Q' l$ p2 J
{
$ S5 T' s4 I1 e# R bizhang();+ o# R j# G# x) i5 r5 ~
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗7 d$ v# K- P4 M0 m9 P; o5 R
P1SEL|=(BIT2+BIT3+BIT4+BIT5);( A, n6 G4 }1 D9 Y
P1DIR|=(BIT2+BIT3+BIT4+BIT5);0 \" x7 E \" k
P1OUT&=~(BIT2+BIT3+BIT4+BIT5);! U7 f, @0 W0 W4 Q$ p/ |1 _
7 B+ c' M. W) T
GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN1);
% l1 s: @+ }) K+ H5 I GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN2);
/ V; E1 s- a2 v% U" a- z
7 K" ~- D: `/ j+ a; ?! U2 J9 ~2 `+ z( x TA0CCR0=1000;( l$ F; A0 E8 g! R% B: E
TA0CCTL1=OUTMOD_7;" Q v' Y& ~: W& f, f" Q
TA0CCTL2=OUTMOD_7;; I$ h& b2 C9 p- B: a+ n X) U1 M
TA0CCTL3=OUTMOD_7;
7 }9 t! |5 f* M( J1 }' d' Z TA0CCTL4=OUTMOD_7;, U' S; a" P5 b9 T: A, }
1 o2 K+ q* x* I" M: Y3 Z8 D) m( ]9 ^* X TA0CTL=TASSEL_2+MC_1;7 |2 b% q/ S. e/ d* U3 Q
( ~8 V& t V, j while(1)
$ n, s7 i! f1 h3 ?( b* ` {
8 m3 |+ h# g7 W, G bizhang();
4 N' \2 P/ |$ T }* v- Z' [* D, _% k/ B" L7 Q
7 X; o2 h* B; u: Q8 Y}0 s" q: m+ o& K0 s
|
3 B- f8 W* z: ]+ l& r7 R2 P' } |
|