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

📄 motor-电机可转动.c

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


sbit cflag=ACC^7;

sbit L297_CLK=P1^1;
sbit L297_CW=P1^0;
sbit L297_EN=P1^5;
sbit L297_HALF=P1^2;
sbit L297_RST=P1^3;
sbit L297_CTL=P1^4;

/*
sbit L298_A=P1^0;
sbit L298_B=P1^1;
sbit L298_C=P1^2;
sbit L298_D=P1^3;
sbit L298_I1=P1^4;	
sbit L298_I2=P1^5;
*/


#define uchar unsigned char
#define uint unsigned int
#define UNIT 1
#define STEP 1


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


#define XM   15 

#define YM   15





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 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};
/****************************/
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;

	
	 if(k>=0&&k<=9999)
     { 
     //	ctrl8279=0x00;
	   
     	 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]);  
    }

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

	
	 if(k>=0&&k<=9999)
     { 
     //	ctrl8279=0x00;
	   
     	 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]);
       //
       }

	   
 }  
 /***********************/
   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 Lmotor(uchar L, uchar cw, uchar speed){
 uchar i;
    if (cw==1){
    L297_CW=1;
	}else {
	L297_CW=0;
	}
    for (i=0;i<STEP*L;i++){
     L297_CLK=0;
	 msec(speed);
	 L297_CLK=1;
	 msec(speed);
	}


}

void Rmotor(uchar L, uchar cw,uchar speed){

 uchar i;
    if (cw==1){
    L297_CW=1;
	}else {
	L297_CW=0;
	}
    for (i=0;i<STEP*L;i++){
     L297_CLK=0;
	 msec(speed);
	 L297_CLK=1;
	 msec(speed);
	}
} 
 

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



void initL297(){

    L297_RST=0;
	msec(50);
	L297_RST=1;
	L297_CTL=1;
 	L297_EN=1;
	L297_HALF=0;   
}


bit int_flag;
//extern ReadTemperature(void);
    

main() {
   unsigned int i,j;
    uchar speed=50;
	uchar cw=0;
	uchar k=0;
    int_flag=0;
    IT1=1;
    IE=0X84;
    init8279();
	display1(1230);
	display2(0000);
	msec(2000);
	clear_led();
	for(i=1;i<3;i++)
	 {for(j=1;j<5;j++) {
     display_xy(j,i,2);
     msec(100);
	 clear_led();
	}
	}
    display1(1234);
    display2(5678);
    initL297();
    i=0;
do{  

    if (int_flag){
    int_flag=0;
	k=keyin();
	display2(k);
	if (k==1) speed=speed+10;
	if (k==2) speed=speed-10;
	if (k==3) cw=0;
	if (k==4) cw=1;
	Lmotor(1,cw,speed);
	display1(speed);
	i++;
	display2(i);
	}
	
	
}
while(1);


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



⌨️ 快捷键说明

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