硬件设计
文件地址:
链接:https://pan.baidu.com/s/1FY5kDcX6yzMzMzsM70kygg
提取码:cfu6
功能说明:
1.基于STC89C51/52(与AT89S51/52、AT89C51/52通用)单片机作为主控制器
2、采用LCD1602液晶显示屏实时显示分贝值;
3、使用小麦克风采集声音经过LM358放大信号后经过ADC0832进行采集,最终转换成分贝值。
4、可以通过按键进行设定分贝限值,设定的分贝限值存储于STC单片机内部eeprom,具有掉电存储的功能;(AT单片机没有掉电存储功能)
5、当实测分贝值低于设定值时绿色指示灯亮,当实测分贝值高于设定值时红色指示灯亮并蜂鸣器报警;
仿真图:
程序设计
部分代码如下:
*******************************************************************************/
#include <reg52.H>
#include "ADC0832.h"
#include "LCD1602.h"
#include "eeprom52.h"
typedef unsigned int u16;
#define led P1
uint Noise_h=50;
uint AD_dat=0;
uint mmm=0;
uint Noise=0;
uchar ms=0;
uchar sec=0;
uchar sec1=0;
sbit beep=P2^0;
sbit led0=P1^6;
sbit led1=P1^4;
sbit key1=P3^5;
sbit key2=P3^6;//位定义
bit key1_flag=0;
bit key2_flag=0;
bit beep1=0;
bit memory_flag=0;//方向标志
int c=0;
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : memroy
* 函数功能 : eeprom
*******************************************************************************/
void memroy()
{
if(memory_flag)
{ memory_flag=0;
SectorErase(0x2000);
byte_write(0x2000,Noise_h/256);//取整
byte_write(0x2001,Noise_h%256);//取余
}
}
/*******************************************************************************
* 函 数 名 : read_memory
* 函数功能 : 设定可调噪声检测的最大值
*******************************************************************************/
void read_memory()
{
Noise_h=byte_read(0x2000)*256+byte_read(0x2001);
if(Noise_h>999)
{
Noise_h=70;
}
}
/*******************************************************************************
* 函 数 名 : key_dispose
* 函数功能 : 按键函数,调节噪声检测的上限
*******************************************************************************/
void key_dispose()
{
if(!key1)
{
if(key1_flag)
{
if(Noise_h<999) Noise_h++;
}
if(sec==0)
{
if(Noise_h<999) Noise_h++;
}
}
else
{
if(key1_flag==0)
{
key1_flag=1;
memory_flag=1;
}
sec=2;
}
if(!key2)
{
if(key2_flag)
{
key2_flag=0;
if(Noise_h>0) Noise_h--;
}
if(sec1==0)
{
if(Noise_h>0) Noise_h--;
}
}
else
{
if(key2_flag==0)
{
key2_flag=1;
}
sec1=2;
}
}
/*******************************************************************************
.
.