摘要:
本文介绍了一种基于AT89C52单片机的分贝采集与显示控制系统设计。该系统能够实时采集声音分贝,通过LCD液晶进行显示,并具备声音分贝设定与超限提示功能。系统包含液晶显示电路、分贝传感器电路、单片机电路、红外模拟开关、报警电路、电源电路、按键电路、蜂鸣器电路以及LED指示电路等。本文将详细阐述系统的设计与实现过程。
关键词:AT89C52单片机;分贝采集;LCD显示;声音分贝设定;超限提示
一、引言
随着科技的不断发展,声音分贝的实时监测与控制变得愈发重要。在工业、医疗、环境等领域,都需要对声音分贝进行准确测量和有效控制。因此,设计一种基于单片机的分贝采集与显示控制系统具有重要意义。本文采用AT89C52单片机为核心控制器,结合相关电路模块,实现了声音分贝的实时采集、显示以及超限提示功能。
二、系统总体设计
本系统主要由AT89C52单片机、液晶显示电路、分贝传感器电路、红外模拟开关、报警电路、电源电路、按键电路、蜂鸣器电路以及LED指示电路等组成。系统通过单片机控制各个电路模块的工作,实现声音分贝的采集、处理、显示及超限提示等功能。
三、硬件电路设计
1. 单片机电路
AT89C52单片机作为系统的核心控制器,负责接收传感器信号、处理数据、控制液晶显示以及触发报警电路等。单片机的引脚连接了各个电路模块,实现数据的传输与控制。
2. 液晶显示电路
液晶显示电路用于实时显示采集到的声音分贝值。通过单片机向液晶模块发送指令和数据,实现分贝值的动态显示。
3. 分贝传感器电路
分贝传感器电路负责采集环境中的声音分贝值,并将信号转换为单片机可识别的电信号。传感器选用高灵敏度的声音传感器,确保测量结果的准确性。
4. 红外模拟开关
红外模拟开关用于实现远程控制功能。通过红外遥控器发送指令,单片机接收到指令后执行相应的操作,如设置分贝阈值、开启/关闭系统等。
5. 报警电路
当采集到的声音分贝值超过设定的阈值时,报警电路将被触发。报警电路包括蜂鸣器和LED指示灯,通过发出声音和闪烁灯光提醒用户。
6. 电源电路
电源电路为整个系统提供稳定的工作电压。通过电源转换模块将外部电源转换为系统所需的直流电压,确保各电路模块的正常工作。
7. 按键电路
按键电路用于实现手动设置分贝阈值、切换显示模式等功能。用户通过按下不同的按键,向单片机发送相应的指令,实现相应的操作。
四、软件设计
软件设计主要包括单片机程序的编写与调试。程序主要实现以下功能:初始化各电路模块、实时采集声音分贝值、处理数据、控制液晶显示、检测声音分贝是否超限以及触发报警电路等。
五、系统测试与结果分析
在系统搭建完成后,进行了系统测试与结果分析。通过实际测量不同环境下的声音分贝值,验证系统的准确性和可靠性。测试结果表明,本系统能够准确采集声音分贝值,并在超过设定阈值时及时发出报警提示。
六、结论
本文设计了一种基于AT89C52单片机的分贝采集与显示控制系统。通过合理的硬件电路设计和软件编程,实现了声音分贝的实时采集、显示以及超限提示功能。系统具有结构简单、功能完善、可靠性高等特点,可广泛应用于需要声音分贝监测与控制的场合。
#include <reg52.h> /* 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 */
#include "intrins.h"
#define u8 unsigned char
#define u16 unsigned int
#define uchar unsigned char
#define uint unsigned int
uchar yushe_wendu = 50; /* 温度预设值 */
uchar yushe_yanwu = 100; /* 采样预设值 */
uint wendu; /* 温度值全局变量 */
uchar yanwu; /* 用于读取ADC数据 */
/* 运行模式 */
uchar Mode = 0; /* =1是设置温度阀值 =2是设置采样阀值 =0是正常监控模式 */
/* 管脚声明 */
sbit Led_Reg = P2 ^ 2; /* 红灯 */
sbit Led_Yellow = P2 ^ 4; /* 黄灯 */
sbit Buzzer = P2 ^ 0; /* 蜂鸣器 */
sbit Fan = P3 ^ 3; /* */
sbit Motor = P2 ^ 5;
/********************************************************************
* 名称 : delay_1ms()
* 功能 : 延时1ms函数
* 输入 : q
* 输出 : 无
***********************************************************************/
void delay_ms( uint q )
{
uint i, j;
for ( i = 0; i < q; i++ )
for ( j = 0; j < 110; j++ )
;
}
/***********************************************************************************************************
* LCD1602相关函数
***********************************************************************************************************/
/* LCD管脚声明 (RW引脚实物直接接地,因为本设计只用到液晶的写操作,RW引脚一直是低电平) */
sbit LCDRS = P2 ^ 7;
sbit LCDEN = P2 ^ 6;
sbit D0 = P0 ^ 0;
sbit D1 = P0 ^ 1;
sbit D2 = P0 ^ 2;
sbit D3 = P0 ^ 3;
sbit D4 = P0 ^ 4;
sbit D5 = P0 ^ 5;
sbit D6 = P0 ^ 6;
sbit D7 = P0 ^ 7;
/* LCD延时 */
void LCDdelay( uint z ) /* 该延时大约100us(不精确,液晶操作的延时不要求很精确) */
{
uint x, y;
for ( x = z; x > 0; x-- )
for ( y = 10; y > 0; y-- )
;
}
。。部分代码
资料下载地址:
https://docs.qq.com/doc/p/ffc421513a628b30450ae742547c0b850456d7c8