【蓝桥杯】NE555频率测量

【蓝桥杯】NE555频率测量
这玩意好像上的就可以开始工作,然后输出频率可变方波,可以调节Rb3电位器来改变频率,通过J3的SIGNAL引脚导出。
如何测量频率?
跳线帽连接SIGNAL和P34,即NE555的输出脚与定时器0的外部脉冲引脚连接。通过定时器0的计数功能来计数脉冲。然后使用定时器1进行定时计算频率
如何使用定时器的定时计数功能可以看这篇文章定时器定时与计数功能
关于数码管显示的代码可以从这里获取

代码

#include <STC15F2K60S2.H>
#include <smg.h>
unsigned long k;
unsigned char buf[9],duanma[8],i;
void Count0Init() //定时器0计数模式初始化,计数脉冲引脚P3.4
{
  // TMOD &= 0xF0;		//设置定时器模式
   TMOD |= 0x05;		//设置定时器模式//计数器模式工作方式1,TL0作为低八位,TH0作为高八位
   TL0 = 0;
   TH0 = 0;
   TF0 = 0;
   TR0 = 1;
  
}

void Timer1Init(void)		//1毫秒@11.0592MHz
{
	AUXR |= 0x40;		//定时器时钟1T模式
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xCD;		//设置定时初值
	TH1 = 0xD4;		//设置定时初值
	TF1 = 0;		//清除TF1标志
	TR1 = 1;		//定时器1开始计时
	 ET1 = 1;
     EA = 1;
}
void close()
{
  P2 = (P2&0X1F)|0X80;
  P0 = 0xff;
  P2 = (P2&0X1F)|0XA0;
  P0 = 0x00;
  P2 &= 0X1F;
}
void main()
{
   close();
   Timer1Init();
   Count0Init();
   
   while(1)
   {
      sprintf(buf,"%8ld",k);
	  Conversion(buf,duanma);
   }

}

void Timer1() interrupt 3
{
  static unsigned int n;
  if(++i==8){i=0;}display(&duanma,i);
  //每100ms更新一次频率
  if(++n==1000)
  {
      k=TH0*256+TL0;
	  TH0=0;TL0=0;
	  n=0;
  }
}

这里我有点疑惑,我电位器拧了大半,频率变化很小,到了最后部分才是大变化,希望有大哥指点迷津,是我代码错了??

上一篇:C语言---结构体、联合


下一篇:Tautology POJ - 3295