第3个回答 2012-07-28
/********************************************************************************
注:更改P0^0可改变输出的IO口。改变hight_votage的值(5-25)可以改变舵机转过的角度,
注意不要超出5-25。另外舵机要单独5V供电,不然会对单片机产生干扰信号。且和单片机共地。
*******************************************************************************/
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar key_stime_counter,hight_votage,timeT_counter; /*变量定义*/
bit key_stime_ok;
sbit control_signal=P0^0;
/*****************************************************************
名称:定时器0初始化
功能:20ms定时,11.0592M晶振
初值=65536-11059200*0.02/12=65536-18432=47104=0xB800 20ms
初值=65536-11059200*0.0001/12=65536-92.16=64430=0xFFA3 0.1ms
*****************************************************************/
void TimerInit()
{
control_signal=0;
EA=1; //开总中断
ET0=1; //定时器0中断允许
TMOD=0x01; //设置定时器0为工作方式1
TH0 = 0xFF; //定时器装初值
TL0 = 0xA3;
TR0=1; //启动定时器0
}
/**********************************************
定时器0中断服务函数
***********************************************/
void timer0(void) interrupt 1 using 1
{
TH0=0xFF;
TL0=0xA3; //定时器0重新装入数值
if (++key_stime_counter>=200)
{
key_stime_counter=0;
control_signal=1;
key_stime_ok = 1; // 20ms到
timeT_counter=0;
}
if (key_stime_ok&&(++timeT_counter>=hight_votage))
{
key_stime_ok=0;
timeT_counter=0;
control_signal=0; // hight_votage*0.1ms到
}
}
void delay()
{
unsigned char i,j;
for (i=0;i<255;i++)
for (j=0;j<255;j++);
}
void main(void)
{
TimerInit();
hight_votage=5;
while(1)
{
delay();
hight_votage=hight_votage+2 ;
delay();
if(hight_votage>=25)hight_votage=5;
}
}
//最后提醒一下,舵机一定要单独供电且共地!本回答被网友采纳