基于51单片机的电机控制和角度检测

news2024/11/14 20:41:30

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于51单片机,采用滑动变阻器连接ADC0832数模转换器模拟角度传感器,然后通过LCD1602显示数值,然后按键按下不动,电机正转,松开停止。第二个按键按下,电机反转,松开停止,角度范围10到80度。

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

三、程序编程

#include <REGX52.H>	    //定义头文件
#include<intrins.h>		//定义头文件
#include<stdio.h>		//定义头文件
#include "Delay.h"		//定义Delay头文件
#include "LCD1602.h"	//定义LCD1602头文件

#define uchar unsigned char	 //定义变量
#define uint unsigned  int	 //定义变量


sbit CS=P2^5;                 //adc0832引脚
sbit CLK=P2^3;				  //adc0832引脚
sbit DIO=P2^4;				  //adc0832引脚
sbit Motor1_IN1 = P3^3;	//电机IN口
sbit Motor1_IN2 = P3^4;	//电机IN口
sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;
sbit key5 = P1^4;



uchar get_AD_Res()            //ADC0832启动读取函数
{
	uchar i, data1=0, data2=0;	 //赋值变量
	CS=0;						 //CS赋值低电平
	
	CLK=0;DIO=1;_nop_();		 //赋值变量 并且等待
	CLK=1;_nop_();				 //赋值变量 并且等待
	
	CLK=0;DIO=1;_nop_(); 		 //赋值变量	并且等待
	CLK=1;_nop_();				 //赋值变量	并且等待
	
	CLK=0;DIO=0;_nop_();		 //赋值变量	并且等待
	CLK=1;_nop_();				 //赋值变量	并且等待
	
	CLK=0;DIO=1;_nop_(); 		 //赋值变量	并且等待
	
	for(i=0; i<8; i++)			 //循环
	{
		CLK=1;_nop_();			//赋值变量	并且等待
		CLK=0;_nop_();			//赋值变量	并且等待
		data1=(data1<<1)|(uchar)DIO;//赋值变量	并且等待 
	}
	
	for(i=0; i<8; i++)			//循环
	{
		data2=data2|(uchar)DIO<<i;//赋值变量 并且等待
		CLK=1;_nop_();			 //赋值变量	并且等待
		CLK=0;_nop_();			 //赋值变量	并且等待
	}
	CS=1;					     //赋值高电平
	
	return(data1 == data2)?data1:0;	//返回值
}




void main()					  //主函数
{	
	double u,U,R;        //定义变量
	LCD_Init();         //显示屏初始化
	LCD_ShowString(1,1,"jiaodu:");
	while(1)
	{
		u=get_AD_Res();	       //读取ADC0832值
		R=(u/255)*70+10;
		
//		U=(250*u)/128;         //此处将模拟信号转化为数字信号,要根据上拉电阻阻值来确定
//		R=200*U/250;	       //公式换算
		
		LCD_ShowNum(1,8,R,3); //LCD1602第一行第13个字符开始显示R的值
		
		if(key1==0)
		{
			Motor1_IN1 = 1;
			Motor1_IN2 = 0;
		}
		else if(key1 == 1)
		{
		Motor1_IN1 = 0;
			Motor1_IN2 = 0;	
		}
		
		if(key2==0)
		{
			Motor1_IN2 = 1;
			Motor1_IN1 = 0;
		}
		else if(key1 == 1)
		{
		Motor1_IN1 = 0;
			Motor1_IN2 = 0;	
		}
		
		if(key3==0)
		{
			Delay(100);
			if(key3==0)
			{
				R=10;
			}
		}
   	if(key4==0)
		{
			Delay(100);
			if(key4==0)
			{
				R=30;
			}
		}
		
			if(key5==0)
		{
			Delay(100);
			if(key5==0)
			{
				R=55;
			}
		}

	}
}

四、实现现象

具体动态效果看B站演示视频:

