
#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=xi>0i--)
for(j=125j>0j--)
}
//定时器初始化
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()
}
}
舵机有三根线,电源线、地线和控制线。电源电压介于4.8到7.2V,一般用5V。你的驱动电路应当没问题。单片机利用定时器输出PWM波形,通过调整占空比控制舵机的旋转角度。51单片机IO的驱动能力不够,要加上拉,或者接个缓冲器试试。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)