51单片机驱动 mg996r金属舵机 STC89C52单片机直接驱动金属大舵机

news2024/11/24 10:40:06

在这里插入图片描述

/*
	无论是大舵机,还是小舵机,控制方法都一样会
	区别在  大舵机只能接P0口(此口外接上拉,驱动电流最大)
			小舵机任意口
*/
//#include<reg51.h>
//#define uint unsigned int
//#define uchar unsigned char
//sbit S1=P0^3;
//sbit S2=P0^4;
//sbit S3=P0^5;
//sbit S4=P0^6;
//sbit S5=P0^7;
//
********舵机************//
//uchar count=0,jd=10;
//sbit duoji_pwm=P0^1;
//void Timer1Init();
//void key();
//void delay(uint x);
//void main()
//{
//	Timer1Init();
//	while(1)
//	{
//	  key();
//	}
//}
//void key()
//{
//	 if(S1==0)
//	 {
//		delay(5);
//		if(S1==0)
//		{		
//		  jd=13;
//		}
//		while(!S1);	
//	 }
//  	else if(S2==0)
//	 {
//		delay(5);
//		if(S2==0)
//		{
//		  jd=10;
//		}
//		while(!S2);	
//	 }
//	 else if(S3==0)
//	 {
//		delay(5);
//		if(S3==0)
//		{		 
//		   jd=6;
//		}
//		while(!S3);	
//	 }
//}
///*******************************************************************************
//* 函 数 名 :Timer1Init
//* 函数功能 :定时器1  舵机,PWM
///*******************************************************************************/
void Timer1Init()//舵机		//0.5毫秒@11.0592MHz   定时器时钟12T模式
{
	TMOD |= 0x10;		//设置定时器模式
//	IE = 0X82;		// (EA = 1;//开总中断  ET1=1;//开中断)
	TH1 = 0xFE;		//设置定时初值
	TL1 = 0x33;		//设置定时初值
	TR1 = 1;		//定时器1开始计时
	ET1=1;//开中断	 
	EA = 1;//开总中断      
}
//void Timer1Init(void)		//100微秒@12.000MHz
//{
//	TMOD |= 0x10;		//设置定时器模式
//	TL1 = 0x9C;		//设置定时初值
//	TH1 = 0xFF;		//设置定时初值
//	TF1 = 0;		//清除TF1标志
//	TR1 = 1;		//定时器1开始计时
//	ET1=1;//开中断	 
//	EA = 1;//开总中断  
//}
//
//void tiem1() interrupt 3
//{
//	static uchar t=1;
	TH1 = 0xFE;		//设置定时初值
	TL1 = 0x33;		//设置定时初值
//    TL1 = 0x9C;		//设置定时初值
//	TH1 = 0xFF;		//设置定时初值
//	t++;
//
	if(t>50)	t=0;
	if(t<SPEED)	motor_pwm=1; 
	else 
	motor_pwm=0;

//
//	if(count<=jd)
//	duoji_pwm=1;
//	else 
//	duoji_pwm=0;
//	count=count+1;	//0.5毫秒 次数加一
//	count=count%200;	//始终保持40,即周期20毫秒
//}
//void delay(uint x)
//{
//	uint i,j;
//	for(i=x;i>0;i--)
//	for(j=110;j>0;j--);
//}


/*
	无论是大舵机,还是小舵机,控制方法都一样会
	区别在  大舵机只能接P0口(此口外接上拉,驱动电流最大)
			小舵机任意口
*/

#include<reg52.h>       
#include<stdio.h>        

