Chào mọi người! Mình đang dự định làm đồng hồ đo tốc độ hiển thị bằng số cho con xe của mình,hiện mình vẫn đang kẹt ở cái đo tần số,k hiểu sao khi mình chạy mô phỏng thì rất ok nhưng thực tế ở ngoài khi đo thì đồng hồ hiển thị loạn xạ k chính xác,mình lấy tín hiệu từ máy phát tần số đàng hoàng nhưng counter cứ đếm 1 xung thành 1 hay 2,4,5 xung j đó nên k chính xác .Nguyên tắc đo mình sử dụng counter0 và timer 1,khi timer 1 ở 200us thì ngắt và counter 0 trả về giá trị đếm được,lặp lại 5000 lần như vậy thì giá trị đếm được trong 1s sẽ là tần số cần đo.
Đây là code của mình:
#include <regx51.h>
#include <math.h>
unsigned char
M[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
unsigned char dv,chuc,tram;
unsigned short f,x,j,V,dem=0;
void delay(unsigned int t)
{
unsigned int i;
for (i=1;i<=t;i++);
}
void hienthi()
{
tram=V/100;
chuc=(V%100)/10;
dv=(V%100)%10;
P1_0=0;
P2=M[tram];
delay(100);
P1_0=1;
P1_1=0;
P2=M[chuc];
delay(100);
P1_1=1;
P1_2=0;
P2=M[dv];
delay(100);
P1_2=1;
}
/*************/
void main()
{
IE=0x88; //Cho fep ngat timer 1
TMOD=0x25 ;//Timer 1 mode 2. Timer 0 mode 1 + dem su kien
IP=0x08; //Uu tien ngat timer 1
dem=0;
TH1=TL1=-200;
TH0=TL0=0;
TR1=TR0=1;
//*********Hien thi tan so tren led 7 thanh*********
while(1)
{
hienthi();
}
}
void ngatT1() interrupt 3
{
dem++;
if (dem==5000)
{
f=(TH0*256+TL0);
V=f;
dem=0;
TH1=TL1=-200;
TH0=TL0=0;
TF1=0;
TR1=TR0=1;}
TF1=0;
TR1=1;
}
Link đầy đủ về design và code để mọi ng tiện theo dõi.Mong mọi ng chỉ giáo giúp.Cám ơn vì đã quan tâm!!!
MACH DO TAN SO.rar
Đây là code của mình:
#include <regx51.h>
#include <math.h>
unsigned char
M[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
unsigned char dv,chuc,tram;
unsigned short f,x,j,V,dem=0;
void delay(unsigned int t)
{
unsigned int i;
for (i=1;i<=t;i++);
}
void hienthi()
{
tram=V/100;
chuc=(V%100)/10;
dv=(V%100)%10;
P1_0=0;
P2=M[tram];
delay(100);
P1_0=1;
P1_1=0;
P2=M[chuc];
delay(100);
P1_1=1;
P1_2=0;
P2=M[dv];
delay(100);
P1_2=1;
}
/*************/
void main()
{
IE=0x88; //Cho fep ngat timer 1
TMOD=0x25 ;//Timer 1 mode 2. Timer 0 mode 1 + dem su kien
IP=0x08; //Uu tien ngat timer 1
dem=0;
TH1=TL1=-200;
TH0=TL0=0;
TR1=TR0=1;
//*********Hien thi tan so tren led 7 thanh*********
while(1)
{
hienthi();
}
}
void ngatT1() interrupt 3
{
dem++;
if (dem==5000)
{
f=(TH0*256+TL0);
V=f;
dem=0;
TH1=TL1=-200;
TH0=TL0=0;
TF1=0;
TR1=TR0=1;}
TF1=0;
TR1=1;
}
Link đầy đủ về design và code để mọi ng tiện theo dõi.Mong mọi ng chỉ giáo giúp.Cám ơn vì đã quan tâm!!!
MACH DO TAN SO.rar
Comment