使用51单片机控制sg90舵机来回旋转

使用STC89C51单片机控制SG90舵机来回旋转

main.c

#include "control.h"

void main() {
	
	Timer1_Init();
	
	while(1){
		
		control ();
		
	}
}

 control.c

#include <reg52.h>
#include <intrins.h>

sbit PWM = P1^0; // 舵机信号输入点位

unsigned char counter, angle; // 计数值和旋转方向, angle范围 (1-5);

// @11.0592MHZ
void Delay500ms(){
	
	unsigned char i, j, k;
	_nop_();
	i = 4;
	j = 129;
	k = 119;
	do
	{
	  do
		{
			while(--k);
		} while(--j);
	} while(--i);
}
// 500微秒@11.0592MHZ
void Timer1_Init(){
	
	TMOD = 0x10; // 设置定时器模式
	TL1 = 0x33; // 设置定时初始值
	TH1 = 0xFE; // 设置定时初始值
	
	TF1 = 0; // 清除TF1标志
	TR1 = 1; // 定时器1开始计时
	ET1 = 1; // 定时器1的中断允许开关
	EA = 1; // 定时器总开关
	PT1 = 1; // 设置定时器为高低控制优先级
}

// 中断函数
void Timer1_Routine() interrupt 3
{
	TL1 = 0x33; // 设置定时初始值
	TH1 = 0xFE; // 设置定时初始值
	counter++;
	if (counter >= 40) {
		 counter = 0;
	}
	if (counter < angle) {
		PWM = 1;
	} else {
		PWM = 0;
	}
}

void control(){
	
	counter = 0;
	angle = 2; // -45度位置
	Delay500ms();
	
	counter = 0;
	angle = 4; // +45度位置
	Delay500ms();
	
	counter = 0;
	angle = 3; // 0度位置(归中)
	Delay500ms();
	Delay500ms();
}

 control.h

#ifndef __CONTROL_H_
#define __CONTROL_H_

Timer1_Init();
void control ();

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值