基于單片機的頻率計的C語言源代碼
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]); //保存要顯示的數(shù)到顯示緩沖區(qū)
}
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]); //保存要顯示的數(shù)到顯示緩沖區(qū)
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]); //保存要顯示的數(shù)到顯示緩沖區(qū)
}
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]); //保存要顯示的數(shù)到顯示緩沖區(qū)
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記數(shù)
{
flag=0;
kb=0;
kx=1;
clr=0;
ird=0;
id=0;
display1();
display();
}
else
{
kb=1;
kx=0;
}
}
}
void t1(void) interrupt 3 // 記數(shù)器中斷,加1
{
T1count++;
}
void t0(void) interrupt 1 // 記數(shù)器中斷,加1
{
T1count1++;
}
void Timer2() interrupt 5 //調(diào)用定時器2,自動重裝載模式
{
uchar i=0; //定義靜態(tài)變量i
TF2=0; //定時器2的中斷標志要軟件清0
timecount++; //計數(shù)標志自加1
if(timecount==20) //判斷是否到1s
{
timecount=0; //將靜態(tài)變量清0
flag=1;
}
}
本文引用地址:http://www.ex-cimer.com/article/171002.htm
評論