51单片机控制舵机左转90然后延时2秒再右转180,延时两秒回到中间,怎么做

51单片机控制舵机左转90然后延时2秒再右转180,延时两秒回到中间,怎么做,第1张

以下程序可供参考

//用一个定时器定时100US产生PWM波

//周期200100us=20ms

//改变b的值可改变占空比 b=10对应高电平时间1ms

#include<STC12C5AH>

#define uchar unsigned char

#define uint unsigned int

sbit PWM=P2^0;

uchar a=200,b=15;//b=15对应舵机0度

void Delay1ms(uint i) //1ms延时程序

{

uint j;

for(;i>0;i--)

{

for(j=0;j<125;j++)

{;}

}

}

void main()

{

TMOD=0X01;

TH0=(65536-100)/256;

TL0=(65536-100)%256;

ET0=1;

EA=1;

TR0=1;

P1M0=0X0F; //低4位推挽输出 控制两个电机正反转

P1M1=0X00;

P2M0=0X01; //最低位推挽输出 控制舵机

P2M1=0X00;

while(1)

{

P1=0;

b=15;Delay1ms(2000);//直行

b=10;Delay1ms(1000);//左转

b=15;Delay1ms(2000);//直行

b=20;Delay1ms(1000);//右转

b=15;Delay1ms(2000);//直行

P1=0x05;

b=15;Delay1ms(2000);//后退

b=10;Delay1ms(1000);//后左转

b=15;Delay1ms(2000);//后退

b=20;Delay1ms(1000);//后右转

b=15;Delay1ms(2000);//后退

}

}

void timer0()interrupt 1

{

TH0=(65536-100)/256;

TL0=(65536-100)%256;

a++;

if(a<=b) PWM=1;

else PWM=0;

if(a==200){a=0;PWM=1;}

}

根据你所说的延时方法,应该是用定时器中断里面设定标志位来产生延时的方法。

比如你可以把定时器设定为每1ms进一次中断,在中断里面把一个标志位(如flag)置一

当你需要1ms延时的时候你可以先初始化定时器,然后查询标志位是否置一,置一则执行if后面的语句,即if(flag){};

当你需要10ms延时时,你可以把flag设置为uchar,中断里面flag++;外面查询用if(10==flag){};

以此类推

很简单的

#include<reg52h>

#define uchar unsigned char

#define uint unsigned int

sbit fengmingqi=P0^0; //声明IO口

void delay(uint x)//延时子函数

{

uint i,j;

for(i=x;i>0;i--)

for(j=50;j>0;j--);

}

void main(void)

{

while(1) //循环

{

fengmingqi=1; //p00口高电平,蜂鸣器发声

delay(500); //延时

fengmingqi=0; //p00口低电平,蜂鸣器不发声

delay(500); //延时

}

}

DEL1S:MOV R7,#10\x0d\D1: MOV R6,#200\x0d\D2: MOV R5,#250\x0d\ DJNZ R5,$\x0d\ DJNZ R6,D2\x0d\ DJNZ R7,D1\x0d\ RET\x0d\\x0d\说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等\x0d\ 2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5

多简单的小程序呀:

time1ms:

mov

r6,

#2

time1:

;延时498us

mov

r7,

#248

djnz

r7,

$

;r7的为0时,程序向下运行,否则继续减

;

djnz

r6,

time1

;加上此命令后,每个小周期时间为500us

;运行两周为1ms,再加上最前面的mov

r6那条指令,就是1002ms

ret

此程序实现的是1002ms的定时,当然这当中不算主程序调用此延时程序时现场保护的时间,即压栈和出栈的时间

以上就是关于51单片机控制舵机左转90然后延时2秒再右转180,延时两秒回到中间,怎么做全部的内容,包括:51单片机控制舵机左转90然后延时2秒再右转180,延时两秒回到中间,怎么做、求C51单片机延时程序…要求是用查询法的…且要用if语句的。、51单片机,编写延时程序,控制蜂鸣器发声;等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9320388.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存