当前位置: 首页 > news >正文

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

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

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

功能介绍

具体功能:

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

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

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

​演示视频:

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

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

程序

//*****************************************//
//**************名称:步进电机*************//
//********          木子单片机    *********//
//*****************************************//
#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 ;					//启动定时器0ET0 = 1 ;					//开启定时器0中断EA = 1 ;					//开启总中断
}
//外部中断配置函数
void ext_config(void)
{EX0 = 1;					//开启外部中断0IT0 = 1;					//外部中断为边沿触发方式EX1 = 1;					//开启外部中断1IT1 = 1;					//外部中断为边沿触发方式	
}
//外部中断0
void ext0_isr() interrupt 0 
{if(sec<9)sec++;elsesec=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设计资料

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

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

点赞分享一起学习成长。

http://www.xdnf.cn/news/365077.html

相关文章:

  • async/await 原理揭秘
  • Windows11下通过Docker安装Redis
  • USB学习【4】协议层数据格式
  • C++八股 —— 函数指针与指针函数
  • PPI-ID: 德克萨斯大学研究团队最新款蛋白-蛋白互作(PPI)预测工具上线
  • Ascend的aclgraph(一)aclgraph是什么?torchair又是怎么成图的?
  • 2025年 全新 AI 编程工具 Cursor 安装使用教程
  • 2025数维杯数学建模C题完整限量论文:清明时节雨纷纷,何处踏青不误春?
  • 空间复杂度** 与 **所需辅助空间**
  • 33、前台搜索功能怎么实现?
  • 基环树(模板) 2876. 有向图访问计数
  • Dp通用套路(闫式)
  • OPENSSL-1.1.1的使用及注意事项
  • Qt 无边框窗口,支持贴边分屏
  • 大某麦演唱会门票如何自动抢
  • 高尔夫基本知识及规则·棒球1号位
  • PHP8报:Unable to load dynamic library ‘zip.so’ 错误
  • Xterminal(或 X Terminal)通常指一类现代化的终端工具 工具介绍
  • 攻防演练 | 关于蓝队攻击研判的3大要点解读
  • 分治算法-leetcode148题
  • archlinux 详解系统层面
  • RISC-V AIA SPEC学习(五)
  • Springboot+Vue+Mybatis-plus-Maven-Mysql项目部署
  • 可编辑56页PPT | 化工行业智慧工厂解决方案
  • nvidia-smi 和 nvcc -V 作用分别是什么?
  • 金贝灯光儿童摄影3大布光方案,解锁专业级童趣写真
  • 智能制造单元系统集成应用平台
  • SAM详解3.1(关于2和3的习题)
  • 学习黑客认识Security Operations Center
  • 雷赛伺服L7-EC