目录

声控LED智能灯


问题咨询及项目源码下载请加群:

群名:IT项目交流群

群号:245022761

一、学习目的

1. 了解驻极体声音传感器工作原理

2. 学会采用驻极体声音传感器检测声音信号

3. 学会采用光敏传感器检测环境光强度

4. 学会使用PCF8591数模转换模块将模拟电压信号转换为数字信号

5. 学会用按键控制LED灯亮灭

二、学习要求

请设计一款声控LED智能灯,该灯含有8个灯珠,采用一个按键统一控制灯的开与关,也可以通过声音控制开灯,开灯后根据环境光亮度,点亮多个灯珠(最暗时点亮8个灯珠,最亮时点亮1个灯珠)。

三、系统连接图

代码实现:

//数模转换代码#include <pcf8591.h>sbit scl=P2^0;       //I2C  时钟
sbit sda=P2^1;       //I2C  数据
bit ack;             //应答标志位/*******************************************************************起动总线函数
函数原型: void  Start_I2c();
功能:     启动I2C总线,即发送I2C起始条件.
********************************************************************/
void Start_I2c()
{sda=1;         /*发送起始条件的数据信号*/_nop_();scl=1;_nop_();        /*起始条件建立时间大于4.7us,延时*/_nop_();_nop_();_nop_();_nop_();    sda=0;         /*发送起始信号*/_nop_();        /* 起始条件锁定时间大于4μs*/_nop_();_nop_();_nop_();_nop_();       scl=0;       /*钳住I2C总线,准备发送或接收数据 */_nop_();_nop_();
}/*******************************************************************结束总线函数
函数原型: void  Stop_I2c();
功能:     结束I2C总线,即发送I2C结束条件.
********************************************************************/
void Stop_I2c()
{sda=0;      /*发送结束条件的数据信号*/_nop_();       /*发送结束条件的时钟信号*/scl=1;      /*结束条件建立时间大于4μs*/_nop_();_nop_();_nop_();_nop_();_nop_();sda=1;      /*发送I2C总线结束信号*/_nop_();_nop_();_nop_();_nop_();
}/*******************************************************************字节数据发送函数
函数原型: void  I2C_SendByte(u8 c);
功能:     将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作.(不应答或非应答都使ack=0)     发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
********************************************************************/
void  I2C_SendByte(u8  c)
{u8  i;for(i=0;i<8;i++)  /*要传送的数据长度为8位*/{if((c<<i)&0x80)sda=1;   /*判断发送位*/else  sda=0;                _nop_();scl=1;               /*置时钟线为高,通知被控器开始接收数据位*/_nop_(); _nop_();             /*保证时钟高电平周期大于4μs*/_nop_();_nop_();_nop_();         scl=0; }_nop_();_nop_();sda=1;                /*8位发送完后释放数据线,准备接收应答位*/_nop_();_nop_();   scl=1;_nop_();_nop_();_nop_();if(sda==1)ack=0;     else ack=1;        /*判断是否接收到应答信号*/scl=0;_nop_();_nop_();
}/*******************************************************************字节数据接收函数
函数原型: u8  I2C_RcvByte();
功能:        用来接收从器件传来的数据,并判断总线错误(不发应答信号),发完后请用应答函数应答从机。
********************************************************************/
u8   I2C_RcvByte()
{u8  retc=0,i; sda=1;                     /*置数据线为输入方式*/for(i=0;i<8;i++){_nop_();           scl=0;                  /*置时钟线为低,准备接收数据位*/_nop_();_nop_();                 /*时钟低电平周期大于4.7μs*/_nop_();_nop_();_nop_();scl=1;                  /*置时钟线为高使数据线上数据有效*/_nop_();_nop_();retc=retc<<1;if(sda==1)retc=retc+1;  /*读数据位,接收的数据位放入retc中 */_nop_();_nop_(); }scl=0;    _nop_();_nop_();return(retc);
}/********************************************************************应答子函数
函数原型:  void Ack_I2c(bit a);
功能:      主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
********************************************************************/
void Ack_I2c(bit a)
{  if(a==0)sda=0;              /*在此发出应答或非应答信号 */else sda=1;               /*0为发出应答,1为非应答信号 */_nop_();_nop_();_nop_();      scl=1;_nop_();_nop_();                    /*时钟低电平周期大于4μs*/_nop_();_nop_();_nop_();  scl=0;                     /*清时钟线,住I2C总线以便继续接收*/_nop_();_nop_();
}/************************************************************
* 函数名        : Pcf8591_DaConversion
* 函数功能      : PCF8591的输出端输出模拟量
* 输入          : addr(器件地址),channel(转换通道),value(转换的数值)
* 输出            : 无
******************* *****************************************/
bit Pcf8591_DaConversion(u8 addr,u8 channel,u8 Val)
{Start_I2c();              //启动总线I2C_SendByte(addr);            //发送器件地址if(ack==0)return(0);I2C_SendByte(0x40|channel);              //发送控制字节if(ack==0)return(0);I2C_SendByte(Val);            //发送DAC的数值  if(ack==0)return(0);Stop_I2c();               //结束总线return(1);
}/************************************************************
* 函数名        : Pcf8591_SendByte
* 函数功能      : 写入一个控制命令
* 输入          : addr(器件地址),channel(转换通道)
* 输出            : 无
************************************************************/
bit PCF8591_SendByte(u8 addr,u8 channel)
{Start_I2c();              //启动总线I2C_SendByte(addr);            //发送器件地址if(ack==0)return(0);I2C_SendByte(0x40|channel);              //发送控制字节if(ack==0)return(0);Stop_I2c();               //结束总线return(1);
}/************************************************************
* 函数名           : PCF8591_RcvByte
* 函数功能      : 读取一个转换值
* 输入          :
* 输出          : dat
************************************************************/
u8 PCF8591_RcvByte(u8 addr)
{  u8 dat;Start_I2c();          //启动总线I2C_SendByte(addr+1);      //发送器件地址if(ack==0)return(0);dat=I2C_RcvByte();          //读取数据0Ack_I2c(1);           //发送非应答信号Stop_I2c();           //结束总线return(dat);
}
//main函数 功能实现#include<config.h>
//#include<uart.h>
#include <pcf8591.h>
#include <1602.h>
sbit beep=P2^3;    //蜂鸣器引脚
sbit RL=P2^4;
sbit button=P3^7;
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
sbit LED5=P1^4;
sbit LED6=P1^5;
sbit LED7=P1^6;
sbit LED8=P1^7;
int flag=0;
u8 print[20];
u8 *l={"light:"};
u8 *on={"switch on:"};
u8 *off={"switch off:"};
u8 m[]={'0','1','2','3','4','5','6','7','8','9'};
void delay_ms(u16 x)//毫秒延时函数
{u16 i;u8 j;for(i=0;i<x;i++)for(j=0;j<115;j++);
}void delay_us(u8 t) //10倍微秒延时函数,延时10*t微秒
{u8 i;for(i=0;i<=t;i++);
}void Alarm(u8 t) //蜂鸣器报警,持续t秒
{u8 i,j,k;  for(j=0;j<t;j++){ for(i=0;i<200;i++){beep=0;delay_us(50);beep=1;delay_us(50);}for(k=0;k<100;k++){beep=0;delay_us(110);beep=1;delay_us(110);}}
}void main()
{u8 vibrate;u8 i;int temp1,temp2,temp3,temp4;EA=1;IT1=1;//  Init_COM();   //初始化LCD1602_Init();//1602初始化函数// if(RL==1)//{ //if(button==0)//{while(1){if(button==0||RL==1)          {delay_ms(20);if(button==0||RL==1){flag=!flag;delay_ms(80);}}sprintf(print,"%d",flag);LCD1602_disstr(print,0,0);if(flag==1){PCF8591_SendByte(AddWr,0);//启动AIN0通道模数转换vibrate=255-PCF8591_RcvByte(AddWr);//读出转换数字值/光照越暗vibrate越小,当vibrate<100时灯亮//if(RL==1) flag++;// temp4=flag%2;//if(flag==1)//if(RL==1)//{//  P1=0X01;if(vibrate>100) {P1=0X00;  }if(vibrate<100&&vibrate>90) {P1=0X01;}if(vibrate<90&&vibrate>80) {P1=0X03;}if(vibrate<80&&vibrate>70) {P1=0X07; }if(vibrate<70&&vibrate>60) {P1=0X0f;}if(vibrate<60&&vibrate>50) {P1=0X1f;}if(vibrate<50&&vibrate>40) {P1=0X3f;}if(vibrate<40&&vibrate>30) {P1=0X7f;}if(vibrate<30) {P1=0Xff;delay_ms(10);}//P1=0x00;//delay_ms(50);}else{P1=0xff;delay_ms(20);}//  }}}
void intr() interrupt 2
{flag=!flag;//EX1=0;
}

附上本人在大学学习期间所有学习实现的demo,这些项目的实现都通过本人亲自测试运行,也是自己学习中知识的一点一点积累,整理不易,希望能帮到大家,不足之处大家多多交流。

QQ:1805523903

邮箱:1805523603@qq.com

昵称:忘尘

世界不同角落共同努力,变成更优秀的我们。

1.51单片机学习整理

基于51单片机的智能光控路灯 :https://download.csdn.net/download/qq_37037348/11071869

基于51单片机超声波测距(内含源程序,原理图及PCB源文件):https://download.csdn.net/download/qq_37037348/11071866

基于51单片机的智能安防报警系统:https://download.csdn.net/download/qq_37037348/11071865

基于51单片机模块化编程模块 (红外、液晶显示屏、温湿度等传感器模块化)

:https://download.csdn.net/download/qq_37037348/11053222

基于51单片机pwm控制的呼吸灯程序

https://download.csdn.net/download/qq_37037348/11053195

51单片机与上位机串口通信实例包含详细讲解的完整代码

https://download.csdn.net/download/qq_37037348/11053164

基于51单片机的直交流电压表仿真 (详细代码实现,设计讲解)

https://download.csdn.net/download/qq_37037348/11053145

基于51单片机胸牌 详细代码实现,设计讲解)

