|
分享一個簡單的頻率計
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (27.46 KB, 下載次數(shù): 78)
下載附件
2017-5-30 01:27 上傳
0.png (67.15 KB, 下載次數(shù): 48)
下載附件
2017-5-30 01:27 上傳
單片機源程序如下:
- /******************************************************************
- AT89S51的T0,T1計數(shù)器對輸入的信號進行頻率計數(shù),測量結(jié)果用五位數(shù)碼管
- 動態(tài)顯示,要求對0~65KHZ的信號頻率進行準(zhǔn)確測量,誤差不超過5HZ
- *****************************************************************/
- #include <reg51.h>
- #define uint unsigned int
- #define A 3
- sbit P37=P3^7;
- unsigned char num=0;
- code unsigned char TAB[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
- /*顯示變量對應(yīng)的數(shù)值*/
- /***************定時器0中斷服務(wù)函數(shù)************************/
- void timer0()interrupt 1{
- TH0=0x3C;
- TL0=0xB0;//定時50ms
- num++;//記到20就直接停止
-
- }
- /**************************延時函數(shù)************************************/
- void delay(unsigned char t){
- unsigned char i,j;
- for(i=0;i<t;i++)
- for(j=0;j<125;j++);
- }
- /*************************顯示函數(shù)**************************************/
- void Display(){
- uint number;
- unsigned char B1,B2,B3,B4,B5;//定義數(shù)的各個位,萬,千,百,十,個位
- number=TH1*256+TL1;
- B1=number/10000;//萬位
- B2=number%10000/1000;//千位
- B3=number%1000/100;//百位
- B4=number%100/10;//十位
- B5=number%10;//個位
- while(1){
- if(P37==1) break;
- P2=0xFE;//顯示個位
- P0=TAB[B5];
- delay(A);
- P2=0xFD;//顯示十位
- P0=TAB[B4];
- delay(A);
- P2=0xFB;//顯示百位
- P0=TAB[B3];
- delay(A);
- P2=0xF7;//顯示千位
- P0=TAB[B2];
- delay(A);
- P2=0xEF;//顯示萬位
- P0=TAB[B1];
- delay(A);
- }
- }
- void main(){
- P0=TAB[0];//剛開始顯示00000
- P2=0xC0;
- TMOD=0x51;//T0 記時 T1計數(shù)
- TH0=0x3c;//定時50ms
- TL0=0xB0;
- TH1=0x00;//計數(shù)
- TL1=0x00;
- TR0=1; //開T0
- TR1=1;//開T1
- ET0=1;//開中斷
- EA=1;//打開總中斷
- while(1){
- if(num>=20){//記滿一秒
- num=0;
- TR1=0;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
數(shù)字頻率計c.rar
(20.4 KB, 下載次數(shù): 64)
2017-5-29 16:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|