当前位置: 首页 > news >正文

基于51单片机智能蓝牙台灯

基于51单片机智能蓝牙台灯

(仿真+程序+原理图+PCB)

功能介绍

具体功能:

1.分为手动/自动两种模式,自动模式下对应LED指示灯亮;

2.手动模式下,可用按键调节亮度;

3.自动模式下,当红外模块检测到有人时开灯。且亮度根据环境光照强度自动调整;

4.蓝牙模块把台灯的状态信息上传到手机显示;

​演示视频:

基于51单片机智能蓝牙台灯

程序

#include <reg52.h> #include <intrins.h> /***微信公众号:木子单片机****/ #define uchar unsigned char // 以后unsigned char就可以用uchar代替 #define uint unsigned int // 以后unsigned int 就可以用uint 代替 sbit LED = P1^0; // 模式指示灯,亮是自动模式,灭是手动模式 sbit Key1 = P1^1; // 按键1,模式切换按键 sbit Key2 = P1^2; // 按键2,亮度减少按键 sbit Key3 = P1^3; // 按键3,亮度增加按键 sbit Lamp = P1^4; // 台灯控制引脚 sbit ADC_CLK = P2^0; // ADC0832的CLK引脚 sbit ADC_DAT = P2^1; // ADC0832的DI/DO引脚 sbit ADC_CS = P2^3; // ADC0832的CS引脚 sbit Module = P2^2; // 人体红外检测模块 uchar gCount=0; // 全局计数变量 uchar gIndex; // 亮度变量,0是最暗,9是最亮,一共10档 uint gTime=0; // 计时变量,用于计时多久没检测到有人 /*********************************************************/ // 毫秒级的延时函数,time是要延时的毫秒数 /*********************************************************/ void DelayMs(uint time) { uint i,j; for(i=0;i<time;i++) for(j=0;j<112;j++); } /*********************************************************/ // ADC0832的时钟脉冲 /*********************************************************/ void WavePlus() { _nop_(); ADC_CLK = 1; _nop_(); ADC_CLK = 0; } /*********************************************************/ // 获取指定通道的A/D转换结果 /*********************************************************/ uchar Get_ADC0832() { uchar i; uchar dat1=0; uchar dat2=0; ADC_CLK = 0; // 电平初始化 ADC_DAT = 1; _nop_(); ADC_CS = 0; WavePlus(); // 起始信号 ADC_DAT = 1; WavePlus(); // 通道选择的第一位 ADC_DAT = 0; WavePlus(); // 通道选择的第二位 ADC_DAT = 1; for(i=0;i<8;i++) // 第一次读取 { dat1<<=1; WavePlus(); if(ADC_DAT) dat1=dat1|0x01; else dat1=dat1|0x00; } for(i=0;i<8;i++) // 第二次读取 { dat2>>= 1; if(ADC_DAT) dat2=dat2|0x80; else dat2=dat2|0x00; WavePlus(); } _nop_(); // 结束此次传输 ADC_DAT = 1; ADC_CLK = 1; ADC_CS = 1; if(dat1==dat2) // 返回采集结果 return dat1; else return 0; } /*********************************************************/ // 定时器初始化 /*********************************************************/ void TimerInit() { TMOD = 0x21; // 使用定时器 SCON = 0x50; // 配置串口寄存器 TH0 = 252; // 给定时器0的TH0装初值 TL0 = 24; // 给定时器0的TL0装初值 TH1 = 0xfd; // 计算波特率的值为9600 TL1 = 0xfd; // 计算波特率的值为9600 ET0 = 1; // 打开定时器0中断 ES = 1; // 打开串口中断 EA = 1; // 打开总中断 TR0 = 1; // 启动定时器0 TR1 = 1; // 启动定时器1 } /*********************************************************/ // 串口发送数据函数 /*********************************************************/ void UartSendData(uchar dat) { SBUF=dat; while(!TI); TI=0; } /*********************************************************/ // 发送数据到蓝牙模块 /*********************************************************/ void SendBlueTooth() { UartSendData(gIndex+48); // 发送当前亮度 UartSendData('/'); if(LED==0) // 发送控制模式 UartSendData('0'); else UartSendData('1'); } /*********************************************************/ // 手动控制 /*********************************************************/ void ManualControl() { // 亮度减少 if(Key2==0) // 如果按键2被按下去 { if(gIndex>0) // 只要当前亮度不为最低才能减少亮度 { gIndex--; // 亮度降低一档 DelayMs(300); // 延时0.3秒 } } // 亮度增加 if(Key3==0) // 如果按键3被按下去 { if(gIndex<9) // 只要当前亮度不为最高才能增加亮度 { gIndex++; // 亮度增加一档 DelayMs(300); // 延时0.3秒 } } } /*********************************************************/ // 自动控制 /*********************************************************/ void AutoControl(uchar num) { if(num<59) // 最亮 gIndex=9; else if((num>65)&&(num<81)) // 第二亮 gIndex=8; else if((num>87)&&(num<103)) // 第三亮 gIndex=7; else if((num>109)&&(num<125)) gIndex=6; else if((num>131)&&(num<147)) gIndex=5; else if((num>153)&&(num<169)) gIndex=4; else if((num>175)&&(num<191)) gIndex=3; else if((num>197)&&(num<213)) gIndex=2; else if((num>219)&&(num<235)) gIndex=1; else if(num>241) // 最暗 gIndex=0; } /*********************************************************/ // 主函数 /*********************************************************/ void main() { uchar i; uchar ret; TimerInit(); // 定时器初始化 LED=0; // 指示灯点亮(自动模式指示灯) ret=Get_ADC0832(); // 获取AD采集结果(环境光照强度) AutoControl(ret); // 上电先进行一次自动亮度控制 AutoControl(ret+7); while(1) { /* 模式切换控制 */ if(Key1==0) // 如果按键1被按下去 { LED=~LED; // 切换LED灯状态 if(LED==0) // 如果切换后是自动模式的话 { ret=Get_ADC0832(); // 获取AD采集结果(环境光照强度) AutoControl(ret); // 进行一次自动亮度调整 AutoControl(ret+7); } DelayMs(10); // 延时消除按键按下的抖动 while(!Key1); // 等待按键释放 DelayMs(10); // 延时消除按键松开的抖动 } /* 亮度控制 */ if(LED==1) // 如果LED是灭的 { for(i=0;i<20;i++) { ManualControl(); // 则进行手动控制 DelayMs(10); } } else // 如果LED是亮的 { if(gTime<30000) // 如果最近30秒内检测到有人 { ret=Get_ADC0832(); // 获取AD采集结果(环境光照强度) AutoControl(ret); // 进行自动控制 } DelayMs(200); } *********//完整资料 */***微信公众号:木子单片机****/ /*检测是否有人*/ if(Module==1) { gTime=0; // 检测到有人,则把30秒计时清零 } if(gTime>30000) // 如果gTime的值超过了30000 { gTime=30000; // 则把gTime的值重新赋值为30000,避免过大溢出 if(LED==0) { gIndex=0; // 如果30秒检测不到有人,则把台灯熄灭 } } /* 发送数据到手机蓝牙 */ SendBlueTooth(); } }

