声音定位系统(3)

2019-04-14 09:38

Display_Change();//通过读取A3管脚IO口的状态选择打点还是画线

delay_init(); //延时函数初始化

NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位u32 temp1=0,temp2=0; u16 i=0,j=0;

响应优先级

uart_init(9600); //串口初始化为9600

//LED端口初始化

LED_Init();

LCD_Init();

TIM3_Int_Init(1999,719);//每5ms进一次定时器3中断,进行液晶屏显示

TIM5_Cap_Init(0XFFFF,72-1); //以1Mhz的频率计数 (每计数一次为1u

秒)

LCD_ShowChar(10,210,'(',16,0); LCD_ShowChar(90,210,')',16,0); LCD_ShowChar(50,210,',',16,0); POINT_COLOR=RED;

LCD_Clear(YELLOW);//背景色为黄色

while(1)

{

//进行400次输入捕获,理论应该执行800ms,

for(i=0;i<400;i++)

待验证

{

if(TIM5CH1_CAPTURE_STA&0X80)//成功完成一次捕获

11

{ cap_num1++;

temp1=TIM5CH1_CAPTURE_STA&0X3F;

temp1*=65536; //溢出时间总和 temp1+=TIM5CH1_CAPTURE_VAL; //得到总的高电平时间 sum1+=temp1;

TIM5CH1_CAPTURE_STA=0; //开启下一次捕获

}

if(TIM5CH2_CAPTURE_STA&0X80)//成功完成一次捕获 { cap_num2++;

temp2=TIM5CH2_CAPTURE_STA&0X3F;

temp2*=65536; //溢出时间总和 temp2+=TIM5CH2_CAPTURE_VAL; //得到总的高电平时间 sum2+=temp2;

TIM5CH2_CAPTURE_STA=0; //开启下一次捕获

}

}

t1=sum1/cap_num1;//求平均值,提高捕获精度 printf(\通道1High:%d us\\r\\n\ sum1=0; cap_num1=0;

t2=sum2/cap_num2;

printf(\通道2High:%d us\\r\\n\

12

sum2=0;

cap_num2=0;

xp=xx/2.5; yp=140-yy/2.5;

if(xp>10&&xp<210&&yp>10&&yp<150)//判断点的坐标是否在正常范pxf(t1,t2);

围内

{

//把点存入数组 if(xp!=xp1 | yp!=yp1) {

pointx[j]=xp; pointy[j]=yp; j++;

if(j==280)//只存280个点的位置 { }

xp1=xp;//将上一次的位置值进行保存,与下一次进行比较,

j=0;

看是否有变化 }

13

}

yp1=yp;

} }

2、定时器部分程序 #include \#include \#include \#include \

extern s32 xx,yy;

extern u8 xp,yp;//注意:对变量声明时不可以同时进行赋值 extern u8 xp1,yp1; extern u8 DrawLine_flag;

//在定时器3中断中进行液晶显示

void TIM3_Int_Init(u16 arr,u16 psc) {

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能

//定时器TIM3初始化

TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入NVIC_InitTypeDef NVIC_InitStructure;

活动的自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟

频率除数的预分频值

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟

分割:TDTS = Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM

14

向上计数模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初

始化TIMx的时间基数单位

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,

允许更新中断 }

//定时器3中断服务程序(声源位置显示) void TIM3_IRQHandler(void) //TIM3中断 {

if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更TIM_Cmd(TIM3, ENABLE); //使能TIMx

//中断优先级NVIC设置

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器

新中断发生与否

{

TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新

中断标志

LCD_ShowNum(20,210,xx,3,16);//显示数字

15


声音定位系统(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:【毕业设计】泵体零件钻8-φ8孔专用机床设计-精品

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: