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

📄 new.c

📁 C51驱动电机PID控制转速的汇编和C51代码.
💻 C
字号:
#include<reg52.h>
#include<absacc.h>
void init8279();
void inittimer1();

#define COM XBYTE[0x1b31]                        //8279命令口           
#define DAT XBYTE[0x1b30] 
sbit p10=P1^2;
sbit p11=P1^3;                       //8279数据口
#define uchar unsigned char
uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07     //七段码0--7
                  ,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};   //七段码8--f
uchar code asc[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37      //ASCII表  
                  ,0x38,0x39,0x40,0x41,0x42,0x43,0x44,0x45};
uchar data reg1;
uchar data count;    
uchar data zk;
unsigned long data zkh;
unsigned long data zkl;
//uchar data zk=0;
uchar data dh=0;
uchar data dl=0;
bit flag; 
unsigned int data turn=0;
unsigned int data flow=0;
#define tpwm 9000
void send(uchar x);
void fzk(uchar a);
void initdj();
void xianshi(uchar a,uchar addr);
void zs(uchar h,uchar l);
void auto1();
main()
{
init8279();            //初始化8279
inittimer1();          //初始化计时器1和设置串口方式
initdj();
while(1)
{
 }
} 

void init8279()                //初始化8279
{
COM=0xd1;
do{reg1=COM;}
while(reg1&0x80);
COM=0;
COM=0x32;
EA=1;
EX0=1;
ES=1;
}
 

void keyin() interrupt 0   //读键盘并显示行列
{
COM=0x40;
reg1=DAT;
reg1=reg1&0x3f;
if(reg1>=0x8&&reg1<=0xd||reg1>=2&&reg1<=6)
fzk(reg1);
}
 void inittimer1()
 {
  TMOD=0x01;//定时器0工作于方式1                                            add
  T2CON=0x9;//定时器2工作于捕捉方式									  
  TH2=0x0;										  
  TL2=0x0;										  
  TR2=1;										  
  ET2=1;										  
  PT2=1; 												  
 }
  void fzk(uchar a)//改变占空比
  {
  switch(a)
  {
  case 0x8:zk=50;COM=0x80;DAT=duan[a-8];break;
  case 0x9:zk=20;COM=0x80;DAT=duan[a-8];break;
  case 0xa:zk=40;COM=0x80;DAT=duan[a-8];break;
  case 0xb:zk=60;COM=0x80;DAT=duan[a-8];break;
  case 0xc:zk=80;COM=0x80;DAT=duan[a-8];break;
  case 0xd:zk=90;COM=0x80;DAT=duan[a-8];break;
  case 0x02:p11=0;COM=0x81;DAT=0x77;break;//方向
  case 0x03:p11=1;COM=0x81;DAT=0x7c;break;
  case 0x04:COM=0x81;DAT=0x0;COM=0x80;DAT=0x0;p10=0;ET0=0;break;
  case 0x05:zk=50;p11=0;COM=0x80;DAT=duan[0];COM=0x81;DAT=0x77;ET0=1;break;
  case 0x06: auto1();break;
  }
   zkh=tpwm*zk/100;
   zkl=tpwm*(100-zk)/100;
   }
   void timer0() interrupt 1 //T0计时
   { 
   	if(p10==1)
   	{
	 TH0=(65536-zkl)/256;
	 TL0=(65536-zkl)%256;
	 p10=0;
	} 
	 
   else if(p10==0)
	{
	 TH0=(65536-zkh)/256;
	 TL0=(65536-zkh)%256;
	 p10=1;
	}
   }
   void initdj()//初始化电机
   {
   p10=0;//脉宽
   p11=0;//方向正
   zkh=tpwm*50/100;
   zkl=tpwm*50/100;
   TH0=65535/256;
   TL0=65535%256;
   TR0=1;
   }
   
    void xianshi(uchar a,uchar addr)
   {
   	COM=addr;
	DAT=duan[a];
   }
   void zs(uchar h,uchar l)
   {
   	 
	 unsigned long data zs;
	 zs=5*55296000/(65536*flow+256*h+l);
	 xianshi(zs/1000,0x85);
	 zs=zs%1000;
	 xianshi(zs/100,0x84);
	 zs=zs%100;
	 xianshi(zs/10,0x83);
	 xianshi(zs%10,0x82);
    }

	 void time2() interrupt 5
	 {
	 if(EXF2==1)
	  {
	  turn++;
	  if(turn==1)
	  {
	  flow=0;
	  TH2=0;
	  TL2=0;
	  }
	  else if(turn==41)
	   {
	   TR2=0;
	   dl=RCAP2L;
	   dh=RCAP2H;
	   zs(dh,dl);
	   TR2=1;
	   turn=0;
	   }
	   EXF2=0;
	  }
	  else
	   {flow++;
	    TF2=0;
	   	
	   }
	 }

	 void auto1()
	 {
	
	 }

⌨️ 快捷键说明

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