硬件设计

使用元器件:

单片机:STC89C51;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

11.0592M晶振;30pF独石电容;

10uF 25V电解电容;1K 0.25W电阻;

10K 0.25W 电阻;6.5*6.5*5 按键;

5V USB小灯;USB-A母座;

5516 光敏电阻;ADC0832 芯片;

8Pin IC座(ADC0832座);

3mm 绿led ;9*15洞洞板;

S8550(PNP)三极管;

HC-SR501 人体红外热释传感器;

3Pin排座(热释传感器座子);

4Pin排座(蓝牙模块座子);

HC-06蓝牙模块 ;

8.8*8.5 双排自锁开关;

DC3.5*1.1电源座;

导线:若干;

添加图片注释,不超过 140 字(可选)

流程图:

添加图片注释,不超过 140 字(可选)

设计资料

01仿真图

本设计使用Proteus8.3和Proteus8.9两个版本设计!具体如图!

添加图片注释,不超过 140 字(可选)

02原理图

本系统原理图采用Altium Designer19设计,具体如图!

添加图片注释,不超过 140 字(可选)

03程序

本设计使用软件keil5版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

04PCB

本系统PCB采用Altium Designer19设计,具体如图!

添加图片注释,不超过 140 字(可选)

05设计资料

资料获取请看前面演示视频,全部资料包括仿真源文件 、AD原理图、程序(含注释)、PCB、结构框图、流程图、元件清单等。具体内容如下,全网最全! !