#define uint unsigned int         
#define uchar unsigned char 
sbit S1=P0^3;
sbit S2=P0^4;
sbit S3=P0^5;
sbit S4=P0^6;
sbit S5=P0^7;
int i=0,k=1;  
//int a[3]={700,1500,2200};//700 左极限,2300右极限	(数组的调用和单独写等效, 但为什么实践混乱)
uchar ss1,ss2=1,ss3,ss4;
sbit duoji_pwm=P0^0;                                     
void Init_t0(void);
void delay(uint x);
void key();
void main()  
{         
    duoji_pwm=1;                                                      
    Init_t0(); 
    while(1)
	{
		key();
	}
}
void key()
{
	 if(S1==0)
	 {
		delay(5);
		if(S1==0)
		{		
		//	k=0;
			ss1=1;ss2=0;ss3=0;ss4=0;
		}
		while(!S1);	
	 }
  	else if(S2==0)
	 {
		delay(5);
		if(S2==0)
		{		 
		//	k=1; 
			ss1=0;ss2=1;ss3=0;ss4=0;
		}
		while(!S2);	
	 }
	 else if(S3==0)
	 {
		delay(5);
		if(S3==0)
		{		 
		//	k=2; 
			ss1=0;ss2=0;ss3=1;ss4=0;
		}
		while(!S3);	
	 }
	 else if(S4==0)
	 {
		delay(5);
		if(S4==0)
		{		 
		//	k=2; 
			ss1=1;ss2=0;ss3=0;ss4=0; delay(200);
			ss1=0;ss2=0;ss3=1;ss4=0; delay(200);
			ss1=1;ss2=0;ss3=0;ss4=0; delay(200);
			ss1=0;ss2=0;ss3=1;ss4=0; delay(200);
			ss1=1;ss2=0;ss3=0;ss4=0; delay(200);
			ss1=0;ss2=0;ss3=1;ss4=0; delay(200);
			ss1=1;ss2=0;ss3=0;ss4=0; delay(200);
			ss1=0;ss2=0;ss3=1;ss4=0; delay(200);
			ss1=0;ss2=1;ss3=0;ss4=0; delay(200);
		}
		while(!S4);	
	 }								
}
void Init_t0(void)
{   
    TMOD|=0x01;                 
    TH0=(65536-700)/256;//初始化值 不起作用 
    TL0=(65536-700)%256;       
    EA=1; 
    ET0=1; 
    TR0=1;         
}



void PWM0() interrupt 1       
{  

//		if(P0_0==1)                        
//	    {  
//		    TH0=(65536-(19950-a[k]))/256;                
//	        TL0=(65536-(19950-a[k]))%256;                                            
//	    } 
//	    else                                       
//	    { 
//	        TH0=(65536-a[k])/256; 
//	        TL0=(65536-a[k])%256; 
//
//	    } 
//
	if(ss1==1)
	{
		if(duoji_pwm==1)                        
	    {  
	
	        TH0=(65536-(19950-1150 ))/256;                
	        TL0=(65536-(19950-1150))%256;                                            
	    } 
	    else                                       
	    { 
	        TH0=(65536-1150)/256; 
	        TL0=(65536-1150)%256; 
	    } 
	}
	if(ss2==1)
	{
		if(duoji_pwm==1)                        
	    {  
	
	        TH0=(65536-(19950-1500))/256;                
	        TL0=(65536-(19950-1500))%256;                                            
	    } 
	    else                                       
	    { 
	        TH0=(65536-1500)/256; 
	        TL0=(65536-1500)%256; 
	    } 
	}
	if(ss3==1)
	{
		if(duoji_pwm==1)                        
	    {  
	
	        TH0=(65536-(19950-1800))/256;                
	        TL0=(65536-(19950-1800))%256;                                            
	    } 
	    else                                       
	    { 
	        TH0=(65536-1800)/256; 
	        TL0=(65536-1800)%256; 
	
	    } 
	}
    duoji_pwm=~duoji_pwm; 
//    i++;
//    if (i>=80)         
//    {
//        i=0;
//        k++;
//        if(k==8)k=0;
//    }

} 
void delay(uint x)
{
	uint i,j;
	for(i=x;i>0;i--)
	for(j=110;j>0;j--);
}             

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10、架构:组件通信设计

通信是一个应用中不可或缺的一个功能&#xff0c;现如今前端视图类框架大多数都是由数据驱动&#xff0c;通过数据来进行视图层的展示渲染。举个简单的例子如下&#xff0c;这是一个常见的 React 列表渲染&#xff1a; // each const numbers [1, 2, 3, 4, 5]; const listIte…

