资源简介
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
相关资源
- 51单片机—计时器程序
- 自己写的51单片机基本程序,适合初学
- C51单片机抢答器程序
- YL-51单片机开发板原理图
- 51单片机点阵模拟电梯
- 51单片机控制GSM发送短信
- Modbus通信协议(内附RTU+51单片机程序
- 用51单片机实现小车循迹和LCD显示
- 基于51单片机和OV7670摄像头的颜色跟踪
- 基于51单片机的4路智能抢答器
- 在51单片机上实现的完整功能的计算器
- 利用51单片机产生可调PWM波
- 51单片机延时算法
- 基于51单片机的智能窗帘系统全套资料
- 51单片机频率精确测量C程序
- 肺活量监测,程序部分,STC89C51单片机
- 肺活量监测,STC89C51单片机和AD0832AD转
- 51单片机的计算器.rar
- 51智能小车避障和循迹程序
- 51单片机+12864实现的万年历程序
- 51单片机pwm波,lcd1602,l298n带prtues仿真
- 51单片机8位数码管动态扫描显示
- 基于51单片机和8279的光电计数器
- 单片机电子时钟设计
- 51单片机增量式PID控制算法
- GM65之51单片机(串口+显示屏)程序
- 使用51单片机控制nRF24L01的多种例程
- proteus中51单片机制作的电子琴
- 51单片机温度传感器程序
- 基于51单片机的抽奖系统
评论
共有 条评论