✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进
❤欢迎关注我的知乎:对error视而不见
代码获取、问题探讨及文章转载可私信。
☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。
🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇
一、引言
在单片机应用系统中,NE555芯片是一款非常经典且实用的集成电路。它可以构成多谐振荡器、单稳态触发器和施密特触发器等多种电路,广泛应用于信号产生、定时、控制等领域。本文将详细介绍NE555芯片的原理、常见应用电路以及结合单片机的代码实现。
二、NE555芯片概述
2.1 芯片结构
NE555芯片内部由分压器、比较器、基本RS触发器、放电三极管和输出缓冲器等部分组成。它有8个引脚,各引脚功能如下:
- 引脚1(GND):接地端。
- 引脚2(TRIG):触发输入端,低电平触发。
- 引脚3(OUT):输出端。
- 引脚4(RESET):复位端,低电平有效。
- 引脚5(CTRL):控制电压端,可通过外接电容来改变比较器的参考电压。
- 引脚6(THR):阈值输入端。
- 引脚7(DIS):放电端。
- 引脚8(VCC):电源端。
2.2 工作原理
NE555芯片的工作原理基于内部比较器对输入电压的比较结果来控制RS触发器的状态,从而决定输出端的电平。当触发输入端(TRIG)的电压低于1/3VCC时,触发器置位,输出端(OUT)为高电平;当阈值输入端(THR)的电压高于2/3VCC时,触发器复位,输出端(OUT)为低电平。
三、NE555芯片的常见应用电路
3.1 多谐振荡器
多谐振荡器是NE555芯片最常见的应用之一,它可以产生矩形波信号。其电路结构主要由两个电阻(R1、R2)和一个电容(C)组成。
工作过程如下:电源接通后,电容C通过R1和R2充电,当电容电压上升到2/3VCC时,输出端变为低电平,同时放电三极管导通,电容C通过R2放电;当电容电压下降到1/3VCC时,输出端变为高电平,放电三极管截止,电容C又开始充电,如此循环,产生矩形波信号。
矩形波的周期计算公式为: T = 0.7 ( R 1 + 2 R 2 ) C T = 0.7(R_1 + 2R_2)C T=0.7(R1+2R2)C
3.2 单稳态触发器
单稳态触发器用于产生一个固定宽度的脉冲信号。它由一个触发脉冲输入和一个定时电容(C)、定时电阻(R)组成。
当触发输入端(TRIG)出现一个负脉冲时,触发器置位,输出端变为高电平,同时电容C开始充电;当电容电压上升到2/3VCC时,触发器复位,输出端变为低电平,电容C通过放电三极管放电,等待下一次触发。
输出脉冲的宽度计算公式为: t w = 1.1 R C t_w = 1.1RC tw=1.1RC
四、结合单片机的应用及代码实现
4.1 实验目的
利用NE555芯片构成多谐振荡器产生矩形波信号,通过单片机的定时器测量矩形波的周期,并将结果显示在数码管上。
4.2 硬件连接
- NE555芯片的输出端(OUT)连接到单片机的外部中断引脚(如INT0)。
- 数码管连接到单片机的相应I/O口。
4.3 代码实现(以51单片机为例)
#include <reg51.h>
// 定义数码管段码表
unsigned char code SEG_CODE[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
// 定义全局变量
unsigned int count = 0; // 定时器计数值
unsigned int period = 0; // 矩形波周期
// 定时器0初始化函数
void Timer0_Init() {
TMOD |= 0x01; // 设置定时器0为模式1
TH0 = 0; // 定时器初值
TL0 = 0;
ET0 = 1; // 使能定时器0中断
EA = 1; // 全局中断使能
TR0 = 1; // 启动定时器0
}
// 外部中断0初始化函数
void Int0_Init() {
IT0 = 1; // 设置外部中断0为下降沿触发
EX0 = 1; // 使能外部中断0
EA = 1; // 全局中断使能
}
// 定时器0中断服务函数
void Timer0_ISR() interrupt 1 {
TH0 = 0; // 重新加载初值
TL0 = 0;
count++; // 计数值加1
}
// 外部中断0中断服务函数
void Int0_ISR() interrupt 0 {
period = count * 65536 + (TH0 << 8) + TL0; // 计算矩形波周期
count = 0; // 计数值清零
TH0 = 0; // 定时器初值清零
TL0 = 0;
}
// 数码管显示函数
void Display(unsigned int num) {
unsigned char i;
unsigned char digit[4];
// 分离出每一位数字
digit[0] = num / 1000;
digit[1] = num % 1000 / 100;
digit[2] = num % 100 / 10;
digit[3] = num % 10;
// 依次显示每一位数字
for (i = 0; i < 4; i++) {
P0 = SEG_CODE[digit[i]];
// 延时一段时间,实现动态扫描
for (unsigned int j = 0; j < 1000; j++);
}
}
// 主函数
void main() {
Timer0_Init(); // 初始化定时器0
Int0_Init(); // 初始化外部中断0
while (1) {
Display(period); // 显示矩形波周期
}
}
4.4 代码解释
Timer0_Init()
函数:用于初始化定时器0,设置为模式1,并启动定时器。Int0_Init()
函数:用于初始化外部中断0,设置为下降沿触发,并使能中断。Timer0_ISR()
函数:定时器0中断服务函数,每溢出一次,计数值count
加1。Int0_ISR()
函数:外部中断0中断服务函数,当检测到矩形波的下降沿时,计算矩形波的周期,并将计数值清零。Display()
函数:数码管显示函数,将矩形波的周期值显示在数码管上。main()
函数:主函数,初始化定时器和外部中断,然后进入循环,不断显示矩形波的周期。
五、总结
NE555芯片作为一款经典的集成电路,在单片机应用系统中具有重要的作用。通过本文的介绍,我们了解了NE555芯片的原理、常见应用电路以及结合单片机的代码实现。在实际应用中,我们可以根据具体需求选择合适的应用电路,以实现信号产生、定时、控制等功能。同时,结合单片机的强大处理能力,可以对NE555芯片产生的信号进行进一步的处理和分析。