日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]之前由于同學(xué)的一個(gè)小實(shí)驗(yàn),需要用到頻率計(jì),所以自己想搞一個(gè)出來(lái),于是網(wǎng)上找了很多資料,簡(jiǎn)單的有用8052單片機(jī)的定時(shí)器和計(jì)數(shù)器的結(jié)合來(lái)測(cè)其信號(hào)的頻率,還有的是c8051f的捕捉功能,想來(lái)想去,還是想用用自己熟悉

之前由于同學(xué)的一個(gè)小實(shí)驗(yàn),需要用到頻率計(jì),所以自己想搞一個(gè)出來(lái),于是網(wǎng)上找了很多資料,簡(jiǎn)單的有用8052單片機(jī)的定時(shí)器和計(jì)數(shù)器的結(jié)合來(lái)測(cè)其信號(hào)的頻率,還有的是c8051f的捕捉功能,想來(lái)想去,還是想用用自己熟悉的8052的計(jì)數(shù)器功能,畢竟平時(shí)都用的是定時(shí)器功能,很少用到計(jì)數(shù)器功能,以便更加深入的運(yùn)用8052,以后再學(xué)習(xí)C8051F。

搞了好幾天,時(shí)鐘沒有結(jié)果,計(jì)數(shù)功能倒是有了,但是不能在1s的時(shí)間里計(jì)數(shù),很是頭痛,忽然有一天,我的同學(xué)找到了一段代碼,說(shuō)是可以運(yùn)行的,于是我拿過(guò)來(lái),把LED改了一改,燒錄之后,還真的成功了!甚是大喜??!這里附上源代碼;


/*******http://hi.baidu.com/zhangjiayue123/home************************************

函數(shù)功能:51單片機(jī)制作的頻率計(jì)(當(dāng)然這個(gè)頻率計(jì)的頻率范圍是有限制的理論值為2Hz-1MHz)

編譯環(huán)境:keil4


設(shè)計(jì)思想:測(cè)頻率,其實(shí)就是一個(gè)定時(shí)計(jì)數(shù)的過(guò)程,在一定時(shí)間內(nèi),檢測(cè)脈沖的個(gè)數(shù),最后用脈沖個(gè)數(shù)除以時(shí)間便可以得到頻率

修改:LiMingWangQiDong

板子:CCDZ-Cboard

CPU:STC89C52RC

晶振:12MHz

修改部分:LED顯示部分4位顯示2Hz-9999Hz

版本:0.1.0

********http://hi.baidu.com/zhangjiayue123/home****************************************/

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitdula=P2^6;

sbitwela=P2^7;

//ucharseg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數(shù)碼管的段選

ucharseg_du[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數(shù)碼管的段選

uchardbuf[4]={0,0,0,0};//用來(lái)裝顯示數(shù)據(jù)的空數(shù)組

uintcount;

uintcou,cou1;

voiddelay(void)//延時(shí)函數(shù)用于數(shù)碼管動(dòng)態(tài)掃描

{

uchari;

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

;

}

voiddisplay()//數(shù)碼管顯示函數(shù)

{

dula=1;

P0=seg_du[dbuf[3]];

dula=0;

P0=0xff;

wela=1;

P0=0xfe;

wela=0;

delay();

//

dula=1;

P0=seg_du[dbuf[2]];

dula=0;

P0=0xff;

wela=1;

P0=0xfd;

wela=0;

delay();

//

dula=1;

P0=seg_du[dbuf[1]];

dula=0;

P0=0xff;

wela=1;

P0=0xfb;

wela=0;

delay();

//

dula=1;

P0=seg_du[dbuf[0]];

dula=0;

P0=0xff;

wela=1;

P0=0xf7;

wela=0;

delay();

}

voidtimer0(void)interrupt1//定時(shí)器中斷,用與定時(shí)計(jì)數(shù)

{

count++;

if(count==4000)//定時(shí)1s,

{

count=0;//將定時(shí)標(biāo)志清零

TR1=0;//關(guān)閉計(jì)數(shù)器

cou1=TL1-6;//將小于250次脈沖的計(jì)數(shù)加上

dbuf[3]=(cou*250+cou1)/1000;

dbuf[2]=((cou*250+cou1)%1000)/100;

dbuf[1]=((cou*250+cou1)%100)/10;

dbuf[0]=(cou*250+cou1)%10;//顯示處理函數(shù)

cou=0;//計(jì)數(shù)器清零

TL1=6;//打開計(jì)數(shù)器中斷

TR1=1;//開啟計(jì)數(shù)器,使之工作

}

}

voidtime1(void)interrupt3//計(jì)數(shù)器中斷,用于計(jì)數(shù)

{

cou++;

}

voidtime0_init()//定時(shí)器0初始化

{

TMOD=0x62;//設(shè)置定時(shí)器0,和計(jì)數(shù)器1的模式

TH0=6;

TL0=6;//定時(shí)器的初值,用于中斷一次計(jì)時(shí)250us

ET0=1;//開定時(shí)器0中斷

TR0=1;//開定時(shí)器0

}

voidtime1_init()//計(jì)數(shù)器1初始化

{

TH1=6;

TL1=6;//裝載計(jì)數(shù)器的初值

ET1=1;//開計(jì)數(shù)器1中斷

TR1=1;//開計(jì)數(shù)器1

EA=1;//開總中斷

}

voidmain()

{

count=0;

time0_init();

time1_init();

while(1)

{

display();

}

}

也感謝網(wǎng)上的網(wǎng)友提供,
結(jié)果還是可以的,只不過(guò)和自由四位顯示,附上幾張照片:


信號(hào)發(fā)生器的頻率為5.677kHZ,LED上顯示還可以吧。。。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