应用级监控方案Spring Boot Admin

1.简介 Spring Boot Admin为项目常用的监控方式&#xff0c;可以动态的监控服务是否运行和运行的参数&#xff0c;如类的调用情况、流量等。其中分为server与client&#xff1a; server&#xff1a; 提供展示UI与监控服务。client&#xff1a;加入server&#xff0c;被监控的…

C语言王国探险记之函数的简单概念

王国探险记系列 文章目录&#xff08;5&#xff09; 目录 王国探险记系列 文章目录&#xff08;5&#xff09; 前言 一&#xff0c;函数的基本概念 二&#xff0c;调用外部函数和main()函数区别 2.1如果我们将函数的定义放到后面&#xff0c;可不可以呢&#xff1f; 总结…

插值应用案例1

案例1 一阶线性插值 待加工零件外形根据工艺要求在一组数据(x,y)给定&#xff08;如下表&#xff09;&#xff0c;用程控铣床加工时每一刀只能沿着x方向或y方向走非常小的一步&#xff0c;需要从已知数据得到加工步长很小的(x,y)的坐标。 下表中所给x,y数据位于机翼断面的下…

使用Vue脚手架

(193条消息) 第 3 章 使用 Vue 脚手架_qq_40832034的博客-CSDN博客 初始化脚手架 说明 1.Vue脚手架是Vue官方提供的标准化开发工具&#xff08;开发平台&#xff09; 2.最新的版本是4.x 3.文档Vue CLI脚手架&#xff08;命令行接口&#xff09; 具体步骤 1.如果下载缓慢…

Libvirt Event Loop简介

文章目录 前言实现原理处理框架编程接口 原理验证事件订阅服务监听验证流程 前言 Event Loop顾名思义就是事件循环&#xff0c;整个程序是一个大的循环&#xff0c;通过事件来驱动程序要做的事情。传统编程模型是顺序的&#xff0c;程序运行一次然后终止&#xff0c;这种模型简…

JavaScript Day10 DOM详解

DOM DOM是JS操作网页的接口&#xff0c;全称为“文档对象模型”&#xff08;Document Object Model&#xff09;。它的作用是将网页转为一个JS对象&#xff0c;从而可以用脚本进行各种操作&#xff08;比如增删内容&#xff09;。 • 文档 – 文档表示的就是整个的HTML网页文档…

19-Linux 权限

目录 1.用户操作 1.1.创建用户 1.2.配置密码 1.3. 切换用户 2.三种角色 3.文件类型和访问权限 3.1.文件类型 3.2.基本权限 4.修改文件权限 1.用户操作 Linux下有两种用户&#xff1a; 超级用户&#xff08;root&#xff09;普通用户 超级用户&#xff1a;可以再lin…

【Cache】Redis主从复制哨兵模式集群

文章目录 一、Redis 持久化1. 主从复制2. 哨兵模式3. 集群 二、 Redis 主从复制1. 概述2. 主从复制的作用3. 主从复制流程4. 搭建 Redis 主从复制4.1 环境准备4.2 安装 Redis4.3 修改 Master 节点配置文件4.4 修改Slave节点配置文件&#xff08;Slave1和Slave2配置相同&#xf…

【vant移动端表格数据排版】用vant2简单实现一个把PC端表格数据展示在移动端的排版。上拉加载更多,下拉刷新页面,新增,编辑,删除功能

前言 上次做了一个移动端的表格功能&#xff0c;纯表格的那种。 跟PC一样&#xff0c;但是我一直觉得在移动端上写表格很糟糕的体验&#xff0c;毕竟手机就那么大。这不合理。 但是我这公司又需要把PC端的表格的数据展示在移动端。 导致我只能去试试看怎么排版比较好。由于网上…

【Qt-14】QT小知识点

