|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 TaylorA 于 2020-8-26 17:40 编辑
% X Y! T M5 O' `: y& E X I8 X7 M9 y p! d% n0 J
/****************主函数****************/: a8 ^: f& U* e
void main(void)
+ s) w9 z3 F9 w* P, T{ ; H. l5 x7 X: z, j
uint i;9 Z% P/ _: A" N* X$ G% F
* ~, N) S: f R% ^# e
/*下面六行程序关闭所有的IO口*/" x8 Z, O9 J3 M( C/ a
P1DIR = 0XFF; P1OUT = 0XFF;
6 b. |3 g& o# D% F' z5 r P2DIR = 0XFF; P2OUT = 0XFF;
% t. p, C; w$ ?7 D P3DIR = 0XFF; P3OUT = 0XFF;4 |4 f1 m( W& P$ y# a
P4DIR = 0XFF; P4OUT = 0XFF;! r0 [. L8 T5 Q
P5DIR = 0XFF; P5OUT = 0XFF;
& W$ I( ^) ~' m- u8 E. N2 P P6DIR = 0XFF; P6OUT = 0XFF;; ~% u6 u, u" A* X! `1 o
; c. |# _3 p! y4 U% d1 M. C
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
p3 H4 T4 e$ E P6DIR |= BIT2; P6OUT &= ~BIT2; //打开电平转换# ^3 c2 }4 N. I" q
P2DIR |= BIT3; P2OUT &= ~BIT3; //电平转换方向3.3V--->5V: |" q' w/ W, u. i ]4 n7 S6 N
P5DIR = 0xff;4 @+ z3 a) d0 e( o$ E) |4 j! P
P5OUT = 0xff;* k- A$ C% [* E/ r
# x4 x d+ j1 ~3 c
& q) K0 P: b; u7 E2 S /*------选择系统主时钟为8MHz-------*/
; f u0 x9 [5 [$ u# O' c; N BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡器
/ Y- G7 a/ f5 p# T5 U do
/ A$ }' Z3 w$ E- O {' j& f& N2 A# y+ k' j2 u
IFG1 &= ~OFIFG; //清除晶振失败标志. Q- y; q# m' a; H9 u; s, u
for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振, f& h, U$ E* d! h: k
}
/ x' w( |: q, q3 \: B while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?
- i" ~# Q% r/ K' D( T6 u+ ] BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振
9 ^( F* T8 }. n+ E$ N /*------选择系统主时钟为8MHz-------*/ , I* ?! [9 c& H& s1 M+ L
/ u; O8 I0 |- b! q
P3DIR |= 0X07;* ~# Y3 g/ o3 m D
P4DIR |= 0XFF;
7 y5 ]: J, F! `9 j- l9 j& s/ G LCD_init();
+ K6 u- D: z/ ~' U& [+ W
# b$ D* |9 Z. K) l3 u9 ^0 `) R set_pos(0,6);
+ p6 ^) N3 p/ [, W& z LCD_write_data('W');7 `1 O. a6 Q1 Q8 t8 e# N
LCD_write_data('T');+ e6 ^" |" _' I: }
LCD_write_data('F');
! ?$ N8 U6 z7 |7 k, R4 Z
. ~+ I$ m8 j; |6 b) h9 I P2DIR |= BIT0; //设置P2.0为输出0 h% W# V0 F' \$ U- p8 E
& ]% I4 o! R( Y E8 {! k
P1SEL |= BIT2; //设置P1.2端口为功能模块使用 W; O) \8 f. x. s+ a
P1DIR &=~ BIT2; 9 z$ z) J/ a' p& V
P1IFG = 0;
! m7 K; h7 H, H% n# L/ C7 Z
/ y( `5 a) n, g6 U: l4 z TACTL = TASSEL1+TACLR+TAIE+MC1; //定时器A时钟信号选择SMCLK,同时设置定时器A计数模式为连续增计模式5 `+ h5 |- _+ ^+ _1 k
CCTL1 = MC0+SCS+CAP+CCIE; //输入上升沿捕获,CCI0A为捕获信号源/ Z' e/ N! `% H' R$ [" m( r* }# k
3 d/ P6 M& b# v. {3 K' B! R
' e# |( ~$ R' v2 }' Q% ]" l start = 1;
! e, N: v/ P3 ]* F; P- u% H disp_m = 1;, u5 r( ?$ n j2 l
end = 1;
6 d+ I: `- y5 X s; H oveRFlow = 0;
" j9 P1 t4 u, ]0 X2 a show_falg = 0;
- [5 C7 p- J5 I C, W
9 A* D+ J& E& e& x5 B/ ~: F6 W. m W' d8 D4 x
_EINT();
* H+ N& G) r6 \9 _9 n# B; G. K8 W3 T# \9 D
while(1)
7 V7 V3 |9 ~$ Q( v. | {, n1 Y7 b' T. ?; ^( \
, a. z C1 G% ]% I P2OUT |= BIT0; ; f I% L" H( n$ |& S6 S
delay(160); //给Trig一个启动脉冲
1 [7 K& ?/ G" g- z9 x- x" e1 K. p; _ P2OUT &=~ BIT0;
0 O4 X9 n2 ?$ I9 P: F2 G
) \: z$ G5 ^9 `" l m% |2 C- ` while(show_falg); //等待 Echo的 下降沿
* ]# X0 `) \$ T. V
7 Z/ F; t# ~2 N8 [ show(); //更新显示
+ L( S$ O$ M! S" i
' ?8 d9 l, o1 J0 t6 N2 r! P( h2 S
: l6 w% |, A2 s* Y+ c0 O5 p' F8 B
}
$ _2 ]. p1 s# r, g7 N. I- Q}+ `- ^( N: X$ |
8 m# V; P& a' d3 A+ v. _#pragma vector=tiMERA1_VECTOR //定时器A中断处理: j) L1 W4 |, B( y4 G
* e! R, h1 V$ D3 k3 p# V/ v__interrupt void timer_a(void)
2 c4 c7 l" e( D! _: ` [5 u' o- a9 t+ F
{
D6 l0 M4 o% z: K" @& o( S' V% E5 Y7 O4 q: `
switch(TAIV) //向量查询 ` W( c7 d1 a3 h0 |3 {1 D
4 D+ p# g/ F( [, d; K6 {/ ^
{ case 2: //捕获中断* K/ R$ m2 ~+ P5 E0 V+ d' h/ J3 ?
if(CCTL1&CM0) //上升沿7 z( s; F1 V" U6 s g
{6 U# D# O X6 E6 A
CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发% z3 m5 `' a# D# C+ b
start=TAR; //记录初始时间0 K# F% H9 I2 u$ m
overflow=0; //溢出计数变量复位
J& U* i. @; j! }* [: L: u9 o7 O/ r6 V* G; t2 h5 |0 b5 G7 s
}
4 ?& B$ D2 g) f, c1 b! d else if (CCTL1&CM1) //下降沿
. H$ s& W, G# W, b9 w/ e5 u {
) L- [: M0 c5 e, E; ] CCTL1=(CCTL1&(~CM1))|CM0; //更变设置为上升沿触发1 N* J* ?0 L5 w7 M9 q6 `: |
end=TAR; //用start,end,overflow计算脉冲宽度
% G% |0 }' ~3 ^, n" D3 a. ^4 l t show_falg = 1; //打开显示计算处理程序
; Z& f5 k! I4 g2 Q/ n2 Y; i2 a }
$ L' W3 t3 V1 ?4 d9 B; P; q. Y break;# {9 i) D8 U; k
6 ]! p7 S/ n' `8 a. }# F9 A case 10: //定时器溢出中断7 t; j" e1 w/ F( v9 H4 e) o$ G
overflow++;9 M$ g4 U0 ]6 i
break; //溢出计数加1
. h9 s. {4 `( o" z0 P# Q+ O0 J- {' |% C1 D
default:break;
5 u' Z: S1 K( z, S6 A& [2 |3 e }8 F/ J& z/ e$ L5 `/ P
1 W# E& _+ y& o) r}
* L& V2 n7 ~1 ]1 b4 O, u7 x* [2 M" [
|
|