555定时器及其应用
【摘 要】555定时器是一种模拟和数字功能相结合的中规模集成器件。本文介绍555定时器以及由555定时器的应用。
【关键词】555定时器 应用
555定时器是一种模拟和数字功能相结合的中规模集成器件。一般用双极性工艺制作的称为555,用CMOS工艺制作的称为7555,除单定时器外,还有对应的双定时器556 /7556。555定时器的电源电压范围宽,可在4. 5V~16V工作, 7555可在3~18V工作,输出驱动电流约为200mA,因而其输出可与TTL、CMOS或者模拟电路电平兼容。
555定时器成本低,性能可靠,只需要外接几个电阻、电容,就可以实现多谐振荡器、单稳态触发器及施密特触发器等脉冲产生与变换电路。它也常作为定时器广泛应用于仪器仪表、家用电器、电子测量及自动控制等方面。555定时器的部电路框图和外引脚排列图分别如图2. 9. 1和图2. 9. 2所示。它内部包括两个电压比较器,三个等值串联电阻,一个RS触发器,一个放电管T及功率输出级。提供两个基准电压VCC /3 和2VCC /3555定时器的功能主要由两个比较器决定。两个比较器的输出电压控制RS触发器和放电管的状态。在电源与地之间加上电压,当5脚悬空时,则电压比较器A1的反相输入端的电压为2VCC /3,A2的同相输入端的电压为VCC /3。若触发输入端TR 的电压小于VCC /3,则比较器A2 的输出为1可使RS触发器置1,使输出端OUT = 1。如果阈值输入端TH的电压大于2VCC /3,同时TR端的电压大于VCC /3,则A1的输出为1,A2的输出为0,可将RS触发器置0,使输出为0电平。
555定时器的应用举例
1. 555触摸定时开关。集成电路IC1是一片555定时电路,在这里接成单稳态电路。平时由于触摸片P端无感应电压,电容C1通过555第7脚放电完毕,第3脚输出为低电平,继电器KS释放,电灯不亮。
当需要开灯时,用手触碰一下金属片P,人体感应的杂波信号电压由C2加至555的触发端,使555的输出由低变成高电平,继电器KS吸合,电灯点亮。同时, 555第7脚内部截止,电源便通过R1给C1充电,这就是定时的开始。当电容C1上电压上升至电源电压的2 /3时, 555第7脚道通使C1放电,使第3脚输出由高电平变回到低电平,继电器释放,电灯熄灭,定时结束。定时长短由R1、C1 决定: T1 = 1. 1R1 3 C1。按图中所标数值,定时时间约为4分钟。D1可选用1N41481N4001。
2. 简易催眠器。时基电路555构成一个极低频振荡器,输出一个个短的脉冲,使扬声器发出类似雨滴的声音(见附图) 。扬声器采用2英寸、8欧姆小型动圈式雨滴声的速度可以通过100K电位器来调节到合适的程度。如果在电源端增加一简单的定时开关,则可以在使用者进入梦乡后及时切断电源。
3. 用555制作的D类放大器。由IC 555 和R1、R2、C1等组成100KHz可控多谐振荡器,占空比为50%,控制端5 脚输入音频信号, 3脚便得到脉宽与输入信幅值成正比的脉冲信号,经L、C3接调、滤波后推动扬声器。
4. 相片曝光定时器。附图电路是用555单稳电路制成的相片曝光定时器人工启动式单稳电路。工作原理: 电源接通后,定时器进入稳态。此时定时电容CT的电压为: VCT =VCC = 6V。对555这个等效触发器来讲,两个输入都是高电平,即VS = 0。继电器KA不吸合,常开点是打开的,曝光照明灯HL不亮。按一下按钮开关SB之后,定时电容CT立即放到电压为零。于是此时555电路等效触发的输入成为: R = 0、S = 0,它的输出就成高电平:V0 = 1。继电器KA吸动,常开接点闭合,曝光照明灯点亮。按钮开关按一下后立即放开,于是电源电压就通过RT向电容CT充电,暂稳态开始。当电容CT上的电压升到2 /3VCC既4 伏时,定时时间已到, 555等效电路触发器的输入为: R = 1、S = 1,于是输出又翻转成低电平: V0 = 0。继电器KA释放,曝光灯HL 熄灭。暂稳态结束,有恢复到稳态。曝光时间计算公式为: T = 1. 1RT3 CT。本电路提供参数的延时时间约为1秒~2分钟,可由电位器RP调整和设置。电路中的继电器必需选用吸合电流不应大于30mA的产品,并应根据负载(HL)的容量大小选择继电器触点容量。
/*******************************************************************
* *
* 555定时器试验 -—— 频率计 *
* *
* *
* LCD1602显示 *
*改变VR1电位器的电阻值,观察液晶屏频率发生变化 *
* *
*******************************************************************/
#include
#include
unsigned char code cdis1[] =
{
" CYMOMETER " //频率计
};
unsigned char code cdis2[] =
{
"FREQ: Hz "
};
sbit LCD_RS = P2 ^ 6;
sbit LCD_RW = P2 ^ 5;
sbit LCD_EN = P2 ^ 7;
bit sec = 0;
unsigned char msec = 0, Hdata = 0, Ldata = 0, Count = 0;
unsigned long temp = 0;
unsigned char data display[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
char code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节
/*********************************************************
us延时函数 (4.34us)
*********************************************************/
void delayNOP()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
/*********************************************************
ms延时函数
*********************************************************/
void delayms(unsigned int ms)
{
unsigned char n;
while (ms--)
{
for (n = 0; n < 114; n++)
;
}
}
/**********************************************************
* *
* 检查LCD忙状态 *
* lcd_busy为1时,忙,等待。 *
* lcd-busy为0时,闲,可写指令与数据。 *
* *
**********************************************************/
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P0 &0x80);
LCD_EN = 0;
return (result);
}
/**********************************************************
* *
*写指令数据到LCD *
*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 *
* *
**********************************************************/
void lcd_wcmd(unsigned char cmd)
{
while (lcd_busy())
;
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 1;
P0 = cmd;
delayNOP();
LCD_EN = 0;
}
/**********************************************************
* *
*写显示数据到LCD *
*RS=H,RW=L,E=高脉冲,D0-D7=数据。 *
* *
**********************************************************/
void lcd_wdat(unsigned char dat)
{
while (lcd_busy())
;
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 1;
P0 = dat;
delayNOP();
LCD_EN = 0;
}
/**********************************************************
* *
* LCD初始化设定 *
* *
**********************************************************/
void lcd_init()
{
delayms(15);
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
delayms(5);
lcd_wcmd(0x38);
delayms(5);
lcd_wcmd(0x38);
delayms(5);
lcd_wcmd(0x0c); //开显示,不显示光标
delayms(5);
lcd_wcmd(0x06); //
delayms(5);
lcd_wcmd(0x01); //清除LCD的显示内容
delayms(5);
}
/**********************************************************
* *
* 设定显示位置 *
* *
**********************************************************/
void lcd_pos(unsigned char pos)
{
lcd_wcmd(pos | 0x80); //数据指针=80+地址变量
}
/**********************************************************
* *
* 显示函数 *
* *
**********************************************************/
void play()
{
unsigned char n;
for (n = 0; n <= 4; n++)
//数据转换
{
display[n] = temp % 10+0x30;
temp = temp / 10;
}
display[5] = temp + 0x30;
for (n = 5; n > 0; n--)
//高位为"0"不显示
{
if (display[n] == 0x30)
display[n] = 0x20;
else
break;
}
lcd_pos(0x46); //显示实际频率值
for (n = 5; n != 0xff; n--)
lcd_wdat(display[n]);
}
/*********************************************************
* *
* 主函数 *
* *
*********************************************************/
void main()
{
unsigned char m;
unsigned long frq_num;
P3 = 0xff;
lcd_init();
lcd_pos(0x00); //设置显示位置为第一行
for (m = 0; m < 16; m++)
lcd_wdat(cdis1[m]);
//显示字符
lcd_pos(0x40); //设置显示位置为第二行
for (m = 0; m < 16; m++)
lcd_wdat(cdis2[m]);
//显示字符
TMOD = 0x51; //定时器0工作在定时方式
//定时器1工作在计数方式
TH0 = 0x4c; //50ms定时
TL0 = 0x00;
TH1 = 0x00; //计数初值
TL1 = 0x00;
ET0 = 1; //使能TIMER0中断
ET1 = 1; //使能TIMER1中断
EA = 1; //允许中断
PT1 = 1; //定义TIMER1中断优先
TR0 = 1;
TR1 = 1;
while (1)
{
if (sec)
{
Hdata = TH1; //取计数值
Ldata = TL1;
frq_num = ((Count *65535+Hdata * 256+Ldata) *108 / 100);
TH1 = 0;
TL1 = 0;
sec = 0;
Count = 0;
TR1 = 1;
TR0 = 1;
}
temp = frq_num;
play();
}
}
/**********************************************************
* *
* Time0中断函数 *
* *
**********************************************************/
void Time0()interrupt 1
{
TH0 = 0x4c; //50ms定时
TL0 = 0x00;
msec++;
if (msec == 20)
//50*20=1S
{
TR0 = 0; //关闭TIMER0
TR1 = 0; //关闭TIMER1
msec = 0;
sec = 1; //置秒标记位
}
}
/**********************************************************
* *
* Time1中断函数 *
* *
**********************************************************/
void Time1()interrupt 3
{
Count++;
}
/*********************************************************/
¥29.8
¥9.9
¥59.8