加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入

基于51單片機(jī)的數(shù)字頻率計(jì)設(shè)計(jì)

09/26 09:51
1005
服務(wù)支持:
技術(shù)交流群

完成交易后在“購(gòu)買成功”頁(yè)面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長(zhǎng)和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購(gòu)買后不支持退換且無(wú)法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)數(shù)字頻率計(jì)設(shè)計(jì)

#define LED_GLOBAL 1

#include "led.h"

/*******************************************************************************************

*函數(shù)名稱:delay_us(uint us)

*函數(shù)功能:實(shí)現(xiàn)微秒級(jí)的延時(shí)

*函數(shù)入口:us,延時(shí)函數(shù)循環(huán)后期數(shù)

*函數(shù)出口:無(wú)

*******************************************************************************************/

void delay_us(uint us)

{

uint i;

while(us--)

{

for(i=0;i<100;i++);

}

}

/*******************************************************************************************

*函數(shù)名稱:led_init(void)

*函數(shù)功能:四位七段數(shù)碼管顯示初始化

*函數(shù)入口:無(wú)

*函數(shù)出口:無(wú)

*******************************************************************************************/

void init_led(void)

{

LED=segLedCode[0];

LED_CS1=0;

LED_CS2=0;

LED_CS3=0;

LED_CS4=0;

}

/*******************************************************************************************

*函數(shù)名稱:ledWrite(uchar c,uchar n,uchar mod)

*函數(shù)功能:對(duì)一組數(shù)碼管的某一位進(jìn)行短暫顯示

*函數(shù)入口:c,要顯示的數(shù)據(jù);n,顯示一組數(shù)碼管中的第n位;mod,c的數(shù)據(jù)形式

*函數(shù)出口:無(wú)

*說(shuō)明:當(dāng)mod==DIGITAL時(shí),c為數(shù)字0~9的ANCII碼形式,此時(shí)在n位數(shù)碼管上顯示想用數(shù)字

當(dāng)mod==CHARACTER,直接將c輸出數(shù)據(jù)口

*******************************************************************************************/

void ledWrite(uchar c,uchar n,uchar mod)

{

if(CHARACTER==mod)

{

LED=c;

}

else if(DIGITAL==mod)

{

if((c-'0')<0x0a)

{

LED=segLedCode[c-'0'];

}

else

{

LED=segLedCode[0];

}

/*******************************************************************************************

*函數(shù)名稱:ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber)

*函數(shù)功能:循環(huán)在數(shù)碼管上顯示緩沖區(qū)中的數(shù)據(jù)

*函數(shù)入口:segCode,指向顯示緩沖區(qū)中的指針;segCodeMod,0~7位為1或0標(biāo)示1~8位數(shù)碼管顯示的數(shù)據(jù)的類型(DIGITAL或者CHARACTER);segNumber,代表要顯示數(shù)碼管的位數(shù)

*函數(shù)出口:無(wú)

*說(shuō)明:本函數(shù)主要實(shí)現(xiàn)將顯示緩沖區(qū)中的數(shù)據(jù)在數(shù)碼管上顯示出來(lái)

*******************************************************************************************/

void ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber)

{

uchar segCount;

for(segCount=0;segCount<segNumber;segCount++)

{

if(segCodeMod&0x01)???? ?? /*1代表此處顯示任意字符 */

{

ledWrite(segCode[segCount],segCount+1,CHARACTER);

}

else

{

ledWrite(segCode[segCount],segCount+1,DIGITAL);

}

segCodeMod=segCodeMod>>1;

}

}

#define TARGET_GLOBAL 1

#include "target.h"

uint? timer0Count;?????? //timer0溢出計(jì)數(shù)

uint? pulseCount;??????? //脈沖計(jì)數(shù)

uint? pulseCountTemp;??? //脈沖計(jì)數(shù)寄存

/*************************************************

*函數(shù)名稱:timer0_init(void)

*函數(shù)功能:timer0初始化

*函數(shù)入口:無(wú)

*函數(shù)出口:無(wú)

*說(shuō)明:本系統(tǒng)用12Mhz晶振,定時(shí)1ms

*************************************************/

void timer0_init(void)

{

TMOD|=0x01;?? //timer0工作在MODEL1,timer

TH0=0xFC;

TL0=0x18;

ET0=1;??????? //timer0中斷使能

IP=0x02;????? //timer0優(yōu)先級(jí)最高

TR0=1;????????????????? //timer0啟動(dòng)

}

/*************************************************

*函數(shù)名稱:int0_init(void)

*函數(shù)功能:外部中斷0初始化

*函數(shù)入口:無(wú)

*函數(shù)出口:無(wú)

*************************************************/

pulseCountTemp=pulseCount-pulseCount/(uint)36;??? //頻率計(jì)數(shù)校準(zhǔn)

pulseCount=0;

timer0Count=0;

}

sei();

}

void int0(void) interrupt 0????? //int0中斷入口函數(shù),實(shí)時(shí)計(jì)數(shù)檢測(cè)頻率

{

pulseCount++;

}

/*********************************************

*函數(shù)名稱:uint get_fre_number(void)

*函數(shù)功能:計(jì)算頻率,1~1000HZ

*********************************************/

uint get_fre_number(void)

{

return pulseCountTemp;

}

/*************************************************************************

*實(shí)例名稱:頻率計(jì)

*實(shí)例說(shuō)明:實(shí)現(xiàn)0~9000hz頻率計(jì)的統(tǒng)計(jì)

*************************************************************************/

#include "target.h"

#include "led.h"

uchar displayBuff[4]={'0','0','0','0'}; //數(shù)碼管顯示緩沖區(qū),千,百,十,個(gè)

const uchar displayMode=0x00;?????????? //后四位分別對(duì)應(yīng)緩沖區(qū)中每位的數(shù)據(jù)類型,1為任意字符顯示,0為數(shù)字顯示

void main()

{

uint get_fre;

target_init();

init_led();

sei();

while(1)

{

get_fre=get_fre_number();

if(get_fre/1000<0x0A)

{

displayBuff[0]=get_fre/1000+'0';??????????? //計(jì)算頻率千位,放在緩沖區(qū)第0位

}

displayBuff[1]=(get_fre/100)%10+'0';????????? //計(jì)算頻率百位,放在緩沖區(qū)第1位

displayBuff[2]=(get_fre%100)/10+'0';????????? //計(jì)算頻率十位,放在緩沖區(qū)第2位

displayBuff[3]=get_fre%10+'0';???????????? ????????? //計(jì)算頻率個(gè)位,放在緩沖區(qū)第3位

ledSweepDisplay(displayBuff,displayMode,0x04);//循環(huán)顯示數(shù)碼管緩沖區(qū)中數(shù)據(jù)

}

 

  • 有需要資料的可了解一下.docx

相關(guān)推薦

電子產(chǎn)業(yè)圖譜