|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这是我用MSP430F5529lp写的避障小车程序,用了两个红外避障,跑起来感觉还行,里面用到了库函数,5529的库函数也分享出来了。
{+ {& D5 v" E w0 T单片机源程序如下:+ w4 a5 b! c D( O5 ]7 j- g3 V* r
#include <msp430.h>5 v+ R* a4 b; q, }+ j# x6 [
#include<msp430f5529.h>
# t* ^: m9 s& p$ W- i% U' r' o#include <USER/driverlib.h>
w" u& ]/ ^! r1 m5 h4 D#include "USER/gpio.h"8 i8 L' H5 M+ y( s: h! p6 H% q4 i
#define CPU_F ((double)8000000) //外部高频晶振8MHZ
2 [( Y9 \% ~0 K; {$ ?; v% y) x#define delay_us(x) __delay_cycles((long)x)
5 w" d9 y0 t3 e' O- m8 J#define delay_ms(x) __delay_cycles((long)(x*1000.0))
7 V! \+ V6 P7 t; m# v6 _1 N$ Q" F6 R2 ~0 a+ j
/**
9 s; r9 @: k. e; N5 B* main.c- v* I8 Z' \! I i$ v
*/
# N% k9 P, a9 f- J% h' avoid stop(void)//停车
4 d+ M$ H$ r5 m( n{
* }" @# U; z% w TA0CCR1=800;
8 r# s# w+ t ~. } TA0CCR2=800;6 P u7 V8 [- R% J" R* o& w* j
TA0CCR3=800;
* Y: n: U+ J. s2 V& e TA0CCR4=800;
. M% }- p$ [9 ^/ g N. j9 h }
/ g. G4 y s# \( o$ }) K& xvoid go(void)//前进- i' t4 n+ X; G. C: W% X( c5 \
{
4 W. s# z; V5 H TA0CCR1=800;0 ]' }( g$ _; d
TA0CCR2=600;# V7 S4 l+ M# ^. X4 c- J* h
TA0CCR3=800;
# n! m* i1 G$ \3 ]( f# V TA0CCR4=600;
s' R9 r _' t' G/ t1 C$ d }
$ V3 c; n2 A* H/ D: a3 r" i# Pvoid tui(void)//后退& B5 A. s4 _% @; N$ z% q# ^7 ^4 H2 ~
{7 `! x [& w0 \2 F6 {% P! Y
TA0CCR1=600;
3 Z5 C+ j! ?- t9 U TA0CCR2=800;
% F: l; s6 V; K$ i& o TA0CCR3=600;9 z* J3 S; u) i9 n2 i, W: @
TA0CCR4=800;
, C7 a) k1 m- a }2 e, G4 B) a4 v/ O0 L9 H
void zuo(void)//左转. Q# A! D% A" ?2 a$ s6 e" r
{) @ s$ c7 p& D+ \# ?
TA0CCR1=800;
4 X( A! R& |. ?* ? TA0CCR2=700;3 q- i. C, q4 Z) g! }
TA0CCR3=800;6 c/ c7 `5 y5 c p" U A
TA0CCR4=600;
/ {; T5 h0 V8 {7 O! z: S2 j r }0 n0 Y# e; ~2 v' W8 a" u8 B! _
void you(void)//右转" T0 a- m* h5 @' p
{
' M5 b7 g2 V0 {$ |. u0 U) b- e TA0CCR1=800;
2 b$ I1 V" O S+ w TA0CCR2=600;- q) r) D& w; w" O m. _+ m7 X
TA0CCR3=800;
& o9 }8 h1 M9 C& w8 I- u TA0CCR4=700;; I" F' g* B1 U1 A" q l8 ^
}2 f' e5 R$ @, V; Z" F& u/ `
void zuo1(void)//大幅度左转# z: l3 H6 ?; g8 o% d; E
{! {* r5 X; m0 u* f% `
TA0CCR1=800;) g: |7 B" y& ?* P7 v* d* w1 l* @& w
TA0CCR2=800;
0 o9 _" M& c+ ^0 b3 s! e* h" _# X" a TA0CCR3=800;
$ `8 ]( r0 u! _7 v8 I% d3 `: H) o TA0CCR4=550;
0 F h( i% H% x/ Q- |0 X }. s- f0 \' l/ E4 q4 T
void you1(void)//大幅度右转
# Y; u* _$ q3 L) N! ?{
$ |8 ^5 P. E4 I9 t: a TA0CCR1=800;
5 [) R+ S6 f4 _2 T2 X1 c8 w$ p TA0CCR2=550;
* S/ }5 T3 M1 \ TA0CCR3=800;
8 r6 r" L% H# h8 B! T2 X TA0CCR4=800;5 x: s, ~: r, g6 ^
}
5 k6 {' D' C+ I/ W" @0 ?* }% s$ i
void bizhang(void)
4 |3 s* j; L9 H# J: c% d; {3 m1 D{3 M B( B) `7 p% Z$ j ^5 E: K
GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1);& u! G/ D7 r3 R" K$ w
GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2);( p7 W0 Y+ T8 Q
if(GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1)&&GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//都没有检测到障碍
9 E" e9 u% _* y4 Q& ~& K- E {
) D: ?+ x- J4 @' r/ M1 H8 u7 k go();
$ X( f! `" {* C9 h5 | } D9 b; }3 U, w7 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 E; S3 Y" t& F$ R# o4 z: @
{
, M" B$ g/ Q* d2 v* w- ~% m stop();- L" C3 B! L! P) l7 E' Q
delay_ms(1000);
, r0 ^) C; {! z+ e2 |3 T( ?# L tui();
* ?: e, z$ `/ u# q% f# f delay_ms(2000);5 R3 B( P& _1 D, Q4 ~6 Y
you();
; J j# p: Z& n5 s delay_ms(1200);
% B$ I: y* K1 S( V6 C$ W9 y go();
# q, X# J8 X1 Z! ]% ?7 V. S( R) K$ H* Z8 C8 ~% I$ H9 V. M
}
# B( l6 `0 A6 y else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1))//P4.1检测到障碍(左检测到障碍). O, U* ~0 P B9 l1 f* r
{
; Z3 m9 p/ `4 P% {' U4 q# Z zuo1();
# L* F' J4 a8 p3 { delay_ms(800);
2 M, J. k% Y, t' T0 N' o0 @ go();
' \7 Q' W/ Z, L( i( h }
7 P: H' X" X* [0 v/ f2 | else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//P4.2检测到障碍(右检测到障碍)) G L' Z7 ^1 f: \ C
{
; o3 p G9 ^- V. m you1();
* T M' Y; G; G# O; Q! E delay_ms(800);
' x; o* n9 h0 |1 e go();
# `! V2 \5 M! G8 L3 C }
7 ^4 M$ A3 X. E' _* F else stop();6 F1 R7 w. L( I: f
! T/ _' P3 J4 u8 n}
9 \" W8 L( E! X8 f5 l* Q# {1 O1 J( w
2 k, u# I% P9 L- |3 Jint main(void)
9 z9 e2 c6 v2 E" L4 S% V- i{3 I ]2 E6 J" s( w5 Y
bizhang();' z( W# d; d$ x) X
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗6 P; {% C; G% } n# K9 O+ d
P1SEL|=(BIT2+BIT3+BIT4+BIT5);
6 Z7 D" l' e" M- y P1DIR|=(BIT2+BIT3+BIT4+BIT5);
! P4 {% B( ]6 x/ S$ d P1OUT&=~(BIT2+BIT3+BIT4+BIT5);
. a/ x& ?3 g \! |5 \
8 T1 ^5 ~# p4 r) H6 `8 f' l GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN1);
3 M: g1 t. x# d5 @, | GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN2);
% {% F, J0 d, ]2 w9 m8 F P6 v% w/ q' h- p& j4 j: x5 G# I
TA0CCR0=1000;
. M& X6 l! j9 O TA0CCTL1=OUTMOD_7;
) S5 L% {2 c( B& O* v TA0CCTL2=OUTMOD_7;) }: C' x* C% E, O+ C r
TA0CCTL3=OUTMOD_7;7 ^& g6 e( F* O+ Y7 f
TA0CCTL4=OUTMOD_7;! A5 K u7 c. T3 i" r4 G
1 e% r2 C- Y I O TA0CTL=TASSEL_2+MC_1;$ P1 F' R3 {1 ~5 m7 k1 s2 m
& g8 P \ E9 ?& s* J
while(1)
) T% \; I& g9 I& g/ ?5 T {
6 \2 r* e0 U7 W bizhang();+ F" A5 c% _8 A: O
}1 ~) J$ e3 b* i: O" n. c
, y1 F2 ^! x' q3 D5 M* c: W2 G: P- J1 D}- t( t/ H; D$ }) }
|
# q$ r3 I* u/ b& k |
|