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

📄 direct_motor.c

📁 提供一个用 SST89E564RD 芯片控制直流电机转速的参考程序
💻 C
字号:
//p1.0接J16的2脚,p1.1接J16的1脚
#include<reg52.h>
#include<absacc.h>
#include<stdio.h>

#define COM8279  XBYTE[0x8041]
#define DATA8279 XBYTE[0x8040]
#define uchar unsigned char 
#define uint unsigned int
#define up 1
#define down 0

sbit p10=P1^0;
sbit p11=P1^1;
sbit StatusBit= ACC^7; 

uint time_up=20;  //高电平的延时时间
uchar time_down=45;//低电平的延时时间
uchar time_count=0;//计时间个数
bit up_down=up;  //控制正反转
uint freqency; //频率
uint speed;//转速

uchar code tab[23]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,      // 0 1 2 3 4 5  //
                    0x7d,0x07,0x7f,0x6f,0x77,0x7c};    // 6 7 8 9 A b  //


void delay_up(uint time_up)//高电平的延时
{
  uchar j;
  for(j=0;j<time_up;j++)
    {
      ;
    }
}

void delay_down(uchar time_down)  //低电平的延时
{
  uchar j;
  for(j=0;j<time_down;j++)
    {
      ;
    }
}

void deasil(void)  //顺时针旋转
{
  p10=1;
  delay_up(time_up);
  p10=0;
  delay_down(time_down);
}

void reverse(void)//逆时针旋转
{
  p11=1;
  delay_up(time_up);
  p11=0;
  delay_down(time_down);
}

void control(up_down)//控制正反转
{
  if(up_down==up)
    {
	  deasil();
	  p11=1;
	}
  else
    {
	  reverse();
	  p10=1;
	}
}

void initial_8279(void)//8279初始化
{
  COM8279=0x00;
  COM8279=0x5c;
  COM8279=0x2a;
  COM8279=0x94;
  COM8279=0xd1;
} 

void initial_interrupt(void)//中断初始化
{
  TMOD=0x51;
  TH0=0X1E;
  TL0=0X58;
  TH1=0;
  TL1=0;
  ET1=1;
  TR1=1;
  ET0=1;
  TR0=1;
  EX1=1;
  EA=1;
}

void disp(uint num,uchar index)             //显示
{
  uint up_time;
  COM8279=0X90+index;
  //freqency=TH1*256+TL1;
 // speed=freqency*30;
  COM8279=0xd1;
  do                     
	{                     
		ACC=COM8279;        
	}while(StatusBit==1);
  while(num>0)
    {
      DATA8279=tab[num%10];
	  num=num/10;
	}
	up_time=time_up;
   COM8279=0X94;
   DATA8279=tab[up_time%10];
   up_time=up_time/10;
   COM8279=0X95;
   DATA8279=tab[up_time%10];
   up_time=up_time/10;
   COM8279=0X96;
   DATA8279=tab[up_time%10];
}

void time_0(void) interrupt 1//内部中断0
{
  uchar i; 
  
  i++;
  if(i==20)
    { 
	  ET0=0;
      TR1=0;
	  EA=0;
	  i=0;
	  freqency=TH1*256+TL1;
      speed=freqency*30;
	  disp(speed,0);
	  TH1=0;
      TL1=0;
	  ET0=1;
      TR1=1;
	  EA=1;
	}
  
  
  TH0=0X1E;
  TL0=0X58;
}

void int_1(void) interrupt 2//外部中断1
{
  EA=0;
  switch(DATA8279)
    {
	  case 0xd9: //8键++
	    {
		  time_up++;
		}break;
	  case 0xd8://4键--
	    {
		  time_up--;
		}break;
	  case 0xc3://13键控制方向
	    {
		  up_down=~up_down;
		}break;
	  default:;
	}
  EA=1;
}
/***********************************************
          主程序
***********************************************/
void main(void)
{ 
  initial_8279();
  initial_interrupt();
  
  while(1)
    {
	  control(up_down);
	}
}

⌨️ 快捷键说明

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