|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 TaylorA 于 2020-8-26 17:40 编辑 ( h8 Z" L/ [4 h4 n
' m" G2 A* ~* A9 L# c/ c6 v, W
/****************主函数****************/, N6 F, x3 k2 e& `
void main(void)2 b5 G7 p. i0 g6 h7 ]0 G
{ 2 \! h! v1 D& C( B1 l" I
uint i;
/ A' G. g/ V& \0 n( t1 W3 k# Q
: ` L W; e$ I/ \ /*下面六行程序关闭所有的IO口*/7 B0 c8 ~3 |& y
P1DIR = 0XFF; P1OUT = 0XFF;1 q" B' f6 F, c( D U9 F: b
P2DIR = 0XFF; P2OUT = 0XFF;+ [" D: ?9 w" ?& r
P3DIR = 0XFF; P3OUT = 0XFF;
0 ~; o" C, t7 p: N; M3 t- I P4DIR = 0XFF; P4OUT = 0XFF;, O6 {: p( } z8 B y# ^: R- P7 ]/ V9 D
P5DIR = 0XFF; P5OUT = 0XFF;
) O) U5 y' k# a. Q2 M P6DIR = 0XFF; P6OUT = 0XFF;- | t; C$ s, L( v5 Z/ k4 e
# `! u/ ]: F) b/ r! i5 u/ t" G' I WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 4 _- I1 R( C* O% i3 l' m* O9 _
P6DIR |= BIT2; P6OUT &= ~BIT2; //打开电平转换
) _9 c( }# R% B P2DIR |= BIT3; P2OUT &= ~BIT3; //电平转换方向3.3V--->5V# F. U" X% V% ~" g
P5DIR = 0xff;
7 R- }( A) Y. `9 C0 Q; O P5OUT = 0xff;2 f8 r& w$ C5 c$ d; d. {7 E( O/ d3 U
3 x- k# F" e& O
) p* o( s- f6 c& r* F5 P# e /*------选择系统主时钟为8MHz-------*/
) ~( ^3 W: u& h! y9 M BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡器5 c( }, h" Y& {: o0 K* F2 E. l
do
. v; J, c0 x* T1 K% x% n# f+ O2 l: h {4 i; \ [( c( _: E6 x- H/ n: Z
IFG1 &= ~OFIFG; //清除晶振失败标志
* Q5 V: U# m4 a/ o1 j for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振 m) n: u$ `( ^: q% {( I" C
}
$ K/ p, T+ h0 _ while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?/ d4 ^/ a+ B) ~6 F! S- X5 R
BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振, p6 Z/ L& i4 E5 L
/*------选择系统主时钟为8MHz-------*/ % ^5 [: ^( }" J- x
4 h0 z, t& f1 H! L& L
P3DIR |= 0X07;/ k$ c- D- R& }3 Y
P4DIR |= 0XFF;/ m% ~, D U& D6 e$ o6 z
LCD_init();
( v1 t( [7 }( U) g& l# a D: _8 Y0 x& l% e2 S
set_pos(0,6);& u( n! K) K$ d5 d" b6 ?8 o6 |
LCD_write_data('W');
0 O& Q& o+ X) {9 V LCD_write_data('T');" C! R. M; ?' L! [. z. n
LCD_write_data('F');
4 J( A# z( I6 q, r! z& e5 m) ~! ?& C' o
P2DIR |= BIT0; //设置P2.0为输出. `9 ]* n9 n3 Q0 Y
' e5 M# U; b; b, O3 T# h: R) k8 q# U
P1SEL |= BIT2; //设置P1.2端口为功能模块使用
% G. g1 |2 {6 n( K7 F P1DIR &=~ BIT2; 1 A1 K4 O2 P4 V% i- B4 f
P1IFG = 0;: I5 \/ Y0 r& O: o2 d' L, U+ w
5 |% S7 s1 S c, O
TACTL = TASSEL1+TACLR+TAIE+MC1; //定时器A时钟信号选择SMCLK,同时设置定时器A计数模式为连续增计模式
5 W1 V. P1 [: n+ l* P CCTL1 = MC0+SCS+CAP+CCIE; //输入上升沿捕获,CCI0A为捕获信号源
7 {) i7 |3 E' f9 X4 P1 \! M! ?! y- f k( P* u8 ]4 q( {
) z: z/ z5 `2 K
start = 1; 4 _9 ~7 r& G' Y* M" W! d5 [
disp_m = 1;
3 x2 ?! M0 _; D" B end = 1;
0 Z+ b' o) ^: H J5 G- f oveRFlow = 0;2 \' L! d3 b, Q
show_falg = 0;: R i. U7 ?6 I! w
8 f( Z8 }6 p9 n; i' e5 X Z: k ~
6 a1 j, J8 y6 p0 ?% |& |3 r* K
_EINT();# Z* z( ]4 b$ K$ l3 M3 e7 E
5 F1 k& D& V9 ]" P9 h% B9 v
while(1)
N- D K+ f3 r, F0 v# @3 ^ {' G8 M) D6 V: N: Z& g8 S) v
9 M( B6 ]" [7 [! F! n P2OUT |= BIT0; 4 n' E$ h2 I1 B
delay(160); //给Trig一个启动脉冲; |5 o6 R0 F( s- R) Z, q5 T8 p
P2OUT &=~ BIT0;$ b5 Q/ A k) D6 _
& C6 y5 C) W* c; J, o
while(show_falg); //等待 Echo的 下降沿
1 S! u. ]/ @6 k9 N. E
3 Z( P; l9 {* L' o* x* u' v% c% a show(); //更新显示* s% A9 L' `1 _0 n) w. a2 G8 A) [
[6 Q2 c! k, a8 S* ]3 p$ _* n
* Q3 `. o; _ |) T( y( M
8 N$ B/ p# G* E' ~: S2 t$ d }
+ f+ ~! H& U% r: f}7 [% S! n& H8 J2 |
& @; h& b' Y8 U- R& [8 o
#pragma vector=tiMERA1_VECTOR //定时器A中断处理
2 Q9 R/ }- f. N8 `9 [# k* y l+ f% u* |; ^( H4 K- {
__interrupt void timer_a(void)/ V- u6 |5 R7 N5 X
) @- r1 y4 o- N" M2 U; i& ^{1 Z K( s: u7 r) m/ N0 O
- y/ B! u$ B0 |# V. W$ q A
switch(TAIV) //向量查询. H' r: i+ x j6 g' N- ~# {# G
1 }( ]/ X* V; q# u/ G7 B& ]! A) I2 \% K: L
{ case 2: //捕获中断 A ~" _% w7 y* ?7 b
if(CCTL1&CM0) //上升沿5 R g( L/ Y e, P7 b6 _
{( R. ~* C ~ \! q/ C
CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发
5 u4 E; m. s; d! ] start=TAR; //记录初始时间
) u& O, r3 B9 n8 B/ R0 P, r3 o overflow=0; //溢出计数变量复位
! u7 F( b- }/ M. ~, k) C2 L1 x+ ], o, k: v4 G
}& ^0 E8 V8 L, q: o U; m& b* i `9 I
else if (CCTL1&CM1) //下降沿
7 y: Q, U m- `2 F1 _2 F1 c {
$ f6 }7 l+ \% [0 x, x# p CCTL1=(CCTL1&(~CM1))|CM0; //更变设置为上升沿触发1 C, k+ h8 D4 p% E/ _
end=TAR; //用start,end,overflow计算脉冲宽度
0 N" n. ]3 c6 ?; |7 F- ? show_falg = 1; //打开显示计算处理程序- S! ]# D& a' N. X# z! G
}
8 P$ ]* |0 w( N! U" K- E. _. J break;
1 k* l8 c5 j0 P% f v: d$ g" S: @5 y7 y! i$ A, [
case 10: //定时器溢出中断2 c: i) ~4 x, P3 [3 A0 i6 D. `2 o, B
overflow++;
$ [5 P# _+ e1 o/ l( l9 h' R( ^ break; //溢出计数加1- q6 M/ j. ~2 P' U4 a. c# d y( u0 t+ g
3 B4 B6 v0 e8 o6 V$ W% m
default:break;
5 K4 F: V+ z4 _0 Y2 d. y8 u }% ?/ X% B3 x7 L, P/ m
' a1 c% y+ Z( n% T% H4 ^. Z) I}
6 l* D) d* l3 m# b! v* L8 L3 T% s6 l! Z- C# R
|
|