preloader image
51单片机 | 频率测量控制实现

51单片机 | 频率测量控制实现

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

频率测量方法:

测频法:测试限定时间内检测脉冲的个数(1s)

测周法:采样N个脉冲所使用的时间

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

测频法实验:

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

设计要求:

通过测频法测出时钟发生器的频率并显示在显示屏上

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

实现过程:

通过DCLOCK时钟发生器产生时钟频率,如下图所示,一秒钟产生233个频率

T0接收时钟发生器产生的脉冲,使用count变量计数,定时器T1完成1s后关闭中断,并将此时的count显示出来

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

元件清单:

AT89C51

7SEG-MPX8-CC-BLUE

DCLOCK(在电压探针列表中)

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

实现代码:

1 #include

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 }

Copyright © 2088 下一次世界杯_世界杯巴 - xbpifu.com All Rights Reserved.
友情链接