蓝桥杯单片机之NE555频率发生计的使用
NE555原理图及基本原理分析
NE555时基芯片的频率输出引脚为NET_SIG,连接着外部排针J3的SIGNAL引脚。Rb3可以调节频率输出的大小。
基本控制
NE555的频率输出不能通过51芯片直接控制,是由硬件的电位器进行调节。为了能够知道555输出的频率具体是多少,需要我们控制51芯片对555输出的信号进行测量并显示。所以对NE555芯片的使用就是利用定时器计数模式对方波信号进行测量。
在在CT107D单片机综合实训平台上,用短路环将J13中的SIGNAL与P34短接,NE555发生的信号输入到单片机的P34引脚。
设计思路
利用定时器1用方式1,定时;定时器0用方式2,计数(一个脉冲记一次)。设定定时器每50ms中断一次,中断20次统计定时器0的计数值,得到的计数值就是相应的频率。
代码
#include "reg52.h"
unsigned char SMG_NoDot[19] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f,0xff}; //0-9、A-F、'-'、'.'
unsigned int count_f = 0;
unsigned char count_t = 0;
unsigned int dat_f = 0;
void Delay500us() //@12.000MHz
{
unsigned char i, j;
i = 6;
j = 211;
do
{
while (--j);
} while (--i);
}
void Digital_Tube(unsigned char Position,unsigned char Typeface) //Position是数码管第几位(从左到右,0开始),Typeface是显示的字样
{
unsigned char Bit[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
P2 = P2 & 0x1f | 0xc0;
P0=Bit[Position];
P2 = P2 & 0x1f | 0xe0;
P0=SMG_NoDot[Typeface];
Delay500us();
P0=0XFF;
P2 = P2 & 0x1f ; //数码管消影
}
void Display_right(long int number)
{
long int i,a,b;
for(i=0;i<8;i++)
{
a=number%10;
Digital_Tube(7-i,a);
b=number/10;
if(b==0) break;
number=b;
}
}
void Init_Timer()
{
TH0 = 0xff;
TL0 = 0xff;
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;
TMOD = 0x16; //定时器1用方式1,定时;定时器0用方式2,计数
ET0 = 1;
ET1 = 1;
EA = 1;
TR0 = 1;
TR1 = 1;
}
void Service_T0() interrupt 1
{
count_f++;
}
66
void Service_T1() interrupt 3
{
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;
count_t++;
if(count_t == 20)
{
dat_f = count_f;
count_f = 0;
count_t = 0;
}
}
void main()
{
Init_Timer();
while(1)
{
Display_right(dat_f);
}
}