em có làm 1 đề tài về đo tốc đọ đc trường trình khi mô phỏng thì đúng nhưng sao khi làm mạch thật thì led lại không hiển thị đúng số vậy là do gì ạ ( phần cứng e làm như hình dưới )
phần cứng thì e có thể đoán là k sai vì khi vẽ e đã tra datasheet của led 7thanh x4 nhưng khi cho cho motor quay để nhận xung thì hiển thị lung tung lắm nó k ra số rõ ràng. lúc chưa có xung từ encoder thì led về trạng thái 0000 bình thường
phần cứng thì e có thể đoán là k sai vì khi vẽ e đã tra datasheet của led 7thanh x4 nhưng khi cho cho motor quay để nhận xung thì hiển thị lung tung lắm nó k ra số rõ ràng. lúc chưa có xung từ encoder thì led về trạng thái 0000 bình thường
Code:
#include<at89x52.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,0x90}; //mã led 7 thanh unsigned int vong,dem; unsigned char nghin,tram,chuc,dvi; 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 main() { TMOD=0x15; IE=0x88; IP=0x08; dem = vong= 0; TH0 = TL0 = 0; TH1 = 0X3C; TL1 = 0XAF; TR0 = TR1 = 1; while(1) { hien_thi(); } } void ngatT1() interrupt 3 { TR1=0; TF1=0; TH1=0X3C; TL1=0XAF; dem++; if(dem==20) { EA=0; dem=0; TR0=0; vong=((TH0*256+TL0)*60)/32; TH0=TL0=0; TR0=1; EA=1; } TR1=1; }
Comment