|
|
ÕâÊÇÎÒµ±Ê±Ð´µÄÒ»¸ö¼òµ¥µÄ51¶¨Ê±Æ÷Êä³öPWM·½Ê½¿ØÖÆÈý¸ö¶æ»ú°´Ë³ÐòÒÀ´ÎÐýת¡£Äã¿ÉÒÔ½è¼øÏ£¬²»ÍƼöÓÃÑÓ³Ùº¯ÊýµÄ·½Ê½È¥¿ØÖƶæ»ú
#include "reg51.h"//´ËÎļþÖж¨ÒåÁ˵¥Æ¬»úµÄÒ»Ð©ÌØÊ⹦ÄܼĴæÆ÷
typedef unsigned int u16;//¶ÔÊý¾ÝÀàÐͽøÐÐÉùÃ÷¶¨Òå
typedef unsigned char u8;
sbit KEY=P3^1;//¿ØÖư´¼ü
sbit Servo_1=P2^0;//¶æ»úÊä³ö
sbit Servo_2=P2^1;//¶æ»úÊä³ö
sbit Servo_3=P2^2;//¶æ»úÊä³ö
u16 Servo_PWM1,Servo_PWM2,Servo_PWM3;//Èý¸ö¶æ»úµÄPWMÖµ
//PWM:5-22
//¶ÔÓ¦0-180¡ã
#define LOW 5
#define HIGH 22
u8 Flag_step;//¶æ»ú¶¯×÷²½Öè
bit start;//Ëæ×Ű´¼ü°´Ï¿ªÊ¼¶¯×÷
void delay_ms(u16 j) //j=1£¬1ms
{
u8 i=250;
for(;j>0;j--)
{
while(--i);
i=249;
while(--i);
i=250;
}
}
void step(void)//¶æ»ú¶¯×÷
{
if(start==1)//°´¼ü°´Ï£¬±ê־λÖÃ1£¬Âú×ãÌõ¼þ½øÈëif()
{
if(Flag_step==1)//µÚÒ»²½
{
Servo_PWM1=HIGH;//Ò»¶æ»úתµ½180
delay_ms(500);//ÑÓʱһ¶Îʱ¼ä£¬¸ù¾ÝÐèÇó¸ü¸Äʱ¼ä£¬Áé»î¿Éµ÷
Flag_step=2; //ÏÂÒ»²½
}
if(Flag_step==2)//µÚ¶þ²½
{
Servo_PWM1=LOW;//Ò»¶æ»úתµ½0
delay_ms(500);//ÑÓʱһ¶Îʱ¼ä
Flag_step=3;//ÏÂͬ£¬·Ö±ðÊǶþÈý¶æ»ú¶¯×÷
}
if(Flag_step==3)
{
Servo_PWM2=HIGH;
delay_ms(500);
Flag_step=4;
}
if(Flag_step==4)
{
Servo_PWM2=LOW;
delay_ms(500);
Flag_step=5;
}
if(Flag_step==5)
{
Servo_PWM3=HIGH;
delay_ms(500);
Flag_step=6;
}
if(Flag_step==6)
{
Servo_PWM3=LOW;
delay_ms(500);
Flag_step=1;//ÐγÉÒ»¸öÑ»·£¬»Øµ½µÚÒ»²½
start=0;//½«±ê־λÖÃ0£¬µÈ´ýÏÂÒ»´Î°´¼ü°´Ï£¬½«±ê־λÖÃ1£¬ÖØÐ¿ªÊ¼Ò»ÖÜÆÚ
}
}
}
/*******************************************************************************
* º¯ Êý Ãû : Timer1Init
* º¯Êý¹¦ÄÜ : ¶¨Ê±Æ÷1³õʼ»¯
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void Timer1Init()
{
TMOD|=0X10;//Ñ¡ÔñΪ¶¨Ê±Æ÷1ģʽ£¬¹¤×÷·½Ê½1£¬½öÓÃTR1´ò¿ªÆô¶¯¡£
TH1=0XFF; //¸ø¶¨Ê±Æ÷¸³³õÖµ£¬¶¨Ê±0.1ms
TL1=0X9C;
ET1=1;//´ò¿ª¶¨Ê±Æ÷1ÖжÏÔÊÐí
EA=1;//´ò¿ª×ÜÖжÏ
TR1=1;//´ò¿ª¶¨Ê±Æ÷
}
/*******************************************************************************
* º¯ Êý Ãû : main
* º¯Êý¹¦ÄÜ : Ö÷º¯Êý
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void main()
{
Timer1Init();//¶¨Ê±Æ÷1³õʼ»¯
start=0;//³õʼ״̬¶æ»ú²»¶¯×÷
Flag_step=1;//³õʼµÚÒ»²½
Servo_PWM1=5;//½«Èý¸ö¶æ»ú³õʼ»¯³É0¡ãλÖÃ
Servo_PWM2=5;
Servo_PWM3=5;
while(1)
{
if(KEY==0)//°´¼ü°´ÏÂ
{
start=~start;//ÖØÐ¿ªÊ¼Ò»¸öÖÜÆÚ
while(!KEY);//µÈ´ý°´¼üËÉ¿ª
}
step();//¶æ»ú¶¯×÷
}
}
/*******************************************************************************
* º¯ Êý Ãû : void Timer1() interrupt 3
* º¯Êý¹¦ÄÜ : ¶¨Ê±Æ÷0ÖжϺ¯Êý
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void Timer1() interrupt 3
{
static u16 t;
TH1=0XFF; //¸ø¶¨Ê±Æ÷¸³³õÖµ£¬¶¨Ê±0.1ms
TL1=0X9C;
t++;
//¸ù¾Ý¸Ä±äServo_PWM1ÄÚÈÝ£¬¸Ä±äÕ¼¿Õ±È£¬´Ó¶ø´ïµ½¿ØÖƶæ»ú´ïµ½²»Í¬µÄ½Ç¶È
//¡ª¡ª¡ª¡ª ¡ª¡ª¡ª¡ª
// ¡ª¡ª¡ª¡ª¡ª¡ª ¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª.......
if(t<Servo_PWM1)Servo_1=1;//¸ßµçƽÊä³ö
if(t>=Servo_PWM1)Servo_1=0;//µÍµçƽÊä³ö
if(t<Servo_PWM2)Servo_2=1;
if(t>=Servo_PWM2)Servo_2=0;
if(t<Servo_PWM3)Servo_3=1;
if(t>=Servo_PWM3)Servo_3=0;
if(t>200)t=0;//¶æ»ú¿ØÖÆÆµÂÊ50HZ,200*0.1=20ms
}
|
|