给你一个。用89C51单片机制作了一个频率计
- /****************************************************
- 名称:频率计,用8位数码管显示
- 说明:用计数器1对外部频率信号进行计数,用定时器0每隔
- 一秒查询计数器1的累计值,就是信号频率。
- 89c52 主频11.0592M 在开发板上测试通过
- ****************************************************/
- #include <REGX52.H>
- #include "SMG.h"
- unsigned long num; // 储存计算频率值
- unsigned char T1_count; //计数器1计满65536的次数
- void init()
- {
- TMOD = 0x51;// 0101 0001
- TH0 = 0x4c;// 初值=65536 - 11.0592/12*50000;定时50ms
- TL0 = 0x00;
- PT0 = 1;
- EA = ET1 = ET0 =1;
- TR0 = TR1 = 1;
- TI = 1;
- }
- void main()
- {
- init();
- while(1)
- {
- smgxs8w(num); //数码管显示8位数
- }
- }
- void T1_int() interrupt 3 //计数65536次触发一次
- {
- T1_count++;
- }
- void T0_int() interrupt 1 //50ms触发一次
- {
- static unsigned char T0_count;
- TR1 = 0;
- TH0 = 0x4c;//定时50ms
- TL0 = 0x13; //理论值0x00,实测0x13最准
- if(++T0_count == 20) //达到1秒
- {
- num = T1_count *65536 + TH1*256+TL1;
- TH1 = TL1 = 0;
- T1_count = 0;
- T0_count = 0;
- }
- TR1 = 1;
- }
复制代码
|