|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这是我用MSP430F5529lp写的避障小车程序,用了两个红外避障,跑起来感觉还行,里面用到了库函数,5529的库函数也分享出来了。% ]1 S! o$ A: V" Z
单片机源程序如下:" y8 h' D( R) A1 v& y: p, R: k# R. \
#include <msp430.h>: ?4 k9 U8 v' g2 j k# w. N- _3 ]: J1 c
#include<msp430f5529.h>
* M$ L8 ^- d+ b& k8 Z: F& \# z#include <USER/driverlib.h>+ {8 R' a* y* `+ e: o
#include "USER/gpio.h"
. M4 V5 l! a& P" o* ~; j0 C2 m3 j#define CPU_F ((double)8000000) //外部高频晶振8MHZ
! C( @ [! q9 U# w' s9 O1 W u#define delay_us(x) __delay_cycles((long)x)6 p5 h0 J0 t, X0 K
#define delay_ms(x) __delay_cycles((long)(x*1000.0))+ t$ s2 k. U; d, l. W$ Q) D
0 ]: Y) m" M1 F: C: ` T0 ?# p
/**
3 Y2 A0 @: a+ L) }' a* main.c$ [7 I& F# p& X! p9 A1 I0 T
*/1 v2 R* m4 m3 V# X4 x; X7 J( _& h
void stop(void)//停车; u' V: w, v; ~* S" Y; I- X4 _
{* p0 x# \1 V+ W
TA0CCR1=800;4 e3 s5 H! O* D; k' e1 _5 F2 Q3 a
TA0CCR2=800;) r8 S7 P8 b$ }% j9 U: F+ G, c
TA0CCR3=800;
3 n! E( P$ u& g `7 c TA0CCR4=800;
+ M8 \2 B2 Y! G/ @ }# O8 z9 s) j0 ^2 Z6 L2 Y
void go(void)//前进
2 c7 V9 q2 w! s) T1 K* O' h{2 D$ a- {. Q% J$ d, ~0 z
TA0CCR1=800;) w: ~* x& E2 f# o \
TA0CCR2=600;& w$ P7 W: x3 S; k! t
TA0CCR3=800;! d3 B- \: q. D% [4 G. P! O
TA0CCR4=600;) a: z4 n# C9 ^3 O' P, k
}- |6 K$ M5 w- P3 Z9 Y
void tui(void)//后退- b5 y/ A4 c h5 j
{
$ T# f) _" W3 w, T; z+ R TA0CCR1=600;
3 ^& k/ N2 a3 L9 }/ z- J6 v( T TA0CCR2=800;
) ?& l4 F W2 f) @) C TA0CCR3=600;: I0 ^- N( D/ f% w, y1 W
TA0CCR4=800;& S# m" L- n4 @3 v: v- e% j
}
7 y6 m% x+ W& f1 avoid zuo(void)//左转" b( i1 Y2 i8 b; Q
{
; i" K* g6 w. q* v TA0CCR1=800;
! _% \( D3 H; Y9 C- a' h TA0CCR2=700;, m1 V. k: Z) O% P
TA0CCR3=800;
; ^4 y8 _1 k. u m$ z! a TA0CCR4=600;
' t+ W6 ~" |" C2 C! u. Y% y: X }
6 r- v1 \1 K( z2 `$ a% a) Y$ lvoid you(void)//右转, G# L- I4 K' ]! U2 d
{% _% ~5 w# B) I* c) D: Y
TA0CCR1=800;5 \7 k. h/ v3 j
TA0CCR2=600;
, L3 H; [5 h" {* R1 M TA0CCR3=800;2 y* U: C) F$ ]/ M: |1 Y
TA0CCR4=700;2 R* V* T# L+ ^0 C# e" a$ x
}
* f5 `# G7 N0 F2 b9 i$ P9 {! _void zuo1(void)//大幅度左转8 c$ D# W- I" _- U1 r
{
) O }/ f' X# y* R6 Y4 s$ P3 t$ @ TA0CCR1=800;
( c) L7 B, y) g2 L5 V7 k TA0CCR2=800;
6 U* u: C, k8 x8 a. M1 I" ?6 X+ F TA0CCR3=800;
% z q. S. m# p) G0 a+ e TA0CCR4=550;2 h- T" y+ ?) T$ v) x: U {
}1 E6 u+ |$ D6 E Z( {& k
void you1(void)//大幅度右转- C% I0 [6 r) ]5 P' @
{ a4 s$ n6 w# X+ s8 b1 j4 D( r# C% a
TA0CCR1=800;
# h* @) z( m# `6 n4 d TA0CCR2=550;$ u; S5 H; o, |" W/ {+ J" |" i
TA0CCR3=800;: ]; x- _3 |* F
TA0CCR4=800;0 I+ r4 r* |! a( Q% R" U+ m
}# ], h0 `5 y% p
3 Z3 w: n$ @. Y: cvoid bizhang(void)
- i5 G O; x% ]; V( C. f# g{' M5 R0 U6 p; m
GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1);3 B- N. p" Y/ j6 h
GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2);
/ l- P7 [, N6 l, V! J if(GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1)&&GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//都没有检测到障碍
+ x9 E- r# K/ }2 L* @ {
4 R% w$ n# H( N go();
* e! t2 u( A6 X, t% _5 O) V }8 x9 E% K# k. D4 o
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 S) ^( H& ]+ z. P" W" Z3 w
{
7 O7 T+ v- i9 n0 k6 C- g stop();
8 i0 V) V- N6 f delay_ms(1000);
% L3 Y, c- L) j% l3 H# D0 x- X tui();4 k3 v0 Y1 \. p6 m
delay_ms(2000);. s7 K) E( I- w V/ k) J
you();
' b$ v% O+ |4 Z* E( M1 d- v2 a delay_ms(1200);
" Z* `. I8 S0 ^% G go();
! t" g2 s9 x, c! i
0 J1 p9 L* b. a$ E! Q! g( J }
( W w- l2 B/ q else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1))//P4.1检测到障碍(左检测到障碍)" @1 c0 P) y! L+ u* ~
{
) F/ I- ^8 A0 ?* E& \! b' | zuo1();
3 J/ E% I' H/ l7 ?; o delay_ms(800);
' }8 o' f# ]& M) Q go();2 a$ L9 B) S$ h, a
}6 }$ {* H: b, j
else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//P4.2检测到障碍(右检测到障碍)+ k0 ]+ {6 u L3 k7 E3 m
{3 h2 b i8 I' U# N/ x ^. F/ L
you1();, N+ X: V R0 v X
delay_ms(800);
/ M* F# f. K1 T) f go();) }7 f! n5 v' h( w
}' S! S: n5 g& m6 | [- Z7 G" [) b
else stop();0 R! m- K1 ]: g5 l/ n3 v
; K! O4 L- `6 F( `, w. o( U& N
}% O5 }5 e: F9 z
/ O1 D" e, k8 v4 p/ K( C/ \
int main(void)
- U2 X( c* ]. Z& |# y$ O{& t6 y2 {- n( y3 |
bizhang();
- q |# W, p" s1 M WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
( t1 `$ L6 w8 }" K P1SEL|=(BIT2+BIT3+BIT4+BIT5);
5 ?! m6 ~. U3 r( |% T P1DIR|=(BIT2+BIT3+BIT4+BIT5);
1 Z& {; l& N+ G) `4 J; \' Q P1OUT&=~(BIT2+BIT3+BIT4+BIT5);
! m7 n& {- x1 H- M4 R) f6 @- z# i R4 l+ ~
GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN1);0 ~( ~- H- x3 \* B2 p
GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN2);
2 L3 Z }6 D# @6 v9 `% B
7 b( x3 O$ q( C( @* B# V TA0CCR0=1000;
* v* E: n3 n8 L8 y& c) {1 n( V TA0CCTL1=OUTMOD_7;3 @+ r' a) J z* m0 q+ J" [2 Z
TA0CCTL2=OUTMOD_7;
7 b5 {" G( V% G% C TA0CCTL3=OUTMOD_7;% ?8 P" C" D. }* S' \1 Y
TA0CCTL4=OUTMOD_7;
" a* x9 _7 x3 g$ d& Q, l, [2 V, Q
c% v W: j% Y! z$ Y TA0CTL=TASSEL_2+MC_1;' X9 v o' k% H7 W/ D2 T
6 k5 J w( z7 ?
while(1)% a! C8 N) ^9 b% ^ ~
{6 |7 C5 Q' j) i5 A
bizhang();' W- H; \+ K- Q! m! U) {5 z9 t
}
. M) f0 J, {! T9 H- p4 ~ b- ?+ N2 |
}
q7 K1 r7 n+ Y# g8 `2 j$ _0 } |
* Q" o" y ?: m3 I5 ?8 K% q5 @ |
|