栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Proteus仿真stc89c51正反调速控制uln2003步进电机

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Proteus仿真stc89c51正反调速控制uln2003步进电机

功能说明:
1.使用Proteus8.10仿真stc89c51正反调速控制uln2003步进电机。
2.运行参数显示屏LCD显示。
3.按键控制电机正反转以及调速与急停。

注意事项:
处理器 :STC89C51/STC89C52
仿真软件:Proteus8.10

按键控制步进电机正反转并可调速
初始状态如下图所示:

正转控制如下图:

反向控制如下所示:

部分程序如下所示:

#include  "macro.h"
uchar buf_Direction;                  								//设定步进电机的转向
uint  set_speed;                      								//设定步进电机的转速
uchar step_motor_loop[8]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};	//驱动控制指令表
uchar step_index;
//电机正反转控制接口
#define CST_STEP_MOTOR_Z      10				  //正转
#define CST_STEP_MOTOR_F      20				  //反转
#define CST_STEP_MOTOR_ST     0      		      //停止
//晶振选择
#define     fosc_12MHz                  12  	  
#define     fosc_24MHz                  24     
#define     fosc_setting        fosc_12MHz 		  
//定时器工作方式1
#define CST_TIME_MS    1000    
#define CST_TH0          (65536-CST_TIME_MS*fosc_setting/fosc_12MHz)/256
#define CST_TL0          (65536-CST_TIME_MS*fosc_setting/fosc_12MHz)%256 

电机正反运行状态控制代码如下:

	static uchar key_loose=0;
	uchar temp=0;
	P1=0xFF;
	temp=P1&0xFF;
	if(key_loose >0)
	{
		if(temp==0xFF)
	 	key_loose=0;
		return;
	}
	else if(temp !=0xFF)
  	{
  		key_loose=10;
  		temp=P1&0xFF;
  		switch(temp)
	 	{
	  		case 0xFE:      
	                	buf_Direction=CST_STEP_MOTOR_Z; 
                        list_write_HZ_Str(6,20,"顺向");
	                 	caluate();
			  			break;  	 
			  
	  		case 0xFD:    
	                	buf_Direction=CST_STEP_MOTOR_F; 
			  			list_write_HZ_Str(6,20,"逆向");
			    		caluate();
			  			break;                          
 	  		case 0xFB:   
	                	buf_Direction=CST_STEP_MOTOR_ST; 
			  			list_write_HZ_Str(6,20,"停止");
			  			list_write_HZ_Str(6,60,"     ");
			  			break;                  
	  		case 0xEF:    
	                	if(buf_Direction !=CST_STEP_MOTOR_ST)
				     	{
					  		if(set_speed <80)set_speed +=2;    //减速
					      	caluate();
					 	}
						break;
	  		case 0xF7:    
	               		if(buf_Direction !=CST_STEP_MOTOR_ST)
				     	{
					  		if(set_speed >14)set_speed -=2;      //加速 
					    	caluate();
					 	}
						break;
	  		default:  	
	                	break;                                //其它值返回 
	 }
  }

主程序如下所示:

void main(void) 
{  
   P2=0xff;
   P1=0xff;
   P0=0xff;
   init_timer0();
   iniLCD();                                      //初始化 LCD
   buf_Direction=CST_STEP_MOTOR_ST;
   set_speed=60;
   step_index=3;
   EA=1;	                                      //开启中断 
   while(1)
   {
     key_Scan();								  //按键扫描函数
   }
}

全部资料链接见评论区,有问题请留言~
作者:amusen
时间:2022.5
祝好!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869759.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号