STC12C5A60S2单片机控制舵机

核心提示别看别人的单片机上有什么,看自己的就行了,有什么用什么,这个是我写的,基本一看就明白,至于你想改成什么样子,看明白了自己就可以搞定了,注,这是我以前写的,那时很菜鸟,函数名比较长,用汉语拼音拼的,你自己用汉语拼音读就明白了#include<

别看别人的单片机上有什么,看自己的就行了,有什么用什么,这个是我写的,基本一看就明白,至于你想改成什么样子,看明白了自己就可以搞定了,注,这是我以前写的,那时很菜鸟,函数名比较长,用汉语拼音拼的,你自己用汉语拼音读就明白了

#include<reg51.h>

#define uint unsigned int

#define uchar unsigned char

uint TH0_1,TL0_1;TH0_2,TL0_2,TH0_3,TL0_3;

sbit key1=P3^2;

sbit key2=P3^3;

sbit key3=P3^4;

sbit out=P1^0;

void dingshiqi_chushihua()

{

out=0;

TR1=1;

EA=1;

TMOD=0x10;

ET1=1;

TR1=1;

TH0_1=(65536-500)/256;

TL0_1=(65536-500)%256;

TH0_2=(65536-1000)/256;

TL0_2=(65536-1000)%256;

TH0_3=(65536-1500)/256;

TL0_3=(65536-1500)%256;

}

void dingshiqi_chuli() interrupt 3

{

out=~out;

if(key1==0)

{

TH1=TH0_1; //旋转到180°

TL1=TL0_1;

}

if(key2==0)

{

TH1=TH0_2; //旋转到0°

TL1=TL0_2;

}

if(key3==0)

{

TH1=TH0_3; //旋转到90°

TL1=TL0_3;

}

}

void main()

{

dingshiqi_chushihua();

while(1)

{

}

}

这个可以用三个I/o口,用定时器0分时启动三路PWM波,代码的话,每次中断给计数器赋下次中断的时间,void T0_time() interrupt 1 //通过定时器0产生多路PWM,每次中断赋值下一次中断的时间,

{ //两个t[]一组,在20ms周期内分时启动各路PWM高电平,

TH0=(65536-9.216*t[i])/256; //各路的高电平只需1-2ms

TL0=(65536-9.216*t[i])/256;

i++;

switch(i)

{

case 1:

k1=1;

break;

case 2:

k1=0;

break;

case 3:

k2=1;

break;

case 4:

k2=0;

break;

case 5:

k3=1;

break;

case 6:

k3=0;

break;

}

 
友情链接
鄂ICP备19019357号-22