#include <reg51.h>
#include<intrins.h>
sbit Trig = P2^0;
sbit Echo = P2^1;
sbit pwm = P1^0;
unsigned int time = 0;
unsigned long S = 0;
bit flag = 0;
int jd;
int count;
void Time0_Init()
{
TH1 = 0xfe;//打开定时器1
TL1 = 0x33;
TR1=1;
ET1=1;
}
void zd0() interrupt 1
{
flag = 1;
}
void Time0_Int() interrupt 3
{
TH1 = 0xfe;
TL1 = 0x33;
if(count< jd)
pwm=1;
else
pwm=0;
count=(count+1);
count=count%40;
}
void Conut(void)
{
time=TH0*256+TL0;//定时器的数值
TH0=0;
TL0=0;
S=(time*1.7)/100;
if(S<=20)
{
jd=5;
count=0;
}
else
{
jd=3;
count=0;
}
}
void StartModule()
{
Trig=1;
_nop_();
_nop_();
_nop_();
_nop_(); //启动超声波模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Trig=0;
}
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);//延迟1ms的延迟函数
}
}
}
void main(void)
{
TMOD=0x11;
TH0=0;
TL0=0; //设置定时器的模式,并且初始化定时器一
ET0=1;
EA=1;
jd=3;
count=0;
Time0_Init();
while(1)
{
StartModule();//启动超声波模块
while(!Echo);//等待下降沿,下降沿来临就打开计数器
TR0=1;//打开计数器0
while(Echo);//等待上升沿
TR0=0;//关闭定时器
Conut();//开始计数,毕竟对距离进行判断
delayms(80);//延迟80ms
}
}
51单片机控制SG90舵机
最新推荐文章于 2024-05-08 17:03:08 发布