标题:
我的这个程序是具有超声波定位的PWM调速风扇,求大神看看
[打印本页]
作者:
MXP0712
时间:
2020-4-17 21:43
标题:
我的这个程序是具有超声波定位的PWM调速风扇,求大神看看
大神们,能帮我看一下,为什么我的超声波定位到人后停留时间变得只有一秒,我的这个程序设计的意义是定位到最近的人就直接超声波舵机模块就停止,物体或者人移动后,超声波舵机就重新扫描再定位到人移动后的地方,做到一个跟踪的功能,可是程序改完后,定位时间反而变短了,原先是直接停止,等待物体移动后继续跟踪。有没有大神能帮我看一下是什么问题吗?
单片机源程序如下:
#include “reg52.h”
#include <intrins.h>
unsigned char mos;
sbit pwm1 =P1^4; //PWM信号输出
sbit RX = P0^6; //定义超声波传感器发射端
sbit TX = P0^7; //定义超声波传感器接收端
sbit jdq =P2^0; //定义电机
sbit pwm2=P1^6;
unsigned char juli,tt;
unsigned long S=0;
unsigned int ms,mm,suu,time,shu;
sbit s=P1^5;
sbit fmq=P1^3; //定义信号灯
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
unsigned char code su[]={ //数码管码共阴
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
};
/*****************************************************
函数功能:延时若干毫秒
入口参数:n
***************************************************/
void delay(unsigned char i)//延时
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
/******************************************************************************/
/* 函数名称 : Init_timer0 */
/* 函数描述 : 初始化单片机函数 */
/* 输入参数 : 无 */
/* 参数描述 : 无 */
/* 返回值 : 无 */
/******************************************************************************/
void Time0_Init() //定时器初始化
{
TMOD=0x11;
TH1=0x00;
TL1=0x00;
TL0 = 0x49; //设置定时初值
TH0 = 0xFD; //设置定时初值
TR0=1; //定时器开始
ET0=1;
EA=1;
TR1=0;
}
/******************************************************************************/
/* 函数名称 : timer0 */
/* 函数描述 : T0中断处理函数 */
/* 输入参数 : 无 */
/* 参数描述 : 无 */
/* 返回值 : 无 */
/******************************************************************************/
void Time0_Int() interrupt 1 //中断程序
{
TL0 = 0xA6; //设置定时初值
TH0 = 0xFF; //设置定时初值
ms++;
if(ms>mm){pwm1=0;}
else pwm1=1;
if(ms>200){ms=0;}
}
void ceju()
{
TX=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
TH1=0;
TL1=0;
suu=0;
while(!RX) //当RX为零时等待
{
suu++;
if(suu>2000) break;
}
TR1=1; //开启定时器
suu=0;
while(RX) //当RX为零时等待
{
suu++;
if(suu>2000) break;
}
TR1=0; //关闭计数
time=TH1*256+TL1;
TH1=0;
TL1=0;
S=(time*1.7)/100; //算出来是CM
shu=(unsigned char)S;
}
void xunbo()
{
delay(100);
if(mos==0)
{
mm++;
ms=0;
TR0=1;
delay(200);
TR0=0;
if(mm>=25){mos=1;}
}
if(mos==1)
{
mm--;
ms=0;
TR0=1;
delay(200);
TR0=0;
if(mm<=5){mos=0;tt++;}
}
}
unsigned char i;
void delayms(void)
{while(i--);
}
void disp1()
{
pwm2=1;delay(8000);
pwm2=0;delay(12000);
led1=0;
}
void disp2()
{pwm2=1;delay(12000);
pwm2=0;delay(12000);
led1=1;led2=0;
}
void disp3()
{
pwm2=1;
led2=1;led3=0;
}
void disp4()
{pwm2=0;
led3=0;
}
void keyscan()
{if(s==0)
{delay(5000);
if(s==0)
fmq=0;delay(12000);
fmq=1;
{if(++i==5)i=1;}
TR2=0;
}
}
void main()
{ juli=100;
Time0_Init();
mm=5;
ms=0;
keyscan();
i=0;
TH2=(65536-50000)/256;
TL2=(65536-50000)%256;
ET2=1;
EA=1;
TR2=1;
while(1)
{
P0=~su[tt%10];
if(tt==0)
{
xunbo();
ceju();
if(shu<juli){juli=shu;}
}
if(tt==1)
{
xunbo();
ceju();
if(tt==2){tt=0;juli=100;}
if(shu<(juli+3)) { xunbo(); xunbo(); tt=5;}
}
if(tt==5)
{
jdq=0;
delay(200);
delay(200);
delay(200);
delay(200);
ceju();
if(juli>5)
if((shu<(juli-5))||(shu>(juli+5))) {tt=0; juli=100;jdq=1;}
if (led1==0)
{disp1();}
if (led2==0)
{disp2();}
if (led3==0)
{disp3();}
if (led3==0)
{disp4();}
}
}
}
//定时器2中断程序
void timer2() interrupt 5
{TF2=0;
switch(i)
{
case 1:disp1();break;
case 2:disp2();break;
case 3:disp3();break;
case 4:disp4();break;
default:;
}
}
复制代码
作者:
MXP0712
时间:
2020-4-18 21:05
帖子别沉啊,真的没人懂吗
作者:
gd2051
时间:
2020-4-19 10:55
这种问题一般人们很难回答,也不愿意回答。这样,你把无关的部分删掉,把核心的东西留下,再调试,看看问题出在哪里?
作者:
MXP0712
时间:
2020-4-19 13:43
gd2051 发表于 2020-4-19 10:55
这种问题一般人们很难回答,也不愿意回答。这样,你把无关的部分删掉,把核心的东西留下,再调试,看看问题 ...
大神,定时器2的部分感觉上有点小错误,核心部分主要还是测距定位部分
作者:
MXP0712
时间:
2020-4-19 13:45
gd2051 发表于 2020-4-19 10:55
这种问题一般人们很难回答,也不愿意回答。这样,你把无关的部分删掉,把核心的东西留下,再调试,看看问题 ...
核心部分调试成功了,主要问题还是在于pwm2模块和定时器2,定时器2用来控制pwm2,但我总感觉是我编程的问题
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1