操作演示请观看前面演示视频!

点赞分享一起学习成长。

http://www.jsqmd.com/news/1067084/

相关文章:

  • 郑州领航机器人有限公司:智造机器人末端硬核力量
  • MCU通信外设实战:FlexCAN与I2C寄存器级配置与调试指南
  • 从合规到竞争力,AI公平性如何创造ROI:2026奇点大会实测数据揭示——采用新指标的企业模型拒贷偏差下降68.3%
  • DMAIC五步法技术实操指南:从Minitab到Python的完整路径
  • 【JAVA毕设源码分享】基于springboot校园排球俱乐部信息管理系统(程序+文档+代码讲解+一条龙定制)
  • 呼和浩特玉泉区黄金上门回收六店一览即时变现 - 全城黄金专业上门回收
  • Trae与Skill:Go原生智能任务执行体与可部署技能单元解析
  • 京东自动化脚本神器Thread:免费解放双手,轻松搞定每日任务
  • 琳洛俪黄金回收贵阳实体门店实测2026金价回收避坑全攻略 - 润富黄金回收
  • 2026板材流行新趋势真实还原天然石材纹理和质感 - 资讯快报
  • 嵌入式Android系统移植与优化:基于PowerPC架构MPC8536平台的实战指南
  • LibreDWG终极指南:解决AutoCAD 2022 DWG文件读取错误的技术深度解析
  • Win11 原生连 iPhone 教程!电脑接打电话、同步通知,但有两个巨大短板要提前知道
  • 终极解决方案:N_m3u8DL-RE一站式解决流媒体视频保存难题
  • AI时代程序员的不可替代性:从搬砖码农到架构师的四阶跃迁
  • AdGuard浏览器扩展:3分钟打造无广告、高隐私的纯净上网体验
  • RAG 中的分块技术深度解析:检索精度的第一道分水岭
  • 2026 银川极窄玻璃隔断厨房门,派雅门窗现货款式齐全 - 优质企业观察收录
  • 2026年广告行业管理软件深度测评:如何为你的广告企业匹配最佳方案? - 资讯速览
  • 终极指南:从源码编译HMCL启动器的完整流程与专业配置
  • 如何5分钟实现Blender到虚幻引擎的无缝迁移?终极Datasmith插件完整指南
  • 市面上热门的AI智能体平台数字人
  • Source Han Serif CN 免费开源字体:7种字重完整指南与实战应用
  • AI 写代码又快又好?你可能少了最关键的一步
  • 兰州汽车贴膜实测排名:哪家玻璃膜技术最靠谱?
  • 2026年安徽中考100—200分公办择校,首选安徽建工技师学院 - 我叫小周
  • 2026青岛投资金条回收门店精选,无损测金核验完成即刻全款转账 - 名奢变现站
  • 南宁全城黄金回收门店盘点 今日金价938元 覆盖测评 - 余生黄金回收
  • 黎曼流形上耦合表示学习的收敛性分析:从离散群体动力学到连续流
  • LangSmith深度解析:打造LLM应用可观测性闭环,从入门到实战全攻略!