📄 测速.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 + -