分享好友 天南地北首页 网站导航

如何用51单片机控制舵机的单片机程序是怎么写的?希望你也能给我发一个编写程序和电路

网友发布 2023-07-19 03:19 · 头闻号仪器机械

单片机系统实现对舵机输出转角的控制,必须首先完成两项任务:首先,产生基本的PWM周期信号,即产生20ms的周期信号;其次,调整脉宽,即单片机调节PWM信号的占空比。单片机能使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将PWM信号输出到舵机。

发一个自己原来写的简单的。

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

uchar count,jd;

sbit pwm=P1^0;

sbit jia=P3^2;

sbit jian=P3^3;

uchar code table[10] = {0x3f,0x06,0x5b,

0x4f,0x66,0x6d,

0x7d,0x07,0x7f,0x6f};

//延时函数

void delay(uchar x)

{

uchar i,j;

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

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

}

//定时器初始化

void Time0_init()

{

TMOD=0x01; //定时器0工作方式1

IE=0x82;

TH0=0xfe;

TL0=0x33; //11.0592MHZ晶振,0.5ms

TR0=1;

}

//定时器0中断程序

void Time0() interrupt 1

{

TH0=0xfe;

TL0=0x33;

if(count<jd) //判断0.5ms次数是否小于角度标识

pwm=1; //是,pwm输出高电平

else

pwm=0; //否,输出低电平

count=count+1;

count=count%40; //次数始终保持为40,即保持周期为20ms

}

//按键扫描

void keyscan()

{

if(jia==0)

{

delay(10);

if(jia==0)

{

jd++; //角度增加 1

count=0; //按键按下则20ms周期重新开始计时

if(jd==6)

jd=5; //已经是180度,保持

while(jia==0);

}

}

if(jian==0)

{

delay(10);

if(jian==0)

{

jd--;

count=0;

if(jd==0)

jd=1; //已经0度,保持

while(jian==0);

}

}

}

//数码管显示

void display()

{

uchar bai ,shi,ge ;

switch(jd)

{

case 1:

bai=0;

shi=0;

ge=0;

break;

case 2:

bai=0;

shi=4;

ge=5;

break;

case 3:

bai=0;

shi=9;

ge=0;

break;

case 4:

bai=1;

shi=3;

ge=5;

break;

case 5:

bai=1;

shi=8;

ge=0;

break;

}

P0=table[bai];

P2=1;

delay(5);

P0=table[shi];

P2=2;

delay(5);

P0=table[ge];

P2=3;

delay(5);

}

void main()

{

//jd=1;

count=0;

Time0_init();

while(1)

{

keyscan();

display();

}

}

电路图很简单的,几个按键,再在单片机最小系统上接出一个信号线,再给舵机供上电就可以了。

免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报

举报
反对 0
打赏 0
更多相关文章

收藏

点赞