1. 程式人生 > >51單片機實現頻率測量控制實驗

51單片機實現頻率測量控制實驗

code 控制 void pan 時鐘 計數器 方法 接收 外部

————————————————————————————————————————————

頻率測量方法:

  • 測頻法:測試限定時間內檢測脈沖的個數(1s)
  • 測周法:采樣N個脈沖所使用的時間

————————————————————————————————————————————

測頻法實驗:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

設計要求:

通過測頻法測出時鐘發生器的頻率並顯示在顯示屏上

技術分享

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

實現過程:

通過DCLOCK時鐘發生器產生時鐘頻率,如下圖所示,一秒鐘產生233個頻率

技術分享

T0接收時鐘發生器產生的脈沖,使用count變量計數,定時器T1完成1s後關閉中斷,並將此時的count顯示出來

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

元件清單:

  • AT89C51
  • 7SEG-MPX8-CC-BLUE
  • DCLOCK(在電壓探針列表中)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

實現代碼:

 1 #include <reg52.h>
 2 typedef unsigned int uint;
 3 typedef unsigned char uchar;
4 uchar code number[] = 5 { 6 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6, 0xEE, 0x3E, 0x9C, 0x7A, 0x9E, 0x8E 7 }; 8 uchar code address[] = 9 { 10 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F 11 }; 12 uint count = 0, time = 0, temp; //一定要用int類型,char類型只有8位,計數只到255 13 bit flag = 0; 14 void Delay(uchar m) 15 { 16 while(--m); 17 } 18 int main() 19 { 20 uchar i; 21 EA = 1; 22 ET0 = 1; 23 ET1 = 1; 24 TMOD = 0x16; //定時器1為方式1,計數器0為方式2,T0選擇C/T=1,計數器方式,脈沖由外部提供 25 TH0 = 0xff; 26 TL0 = 0xff; 27 TR0 = 1; 28 TH1 = (65536 - 50000) / 256; 29 TL1 = (65536 - 50000) % 256; 30 TR1 = 1; 31 while(1) 32 { 33 if (flag == 1) 34 { 35 temp = count; 36 for (i = 0; i < 8; ++i) 37 { 38 P2 = address[i]; 39 P1 = number[temp % 10]; 40 temp = temp / 10; 41 Delay(500); 42 } 43 } 44 } 45 } 46 void Count0()interrupt 1 47 { 48 ++count; 49 } 50 void Time1()interrupt 3 51 { 52 TH1 = (65536 - 50000) / 256; 53 TL1 = (65536 - 50000) % 256; 54 ++time; 55 if (time == 20) 56 { 57 EA = 0; 58 flag = 1; 59 } 60 }

技術分享

51單片機實現頻率測量控制實驗