基于51单片机的电机控制和角度检测

全部资料(源程序、仿真文件、安装包、演示视频):

百度网盘资料下载

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

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

相关文章

显示和隐藏图片【JavaScript】

使用 JavaScript 来实现显示和隐藏图片。下面是一个简单的示例&#xff0c;展示如何通过按钮点击来切换图片的可见性。 实现效果: 代码&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name&…

神奇的交互!Ethernet IP转Profinet网关与发那科机器人的数据交互

在当今的工业领域&#xff0c;随着自动化程度的不断提高&#xff0c;工业化升级已成为必然趋势。在这个过程中&#xff0c;对机器人的联网需求变得日益迫切。机器人作为工业生产中的重要组成部分&#xff0c;其高效运行和与其他设备的协同工作对于提高生产效率至关重要。然而&a…

EI-Bisynch协议

EI-Bisynch&#xff08;Extended Interface-Bisynchronous&#xff09;协议是一种早期用于设备通信的协议&#xff0c;主要用于工业控制系统中的串行通信。随着技术的发展&#xff0c;EI-Bisynch的使用已经大幅减少&#xff0c;逐渐被更现代化、灵活性更高的通信协议&#xff0…

【Linux】手把手教你制作一个简易shell——(进程创建fork进程替换wait与进程等待exec的应用)(自定义shell程序设计)

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

华为昇腾智算中心-智算中心测试方案与标准

本方案是企业内训课程《华为昇腾智算中心深度技术研修》的一部分授课课件的样例。方案内容中详细阐述了华为昇腾环境下智算中心的测试方案和标准&#xff0c;以确保硬件和软件系统在实际部署和运行中的高效性和稳定性。主要内容包括集群硬件清单、节点拓扑配置以及环境配置。硬…

企业微信oauth2的code换用户身份一直40029解决方案

序&#xff1a; 雪狼的微信表情包&#xff0c;欢迎下载【程序员雪狼】微信表情 - 来自微信表情商店&#xff0c;扫二维码下载表情 正文&#xff1a; 雪狼在用oauth2返回的code要去请求getuserinfo3rd接口的时候&#xff0c;报错如下40029 一样&#xff0c;肝了一天&#xff0c…

本地部署高颜值某抑云音乐播放器Splayer并实现无公网IP远程听歌

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

湖北建筑类初级职称申报的全方位解读

湖北建筑类初级职称申报的全方位解读 湖北工程行业助理工程师/初级职称申报评审 湖北建筑类助理工程师/初级职称正常申报目前都是电子版证书&#xff0c;湖北省政务服务网查询生成&#xff0c;省网查询&#xff0c;后期都会同步G网查询。 湖北建筑类助理工程师纸质版 1.之前申…

kubernetes网络(一)之calico详解

摘要 本文介绍Kubernetes最流行的网络解决方案calico。 kubernetes中不同宿主上的pod需要相互通信&#xff0c;如果按TCP/IP协议分层进行分类&#xff1a; 二层方案&#xff1a;flannel的udp和vxlan模式 三层方案&#xff1a;flannel的host-gw模式&#xff1b;calico的IPIP模…

ReduceLROnPlateau学习率衰减设置

学习率衰减有多种方式&#xff0c;本次采用optim.lr_scheduler.ReduceLROnPlateau&#xff0c;这种方式代表在发现loss不再降低或者acc不再提高之后&#xff0c;降低学习率。 model GRU().to(device) criterion nn.CrossEntropyLoss().to(device) optimizer optim.AdamW(m…

YOLOv10独家改进:红外场景严重遮挡和重叠目标解决方案 | 一种新的自适应算法轻量级通道分割和变换(ALSS)模块,自适应特征提取优化策略

💡💡💡本文解决什么问题:红外检测场景存在严重遮挡和重叠目标时的局限性的问题点。 💡💡💡提出了一种新的自适应算法轻量级通道分割和变换(ALSS)模块。该模块采用自适应信道分裂策略优化特征提取,并集成信道变换机制增强信道间的信息交换。这改善了模糊特征的提…

