书接上文,本来是打算在MT6735 上直接写linux驱动,来驱动步进电机,但考虑到项目进度和android的调试繁琐,索性改了方案——直接使用外挂单片机形式,主模块通过uart发送指令驱动步进电机。

 领导让我选型单片机,那有什么可选的基于成本最低就是51了,考虑易下功能就是,IO引脚够,还得能存储数据,那就STC11F02E -sop20了。应该RMB2.5吧不含税。好了废话不多少说了,直接上原理图,上程序。

 

 

 

#include <reg52.h>       
#include <intrins.h>



sfr P0M0 = 0x94;                                                                         
sfr P0M1 = 0x93;  

sfr P1M1 = 0x91;
sfr P1M0 = 0x92;

sfr P2M1 = 0x95;
sfr P2M0 = 0x96;

sfr P3M1 = 0xB1;
sfr P3M0 = 0xB2;

sfr P4M1 = 0xB3;
sfr P4M0 = 0xB4;
sfr P4   = 0xC0; 



sbit K1=P1^6;
sbit K2=P1^5;
sbit K3=P1^4;
sbit K4=P1^3;

sbit K5=P1^2;
sbit K6=P1^1;
sbit K7=P1^0;
sbit K8=P3^7;


void delay(unsigned int t)
{                           
   unsigned int k;
   while(t--)
   {
     for(k=0; k<125; k++)
     { }
   }
}


void main()
{ 
	
	int t=15;        //控制速度

	P1M1=0;P1M0=0; 
	P2M1=0;P2M0=0;
	P3M1=0;P3M0=0;

  while(1){
	  K1=1; K2=0; K3=0; K4=0;
	  K5=1; K6=0; K7=0; K8=0;
	  delay(t);	 
      K1=1; K2=1; K3=0; K4=0;
	  K5=1; K6=1; K7=0; K8=0;
	  delay(t);
      K1=0; K2=1; K3=0; K4=0;
	  K5=0; K6=1; K7=0; K8=0;
	  delay(t);
      K1=0; K2=1; K3=1; K4=0;
	  K5=0; K6=1; K7=1; K8=0;
	  delay(t);
      K1=0; K2=0; K3=1; K4=0;
	  K5=0; K6=0; K7=1; K8=0;
	  delay(t);
      K1=0; K2=0; K3=1; K4=1;
	  K5=0; K6=0; K7=1; K8=1;
	  delay(t);
      K1=0; K2=0; K3=0; K4=1; 
	  K5=0; K6=0; K7=0; K8=1;
	  delay(t);
      K1=1; K2=0; K3=0; K4=1;
	  K5=1; K6=0; K7=0; K8=1;
	  delay(t);
	 } 
	
 }

程序只是为了验证一下电路没问题。ldo升压5V没问题,并未加逻辑控制。稍后写完贴出带逻辑控制的,大概得下个月了,调完这个还得调android其他驱动部分,需要的留言。

Logo

更多推荐