Nguyên văn bởi IloveMyjob
Xem bài viết
Mình sửa cho bạn như thế này nhé, hê, mình không biết thay đổi tốc độ động cơ như thế nào, bạn có thể dùng một nguồn xung DLOCK để kiểm tra thử xung thì dễ hơn là là cho cái động cơ vào
code nhé:
#include<reg52.h>
#define high(x) (((65536-x)&0xff00)>>8)
#define low(x) (unsigned char)(65536-x)
unsigned char M[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
unsigned int dem=0,tam=0,toc_do=0;
sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
sbit led4=P0^3;
void delay_ms (unsigned int time)
{
unsigned int i;
unsigned char j;
for (i=time;i>0;i--)
for (j=100;j>0;j--);
}
void clear()
{
P0=0;
P2=0xff;
delay_ms(1);
}
void hien_thi()
{
clear();led4=1;
P2=M[((((toc_do%1000)%100)))%10];delay_ms(5);
clear();led3=1;
P2=M[(((toc_do%1000)%100))/10];delay_ms(5);
clear();led2=1;
P2=M[(toc_do%1000)/100];delay_ms(5);
clear();led1=1;
P2=M[toc_do/1000];delay_ms(5);
}
void main()
{
TMOD=0x15;
EA=1;
ET0=ET1=1;
PT1=1;
TH1 = high(1000);
TL1= low(1000);
TH0 =high(100);
TL0=low(100);
TR1 = TR0 = 1;
while(1)
{
hien_thi();
}
}
void ngat_T0(void) interrupt 1
{ TF0=0;
dem++;
TH0 =high(100);
TL0=low(100);
}
void ngat_T1() interrupt 3
{ TF1=0;
tam++;
if(tam==1000) // đợi 1 giây
{
toc_do=dem;
dem=0;
tam=0;
}
TH1 = high(1000);
TL1= low(1000);
}
sử dụng thạch anh 12M nha. ^^, Thân,
Comment