资源简介
51单片机:4路舵机控制
编写语言:C
运行情况:完美运行

代码片段和文件信息
#include
sbit xh1=P1^0;
sbit xh2=P1^1;
sbit xh3=P1^2; //四个舵机的信号口
sbit xh4=P1^3;
sbit left1=P2^0;
sbit right1=P2^1;
sbit left2=P2^2;
sbit right2=P2^3; //一个舵机两个按键控制
sbit left3=P2^4;
sbit right3=P2^5;
sbit left4=P2^6;
sbit right4=P2^7;
unsigned char pwm1=10;
unsigned char pwm2=10; //每个舵机由一个pwm控制
unsigned char pwm3=10;
unsigned char pwm4=10;
unsigned char n=0;
void delay1ms(unsigned int i)
{
unsigned char j;
while(i--)
{
for(j=0;j<115;j++) //一ms基准延时程序
{
;
}
}
}
void key()
{
EA=1;
ET0=1;
TMOD=0x01; //定时,中断的开关
TH0=(65536-92)/256;
TL0=(65536-92)%256;
TR0=1;
}
void no1() //第一个舵机控制
{
if(left1==0)
{
delay1ms(15); //消抖
if(left1==0)
{
pwm1=pwm1+1; //左转
n=0;
if(pwm1==18) //限制其转动角度,防止角度转过损坏舵机
pwm1=17;
}
}
while(left1==0); //松手检测
if(right1==0)
{
delay1ms(15); //消抖
if(right1==0)
{
pwm1=pwm1-1; //右转
n=0;
if(pwm1==3) //限制角度!
pwm1=4;
}
}
while(right1==0); //松手检测
}
/*******************************************************/
void no2() //第二个舵机控制
{
if(left2==0)
{
delay1ms(15);
if(left2==0)
{
pwm2=pwm2+2;
if(pwm2>18)
pwm2=17;
n=0;
}
} //原理同上
while(left2==0);
if(right2==0)
{
delay1ms(15);
if(right2==0)
{
pwm2=pwm2-2;
if(pwm2<5)
pwm2=4;
n=0;
}
}
while(right2==0);
}
/******************************************************/
void no3() //第三个舵机控制
{
if(left3==0)
{
delay1ms(15);
if(left3==0)
{
pwm3=pwm3+1;
n=0;
if(pwm3==18)
pwm3=17;
}
}
while(left3==0);
if(right3==0) //原理同上
{
delay1ms(15);
if(right3==0)
{
pwm3=pwm3-1;
n=0;
if(pwm3==3)
pwm3=4;
}
}
while(right3==0);
}
/********************************************************/
void no4() //第四个舵机控制
{
if(left4==0)
{
delay1ms(15);
if(left4==0)
{
pwm4=pwm4+2;
if(pwm4>18)
pwm4=17;
n=0;
}
}
while(left4==0);
if(right4==0) //原理同上
{
delay1ms(15);
if(right4==0)
{
pwm4=pwm4-2;
if(pwm4<5)
pwm4=4;
n=0;
}
}
while(right4==0);
}
//*****************************************************//
void main() //主函数
{
key();
while(1)
{
no1();
no2();
no3();
no4();
}
}
void timer0(void) interrupt 1 //中断服务函数
{
n++;
if(n xh1=1; //no1
else
xh1=0;
/******************/
if(n xh2=1;
else //no2
xh2=0;
/*******************/
if(n xh3=1;
else
xh3=0; //no3
/*******************/
if(n xh4=1;
else //no4
xh4=0;
/********************/
if(n==200)
n=0;
TH0=(65536-92)/256;
TL0=(65536-92)%256;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3088 2017-05-16 17:23 51-4路舵机控制.c
相关资源
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 51单片机PWM程序,占空比、周期可调整
- 51单片机多功能自行车测速仪
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 51单片机基于protues的几个仿真实例
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- C51单片机汇编指令查询、学习工具集
- 基于8051单片机的红外接收程序
- 51单片机频率计(很简单)
- 基于51单片机的智能温控器
- 基于51单片机的16*16点阵动态显示
- 基于51单片机的模数转换与数模转换
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 8051单片机教程第二十七课:单片机几
- 8051单片机教程第二十六课:矩阵式键
- 适用于STC单片机和51单片机的SX1262驱动
- 基于51单片机的计算器(C51编写,有
- 51单片机大量源码
- 基于51单片机的交通信号灯程序
- GSM监控系统51单片机设计
- 51单片机定时器/计数器的结构和原理
- MCS-51单片机定时器和计数器区别的理
评论
共有 条评论