毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计
基于51单片机的手机蓝牙控制8位LED灯亮灭设计
- 1、项目简介
- 1.1 系统构成
- 1.2 系统功能
- 2、部分电路设计
- 2.1 STC89C52单片机核心系统电路设计
- 2.2 LED电路设计
- 2.3 蓝牙模块电路设计
- 3、部分代码展示
- 3.1 定时器初始化以及中断处理
- 3.2 串口初始化
- 3.3 串口中断处理
1、项目简介
- 选题指导,项目分享: https://gitee.com/lighter-z/embedded-base/tree/master
- 点击查看详细资料
1.1 系统构成
本设计由STC89C52单片机电路+8位LED灯电路+蓝牙模块电路+电源电路组成。
1.2 系统功能
- 1、通过手机APP可以控制8路LED灯的亮灭。
- 2、通过手机APP可以控制8路LED灯的亮度。每个灯的亮度有3档。
- 3、可以发送指令控制8个灯全灭和全亮。
- 蓝牙发送数据内容:
ON // 打开所有灯 大写字母’O’
SN // 关闭所有灯
Ax //一档打开 第x个灯 x为1-8中的一个数 如A2表示把led2灯打开的亮度为1挡
Bx //二档打开 第x个灯 x为1-8中的一个数 如A2表示把led2灯打开的亮度为2挡
Cx //三档打开 第x个灯 x为1-8中的一个数 如A2表示把led2灯打开的亮度为3挡
- 蓝牙发送数据内容:
2、部分电路设计
2.1 STC89C52单片机核心系统电路设计
STC89C52单片机最小系统电路由复位电路、时钟电路和电源电路。拥有这三部分电路后,单片机即可正常工作。
单片机最小系统原理图如下图所示:

2.2 LED电路设计
LED电路由8个LED构成,通过上拉电阻连接在51单片机的P0端口。
其具体电路原理图如下图所示:

实物图如下图所示:

2.3 蓝牙模块电路设计
本设计中使用JDY-30蓝牙模块,将蓝牙模块的RX引脚连接在51单片机的P31引脚,TX引脚连接在单片机的P30引脚。
蓝牙模块是指集成蓝牙功能的芯片基本电路集合,用于无线网络通讯。本蓝牙模块就是为了只能无线数据传输而专门打造的,本模块支持串行接口,支持SP蓝牙串口协议,具有成本低、体积小、收发灵敏性高等特点,只需配备少许的外围元件就能实现大功能。
其具体电路原理图如下图所示:

实物图如下:

