基于51单片机声音噪声分贝检测采集显示proteus仿真原理图PCB程序设计

硬件设计

文件地址:
链接: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;
	 }






 }
/*******************************************************************************

.

.

  • 25
    点赞
  • 161
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值