|
我的思路就是t0計(jì)數(shù),t1計(jì)時(shí),然后在1602顯示,但是誤差很大,程序應(yīng)該出現(xiàn)問(wèn)題,可是我檢查不出來(lái),希望大家能幫我看看!! |
- #include<reg51.h>
- #define uchar unsigned char
- sbit RS = P1^0;
- sbit RW = P1^1;
- sbit EN = P1^2;
- int k = 0;
- int 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=0x3c;
- TL1=0xb0; //50MS
- count++;
- if(count>=20)
- {
- count=0;
- TR0=0; //到1秒T0停止計(jì)數(shù)
- TR1=0;
- f = k;
- k=0; //T1停止定時(shí)
- TH1=0x3c;
- TL1=0xb0;
- }
- }
- 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;
- TR1=1;
- TH1 = 0x3c; //T1定時(shí)初始值
- TL1 = 0xb0; //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(20000);
- write_com(0x02);
- }
復(fù)制代碼
360截圖20180721114431859.jpg (102.48 KB, 下載次數(shù): 28)
下載附件
2018-7-22 09:26 上傳
仿真我設(shè)置3kHz,結(jié)果他一直顯示30Hz、29Hz。到底怎么回事啊?
|
|