admin 管理员组文章数量: 887007
有没有大佬知道这个Echo和Trig的引脚分别改成2.4和2.5该怎么改
/*
HC-SR04超声波测距OLE屏显示程序
接收来自HC-SR04的数据,将成功接收到的数据打印到OLED屏幕上
SR04: Echo --> P1.2
Trig --> P1.3
OLED: CLK --> P3.5
SDA --> P3.6
*/
#include <User_config.h>
#include "oled.h"
// 宏定义:超声波Trig触发引脚
#define Trig1(a) if(a==1) P1OUT |= BIT3; else P1OUT &= ~BIT3
unsigned int cap_new = 0; // 首次捕捉的ta0r值
unsigned int cap_old = 0; // 二次捕捉的ta0r值
char cap_N = 0; // 溢出次数
char state = 0x00; // zhuangtai
long cap_data = 0; // 距离值
//unsigned int dat[test_num]; //通过数组存10次测量值
void UCS_Init(void) //更改系统时钟为外部4mhz晶振时钟
{
P2DIR |= BIT2; // SMCLK set out to pins
P2SEL |= BIT2;
P5SEL |= BIT2+BIT3; // Port select XT2
UCSCTL6 &= ~XT2OFF; // Enable XT2
UCSCTL3 |= SELREF_2; // FLLref = REFO
// Since LFXT1 is not used,
// sourcing FLL with LFXT1 can cause
// XT1OFFG flag to set
UCSCTL4 |= SELA_2; // ACLK=REFO,SMCLK=DCO,MCLK=DCO
// Loop until XT1,XT2 & DCO stabilizes - in this case loop until XT2 settles
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
}while (SFRIFG1&OFIFG); // Test oscillator fault flag
UCSCTL6 &= ~XT2DRIVE0; // Decrease XT2 Drive according to
// expected frequency
UCSCTL4 |= SELS_5 + SELM_5; // SMCLK=MCLK=XT2
}
void Hc_sr_Init(void) //初始化HC_SR04引脚
{
/*
* P1.2 为echo引脚 TA0 CCR1捕获模式
* P1.3 为Trig 通用数字i/o模式
*/
P1OUT &= ~( BIT2 + BIT3 );
P1DIR |= BIT3;
P1SEL |= BIT2;
/*
* note:由于选用的是P1.2 根据端口定义可知,使用的是TA0CCR1,捕获输入引脚通过TA0CCTL1寄存器控制,
* 捕获值存储在TA0CCR1中。
* TASSEL:SNCLK; 分频:4MHz/8 = 500k;计数模式:0 ==> 0xFFFF;
* TA0CCTL1:上升沿捕获 ;同步捕捉;捕获模式;CCI1A输入;
*/
TA0CTL = TASSEL__SMCLK + ID__8 + MC_2 + TACLR + TAIE;
TA0CCTL1 = CM_1 + SCS +CAP + CCIE + CCIS_0;
}
void Hc_sr_Open(void) //生成一个持续10us的高电平
{
Trig1(1);
__delay_cycles(40);
Trig1(0);
}
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
UCS_Init();
Hc_sr_Init();
OLED_Init(); //OLED初始化
OLED_Clear(); //OLED清屏
__bis_SR_register(GIE);
while(1){
Hc_sr_Open();
__delay_cycles(1000000);
OLED_ShowString(80,1,"DIS",20);
OLED_ShowCHinese(20,0,0);//超
OLED_ShowCHinese(40,0,1);//声
OLED_ShowCHinese(60,0,2);//波
OLED_ShowString(100,3,"mm",60);
}
}
#pragma vector=TIMER0_A1_VECTOR //外部中断
__interrupt void TIMER0_A1_ISR(void)
{
switch(__even_in_range(TA0IV,14))
{
case 0:break; // No interrupt
case 2:
state = TA0CCTL1 >> 14;
TA0CCTL1 &= ~CCIFG;
if( TA0CCTL1 & CM_1)
{
cap_new = TA0CCR1;
TA0CCTL1 &= ~CM_1;
TA0CCTL1 |= CM_2;
}
else if ( TA0CCTL1 & CM_2)
{
cap_old = TA0CCR1;
cap_data = ( cap_old - cap_new ) * 0.34;
TA0CCTL1 &= ~CM_2;
TA0CCTL1 |= CM_1;
OLED_ShowNum(20,3,cap_data,6,20);
}
break; // CCR1 not used
case 4: break; // CCR2 not used
case 6: break; // reserved
case 8: break; // reserved
case 10: break; // reserved
case 12: break; // reserved
case 14:
TA0CTL &= ~TAIFG;
if(cap_old < cap_new ){
cap_N += 1;
}
break; // overflow
default: break;
}
}
本文标签: 有没有大佬知道这个Echo和Trig的引脚分别改成24和25该怎么改
版权声明:本文标题:有没有大佬知道这个Echo和Trig的引脚分别改成2.4和2.5该怎么改 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1732362090h1535503.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论