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

📄 测速.c

📁 PID自动调节直流电机的速度。认为规定直流转多少转
💻 C
字号:
#include <at89x52.h>
#include <math.h>
#include "TLC5615.H"

#define  uchar unsigned char
#define  uint  unsigned int

uchar SetPoint = 90;
float Kp=0.02;
int Error=0;
float DACTemp;
uint  DAC=0;
uint  RIn=0;

uchar n=0,flag=0,High=0,Low=0;

uchar code tv[ ] = {0x7f, 0xbf, 0xdf, 0xef};  //数码管片选
uchar code a[ ] = {0x3f, 0x06, 0x5b, 0x4f,       //数码管断选
                   0x66, 0x6d, 0x7d, 0x07,
				   0x7f, 0x6f, 0x00, 0x7c};

uchar data  led[4];
unsigned int data i=0;   //定义一个全局I型变量

void ledxianshi(uint tvdata)   //显示函数,也就是数码管驱动
{
     static unsigned char sts = 0;
	 
	 if( flag ){ sts=1; flag=0; }
	 switch( sts )
	 {
	 	case 0 : sts=1; break;
		case 1 :
			for( i=0; i<4; i++ )
	 		{
	 			led[ i ] = tvdata % 10; 
				tvdata /= 10;
    		}
			sts = 2;
			break;
		case 2 : P0=a[ led[0] ]; P2=tv[0]; sts=3; break;
		case 3 : P0=a[ led[1] ]; P2=tv[1]; sts=4; break;
		case 4 : P0=a[ led[2] ]; P2=tv[2]; sts=5; break;
		case 5 : P0=a[ led[3] ]; P2=tv[3]; sts=2; break;
		default : sts = 0;
	}
}

void int0(void) interrupt 0
{
	n++;
	if(n==4)
	{
		TR2=0;
		TF2=0;
		High=TH2;
		Low=TL2;
		TH2=0;
		TL2=0;
		TR2=1;
		n=0;
		flag=1;	
	}
	else
	flag=0;
}


void Timer2Int( void ) interrupt 5
{
	TF2 = 0;
}

void initail(void)
{
	IT0=1;
	EX0=1;

	C_T2=0;
	TF2=0;
	TH2 = 0;
    TL2 = 0;
	ET2 = 1;
	TR2=1;
	EA=1;
}

void main(void)
{
   unsigned  long temp=0;

	initail();
	while(1)
	{	
		temp=High*256+Low;
		RIn=1000000/temp;
		ledxianshi(RIn);

		Error = SetPoint - RIn;
		DACTemp = Error*Kp + DACTemp;
		DAC=DACTemp;
		Dac( DAC );
	}
}

⌨️ 快捷键说明

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