简单多状态dp第一弹 leetcode -面试题17.16.按摩师 -213.打家劫舍II

a​​​​​​​面试题 17.16. 按摩师 按摩师 题目: 分析: 使用动态规划解决 状态表示: dp[i] 表示&#xff1a;选择到 i 位置时&#xff0c;此时的最长预约时长。 但是我们这个题在 i 位置的时候&#xff0c;会面临 选择 或者 不选择 两种抉择&#xff0c;所依赖的状态需要…

响应式的几种解决方案——媒体查询、flex、grid、多列布局、瀑布流和数据可视化屏幕的缩放处理

media媒体查询 媒体查询入门指南 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document<…

Java面试篇基础部分- Java中的阻塞队列

首先队列是一种前进后出的操作结构,也就是说它只允许从队列前端进入,从队列后端退出。这个前端和后端看个人如何理解,也就是通常所说的入队和出队,队头和队尾。 阻塞队列和一般队列的不同就在于阻塞队列是可以阻塞的,这里所说的并不是说队列中间或者队头队尾被拦截了,而是…

HTML与JavaScript结合实现简易计算器

目录 背景&#xff1a; 过程&#xff1a; 代码: HTML部分解析&#xff1a; body部分解析&#xff1a; JavaScript部分解析&#xff1a; 效果图 &#xff1a; 总结: 背景&#xff1a; 计算器是一个典型的HTML和javaScript结合使用的例子&#xff0c;它展示了如何使用H…

Kibana中突然看不到日志ElasticSearch突然采集不到日志问题解决分析

问题原因 起因之前我们项目是采用elk&#xff08;elasticsearchlogstashkibana&#xff09;的方式下部署日志采集系统&#xff0c;今天突然发现Kibana中所有项目日志都没打印&#xff0c;更奇怪的是线上的项目都正常运行&#xff0c;并无异常&#xff0c;这时让人陷入了深思&a…

电商新纪元:37即拼模式如何重塑市场格局

在电商领域的浩瀚星海中&#xff0c;拼团模式犹如一颗璀璨的星辰&#xff0c;历经近十年的洗礼&#xff0c;依旧熠熠生辉&#xff0c;不断吸引着商家与消费者的目光。近期&#xff0c;一家电商平台凭借其独树一帜的“37即拼”模式&#xff0c;仅在一周内便狂揽5万订单&#xff…

移动硬盘未格式化:深度解析、恢复策略与预防措施

现象解读&#xff1a;移动硬盘的“未格式化”迷局 在数字信息爆炸的时代&#xff0c;移动硬盘作为数据存储与传输的重要工具&#xff0c;扮演着不可或缺的角色。然而&#xff0c;当用户试图访问移动硬盘时&#xff0c;却可能遭遇一个令人困惑的提示——“未格式化”。这一现象…

一大堆的图片怎么批量重命名从1到50?这个方法你必须知道

一大堆的图片怎么批量重命名从1到50&#xff1f;这个方法你必须知道。有许多的人因为工作的问题&#xff0c;经常需要用到给一些图片&#xff0c;文件&#xff0c;文档等重命名的事情。很多人都不知道有快速处理的办法&#xff0c;只能一个个右键重命名&#xff0c;或者批量选择…

Three.js 3D人物漫游项目(下)

本文目录 前言最终效果1、效果回顾2、编写人物模型动画执行类并调用2.1 代码2.2 代码解读2.3 实例化动画类并调用2.4 效果2.4.1 休息动画2.4.2 跑步动画2.4.3 走路动画2.4.4 舞蹈1动画2.4.5 舞蹈2动画3、键盘控制动画3.1 站立休息、走、跑、舞蹈1、舞蹈2代码3.1.1 效果3.2 跳跃…