3、部分代码展示
3.1 定时器初始化以及中断处理
void Init_Timer0(void)
{TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 TH0=(65536-10000)/256; //重新赋值 20msTL0=(65536-10000)%256;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开
}void Timer0_isr(void) interrupt 1
{TH0=(65536-5000)/256; //重新赋值 5msTL0=(65536-5000)%256;times_5ms++;}
3.2 串口初始化
void UART_Init(void)
{SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收 TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHzTL1 = TH1; TR1 = 1; // TR1: timer 1 打开 EA = 1; //打开总中断ES = 1; //打开串口中断
}
3.3 串口中断处理
void UART_SER (void) interrupt 4 //串行中断服务程序
{unsigned char R_buf;if(RI) //判断是接收中断产生{RI=0; //标志位清零R_buf=SBUF;if((R_buf=='O')||(R_buf=='o')){Commd_Flag=OPEN; //接收到打开灯标志}else if((R_buf=='S')||(R_buf=='s')){Commd_Flag=CLOSE; //接收到 关闭灯标志}else if((R_buf=='A')||(R_buf=='a')){ Commd_Flag=DAGN01; //接收到 关闭灯标志}else if((R_buf=='B')||(R_buf=='b')){Commd_Flag=DAGN02; //接收到 关闭灯标志}else if((R_buf=='C')||(R_buf=='c')){Commd_Flag=DAGN03; //接收到 关闭灯标志}else if((R_buf!='1')&&(R_buf!='2')&&(R_buf!='3')&&(R_buf!='4')&&(R_buf!='5')&&(R_buf!='6')&&(R_buf!='7')&&(R_buf!='8')&&(R_buf!='N')){Commd_Flag=INIT; //否则 初始化接受标志}if((Commd_Flag==OPEN)||(Commd_Flag==DAGN01)) //根据命令值进行打开相应的灯{switch(R_buf){case '1':pwmLed01=3;Commd_Flag=INIT;break; //打开相应的灯 并恢复命令标志case '2':pwmLed02=3;Commd_Flag=INIT;break; case '3':pwmLed03=3;Commd_Flag=INIT;break; case '4':pwmLed04=3;Commd_Flag=INIT;break; case '5':pwmLed05=3;Commd_Flag=INIT;break; case '6':pwmLed06=3;Commd_Flag=INIT;break; case '7':pwmLed07=3;Commd_Flag=INIT;break; case '8':pwmLed08=3;Commd_Flag=INIT;break;case 'N':pwmLed01=3;pwmLed02=3;pwmLed03=3;pwmLed04=3;pwmLed05=3;pwmLed06=3;pwmLed07=3;pwmLed08=3;Commd_Flag=INIT;break;default:break; //此处错误判断 不可恢复命令标准}}
else if(Commd_Flag==CLOSE)//根据命令值进行关闭相应的灯{switch(R_buf){case '1':pwmLed01=1;Commd_Flag=INIT;break; //打开相应的灯 并恢复命令标志case '2':pwmLed02=1;Commd_Flag=INIT;break; case '3':pwmLed03=1;Commd_Flag=INIT;break; case '4':pwmLed04=1;Commd_Flag=INIT;break; case '5':pwmLed05=1;Commd_Flag=INIT;break; case '6':pwmLed06=1;Commd_Flag=INIT;break; case '7':pwmLed07=1;Commd_Flag=INIT;break; case '8':pwmLed08=1;Commd_Flag=INIT;break;case 'N':pwmLed01=1;pwmLed02=1;pwmLed03=1;pwmLed04=1;pwmLed05=1;pwmLed06=1;pwmLed07=1;pwmLed08=1;Commd_Flag=INIT;break;default:break; //此处错误判断 不可恢复命令标准}}else if(Commd_Flag==DAGN02)//根据命令值进行关闭相应的灯{switch(R_buf){case '1':pwmLed01=6;Commd_Flag=INIT;break; //打开相应的灯 并恢复命令标志case '2':pwmLed02=6;Commd_Flag=INIT;break; case '3':pwmLed03=6;Commd_Flag=INIT;break; case '4':pwmLed04=6;Commd_Flag=INIT;break; case '5':pwmLed05=6;Commd_Flag=INIT;break; case '6':pwmLed06=6;Commd_Flag=INIT;break; case '7':pwmLed07=6;Commd_Flag=INIT;break; case '8':pwmLed08=6;Commd_Flag=INIT;break; default:break; //此处错误判断 不可恢复命令标准}}else if(Commd_Flag==DAGN03)//根据命令值进行关闭相应的灯{switch(R_buf){case '1':pwmLed01=9;Commd_Flag=INIT;break; //打开相应的灯 并恢复命令标志case '2':pwmLed02=9;Commd_Flag=INIT;break; case '3':pwmLed03=9;Commd_Flag=INIT;break; case '4':pwmLed04=9;Commd_Flag=INIT;break; case '5':pwmLed05=9;Commd_Flag=INIT;break; case '6':pwmLed06=9;Commd_Flag=INIT;break; case '7':pwmLed07=9;Commd_Flag=INIT;break; case '8':pwmLed08=9;Commd_Flag=INIT;break; default:break; //此处错误判断 不可恢复命令标准}}SBUF=R_buf; //返回接收到的数据}if(TI) //如果是发送标志位,清零TI=0;
}
相关文章:
毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计
基于51单片机的手机蓝牙控制8位LED灯亮灭设计1、项目简介1.1 系统构成1.2 系统功能2、部分电路设计2.1 STC89C52单片机核心系统电路设计2.2 LED电路设计2.3 蓝牙模块电路设计3、部分代码展示3.1 定时器初始化以及中断处理3.2 串口初始化3.3 串口中断处理1、项目简介 选题指导&…...
一起Talk Android吧(第五百零八回:多层布局功能)
文章目录功能介绍使用方法示例代码各位看官们大家好,上一回中咱们说的例子是"图片滤镜ImageFilterView",这一回中咱们说的例子是" 多层布局功能"。闲话休提,言归正转, 让我们一起Talk Android吧!功能介绍 我…...
丁小喜の兵器谱(学生管理系统)
我的第一个独立看需求完成项目,虽然很简单(笑)建立一个可以增加,修改,删除,展示学生信息的系统首先是一个界面,让你决定进行哪个操作1.2.3.4.5分别对应不同的操作,switch与这一操作完…...
linux:字符串拷贝的五种方法:使用指针下标,指针变量加偏移量,指针变量自加等
字符串数组名做函数形参,会退化正指针变量,需要使用指针变量操作字符串 代码: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <s…...
cesium常用方法汇集(工具篇)
1.Scene.prototype.pickPositionWorldCoordinates 根据屏幕坐标获取世界坐标 2,Scene.prototype.pickPosition 根据屏幕坐标获取世界坐标 3,Scene.prototype.drillPick 通过屏幕坐标拾取多个对象 4,Scene.prototype.pickFromRay 通过射线拾…...
分布式一致性与共识算法(一)
这里写目录标题是什么ACIDCAP组合一致性概念共识为什么需要共识算法会如何发展列举Paxos算法ZAB(Zookeeper Atomic Broadcast)协议Raft 算法参考引用是什么 从实现效果上来说,很多人或多或少都了解或者设计过具有强一致性的系统。但是&#…...
C++---最长上升子序列模型---怪盗基德的滑翔翼(每日一道算法2023.2.27)
注意事项: 本题为"线性dp—最长上升子序列的长度"的扩展题,所以dp思路这里就不再赘述。 题目: 怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。 而他最为突出的地方,就是他每次都能逃脱中…...
Python 之 Pandas 文件操作和读取 CSV 参数详解
文章目录一、Pandas 读取文件二、CSV 文件读取1. 基本参数2. 通用解析参数3. 空值处理相关参数4. 时间处理相关参数5. 分块读入相关参数一、Pandas 读取文件 当使用 Pandas 做数据分析的时,需要读取事先准备好的数据集,这是做数据分析的第一步。Panda 提…...
微服务的异步通信技术RabbitMQ
文章目录前言1.WorkQueue(工作队列)消息预取机制2.Publish&Subscribe(发布-订阅)1.Fanout(广播)2.DirectExchange(路由)3.TopicExchange(话题)MQ的优点前…...
Word处理控件Aspose.Words功能演示:使用 C++ 在 Word (DOC/DOCX) 中添加或删除水印
Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处…...
chatGPT模型原理
文章目录简介BertGPT 初代GPT-2GPT-3chatGPT开源ChatGPT简介 openai 的 GPT 大模型的发展历程。 Bert 2018年,自然语言处理 NLP 领域也步入了 LLM 时代,谷歌出品的 Bert 模型横空出世,碾压了以往的所有模型,直接在各种NLP的建模…...
四、阻塞队列
文章目录基础概念生产者消费者概念JUC阻塞队列的存取方法ArrayBlockingQueueArrayBlockingQueue的基本使用生产者方法实现原理ArrayBlockingQueue的常见属性add方法实现offer方法实现offer(time,unit)方法put方法消费者方法实现原理remove方法poll方法poll(time,unit)方法take方…...
企业电子招投标采购系统源码之登录页面
信息数智化招采系统 服务框架:Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构:VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术:Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…...
SQL零基础入门学习(十三)
上一篇(SQL零基础入门学习(十二)) SQL 视图(Views) 视图是可视化的表。 SQL CREATE VIEW 语句 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。 视图包含行和列,就像一个…...
Java实现简单KV数据库
用Java实现一个简单的KV数据库 开发思路: 用map存储数据,再用一个List记录操作日志,开一个新线程将List中的操作写入日志文件中,再开一个线程用于网络IO服务接收客户端的命令,再启动时检查日志,如果有数据就…...
【Spark分布式内存计算框架——Spark Streaming】5. DStream(上)
3. DStream SparkStreaming模块将流式数据封装的数据结构:DStream(Discretized Stream,离散化数据流,连续不断的数据流),代表持续性的数据流和经过各种Spark算子操作后的结果数据流。 3.1 DStream 是什么…...
Spring系列-9 Async注解使用与原理
背景: 本文作为Spring系列的第九篇,介绍Async注解的使用、注意事项和实现原理,原理部分会结合Spring框架代码进行。 本文可以和Spring系列-8 AOP原理进行比较阅读 1.使用方式 Async一般注解在方法上,用于实现方法的异步…...
Python自动化测试实战篇(6)用PO分层模式及思想,优化unittest+ddt+yaml+request登录接口自动化测试
这些是之前的文章,里面有一些基础的知识点在前面由于前面已经有写过,所以这一篇就不再详细对之前的内容进行描述 Python自动化测试实战篇(1)读取xlsx中账户密码,unittest框架实现通过requests接口post登录网站请求&…...
Linux 进程:父子进程
目录一、了解子进程二、创建子进程1.创建子进程2.区分父子进程三、理解子进程四、创建子进程的意义进程就是运行中的应用程序,如果一个程序较为庞大,我们可以给这个程序创建多个进程,每个进程负责一部分代码的运行。 A进程如果创建了B进程&am…...
Unity 之 实现读取代码写进Word文档功能实现 -- 软著脚本生成工具
Unity 之 实现读取代码写进Word文档功能前言一,实现步骤1.1 逻辑梳理1.2 用到工具二,实现读写文件2.1 读取目录相关2.2 读写文件三,编辑器拓展3.1 编辑器拓展介绍3.2 实现界面可视化四,源码分享4.1 工具目录4.2 完整代码前言 之所…...
E-GEO:基于多智能体架构的AI搜索引擎优化工具实战指南
1. 项目概述:E-GEO,一个为AI搜索引擎而生的零门槛优化工具 如果你和我一样,最近几个月一直在琢磨怎么让自家网站的内容在ChatGPT、Claude、Perplexity这些AI搜索引擎里排得更靠前,那你肯定听说过“生成式引擎优化”这个概念。传统…...
0401开源光刻机整机控制与量检测系统(A级 中期集中攻坚)1. 开源套刻精度核心原理
开源光刻机整机控制与量检测系统(A级 中期集中攻坚) 1. 开源套刻精度核心原理(全参数开源硬核工程溯源喂饭级量化) 前置硬核声明 本文100%开源所有套刻精度核心参数、误差公式、耦合模型、制程阈值、国产实测短板数据,…...
作为一个网聊经常冷场的人,我试了试几款聊天回复神器
平时在线下跟人沟通还好,但一到微信或者Soul这种线上聊天环境,我就特别容易卡壳。尤其是遇到对方发来一些带有情绪的话,我经常不知道怎么接,打了一堆字又默默删掉,最后回个“哈哈”或者“早点休息”,硬生生…...
ToDesk、向日葵、UU远程横评:谁才是2026国产远控首
ToDesk、向日葵、UU远程横评:谁才是2026国产远控首选一、前言:国产远控崛起,2026 怎么选?远程控制早已从 “小众工具” 变成个人、办公、游戏、运维的刚需。2026 年国产远控阵营已全面崛起,ToDesk、向日葵、UU 远程成为…...
5分钟免费激活Windows和Office:KMS_VL_ALL_AIO完整使用指南
5分钟免费激活Windows和Office:KMS_VL_ALL_AIO完整使用指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统未激活的烦恼而困扰吗?想要免费使用完整功能…...
基于Nuxt 4与Shadcn/ui的现代化全栈仪表板模板开发指南
1. 项目概述:一个现代化的全栈仪表板起点如果你正在寻找一个能快速启动企业级后台管理、数据可视化或内容管理系统的技术栈,那么你很可能已经厌倦了从零开始配置的繁琐。每次新项目,都要重新折腾 Nuxt 的配置、UI 组件库的集成、样式工具链、…...
毫米波雷达ADAS实战:TI AWR1843芯片上的信号处理链优化心得(附FFT与CFAR配置要点)
毫米波雷达ADAS实战:TI AWR1843芯片上的信号处理链优化心得 在智能驾驶领域,毫米波雷达因其全天候工作能力和稳定的测距测速性能,成为ADAS系统的核心传感器之一。德州仪器(TI)的AWR1843作为一款高度集成的毫米波雷达So…...
Degrees of Lewdity中文本地化完全指南:解决游戏语言障碍的3个实用技巧
Degrees of Lewdity中文本地化完全指南:解决游戏语言障碍的3个实用技巧 你是否因Degrees of Lewdity英文界面而无法深入体验游戏?是否曾因汉化步骤繁琐而放弃尝试?本指南将通过模块化解决方案,帮助你快速完成游戏汉化,…...
给视觉开发新手的保姆级教程:在Ubuntu上从下载源码到成功运行Demo,搞定OpenCV 3环境搭建
给视觉开发新手的保姆级教程:在Ubuntu上从下载源码到成功运行Demo,搞定OpenCV 3环境搭建 第一次在Ubuntu上搭建OpenCV开发环境,对很多视觉开发新手来说可能是个令人望而生畏的任务。命令行操作、编译工具链、环境配置……这些术语听起来就让人…...
杰理之部分芯片跑2.3G出现连接不上【篇】
部分芯片跑2.3G出现连接不上...
