51单片机频率计的实践 也是在网上找的 自己做了硬件 测试通过 精度误差70hz--10hz
#include
#define uchar unsigned char
#define uint unsigned int
uint n,num, temp,i,j;
uchar code zk[]={0x28, 0xeb, 0x12,0x82,0xe1,0x84,0x04,0xca,0x20,0x80,0x8f };
void delay(uint temp)
{
uint i,j;
for(i=0;i for(j=0;j<30;j++)
{;}}
}
void display (uchar m,uchar w,uchar q,uchar b)
{
P3=0XFE;
P1=zk[m];
delay(100);
P3=0XFD;
P1=zk[w];
delay(100);
P3=0XFB;
P1=zk[q];
delay(100);
P3=0XF7;
P1=zk;
delay(100);
}
void main(void)
{ uchar kk;
uchar m,w,q,b;
TMOD=0x25; // 0010 0101 =>T1,定时,方式2;T0,计数,方式1
TH0=0;
TL0=0;
TH1=6;
TL1=6;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while(1)
{ m=num/1000;
w=num/100%10;
q=num/10%10;
b=num%10;
for (kk=80;kk>0;kk--)
{ display(m,w,q,b);
} }
}
void t1(void) interrupt 3
{ n++;
if(n==1843) //一秒时间到
{ n=0; //清零
EA=0; //关中断
num=((long)TH0*256+TL0)*2;//取计数值
TL0=0; //计数清零
TH0=0; //计数清零
EA=1; //重开
}
}
文章评论(0条评论)
登录后参与讨论