基于单片机的频率计的C语言源代码

时间:2012-08-21来源:网络

RCAP2L=(65536-47850)%256;
ET2=1; //开定时器2中断
EA=1; //开总中断
TR2=1;
}
void display()
{
uchar i;
fre=(T1count*65536+TH1*256+TL1); //频率计算
temp[0]=fre/10000000;
temp[1]=fre%10000000/1000000;
temp[2]=fre%10000000%1000000%1000000/100000;
temp[3]=fre%10000000%1000000%1000000%100000/10000;
temp[4]=fre%10000000%1000000%1000000%100000%10000/1000;
temp[5]=fre%10000000%1000000%1000000%100000%10000%1000/100;
temp[6]=fre%10000000%1000000%1000000%100000%10000%1000%100/10;
temp[7]=fre%10000000%1000000%1000000%100000%10000%1000%100%10;
if(fre=999)
{
write_com(0x80+4);
for(i=0;i8;i++)
{
write_dat(0x30+temp[i]); //保存要显示的数到显示缓冲区
}
write_dat('H');
write_dat('z');
write_dat(' ');
write_dat(' ');
}
else if(fre>=1000)
{
write_com(0x80+4);
for(i=0;i8;i++)
{
write_dat(0x30+temp[i]); //保存要显示的数到显示缓冲区
if(i==4)
{
write_dat('.');
}
}
write_dat('K');
write_dat('H');
write_dat('z');
}
T1count=0;
timecount=0;
TH1=0;
TL1=0;
TH0=0;
TL0=0; //定时器0重新装值,保证精确(不加的话只是最多差0.001s,0.1%)
}

void display1()
{
uchar j;
float zhou;
zhou=((T1count1*65536+TH0*256+TL0)*1.0549);
frx=(long)((zhou)*256);
temp1[0]=frx/10000000;
temp1[1]=frx%10000000/1000000;
temp1[2]=frx%10000000%1000000%1000000/100000;
temp1[3]=frx%10000000%1000000%1000000%100000/10000;
temp1[4]=frx%10000000%1000000%1000000%100000%10000/1000;
temp1[5]=frx%10000000%1000000%1000000%100000%10000%1000/100;
temp1[6]=frx%10000000%1000000%1000000%100000%10000%1000%100/10;
temp1[7]=frx%10000000%1000000%1000000%100000%10000%1000%100%10;
if(frx=999)
{
write_com(0x80+0x40+4);
for(j=0;j8;j++)
{
write_dat(0x30+temp1[j]); //保存要显示的数到显示缓冲区
}
write_dat('H');
write_dat('z');
write_dat(' ');
write_dat(' ');
}
else if(frx>=1000)
{ // frx=frx/1000;
write_com(0x80+0x40+4);
for(j=0;j8;j++)
{
write_dat(0x30+temp1[j]); //保存要显示的数到显示缓冲区
if(j==4)
{
write_dat('.');
}
}
write_dat('K');
write_dat('H');
write_dat('z');
}
}


void main(void)
{
init();
init1();
while(1)
{
rd=0;
ird=1;
if(flag==1) //标志位为1,表示进行完了一次1S记数
{
flag=0;
kb=0;
kx=1;
clr=0;
ird=0;
id=0;
display1();
display();
}
else
{
kb=1;
kx=0;
}


}
}
void t1(void) interrupt 3 // 记数器中断,加1
{
T1count++;
}

void t0(void) interrupt 1 // 记数器中断,加1
{
T1count1++;
}
void Timer2() interrupt 5 //调用定时器2,自动重装载模式
{
uchar i=0; //定义静态变量i
TF2=0; //定时器2的中断标志要软件清0
timecount++; //计数标志自加1
if(timecount==20) //判断是否到1s
{
timecount=0; //将静态变量清0
flag=1;
}
}

1 2

关键词: 源代码 语言 频率 单片机 基于

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版