舵机的程序舵机的程序
unsigned char count; //0.5ms次数标识 sbit pwm =P1^7 ; //PWM信号输出 sbit jia =P3^6; //角度增加按键检测IO
口 sbit jan =P3^7; //角度减少按键检测IO口 unsigned
char jd; //角度标识 unsigned char flag; sbit dula=P2^6; sbit wela=P2^7; unsigned char code
table[]={0x3f,0x06,0x5b,0x4f,0x66,...
舵机的程序
unsigned char count; //0.5ms次数标识 sbit pwm =P1^7 ; //PWM信号输出 sbit jia =P3^6; //角度增加按键检测IO
口 sbit jan =P3^7; //角度减少按键检测IO口 unsigned
char jd; //角度标识 unsigned char flag; 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,0x79,0x71};
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; //11.0592MZ晶振,0.5ms
TR0=1; //定时器开始 }
void Time0_Int() interrupt 1 //中断程序 {
TH0 = 0xfe; //重新赋值 TL0 = 0x33;
if(flag!=29||jd!=1) //这个判断是为了在0度时让信号线只输出
30个周期的PWM信号,然后就让信号线为低电平 {
if(count<jd) //判断0.5ms次数是否小于角度标识
———————————————————————————————————————————————
pwm=1; //确实小于,PWM输出高电平 else
pwm=0;
}
count=(count+1); //0.5ms次数加1 if(count==39)
//次数始终保持为40 即保持周期为20ms {
count=0;
if(jd==1)
if(flag!=29)
flag=flag+1; //如果30个周期已经到了,则保持这个flag为29,使在前面的判断中不在输出PWM信号
}
}
void keyscan() //按键扫描 {
if(jia==0) //角度增加按键是否按下 {
delay(10); //按下延时,消抖 if(jia==0)
//确实按下 { flag=0; //有键按下就让flag为0,这样当再次要使电机为0度时可以再次
jd++;
count=0;
if(jd==6)
jd=5;
while(jia==0);
———————————————————————————————————————————————
}
}
if(jan==0)
{
delay(10);
if(jan==0)
{flag=0; //
以再次输
jd--;
count=0;
if(jd==0)
jd=1;
while(jan==0);
}
}
}
void display()
{
unsigned
switch(jd)
{
case 1:
———————————————————————————————————————————————
bai=0;
shi=0;
ge=0;
break;
case
bai=0;
shi=4; 输出30个周期的PWM信号 //角度标识加
1 //按键按下 则20ms周期从新开始 //已经
是180度,则保持 //等待按键放开 //角度减小
按键是否按下 有键按下就让flag为0,这样当再次要使电机为0度
时可出30个周期的PWM信号 //角度标识减1
//已经是0度,则保持 //数码管显示函数 char bai,shi,ge; //根据角度标识显示相应的数值 //为1,角度为0,前3个
数码管显示000 2:
ge=5; break; case
bai=0; shi=9; ge=0; break; case
bai=1; shi=3; ge=5; break; case 5:
bai=1; shi=8; ge=0; break; }
dula=0;
P0=table[bai]; dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; delay(5);
P0=table[shi]; dula=1; dula=0; P0=0xfd; wela=1; ———————————————————————————————————————————————
wela=0; delay(5);
P0=table[ge]; dula=1; dula=0; P0=0xfb; wela=1;
wela=0; delay(5); }
void
{ 3: 4: //为5,角度为180,前3个数码管显示180 main()
jd=1;
flag=0;
count=0;
pwm=0;
Time0_Init(); while(1)
{
keyscan(); display();
}
} //按键扫描
———————————————————————————————————————————————
本文档为【舵机的程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。