|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这是我用MSP430F5529lp写的避障小车程序,用了两个红外避障,跑起来感觉还行,里面用到了库函数,5529的库函数也分享出来了。: I6 B6 h& z) }/ z2 G& Q
单片机源程序如下:
6 k5 s) o Z" ^# R1 t! h#include <msp430.h>
* c& w5 T+ m& m) @3 q0 c3 t#include<msp430f5529.h>
! e# W6 Y4 k0 L2 h. _2 N* R#include <USER/driverlib.h>
2 L: S4 Y/ W8 N4 z7 g#include "USER/gpio.h"
6 L/ S' q" Y3 {. z( U, a#define CPU_F ((double)8000000) //外部高频晶振8MHZ) C7 _3 e/ t6 H. R2 F
#define delay_us(x) __delay_cycles((long)x)
: \: B" F4 ~( I# V#define delay_ms(x) __delay_cycles((long)(x*1000.0))
( B& X; J( \9 D" r, B2 {; K8 y: ^5 q, p, W \
/**
. ]& A$ ]) ^0 h" r# N( a* main.c
( P X) Z7 {" ^( Y" G$ H0 o j5 G p*/
6 b* s4 a% h$ w& W0 ~ lvoid stop(void)//停车
) H2 e2 D4 v4 }) z& \{
' T6 R6 m* t; \3 x TA0CCR1=800;
2 p4 T! P# x# q3 C# n R# P1 H8 f TA0CCR2=800;
: T4 m/ W1 k+ C# o TA0CCR3=800;+ h) ~+ g* \( K9 H+ V( E- I
TA0CCR4=800;
% d0 T. n; \! k% t: Q. N }
& l9 z. t, ` t1 [, V# Tvoid go(void)//前进4 e% M# j$ I7 i" q* A
{! o1 J' ~6 q. g
TA0CCR1=800;% O! w/ G8 Q& [* o, S
TA0CCR2=600;
7 X6 G/ [, x+ V. H* u TA0CCR3=800;
! }" W0 H* O/ W6 i TA0CCR4=600;# M5 O9 r+ E* s, o) Z# D$ N, b8 p
}3 d4 q E; X% b6 F8 ^
void tui(void)//后退) \: |/ u, N. B+ c- F
{, f# d! H/ Z/ G2 x# e* i
TA0CCR1=600;+ N" |" p% Q4 u5 ]# d% l4 D7 A/ s
TA0CCR2=800;: O! M7 L6 u0 T W
TA0CCR3=600;
2 p2 y, @" Z5 O TA0CCR4=800;
3 ~1 }' G+ j3 E. K6 t }
, n% b4 Q. b) E: I: ]+ xvoid zuo(void)//左转
# F! O: S3 C# D" j6 T6 o+ n{
/ a" u i$ R& _: S) F! o TA0CCR1=800;
/ f( ~! x# |9 ^% A2 ^ TA0CCR2=700;: n9 Z' m3 q; X, j. E# V
TA0CCR3=800;( x. g9 K( s8 N
TA0CCR4=600;0 @" w, m' D& V: o: V3 ?
}% W- r% ?/ z8 p" B
void you(void)//右转
. d) }/ n- j1 u2 L{
' s1 p' W; h4 K# H- l TA0CCR1=800;
, H. Y, r+ W# W TA0CCR2=600;
1 T+ b# _8 N4 r: E9 a9 k, ] TA0CCR3=800;0 h2 B2 R( I' w* w
TA0CCR4=700;1 i, b7 a" N+ H+ m( l
}
' I5 e6 {1 m5 a) o0 t( Q& Gvoid zuo1(void)//大幅度左转1 E" A8 r' z9 v! ]+ q7 I
{7 n, e7 Y, V M9 H
TA0CCR1=800;
3 D8 j" |' r; p* l9 N8 F0 ` TA0CCR2=800;
0 F; J& F! s, i2 C$ b2 y) E TA0CCR3=800;
" s8 W- a" Z; c0 `6 e0 } TA0CCR4=550;* }( M3 s6 b2 |: T8 [4 |% T% M9 c
}
4 [+ c- j1 c: [2 ovoid you1(void)//大幅度右转
+ f& ^3 x. n& V8 w{
5 u4 u/ Y+ @* R' I9 d0 | TA0CCR1=800;
) M! F s& k3 R* c+ E6 C( R TA0CCR2=550;4 G7 b+ B4 U- }% i
TA0CCR3=800;& K7 S: f" Y ^( t3 U
TA0CCR4=800;
" u4 @. U" v: I/ K3 h }
# Y1 W& i7 Y3 f2 B: ~2 H
6 a/ f. g8 A- _# ]5 i H+ i. v1 Kvoid bizhang(void)
1 `4 O8 z/ m9 [" w1 O{' z3 H" \ |( t. c8 u
GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1);' E# ], Y1 J9 z* a4 l
GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2);2 U! I8 k& N' _) L' _" u
if(GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1)&&GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//都没有检测到障碍
7 f3 u6 W3 \. Z% R {
; K4 C R, H% T# |/ C go();) ~, ?" Z. `' e
}3 A: f! t2 h5 t" j4 ~! _. `
else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1) && GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2))//同时检测到障碍
# _5 |- `9 V) y+ ^( n! n {
& r. Z8 `9 u! ~ J& _& D7 l: | stop();
% K, q1 G( [% q# `1 x+ O delay_ms(1000);
. R9 s: L2 B- y tui();
1 G/ {" ?& _) L5 x3 D8 F6 J+ [ delay_ms(2000);
" r+ e6 n4 ?1 x. u# J you();
5 e( i& P( }1 C; ~8 K+ { delay_ms(1200);% `! m: V, b# ]; X
go();
. l) X& H& K; v4 E
2 {* W6 r2 e( x" \0 y }
) a) a" t6 V+ ` X8 i else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1))//P4.1检测到障碍(左检测到障碍)
^% p" P' V" A, F D7 Q8 g1 Q, @ {
. p$ u' Y) ]+ u. K1 g* I zuo1();/ u2 E- P, ]$ N& q. F2 q1 X
delay_ms(800);8 ] g1 T& ^: {& g/ F: [
go();- k, S7 X. q# Z) E. n7 W. B
}9 I/ E6 s" j7 X r( b3 V. v
else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//P4.2检测到障碍(右检测到障碍)" I! K- g! d5 p) x
{7 M* ]) ~7 x* r! F( m, a1 X
you1();
6 y. D5 S% G! Q5 X delay_ms(800);( p% _) M, M' b0 P) {
go();
+ M4 O) v: L3 }, w7 z }; K0 y$ o/ C7 F; d
else stop();
. G1 ]' l% P& s$ C; D$ L3 k6 x* G$ z: a6 b; |) X6 r5 d/ P
}0 ?# m" Z1 j9 j
7 e1 J& Y- N4 V# g' Uint main(void)0 d( Q0 G m8 A ?
{
8 }0 b& N3 ]) N3 P bizhang();( z6 T0 P8 Y9 s9 F
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗% \5 {, N* ]7 {! [! j" I
P1SEL|=(BIT2+BIT3+BIT4+BIT5);' f+ R C4 ?; D) M7 K
P1DIR|=(BIT2+BIT3+BIT4+BIT5);
& z0 v/ U* S6 N) j4 z1 s P1OUT&=~(BIT2+BIT3+BIT4+BIT5);
; T% a& M6 o9 K: p
( Q/ Z( _1 `! r# X! d: D: e GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN1);
@( O6 ^5 m* {! L4 g1 w GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN2);5 c5 K |" h V* K' h
% |% {" m* _- B8 o( y TA0CCR0=1000;
2 n1 M, n7 K g$ Z# v% M TA0CCTL1=OUTMOD_7;
4 m' Z- O. G- H' ]; H! `' u( S TA0CCTL2=OUTMOD_7;- V- ~' y" w$ m# s6 B5 }/ F
TA0CCTL3=OUTMOD_7;) l) l& e1 m" f, ?
TA0CCTL4=OUTMOD_7;
3 y/ n) w7 J U/ N& {" P8 I* x5 K. i
( t5 L/ \# g' u) _5 ^( j; D TA0CTL=TASSEL_2+MC_1;7 S8 u2 A3 g9 o: k3 I1 N: W; q
- u+ `7 J( G' j! e5 } while(1)
% s* j N, s: b' e0 I! ?/ l9 S {
, a/ Q z) g+ I" y, z5 R bizhang();
w7 w, n7 T1 D% ?+ u( z }
6 T6 E A* Q+ D: T `" e2 ~1 s) s& I) {5 e! }! _6 \: c
}
) e+ H# \! ]& J& q |
5 o5 @3 n; g' h |
|