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

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于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站演示视频:

B站演示视频

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

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

百度网盘资料下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值