https://download.csdn.net/download/qq_37037348/11053125

基于51单片机3x4按键拨号 (详细代码实现,设计讲解)

https://download.csdn.net/download/qq_37037348/11053093

基于51单片机拨号 (详细代码实现,设计讲解)

https://download.csdn.net/download/qq_37037348/11053090

基于51单片机警灯系统设计(详细代码实现,设计讲解)

https://download.csdn.net/download/qq_37037348/11053086

基于51单片机点亮一个小灯(详细代码实现,设计讲解,学习51基础实验)

https://download.csdn.net/download/qq_37037348/11053084

基于51单片机开发的排球计时器,附有详细注释讲解,为大家提供最真心的帮助

https://download.csdn.net/download/qq_37037348/11053024

基于51单片机的音乐播放器,源码详细注释

https://download.csdn.net/download/qq_37037348/11053022

2.Android 开发学习整理:

Android-serialport 手机App串口通信代码实现:

https://download.csdn.net/download/qq_37037348/11050521

Android-serialport 手机App网络通信实例代码实现:

https://download.csdn.net/download/qq_37037348/11050516

Android 第一个App详细教程、基础实验 :

https://download.csdn.net/download/qq_37037348/11050515

3.计算机视觉(深度学习、神经网络的学习)

feature extraction(深度学习,特征提取,神经网络:https://download.csdn.net/download/qq_37037348/11065968

feature extraction(深度学习,特征提取,神经网络多种训练模型详细实现):

https://download.csdn.net/download/qq_37037348/11065974

欢迎大家加入学习项目交流,为大家分享各类个人学习项目及学习资料,互相交流互相学习。

问题咨询及项目源码下载请加群:

群名:IT项目交流群

群号:245022761

基于51单片机的智能声控相关推荐

  1. 基于51单片机简易智能家居

    基于51单片机的智能家居的设计 前言 一.项目简介 二.开发环境/工具: 1.Keil 5/Keil 4 2.STC-ISP 3.蓝牙串口助手 4.手机app 三.硬件设计: 1.单片机与蓝牙模块连接 ...

  2. 基于51单片机的自动浇花系统设计/基于51单片机的智能抽奖系统控制设计/基于51单片机的数字时钟与日历显示控制设计 毕业设计

    1147基于51单片机的自动浇花系统设计 设计思路:通湿度传感器实时监测湿度,通过LCD显示出实时的湿度采集值,可以通过按键设定目标界限,当达到这个界限值时,浇花系统的电机装置运行. 电路包含:LCD ...

  3. 基于51单片机的智能火灾报警系统

    具体实现功能 系统由51单片机+MQ-2烟雾传感+ADC0832模数转换芯片+DS18B20温度传感器+数码管显示+按键模块+声光报警模块构成. 具体功能: 1.实时监测及显示温度值和烟雾浓度: 2. ...

  4. 【资料分享】基于51单片机的智能指纹考勤系统设计-原理图-PCB-程序-报告、基于51单片机和MAX1898的智能手机充电器设计

    1661[毕设课设]基于51单片机的智能指纹考勤系统设计-原理图-PCB-程序-报告 摘 要 随着科学技术的不断发展带动着电子行业的地位越来越重,现在电子产品几乎在社会的各个领域都可以见到.这些技术的 ...

  5. 基于51单片机的智能晾衣架系统设计

    1.功能介绍 设计基于51单片机的智能晾衣架.主要功能如下: (1)控制晾衣架的升降. (2)具有限位开关功能. (3)具有无线遥控功能. (4)能够指示运行状态. (5)具有智能模式,可以根据环境光 ...

  6. 基于51单片机的智能家居安防系统(程序+仿真+PCB)

    @TOC 一.基于51单片机的智能家居安防系统 1.主要功能 通过人体红外检测模块.光敏传感器.蜂鸣器.继电器模块模拟智能家居安防功能. 2.实验结果 3.实验仿真 4.程序源码 /********* ...

  7. 基于51单片机的智能浇花系统(可做毕设)

    基于51单片机的智能浇花系统(可做毕设) 一.系统介绍 二.仿真展示 三.实物展示 四.仿真过程 五.代码 1.ADC0832 2.LCD1602 3.按键 4.水泵 5.温湿度 6.定时器 7.ma ...

  8. 基于51单片机的智能小车(寻迹功能)

    题目:基于C52的智能小车设计与制作 1设计目的 通过构建智能小车,培养设计并实现自动控制系统的能力,在实践过程中,熟悉以单片机为核心控制芯片,设计小车的检测,驱动和显示等外围电路,采用智能控制算法实 ...

  9. 智能手环功能模块设计_基于51单片机的智能手环蓝牙模块设计

    龙源期刊网 http://www.qikan.com.cn 基于 51 单片机的智能手环蓝牙模块设计 作者:王烈进 王游司 陈洪燕 孙超 卢宇 来源:<电脑知识与技术> 2018 年第 2 ...

  10. 基于51单片机的智能家居的设计(一)

    基于51单片机的智能家居的设计初级版本 项目简介: 该项目可以通过单片机烧写软件发送指令并实现大厅灯跟卧室灯的亮灭.该项目分为四个等级: 1.在单片机烧写软件上面发送指令实现灯的亮灭: 2.用语音模块 ...

最新文章

  1. TVM性能评估分析(一)
  2. 地铁间谍 洛谷 p2583
  3. Vue.js 整理笔记
  4. mysql数据库访问300ms以上_[Java教程]一张900w的数据表,16s执行的SQL优化到300ms?...
  5. idea java添加属性快捷键_Intellij IDEA 常用 设置 及 快捷键 (持续更新)
  6. 剥开浮躁表面,直指金融科技内心
  7. mysql控制台操作
  8. Qt 的udpSocket通信
  9. Python案例:计算softmax函数值
  10. 键、索引、约束及其区别
  11. notepad++ 将JSON压缩成一行与JSON格式化
  12. 硬盘可以分为几类,监控专用硬盘和普通硬盘有什么区别?
  13. mysql置疑原因_SQL Server置疑数据库解决方法
  14. OSX: Mac不睡眠的排查
  15. 英语语法 宾语补语的句型
  16. win10访问不了win7文件服务器,win10和win7共享文件教程 win10和win7共享文件无法访问...
  17. csv是什么意思中文_CSV文件是什么意思?
  18. 如何编写yaml格式的Ansible主机清单(inventory)及清单变量使用Demo
  19. 80后外卖小哥实力惊艳中国诗词大会,诗词的力量改变人生轨迹丨好书优选
  20. 物联网时代的智慧社区运营新生态

热门文章

  1. Global Tracking Transformers
  2. stanford coreNLP简单使用
  3. 办理芯片银行卡时记得把“闪付”功能取消
  4. C语言使用openssl库解析TLS报文(SNI和证书)
  5. JAVA基础_数组(一维数组)
  6. macbook卡在进度条开不了机_mac开机卡在进度条的问题
  7. Unix与Linux、Minx、Minix
  8. Vue中minxis的使用
  9. 为小米4与小米3 Mi3 Mi4编译Cyanogenmod 12.1与13.0 (CM12与CM13) 的步骤以及错误解决
  10. 什么是PaaS平台 ?