⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motor-1.c

📁 keil c 文件 @@##%%…… &……源代码程序
💻 C
字号:
#include <reg52.h>
#include<absacc.h>
#include <intrins.h>
#include <math.h>

#include <stdio.h>                /* prototype declarations for I/O functions */


        
sbit cflag=ACC^7;

sbit L297_L_CW=P1^0;
sbit L297_L_CLK=P1^1;
sbit L297_L_HALF=P1^2;
sbit L297_L_RST=P1^3;
sbit L297_L_CTL=P1^4;
sbit L297_L_EN=P1^5;

sbit L297_R_CW=P1^6;
sbit L297_R_CLK=P1^7;
sbit L297_R_HALF=P3^0;
sbit L297_R_RST=P3^1;
sbit L297_R_CTL=P3^2;
sbit L297_R_EN=P3^4;



#define uchar unsigned char
#define uint unsigned int
#define UNIT 1
#define STEP 26
#define FINE 1
#define SPEED 10

#define ctrl8279 XBYTE[0X0100]
#define data8279 XBYTE[0X0000]


#define XM   15 

#define YM   15


uchar x0,y0;

float mx,my;
float LL0,LR0;
float lr=0;
float ll=0;


/*********************************/

void msec(unsigned int x){
uchar j;
while(x--){
for(j=0;j<125;j++)
{;}
}
}

/*************************/
uchar code table[]={0x0fc,0x60,0x0da,0x0f2,0x66,0x0b6,0x0be,0x0e0,0x0fe,0x0f6,0x8e,0x02};
/****************************/
void wdat_8279(uchar d){
msec(1);
do
{ACC=ctrl8279;}
while (cflag==1);
data8279=d;
}


/*******************************************/

void wcom_8279(uchar c){
msec(1);
do
{ACC=ctrl8279;}
while (cflag==1);
ctrl8279=c;
}
/********************/

void init8279()
{
  //unsigned char i;
 ctrl8279=0x32;            //biancheng minglin shizhong :ale 18 fenping 00110010
 ctrl8279=0x00;            //8zifuxianshi you ru kou ,bianma sao miao jianpan,shuang jian suo
 ctrl8279=0xd0;            //xianshi ram qing 0,quan zhi 1;
 

 }
 /******************/



void display_xy(int x, int y , uchar ch){
    
    if (y<1) y=1;
    if (y>2) y=2;
    if (x<1) x=1;
    if (x>4) x=4;
    if (ch<0) ch=0;
    if (ch>15) ch=15;
    if (y==1) {
      switch (x) {
       case 1:  wcom_8279(0x87);      
                wdat_8279(table[ch]);
				break;
       case 2:  wcom_8279(0x83);      
                wdat_8279(table[ch]);
      			break;
       case 3:  wcom_8279(0x85);      
                wdat_8279(table[ch]);
				break;
       case 4:  wcom_8279(0x81);      
                wdat_8279(table[ch]);
      			break;
      } 
      
    }else {
	   switch (x) {
       case 1:  wcom_8279(0x86);      
                wdat_8279(table[ch]);
				break;
       case 2:  wcom_8279(0x82);      
                wdat_8279(table[ch]);
      			break;
       case 3:  wcom_8279(0x84);      
                wdat_8279(table[ch]);
				break;
       case 4:  wcom_8279(0x80);      
                wdat_8279(table[ch]);
      			break;
      } 
      
    }

}



void display2( int k){

    uint s=0,a=0,d=0, m=0,f=0,n=0,i;

	
	uint neg=0;
	 
	if(k>-999&&k<=9999)
     { 
     //	ctrl8279=0x00;
	     if (k<0) {
		   k=-k;
		   neg=1;
		 }
     	 s=k/1000;
         wcom_8279(0x86);      
         wdat_8279(table[s]);

     	 a=k%1000;
     	 d=a/100;
     	 wcom_8279(0x82); 
         i=0x80;
          wdat_8279(table[d]);
          //
     	 m=a%100;
     	 f=m/10;
     	 wcom_8279(0x84);
        i=0x80;
         wdat_8279(table[f]);
        
     	 n=m%10;
     	 
     	wcom_8279(0x80);
        wdat_8279(table[n]);  
    }
       if (neg) display_xy(1,2,11);

}
void display1( int k)
{ 
    uint s=0,a=0,d=0, m=0,f=0,n=0,i;

	uint neg=0;
	 
	if(k>-999&&k<=9999)
     { 
     //	ctrl8279=0x00;
	     if (k<0) {
		   k=-k;
		   neg=1;
		 }
     	 s=k/1000;
         wcom_8279(0x87);      
         wdat_8279(table[s]);

     	 a=k%1000;
     	 d=a/100;
     	 wcom_8279(0x83); 
         i=0x80;
          wdat_8279(table[d]);
          //
     	 m=a%100;
     	 f=m/10;
     	 wcom_8279(0x85);
        i=0x80;
         wdat_8279(table[f]);
        
     	 n=m%10;
     	 
     	wcom_8279(0x81);
       wdat_8279(table[n]);
       //
       }
      if (neg) display_xy(1,1,11);
	   
 }  
 /***********************/
   uchar key_pressed(void) //判断FIFO有键按下函数
{uchar k;
k=ctrl8279;
return(k&0x0f); //非0,有键按下
}