1、关闭程序时报错 解决方案&#xff1a; 报这个错误可能是内存溢出&#xff0c;申请的空间与注销的空间不一致导致&#xff0c;排查了好久&#xff0c;我不是因为这个原因&#xff0c;我的问题如下&#xff0c;没有new窗体。 2、固定QT窗体大小 this->setMinimumSize(QSi…

NLP实战6:seq2seq翻译实战-Pytorch复现-小白版

目录 一、前期准备 1. 搭建语言类 2. 文本处理函数 3. 文件读取函数 二、Seq2Seq 模型 1. 编码器&#xff08;Encoder&#xff09; 2. 解码器&#xff08;Decoder&#xff09; 三、训练 1. 数据预处理 2. 训练函数 四、训练与评估 &#x1f368; 本文为[&#x1f51…

【算法集训之线性表篇】Day 02

文章目录 题目一思路分析代码实现效果 题目二思路分析代码实现效果 题目一 01.设置一个高效算法&#xff0c;将顺序表L的所有元素逆置&#xff0c;要求其空间复杂度为O(1)。 思路分析 首先&#xff0c;根据题目要求&#xff0c;空间复杂度度为O(1),则不能通过空间换时间的方…

为什么编程更关注内存而很少关注CPU?

我们知道&#xff0c;我们编写的程序&#xff0c;不管是什么编程语言&#xff0c;最后执行的时候&#xff0c;基本上都是CPU在完成。之所以说基本上&#xff0c;是因为还有GPU、FPGA等特殊情况。 但不知道大家发现没有&#xff0c;我们编程的时候&#xff0c;经常在关注内存问…

大促转化率精准预估优化论文随笔记

这是一篇阿里妈妈的论文【KDD’23 | 转化率预估新思路&#xff1a;基于历史数据复用的大促转化率精准预估】 常规的销量预测&#xff0c;遇到一些特大事件&#xff0c;直播、大促&#xff0c;一般很难预估得准确。而且现在电商机制也比较多样&#xff0c;预售、平台折扣等。 本…

初识MySQL:了解MySQL特性、体系结构以及在Linux中部署MySQL

目录 MySQL简介 MySQL特性 MySQL体系结构 SQL的四个层次&#xff1a; 连接层&#xff1a; SQL层&#xff1a; 插件式存储引擎&#xff1a; 物理文件层&#xff1a; 一条SQL语句的执行流程&#xff1a; MySQL在Linux中的安装、部署 首先需要下载mysql软件包&#xff…

月入9000+的CSGO游戏搬砖项目操作细节和疑问 ?给您一一解答

科思创业汇 大家好&#xff0c;这里是科思创业汇&#xff0c;一个轻资产创业孵化平台。赚钱的方式有很多种&#xff0c;我希望在科思创业汇能够给你带来最快乐的那一种&#xff01; 01 海外CSGO游戏搬砖项目是什么&#xff1f; csgo搬砖是在外服steam上购买包含印花枪皮等等…

9.2、增量表数据同步

1、数据通道 2、Flume配置 1&#xff09;Flume配置概述 Flume需要将Kafka中topic_db主题的数据传输到HDFS&#xff0c;故其需选用KafkaSource以及HDFSSink&#xff0c;Channel选用FileChannel。 需要注意的是&#xff0c; HDFSSink需要将不同mysql业务表的数据写到不同的路径…

2023.7.4 Dataloader切分

一、 如果文件夹路径是 path/to/folder with spaces/&#xff0c;使用以下方式输入 path/to/folder\ with\ spaces/或者使用引号包裹路径&#xff1a; "path/to/folder with spaces/"这样可以确保命令行正确解析文件夹路径&#xff0c;并将空格作为路径的一部分进…

ADB自动化测试框架

一、介绍 adb的全称为Android Debug Bridge&#xff0c;就是起到调试桥的作用&#xff0c;利用adb工具的前提是在手机上打开usb调试&#xff0c;然后通过数据线连接电脑。在电脑上使用命令模式来操作手机&#xff1a;重启、进入recovery、进入fastboot、推送文件功能等。简单来…