該程序能實(shí)現(xiàn)測量10至3MHZ的TTL信號頻率,液晶顯示4為有效數(shù)字,同時(shí)能夠測量脈沖占空比,精度在0.5%左右...
需要硬件支持:C8051F360單片機(jī),鍵盤,液晶顯示器
下面這個(gè)是主程序
還有下面這幾個(gè)文件限于篇幅不能一一貼上來大家可以去下載:
1.液晶初始及鍵盤等
2.初始化及中斷
3.ASCII液晶輸出函數(shù)
這個(gè)幾個(gè)文件請從這里下載
http://www.zg4o1577.cn/ziliao/file/pinglvji1.rar
main() { int xdata flag1=0; float sum1=0,sum2=0; float xdata sum3[10]; int i; Init_device(); LCD_REST(); LCD_INIT(); f=0; f1=0; while(1) { if(flag) { if(f>=10&&f<=99) 額,不得不說,取11個(gè)數(shù)求平均值確實(shí)不好,讀數(shù)不能穩(wěn)定的說.... { sum2=(jishu[0]+jishu[1]+jishu[2]+jishu[3]+jishu[4]+jishu[5]+jishu[6]+jishu[7]+jishu[8]+jishu[9]+jishu[10])/11; get_flow(sum2); LCD_HZ(0x80,TAB_WORD); LCD_HZ(0x90,F_DISPLOW); flag=0; } else if(f>=100&&f<= 999) { get_flowhigh(); LCD_HZ(0x80,TAB_WORD); LCD_HZ(0x90,F_DISPLOWHIGH); flag=0; } else if (f>=1000&&f<=9999) { get_high(); LCD_HZ(0x80,TAB_WORD); LCD_HZ(0x90,F_DISPHIGH); flag=0; } else if(f>=10000&&f<=99999) { get_highone(); LCD_HZ(0x80,TAB_WORD); LCD_HZ(0x90,F_DISPHIGHONE); flag=0; } else if(f>=100000&&f<=999999) { get_highone(); LCD_HZ(0x80,TAB_WORD); LCD_HZ(0x90,F_DISPHIGHONE); 內(nèi)部數(shù)據(jù)存儲器只有128位,為節(jié)約空間與上個(gè)數(shù)組存在同一空間 (內(nèi)部數(shù)據(jù)存儲器空間用完的說...) flag=0; } else { get_highthree(); LCD_HZ(0x80,TAB_WORD); LCD_HZ(0x90,F_DISPHIGHTHREE); flag=0; } } if((key_num&0xf0)==0) { TR0=0; ET1=1; TMOD=0x10; TCON=0x40; for(i=0;i< 10;i++) { while(CHUFA==0); TH1=0; TL1=0; f1=0; TR0=0; while(CHUFA==1); while(CHUFA==0); TR1=1; while(CHUFA==1); TR1=0; m=f1*65536+256*TH1+TL1; while(CHUFA==0); TH1=0; TL1=0; f1=0; TR1=0; while(CHUFA==1); TR1=1; while(CHUFA==0); TR1=0; f=f1*65536+256*TH1+TL1; key_num=0xf0; sum1=m; sum2=m+f; sum1=sum1/sum2; sum3[i]=sum1; } sum2=0; for(i=0;i< 10;i++) { sum2=sum2+sum3[i]; } sum2=sum2/10; if(sum2>=0.1&&sum2<=0.40) { sum2=sum2-0.07; } else if(sum2>0.40&&sum2<=0.44) { sum2=sum2-0.04; } 占空比程序設(shè)計(jì),本想用個(gè)中斷來著,試驗(yàn)不成功簡單的算了 由于每次運(yùn)行指令要耗費(fèi)時(shí)間,精度不高,故加個(gè)實(shí)測校準(zhǔn)程序 O(∩_∩)O哈哈~測評時(shí)能達(dá)到0.5%的精度,踩狗屎運(yùn)了... else if(sum2>0.44&&sum2<=0.55) { sum2=sum2-0.02; } else if(sum2>0.55&&sum2<=0.63) { sum2=sum2+0.03; } else sum2=sum2+0.07; get_f(sum2); LCD_HZ(0x88,TAB_WORD1); LCD_HZ(0x98,F_DISP); flag1=1; } if(flag1==1) 讓程序能范圍繼續(xù)測量頻率 { TMOD=0x51; CKCON=0; TCON=0x50; flag1=0; } } }