6位數顯頻率計數器,Digital frequency meter
關鍵字:頻率計,計數器,頻率計制作,頻率計電路,計數器電路,89S51
1.實驗任務
利用AT89S51單片機的T0、T1的定時計數器功能,來完成對輸入的信號進行頻率計數,計數的頻率結果通過8位動態數碼管顯示出來。要求能夠對0-250KHZ的信號頻率進行準確計數,計數誤差不超過±1HZ。
2.電路原理圖
利用AT89S51單片機的T0、T1的定時計數器功能,來完成對輸入的信號進行頻率計數,計數的頻率結果通過8位動態數碼管顯示出來。要求能夠對0-250KHZ的信號頻率進行準確計數,計數誤差不超過±1HZ。
2.電路原理圖
3.系統板上硬件連線
(1).把“單片機系統”區域中的P0.0-P0.7與“動態數碼顯示”區域中的ABCDEFGH端口用8芯排線連接。
(2).把“單片機系統”區域中的P2.0-P2.7與“動態數碼顯示”區域中的S1S2S3S4S5S6S7S8端口用8芯排線連接。
(3).把“單片機系統”區域中的P3.4(T0)端子用導線連接到“頻率產生器”區域中的WAVE端子上。
4.程序設計內容
(1).定時/計數器T0和T1的工作方式設置,由圖可知,T0是工作在計數狀態下,對輸入的頻率信號進行計數,但對工作在計數狀態下的T0,最大計數值為fOSC/24,由于fOSC=12MHz,因此:T0的最大計數頻率為250KHz。對于頻率的概念就是在一秒只數脈沖的個數,即為頻率值。所以T1工作在定時狀態下,每定時1秒中到,就停止T0的計數,而從T0的計數單元中讀取計數的數值,然后進行數據處理。送到數碼管顯示出來。
(2).T1工作在定時狀態下,最大定時時間為65ms,達不到1秒的定時,所以采用定時50ms,共定時20次,即可完成1秒的定時功能。
5.C語言源程序
#include
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsigned char dispbuf[8]={0,0,0,0,0,0,10,10};
unsigned char temp[8];
unsigned char dispcount;
unsigned char T0count;
unsigned char timecount;
bit flag;
unsigned long x;
void main(void)
{
unsigned char i;
TMOD=0x15;
TH0=0;
TL0=0;
TH1=(65536-4000)/256;
TL1=(65536-4000)%6;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while(1)
{
if(flag==1)
{
flag=0;
x=T0count*65536+TH0*256+TL0;
for(i=0;i<8;i++)
{
temp[i]=0;
}
i=0;
while(x/10)
{
temp[i]=x;
x=x/10;
i++;
}
temp[i]=x;
for(i=0;i<6;i++)
{
dispbuf[i]=temp[i];
}
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1;
}
}
}
void t0(void) interrupt 1 using 0
{
T0count++;
}
void t1(void) interrupt 3 using 0
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%6;
timecount++;
if(timecount==250)
{
TR0=0;
timecount=0;
flag=1;
}
P0=dispcode[dispbuf[dispcount]];
P2=dispbit[dispcount];
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}
(1).把“單片機系統”區域中的P0.0-P0.7與“動態數碼顯示”區域中的ABCDEFGH端口用8芯排線連接。
(2).把“單片機系統”區域中的P2.0-P2.7與“動態數碼顯示”區域中的S1S2S3S4S5S6S7S8端口用8芯排線連接。
(3).把“單片機系統”區域中的P3.4(T0)端子用導線連接到“頻率產生器”區域中的WAVE端子上。
4.程序設計內容
(1).定時/計數器T0和T1的工作方式設置,由圖可知,T0是工作在計數狀態下,對輸入的頻率信號進行計數,但對工作在計數狀態下的T0,最大計數值為fOSC/24,由于fOSC=12MHz,因此:T0的最大計數頻率為250KHz。對于頻率的概念就是在一秒只數脈沖的個數,即為頻率值。所以T1工作在定時狀態下,每定時1秒中到,就停止T0的計數,而從T0的計數單元中讀取計數的數值,然后進行數據處理。送到數碼管顯示出來。
(2).T1工作在定時狀態下,最大定時時間為65ms,達不到1秒的定時,所以采用定時50ms,共定時20次,即可完成1秒的定時功能。
5.C語言源程序
#include
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsigned char dispbuf[8]={0,0,0,0,0,0,10,10};
unsigned char temp[8];
unsigned char dispcount;
unsigned char T0count;
unsigned char timecount;
bit flag;
unsigned long x;
void main(void)
{
unsigned char i;
TMOD=0x15;
TH0=0;
TL0=0;
TH1=(65536-4000)/256;
TL1=(65536-4000)%6;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while(1)
{
if(flag==1)
{
flag=0;
x=T0count*65536+TH0*256+TL0;
for(i=0;i<8;i++)
{
temp[i]=0;
}
i=0;
while(x/10)
{
temp[i]=x;
x=x/10;
i++;
}
temp[i]=x;
for(i=0;i<6;i++)
{
dispbuf[i]=temp[i];
}
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1;
}
}
}
void t0(void) interrupt 1 using 0
{
T0count++;
}
void t1(void) interrupt 3 using 0
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%6;
timecount++;
if(timecount==250)
{
TR0=0;
timecount=0;
flag=1;
}
P0=dispcode[dispbuf[dispcount]];
P2=dispbit[dispcount];
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
發布評論請先 登錄
相關推薦
AGILENT 53230A通用頻率計6 GHz技術指標
Agilent53230A通用頻率計數器/計時器可滿足所有的頻率和時間間隔測量需求。除了典型的頻率和時間間隔測量,它還可執行連續/無間隙測量,以進行基本調制域分析。53230A配有可選
是德KEYSIGHT53200A 系列射頻/通用頻率計數器/定時器
是德KEYSIGHT53200A系列射頻/通用頻率計數器/定時器 53200A頻率計數器能在研發和制造中進行快速、精確頻率和時間間隔測量。 是德53200系列射頻和通用
頻率計數器的技術原理和應用場景
頻率計數器,又稱頻率計,是一種專門用于測量信號頻率的電子測量儀器。以下是對其技術原理和應用場景的詳細分析:一、技術原理頻率計數器的技術原理基于周期計
發表于 10-18 14:03
計數器的特點和參數
計數器作為一種常用的電子元件,在電子設備和系統中扮演著至關重要的角色。它們不僅用于存儲和增減數字值,還廣泛應用于時序和頻率測量、事件計數、控制步進電機和伺服系統、錯誤檢測和糾正以及計算機數據存儲和操作等領域。以下將詳細闡述
10 MHz OCXO,帶40 MHz頻率計數器
這個想法并不是我所有的硬件項目都有案例。幾年前我買了一個,現在我記不清它的意圖了。但去年我決定在這個案例中安裝OCX0和頻率計數器。我使用OCXO振蕩器有兩個原因:在我測試NTP的過程中,它是一個
頻率計數器的工作原理是什么
頻率計數器是一種電子測量儀器,用于測量信號的頻率,即單位時間內的周期數。它廣泛應用于科學、工程、通信和醫療等領域,用于測試和校準電子設備。
二進制串行計數器工作原理是什么?
的工作原理進行深入解析,幫助你更好地理解這一數字電路的核心組件。 一、二進制串行計數器的基本概念 二進制串行計數器是一種基于二進制數制的計數器,它按照二進制數的規律進行
同步計數器和異步計數器的區別
在數字電子領域中,計數器是一種用于統計脈沖信號數量的重要設備。其中,同步計數器和異步計數器是兩種不同類型的計數器,它們在工作原理、特性以及應用場景等方面存在著顯著的區別。本文將詳細探討
簡單認識脈沖計數器
在數字電路和電子測量領域中,脈沖計數器作為一種基本而重要的工具,其應用十分廣泛。脈沖計數器,也被稱為脈沖頻率計或脈沖數計,主要用于統計和測量輸入脈沖信號的
頻率計有哪些作用
頻率計又稱為頻率計數器,是一種專門對被測信號頻率進行測量的電子測量儀器。其主要由四個部分構成:時基(T)電路、輸入電路、計數顯示電路以及控制電路。又稱為
基于51單片機的智能頻率計畢設,C代碼,仿真,原理圖,論文
頻率計仿真設計滿足量程、誤差等要求。
C代碼
//-------------------定時/計數器初始化--------------
void timer_init(void)//定時/計數器初始化
發表于 03-18 12:57
計數器怎么判斷同步和異步 計數器異步和同步的區別
應用中的各自優勢和限制。 一、計數器概述 計數器是一個數值型的變量,它能夠用于存儲和追蹤特定事件的發生次數。在計算機系統中,計數器起到非常重要的作用,例如統計程序執行的指令數、計算循環
同步置數法和異步清零法的優缺點 異步計數器的級聯方法總結
同步置數法和異步清零法是數字電路設計中常用的兩種計數器設計方法。 一、同步置數法: 同步計數器是一種利用觸發器來實現
評論