基于51单片机步进电机控制—9个等级

基于51单片机步进电机控制

(仿真+程序+设计报告)

功能介绍

具体功能:

1.使用L298驱动步进电机转动,可分为9个速度等级(1级最快,9级最慢);

2.使用74HC595驱动数码管显示当前速度等级;

3.两个按键可以控制转速和正/方向;

​演示视频:

基于51单片机步进电机控制---9个等级

添加图片注释,不超过 140 字(可选)

程序

cs 复制代码
//*****************************************//
//**************名称:步进电机*************//
//********          木子单片机    *********//
//*****************************************//
#include<reg51.h>
#define uchar unsigned char 
#define uint unsigned int 
//74HC595引脚定义
sbit MOSIO=P2^1;
sbit R_CLKa=P2^2;
sbit S_CLKa=P2^0;
sbit LED = P0^0 ;
/
uchar vision_cnt = 0 ; 	//数码管动态扫描计数变量
bit updat = 0 ;		 	//动态刷新标志
uint cnt = 0 ;
uchar sec = 0 ;
uint  key_cnt[4];
uchar key_tab = 0 ;
uint buf_cnt = 0 ;
bit cnv = 0 ;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x40
}; //共阴极数码管显示数组0-f
uchar code table1[4]={0x10,0x20,0x40,0x80}; //反转表格,
//(P0.2-P0.5)各位分别取1,二进制码即:00000100,00001000,0001000,0010000
uchar code table2[4]={0x80,0x40,0x20,0x10}; //正转表格
/*
********************************************************************************
** 函数名称 : send595(uchar dat)
** 函数功能 : 数据输入
********************************************************************************
*/
void send595(uchar dat)	   //数据输入
{  
	uchar i; 	
	for(i=0;i<8;i++) 
	{
		if((dat<<i)&0x80) 
			MOSIO = 1 ;
		else 
			MOSIO = 0 ;
		S_CLKa=0;
		S_CLKa=1;	
	}	
}
/*
********************************************************************************
** 函数名称 : out595(void)
** 函数功能 : 数据输出
********************************************************************************
*/
void out595(void)	  // 数据输出
{
	R_CLKa=0;
	R_CLKa=1;	     //上升沿
} 
/*
********************************************************************************
** 函数名称 : vision(uchar dat,uchar pos)
** 函数功能 : 显示函数
********************************************************************************
*/ //在数码管某个位置上显示某个数字
void vision(uchar dat,uchar pos)
{
	send595(~pos);
	send595(table[dat]);
	out595();
}
//定时器初始化函数,
void timer_config(void)
{
	 TMOD = 0x11 ;				//设置定时器0和定时器1工作在方式1--16位计数模式
	 TH0 = (65535-60000)/256 ; 	//设置定时器初值高位
	 TL0 = (65535-60000)%256 ; 	//设置定时器初值低位
	 TR0 = 1 ;					//启动定时器0
	 ET0 = 1 ;					//开启定时器0中断
	 EA = 1 ;					//开启总中断
}
//外部中断配置函数
void ext_config(void)
{
	EX0 = 1;					//开启外部中断0
	IT0 = 1;					//外部中断为边沿触发方式
	EX1 = 1;					//开启外部中断1
	IT1 = 1;					//外部中断为边沿触发方式	
}
//外部中断0
void ext0_isr() interrupt 0 
{
	if(sec<9)
	sec++;
	else
	sec=1;
}
//外部中断0
void ext1_isr() interrupt 2 
{
	cnv = ~cnv ;
*****//完整资料
****//微信公众号:木子单片机//
}
//定时器0中断函数
void timer0_isr() interrupt 1
{
	TH0 = 0xfc ; 				//设置定时器初值高位	1ms定时
	TL0 = 0x17 ; 				//设置定时器初值低位
	updat = 1 ;					//置位标志位
	if(buf_cnt<30*sec)
	{
		buf_cnt++;
	}else
	{
		buf_cnt=0;
		if(cnt<3)
		{cnt++;}
		else
		{cnt=0;}
		if(cnv)
			P1=table1[cnt];
		else 
			P1=table2[cnt];
	}
}

硬件设计

使用元器件:

单片机:AT89C51;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

设计资料

01仿真图

本设计使用Proteus7.8和Proteus8.9两个版本设计!具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用Keil5版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

03设计报告

一千字设计报告,具体如下!

添加图片注释,不超过 140 字(可选)

04设计资料

资料获取请看前面演示视频,全部资料包括仿真源文件 、程序(含注释)、设计报告等。具体内容如下,全网最全! !

操作演示请观看前面演示视频!

点赞分享一起学习成长。

相关推荐
悠哉悠哉愿意3 小时前
【电赛学习笔记】MaixCAM 的OCR图片文字识别
笔记·python·嵌入式硬件·学习·视觉检测·ocr
慕容白 MU5 小时前
新唐51单片机看门狗配置流程
c语言·单片机·嵌入式硬件·51单片机
DebugKitty5 小时前
C语言14-指针4-二维数组传参、指针数组传参、viod*指针
c语言·开发语言·算法·指针传参·void指针·数组指针传参
邹诗钰-电子信息工程6 小时前
嵌入式基础知识复习(C语言)
linux·c语言·vim
吴烦恼的博客6 小时前
FSMC的配置和应用
c语言·单片机·fsmc
jingjing~7 小时前
STM32 软件模拟 I2C 读写 MPU6050--实现加速度与陀螺仪数据采集
stm32·单片机·嵌入式硬件
XH华8 小时前
C语言第六章函数递归
c语言·开发语言·算法
程序员编程指南8 小时前
Qt 并行计算框架与应用
c语言·数据库·c++·qt·系统架构
wearegogog12310 小时前
Arduino与STM32:初学者该如何选择?
stm32·单片机·嵌入式硬件
EVERSPIN11 小时前
新升级超值型系列32位单片机MM32G0005
单片机·嵌入式硬件