蓝桥杯学习笔记五、NE555定时器

5.1NE555定时器介绍

NE555是一款极受欢迎的定时/振荡器集成电路,其设计日期可追溯到1970年,尽管技术正在日新月异的发展,其重要性和应用性仍然没有被削弱。NE555包含了许多系统需要的功能诸如比较器、触发器、反相器和输出驱动等等,其主要功能有定时、脉冲生成和振荡器。

其特点有:

1、高度灵活:NE555集成电路因其设计而具有很高的灵活性,可以在多种模式下工作,包括单稳态(用作定时器或延时器)、双稳态(用作翻转触发器)和稳定模式(用作振荡器)。

2、宽电源电压范围:NE555可以工作在4.5至16V的电源电压范围内,且其性能在这个范围内保持稳定。

3、高输出电流能力:NE555的输出电流最大可达到200mA,可以直接驱动许多外围设备和负载。

4、具有重置功能:NE555具有一位复位引脚,它可以用来重置计时器的定时操作。

5、精度高:NE555在其有效电源电压范围内,其计时精度可以达到极高的程度。

6、设计简单:NE555只需要少量的外围元器件,如少数几个电阻和电容,就可以实现多种功能,使得设计电路变得非常简单。

7.成本低:由于其极简的设计和广泛的应用,NE555可以大规模生产,使其成本非常低,能被广泛应用在各种电子设备中

引脚图:

NE555是一个八脚封装的DIP(双列直插)封装的电子器件,从电路图上可以看到其各个引脚的功能如下:

引脚1:接地端(GND),用于连接向电源的负端。

引脚2:触发端(TRIG),通过这里输入脉冲控制振荡开始。当触发脚电压低于1/3VCC时,比较器1 输出高电平,触发翻转触发器并使输出引脚3的电平由高电平跳变到低电平。

引脚3:输出端(OUT),NE555的主要输出端。

引脚4:复位端(RESET),输入复位信号使NE555回到初始状态。当输入低电平时,会复位InterPatin和SR,使OutPatin电路输出低电平,非反馈耦合的RS 翻转触发器被重置即使控制电压CONT(从引脚5输入)为低电平也不能改变。

引脚5:控制端(CONT),用于控制输出的工作状态。例如通过一个电容连接到地,作为电压控制端,任何连到这个引脚的电压会改变阀值的大小(主要影响触发器闭锁的电压大小),若未使用可悬空。

引脚6:阈值端(THR),如果这个引脚的输入电压高于2/3VCC,那么输出端(OUT)会变为低电平。它与引脚7共享一个电阻和一个电容构成的RC振荡器电路。

引脚7:放电端(DIS),振荡器产生的三角波会被送到这里,与引脚6并联。

8引脚8:正电源(VCC),用来通常接入5V - 15V的DC电源。

电路图:

工作原理:

NE555的工作原理基于其内部结构。首先,我们了解一下NE555内部的主要组件。它包括两个与电压比较器,一个反向重置触发器,一个输出驱动器,一个基准电压生成器和一个放电引脚的开放集电器(开放引线)。

现在,我们详细解释NE555三种主要工作模式下的工作原理:

1、稳定态模式(振荡器模式)
这个模式下,NE555可以作为振荡器使用。两个阻值以及一个电容值用于确定振荡周期,进而决定了脉冲或方波信号的频率。当电容电压低于1/3 VCC(供电电压)时,比较器1输出高电平,翻转触发器设定,输出变为高电平。当电容电压升高超过2/3 VCC时,比较器2输出低电平,翻转触发器复位,输出变为低电平(我们蓝桥杯单片机上采用的就是此工作原理,并且我们不需要对NE555进行编程因为他是一个纯硬件电路,由原理图可以看出在蓝桥杯单片机中NE555定时器单纯用来做一个测频率的信号发生器)。

2、单稳态模式(延时模式)
在这种模式下,NE555可以作为一个延时触发器,当输入端突然由高电平变为低电平时,电路立即开始计时,输出变为高电平,并保持一定时间,然后输出变为低电平,这段时间就是延时时间。

3、双稳态模式
在这种模式下,NE555的两个稳定状态均可使用,即输出可以是持续的高电平或低电平。它是通过两个外部触发源来控制的,一个用于设定,一个用于复位。具体的输出电平取决于最后一个触发的是设定输入还是复位输入。

NE555定时器测频率的具体实现

1、首先,配置NE555为频率源,选择合适的电阻和电容数值,使NE555工作在稳定的振荡模式,输出一定的频率脉冲(本单片机省略这一步)。

