Cần giúp 8051 điều khiển và hiển thị tốc độ động cơ

lamer

Học sinh phổ thông
#1
Bro giúp em sửa code này đc ko ạ, em bị lỗi ko hiển thị đc tốc độ ra led, em nghĩ có thể do quét led bị sai nhưng sửa mấy hôm vẫn ko ra, please
Đề: Dùng 8051 điều khiển và hiển thị tốc độ dộng cơ 24V có dải đo 0-3000v/p

#include <at89c51xd2.h>

int count1=0, count2=0;
int dem=0;
long k;

//ham khoi tao
void khoitao (void)
{
P3=0xFF;
TMOD=0x51;
IE0=0xAA;
TR0=1;
TR1=1;
TH0=0x3C;
TL0=0xB0;
T2MOD=0xc9;
T2CON=0x04;
RCAP2H=0xF8;
RCAP2L=0x30;
ET2=1;
EA=1;
TR2=1;
}
//ham tre
void delay (long time)
{
for(k=0;k<time;k++)
{
;
}
}

//ngat timer0
void timer () interrupt 1
{
TR0=0;
TR1=0;
dem++;
TH0=0x3C;
TL0=0xB0;
if(dem==12)
{
count1=TL1;
count2=TH1;
TL1=TH1=0;
dem=0;
}
TR0=1;
TR1=1;
}

//ham ngat timer2 tao PWM
unsigned char xung;
unsigned char Phantramxung;
unsigned char chay=0;
void timer2 (void) interrupt 5
{
TR2=0;
TF2=0;
chay++;
if(chay<=Phantramxung) P2=xung;
else P2=0x0F;
if(chay==10) chay=0;
TR2=1;
}

//ham tang toc
char tangtoc(void)
{
if(Phantramxung>0)
{
if(P1_0==0)
{
while(P1_0==0)
{
;
}
Phantramxung++;
if(Phantramxung>9) Phantramxung=10;
}
}
return Phantramxung;
}

//ham giam toc
char giamtoc (void)
{
if(P1_1==0)
{
while(P1_1==0)
{
;
}
Phantramxung--;
if(Phantramxung<=1) Phantramxung=1;
}
return Phantramxung;
}

//ham quay thuan
char quaythuan (void)
{
if(P1_2==0)
{
P1_5=0;
P1_6=1;
xung=0x01;
Phantramxung=3;
}
return Phantramxung;
}

//ham quay nghich
char quaynghich (void)
{
if(P1_4==0)
{
P1_5=1;
P1_6=0;
xung=0x02;
Phantramxung=3;
}
return Phantramxung;
}

// ham dung toc do
char dung (void)
{
if(P1_3==0)
{
P1_5=1;
P1_6=1;
Phantramxung=0;
}
return Phantramxung;
}

// ham hien thi led
void chuso(unsigned char x)
{
switch(x)
{
case 0:{ P0=0x40;break;}
case 1:{ P0=0x79;break;}
case 2:{ P0=0x24;break;}
case 3:{ P0=0x30;break;}
case 4:{ P0=0x19;break;}
case 5:{ P0=0x12;break;}
case 6:{ P0=0x02;break;}
case 7:{ P0=0x78;break;}
case 8:{ P0=0x00;break;}
case 9:{ P0=0x10;break;}
}
}
void hienthiso(long n,long m)
{
int a,b,c,d;
n=m*255+n;
a=n/1000;
n=n-1000*a;
b=n/100;
n=n-b*100;
c=n/10;
n=n-c*10;
d=n;
P3_0=1; chuso(a); delay(1); P3_0=0;
P3_1=1; chuso(b); delay(1); P3_1=0;
P3_2=1; chuso(c); delay(1); P3_2=0;
P3_3=1; chuso(d); delay(1); P3_3=0;
}
//ham main
void main (void)
{
khoitao ();
while(1)
{
hienthiso(count1,count2);
quaythuan();
tangtoc();
giamtoc();
dung();
quaynghich();
}
}
 

Đính kèm

Quảng cáo Google