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;i<8;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;i<8;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;j<8;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;j<8;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;
?????? }
}
評論
查看更多