熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2018-7-21 11:45
正文摘要:我的思路就是t0計(jì)數(shù),t1計(jì)時(shí),然后在1602顯示,但是誤差很大,程序應(yīng)該出現(xiàn)問(wèn)題,可是我檢查不出來(lái),希望大家能幫我看看!! |
大家一起來(lái)看看,交流一下,獲取經(jīng)驗(yàn) |
希望大家能幫我看看 |
zl2168 發(fā)表于 2018-7-22 10:35 您可以先看看我哪里出問(wèn)題了嗎,謝謝 |
實(shí)例73 測(cè)量脈沖頻率 先Proteus仿真一下,確認(rèn)有效 ![]() ![]() 以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil C和Proteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,電路與程序真實(shí)可靠可信可行,可演示,可觀測(cè),程序語(yǔ)句條條有注解。 |
頂一下 |
詳細(xì)代碼: #include<reg51.h> #define uchar unsigned char sbit RS = P1^0; sbit RW = P1^1; sbit EN = P1^2; uchar k = 0, f; uchar count; uchar tab_freq[]={0,0,0,0,0,0,0}; //頻率數(shù)組 void delay(int x){ //延時(shí) int i; for(i=x;i>0;i--); } void write_com(char com){ //寫(xiě)指令 P0=com; RS=0;RW=0;EN=1; delay(200); EN=0; } void write_dat(char dat){ //寫(xiě)數(shù)據(jù) P0=dat; RS=1;RW=0;EN=1; delay(200); EN=0; } void lcd_init(){ //初始化 write_com(0x01); write_com(0x38); write_com(0x0f); write_com(0x06); } void int_count0() interrupt 1{ //T0計(jì)數(shù) k++; } void int_time1() interrupt 3{ //T1定時(shí)中斷函數(shù)開(kāi)始{ TH1=0x4c; TL1=0x00; //50MS count++; if(count>=20) { count=0; TR0=0; //到1秒T0停止計(jì)數(shù) TR1=0; f = k; k=0; //T1停止定時(shí) } } void trans_count() //計(jì)算出一秒鐘收到的脈沖數(shù)量 { unsigned long int z; int i; z = f * 65536 + TH0 * 256 + TL0; if(z>9999999) //最大量程為999999 {z=9999999;} for(i = 6; i >= 0; i--) { tab_freq[i]=z%10+'0'; z /= 10; } } void main(){ uchar i; TMOD = 0x15; //T0為計(jì)數(shù)模式:方式1 T1為定時(shí)模式:方式1 TH0 = 0; //T0計(jì)數(shù)初始值 TL0 = 0; TR0=1; TH1 = 0x4c; //T1定時(shí)初始值 TL1 = 0x00; //50MS EA = 1; ET1 = 1; //允許T1定時(shí)中斷 ET0 = 1; //允許T0計(jì)數(shù)中斷 lcd_init(); trans_count(); for(i=0;i<7;i++) { write_dat(tab_freq[i]); //顯示頻率值 } write_dat('H'); write_dat('z'); //顯示Hz delay(2000); write_com(0x02); while(1); } |
Powered by 單片機(jī)教程網(wǎng)