2、然后,设置单片机中的定时器0和定时器1。定时器1用于产生一个固定的时间间隔,例如1秒;而定时器0用于计数NE555产生的脉冲数量。

3、将NE555的输出脉冲接入单片机的定时器1的外部计数输入。

4、启动定时器1,在定时器1产生中断(即每隔1秒)时,读取定时器0的计数值。然后清零定时器0的计数值,继续计数。

5、定时器0的计数值就是NE555在1秒内产生脉冲的数量,也就是频率。

6、最后,将这个频率显示在SMG上。

5.2基础练习

练习要求

  在CT107D单片机综合实训平台上,利用NE555产生方波信号并测量其频率,具体功能要求如下:

 1、上电开机运行时,关闭蜂鸣器、继电器和8个LED指示灯。

 2、用短路环将J13中的NAL与P34短接,NE555发生的信号输入到单片机的P34引脚。

 3、单片机测量信号频率,并显示在数码管中,频率数据显示用6位数码管,单位是Hz,当显示长度不足6位时,未使用到的数码管熄灭,在最左边的1位数码管用“F”作为提示符

代码演示:
#include <STC15F2K60S2.H>
unsigned int Count_F;//累计1s内脉冲产生的次数
unsigned int data_F;//1s内脉冲产生次数

							/*0    1    2    3     4    5    6    7    8    9 */
unsigned char code NixieTube_nodot[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
							/* A   B     C    D    E    F    H    L    N    P */
							0x88,0x83,0xC6,0xA1,0x86,0x8E,0x89,0xC7,0xC8,0x8C,
							/* U    -   ' ' */
							0xC1,0xBF,0xFF};//无小数点段码
void HC138_Select(unsigned char choice){//HC138译码器应用选择
	switch(choice){
		case 0: P2 = (P2 & 0x1f) | 0x00; break;
		case 4: P2 = (P2 & 0x1f) | 0x80; break;
		case 5: P2 = (P2 & 0x1f) | 0xa0; break;
		case 6: P2 = (P2 & 0x1f) | 0xc0; break;
		case 7: P2 = (P2 & 0x1f) | 0xe0; break;
	}
}
void Delay(unsigned char xms){//延时函数
	unsigned char i,j;
	while(xms--){
		i = 12;
		j = 169;
		do{
			while(--j);
		}while(--i);
	}
}
void SMG_TranslateBit(unsigned char pos,unsigned char value){//数码管发送函数
	HC138_Select(7);
	P0 = 0xFF;
	HC138_Select(6);
	P0 = 0x01<<pos;
	HC138_Select(7);
	P0 = value;
	Delay(2);
	
}
void Display_SMG(){//数码管显示函数
	SMG_TranslateBit(0,NixieTube_nodot[15]);
	if(data_F>9999)
	{
		SMG_TranslateBit(3,NixieTube_nodot[data_F/10000]);
	}
	if(data_F>999)
	{
		SMG_TranslateBit(4,NixieTube_nodot[(data_F/1000) % 10]);
	}
	if(data_F>99)
	{
		SMG_TranslateBit(5,NixieTube_nodot[(data_F/100) % 10]);
	}
	if(data_F>9)
	{
		SMG_TranslateBit(6,NixieTube_nodot[(data_F/10) % 10]);
	}
	
		SMG_TranslateBit(7,NixieTube_nodot[data_F % 10]);

}
void Timer0_Init(){//定时器0初始化配置为八位计数器模式
	TMOD = 0x06;
	TL0 = 0xFF;
	TH0 = 0xFF;
	TR0 = 1;
	EA = 1;
	ET0 = 1;
	PT0 = 0;
}
void Timer1_Init(){//定时器1初始化配置为16位定时器模式
	TMOD = 0x06;
	TL1 = (65535-1000)%256;
	TH1 = (65535-1000)/256;
	TR1 = 1;
	EA = 1;
	ET1 = 1;
	PT1 = 0;
}
void Timer0_handel(void) interrupt 1{
	Count_F++;//记录脉冲次数叠加
}
void Timer1_handel(void) interrupt 3{
	static unsigned int T1Count = 0;
	T1Count++;
	if(T1Count >= 1000){
		T1Count = 0;
		data_F = Count_F;//获取频率
		Count_F = 0;
	}
}
void Init_System(void){//系统初始化
	HC138_Select(4);
	P0 = 0xFF;
	HC138_Select(5);
	P0 = 0x00;
}
void main(){
	Init_System();
	Timer0_Init();
	Timer1_Init();
	while(1){
		Display_SMG();
	}
}


  • 30
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值