1
//
只利用一个定时器
T0
,定时时间为
,定义一个角度标识,数值为
1
、
2
、
3
、
4
、
5
,
//
实现
、
1ms
、
、
2ms
、
高电平的输出,再定义一个变量,数值最大为
40
,实现周期为
20ms
。
//
每次进入定时中断,判断此时的角度标识,进行
//
相应的操作。比如此时为
5
,则进入的前
5
次中断期间,信号输出为高电平,即为
的
//
高电平。剩下的
35
次中断期间,信号输出为低电平,即为
的低电平。这样总的时间
//
是
20ms
,为一个周期。
//
用
51
板上
s1
和
s2
按键
//
用
P1^7
输出
PWM
信号控制舵机
#include ""
unsigned char count; //
次数标识
sbit pwm =P1^7 ; //PWM
信号输出
sbit jia =P3^0; //
角度增加按键检测
IO
口
sbit jan =P3^1; //
角度减少按键检测
IO
口
sbit jianwei=P3^4; //
按键位
unsigned char jd; //
角度标识
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e
void delay(unsigned char i)//
延时
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void Time0_Init() //
定时器初始化
{
TMOD = 0x01; //
定时器
0
工作在方式
1
IE= 0x82;
TH0= 0xfe;
TL0= 0x33; //
晶振,
TR0=1; //
定时器开始
}
void Time0_Int() interrupt 1 //
中断程序
{
TH0 = 0xfe; //
重新赋值
TL0 = 0x33;
if(count
判断次数是否小于角度标识
pwm=1; //
确实小于,
PWM
输出高电平
else
pwm=0; //
大于则输出低电平
count=(count+1); //
次数加
1
count=count%40; //
次数始终保持为
40
即保持周期为
20ms
|