uchar keyin(void)
{uchar i,k;
while(key_pressed()==0);
wcom_8279(0x40); //读FIFO RAM命令
i=data8279;
k=0;
switch(i)
     {
          case 196:
          display1(0);
		  k=0;
          break;
          case 228:
          display1(1);
		  k=1;
          break;
          case 192:
          display1(2);
		  k=2;
          break;
          case 224:
          display1(3);
		  k=3;
          break;
          case 197:
          display1(4);
		  k=4;
          break;
          case 229:
          display1(5);
		  k=5;
          break;
          case 193:
          display1(6);
		  k=6;
          break;
          case 225:
          display1(7);
		  k=7;
          break;
          case 198:
          display1(8);
		  k=8;
          break;
          case 230:
          display1(9);
		   k=9;
          break;
          case 194:
          display1(10);
		 k=10;
          break;
          case 226:
          display1(11);
		 k=11;
          break;
          case 199:
          display1(12);
		 k=12;
          break;
          case 231:
          display1(13);
		  k=13;
          break;
          case 195:
          display1(14);
		 k=14;
          break;
          case 227:
          display1(15);
		  k=15;
          break;  
        }

return(k);

}
 /**************************/




void Rmotor(float L){
 int i,j;
    if (L<0){
    L297_L_CW=1;
	}else {
	L297_L_CW=0;
	}
    j=abs(STEP*L);
    for (i=0;i<j;i++){
     L297_L_CLK=0;
	 msec(SPEED);
	 L297_L_CLK=1;
	 msec(SPEED);
	}


}

void Lmotor(float L){

 int  i,j;
    if (L>0){
    L297_R_CW=1;
	}else {
	L297_R_CW=0;
	}
    j=abs(STEP*L);
	for (i=0;i<j;i++){
     L297_R_CLK=0;
	 msec(SPEED);
	 L297_R_CLK=1;
	 msec(SPEED);
	}
} 
 

void clear_led(){
 wcom_8279(0xd0);
}	  



void initL297(){

    L297_L_RST=0;
	msec(50);
	L297_L_RST=1;
	L297_L_CTL=1;
 	L297_L_EN=1;
	L297_L_HALF=0;   

    L297_R_RST=0;
	msec(50);
	L297_R_RST=1;
	L297_R_CTL=1;
 	L297_R_EN=1;
	L297_R_HALF=0;   


}

void test(){
  uchar i;
  initL297();
    for (i=0;i<200;i++){
     L297_R_CLK=0;
	 msec(SPEED);
	 L297_R_CLK=1;
	 msec(SPEED);
	}

	 for (i=0;i<200;i++){
     L297_L_CLK=0;
	 msec(SPEED);
	 L297_L_CLK=1;
	 msec(SPEED);
	}
}

int LL(int  x,  int  y){

   int r1;
   r1=sqrt((15+x)*(15+x)+(115-y)*(115-y));
   return r1;

} 

int LR(int x, int  y){

    int r2;
    r2=sqrt((95-x)*(95-x)+(115-y)*(115-y));
    return r2;

}


void move( int x0, int y0, int x1 ,int y1){

    float Ll0,Lr0,Ll1,Lr1;
	float i;
    
	Ll0=LL(x0,y0);
	Lr0=LR(x0,y0);



	Ll1=LL(x1,y1);
	Lr1=LR(x1,y1);


    i=Ll1-Ll0;
	display1(i);
	i=Lr1-Lr0;
	display2(i);
	msec(2000);
	Lmotor(Ll1-Ll0);
	Rmotor(Lr1-Lr0);


	
}

/*
void   move_step(float x0 , float y0, float x1 , y1,int step) {
   
   float x,y,xs,ys;
   int i;
   xs=x0;
   ys=y0;
   x=(x1-x0)/step;
   y=(y1-y0)/step;

   for (i=0;i<step;i++){
   move(xs,ys,xs+x,ys+y);
	xs=xs+x;
	ys=ys+x;
   }
 

}
*/


bit int_flag;
//extern ReadTemperature(void);
    

main() {


    unsigned int i,j;

    float mmx,mmy;
	int R=20;
    int_flag=0;

	IT1=1;
    IE=0X84;
    init8279();
	display1(-230);
	display2(-123);
	msec(1500);
	clear_led();
	for(i=1;i<3;i++)
	 {for(j=1;j<5;j++) {
     display_xy(j,i,2);
     msec(100);
	 clear_led();
	}
	}
    display1(0000);
    display2(0001);
    initL297();
    i=0;


    mx=20;
	my=50;
	x0=40;
	y0=50;
    for (i=0;i<30;i=i+2){
     move(i,i,i+2,i+2);
	}
	move(32,32,15,50);

//	move_step(40,50,60,90,10);
           mmx=15,mmy=50;
           for(mx=40-R;mx<=40+R;mx=mx+1){
           my=y0-sqrt(R*R-(mx-x0)*(mx-x0));
           move(mmx,mmy,mx,my);
		   mmx=mx;
		   mmy=my;
		   }
           



}



void int1() interrupt 2{
 int_flag=1;
 }



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -