Proteus仿真stc89c51正反调速控制uln2003步进电机lcd12864显示状态

该博客介绍了如何使用Proteus8.10仿真STC89C51单片机控制ULN2003驱动的步进电机实现正反调速,并通过LCD12864显示屏显示运行状态。用户可以通过按键进行速度调整和电机方向切换。程序中包含了电机控制接口定义、定时器设置以及主程序的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能说明:
1.使用Proteus8.10仿真stc89c51正反调速控制uln2003步进电机。
2.运行参数显示屏LCD12864显示。
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
祝好!
下载链接

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

amusen.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值