Em đang làm cái đề tài đo tốc độ động cơ hiển thị trên 4led 7thanh
viết xong cái code mà chả hiểu cái lỗi j mà chả thấy có kết quả j trên màn hình cả
ở đây em giả lập cái encoder 32 lỗ = xung clock DC đi vào chân T0 sử dụng bộ đếm sự kiện trên chân này, dùng ngắt T2 để quét led 7 thanh, ngắt T1 để tạo thời gian 1s, vì sau mỗi s sẽ cập nhật lại tốc độ và hiển thị lên led nhưng chả biết sao mà kết quả cứ =0, em giả lập xung clock có tần số 1khz như vậy tốc độ động cơ sẽ đc xấp xỉ 2000v/p. vậy mà ...
bác nào xem xét qua hộ e cái lỗi
#include<regx52.h>
#include<stdio.h>
#include<math.h>
sbit L1 = P2^0;
sbit L2 = P2^1;
sbit L3 = P2^2;
sbit L4 = P2^3;
//////////////////////////////////////////
unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
unsigned char nghin,tram,chuc,dvi,vong,dem;
//////////////////////////////////////////
void delay_ms(unsigned int time)
{
unsigned int i;
unsigned int j;
for(i = time;i>0;i--)
for(j=0;j<125;j++);
}
//////////////////////////////////////////
void clear_led(void)
{
P0=0xff;
P2=0;
}
//////////////////////////////////////////
void hien_thi()
{
nghin = vong/1000;
L1 = 1; L2=L3=L4=0;
P0=M[nghin];
delay_ms(2);
clear_led();
tram = (vong%1000)/100;
L2 = 1; L1=L3=L4=0;
P0=M[tram];
delay_ms(2);
clear_led();
chuc = ((vong%1000)%100)/10;
L3 = 1; L1=L2=L4=0;
P0=M[chuc];
delay_ms(2);
clear_led();
dvi = ((vong%1000)%100)%10;
L4 = 1; L1=L2=L3=0;
P0=M[dvi];
delay_ms(2);
clear_led();
}
//////////////////////////////////////////
void ngat_T2() interrupt 5
{
TR2=0;
hien_thi();
TR0=1;
}
void ngat_T1() interrupt 3
{
TR1=0;
TF1=0;
dem++;
TR1=1;
}
///////////////////////////////////
void main()
{
T2MOD=0x03;
RCAP2H=TH2=-5000/256;
RCAP2L=TL2=-5000%256;
TMOD=0x25;
IE=0xA8;
IP=0X80;
while(1)
{
dem=0;
TH1 = TL1 = -100;
TH0 = TL0 = 0;
TR1 = TR0 = TR2=1;
while(dem<10000); //1s
TR1 = TR0 =TR2=0;
vong = (TH0*256+TL0)*60/32; //thoi gian trong 1s*60 /32 la so lo~ cua encoder=so vong/p
}
}
http://www.mediafire.com/?yfs4ss1bea37udi
đây là link đây đủ cả mô phỏng, ko hiểu sao dạo này diễn đàn ko thể up file rar lên đc
viết xong cái code mà chả hiểu cái lỗi j mà chả thấy có kết quả j trên màn hình cả
ở đây em giả lập cái encoder 32 lỗ = xung clock DC đi vào chân T0 sử dụng bộ đếm sự kiện trên chân này, dùng ngắt T2 để quét led 7 thanh, ngắt T1 để tạo thời gian 1s, vì sau mỗi s sẽ cập nhật lại tốc độ và hiển thị lên led nhưng chả biết sao mà kết quả cứ =0, em giả lập xung clock có tần số 1khz như vậy tốc độ động cơ sẽ đc xấp xỉ 2000v/p. vậy mà ...
bác nào xem xét qua hộ e cái lỗi
#include<regx52.h>
#include<stdio.h>
#include<math.h>
sbit L1 = P2^0;
sbit L2 = P2^1;
sbit L3 = P2^2;
sbit L4 = P2^3;
//////////////////////////////////////////
unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
unsigned char nghin,tram,chuc,dvi,vong,dem;
//////////////////////////////////////////
void delay_ms(unsigned int time)
{
unsigned int i;
unsigned int j;
for(i = time;i>0;i--)
for(j=0;j<125;j++);
}
//////////////////////////////////////////
void clear_led(void)
{
P0=0xff;
P2=0;
}
//////////////////////////////////////////
void hien_thi()
{
nghin = vong/1000;
L1 = 1; L2=L3=L4=0;
P0=M[nghin];
delay_ms(2);
clear_led();
tram = (vong%1000)/100;
L2 = 1; L1=L3=L4=0;
P0=M[tram];
delay_ms(2);
clear_led();
chuc = ((vong%1000)%100)/10;
L3 = 1; L1=L2=L4=0;
P0=M[chuc];
delay_ms(2);
clear_led();
dvi = ((vong%1000)%100)%10;
L4 = 1; L1=L2=L3=0;
P0=M[dvi];
delay_ms(2);
clear_led();
}
//////////////////////////////////////////
void ngat_T2() interrupt 5
{
TR2=0;
hien_thi();
TR0=1;
}
void ngat_T1() interrupt 3
{
TR1=0;
TF1=0;
dem++;
TR1=1;
}
///////////////////////////////////
void main()
{
T2MOD=0x03;
RCAP2H=TH2=-5000/256;
RCAP2L=TL2=-5000%256;
TMOD=0x25;
IE=0xA8;
IP=0X80;
while(1)
{
dem=0;
TH1 = TL1 = -100;
TH0 = TL0 = 0;
TR1 = TR0 = TR2=1;
while(dem<10000); //1s
TR1 = TR0 =TR2=0;
vong = (TH0*256+TL0)*60/32; //thoi gian trong 1s*60 /32 la so lo~ cua encoder=so vong/p
}
}
http://www.mediafire.com/?yfs4ss1bea37udi
đây là link đây đủ cả mô phỏng, ko hiểu sao dạo này diễn đàn ko thể up file rar lên đc
Comment