基于51单片机的手机蓝牙控制8位LED灯亮灭设计

1、系统功能介绍

本设计题目为基于51单片机的手机蓝牙控制8位LED灯亮灭设计。该系统以STC89C52单片机为核心,结合蓝牙模块与LED灯驱动电路,实现了通过手机蓝牙APP对8个LED灯的远程控制。与传统的简单LED点亮电路相比,本系统不仅可以实现对单个LED的开关控制,还能够实现亮度调节和批量控制,具有较强的互动性和应用价值。

系统的主要功能包括:

  1. 单灯控制:通过手机发送命令,可以选择任意一盏LED灯并设置其亮灭状态及亮度等级。
  2. 亮度分级控制:每个LED灯支持三档亮度调节,利用PWM技术实现1档(低亮度)、2档(中亮度)、3档(高亮度)的逐级调节。
  3. 全灯控制:通过手机APP可一键点亮或关闭全部8盏LED灯,方便快捷。
  4. 无线通信:通过蓝牙串口模块(如HC-05或HC-06),实现手机APP与单片机之间的数据传输。
  5. 人机交互性:用户仅需在手机APP上点击或发送指令即可控制灯光,无需复杂操作,提升系统的实用性和易用性。

2、电路设计

2.1 主控电路设计(STC89C52单片机)

STC89C52是一款基于8051内核的增强型单片机,具有丰富的I/O口资源和定时器功能,非常适合用于本系统。

在本系统中,单片机的主要作用为:

  • 通过串口与蓝牙模块进行通信,接收手机发送的指令;
  • 对指令进行解析,判断是控制单个灯、全部灯还是调节亮度;
  • 根据指令输出对应的PWM信号,驱动LED灯点亮或熄灭;
  • 控制流程逻辑,保证指令与LED灯状态实时对应。

2.2 蓝牙通信模块电路

系统选用HC-05蓝牙串口模块,其支持AT命令配置,可工作在主机或从机模式。在本设计中,HC-05设置为从机模式,手机APP作为主机进行控制。

  • 蓝牙模块通过TXD、RXD引脚与单片机串口P3.0(RXD)、P3.1(TXD)连接,实现数据双向传输。
  • 波特率一般设置为9600bps,保证通信稳定。

2.3 8位LED灯电路

  • 采用8个独立的LED灯,每个LED通过限流电阻与单片机I/O口连接。
  • 为了实现亮度的分档控制,单片机通过定时器产生不同占空比的PWM波来驱动LED。
  • 系统中8位LED对应单片机的P1口(P1.0~P1.7),可以独立控制每一盏灯的开关与亮度。

2.4 电源电路

  • 系统采用+5V直流电源供电,蓝牙模块与单片机均使用5V电压工作。
  • 当系统使用移动电源时,可以方便在便携场景下使用。

3、程序设计

3.1 系统总体框架

系统程序分为以下几个主要部分:

  1. 串口初始化与通信程序:完成与蓝牙模块的数据交互。
  2. 指令解析程序:解析手机发送的ON、SN、Ax、Bx、Cx等指令。
  3. PWM控制程序:根据指令控制LED的占空比,从而实现亮度分级控制。
  4. 状态管理程序:记录当前每盏灯的状态(开关及亮度等级),以便后续指令更新。

主循环流程如下:

  • 初始化单片机、串口与定时器;
  • 等待接收手机指令;
  • 判断指令类别并执行相应的LED控制操作;
  • 刷新LED灯显示效果。

3.2 串口通信程序

c 复制代码
#include <reg52.h>
#include <string.h>

#define uchar unsigned char
#define uint unsigned int

sbit LED1 = P1^0;
sbit LED2 = P1^1;
// ... 依次定义到 P1^7

char cmd[3];   // 存储接收到的指令
uint pwm_count = 0;  // PWM计数

void Uart_Init(void) {
    TMOD = 0x20;  // 定时器1工作在方式2
    TH1 = 0xFD;   // 波特率9600
    TL1 = 0xFD;
    TR1 = 1;
    SCON = 0x50;  // 串口方式1,REN=1
    EA = 1;
    ES = 1;
}

void Uart_ISR(void) interrupt 4 {
    static uchar i = 0;
    if(RI) {
        RI = 0;
        cmd[i] = SBUF;
        i++;
        if(i >= 2) { 
            cmd[2] = '\0'; // 形成指令字符串
            i = 0;
        }
    }
}

3.3 指令解析程序

c 复制代码
void Parse_Command(void) {
    if(strcmp(cmd, "ON") == 0) {
        P1 = 0xFF;   // 所有LED全亮
    }
    else if(strcmp(cmd, "SN") == 0) {
        P1 = 0x00;   // 所有LED全灭
    }
    else if(cmd[0] == 'A') {
        int led_num = cmd[1] - '1';  // 计算灯编号
        Set_LED(led_num, 1);  // 一档
    }
    else if(cmd[0] == 'B') {
        int led_num = cmd[1] - '1';
        Set_LED(led_num, 2);  // 二档
    }
    else if(cmd[0] == 'C') {
        int led_num = cmd[1] - '1';
        Set_LED(led_num, 3);  // 三档
    }
}

3.4 PWM控制程序

为了实现三档亮度控制,可以通过不同占空比PWM波驱动LED:

  • 一档:20% 占空比
  • 二档:60% 占空比
  • 三档:100% 占空比
c 复制代码
uchar led_state[8];  // 存储每盏灯的亮度档位

void Timer0_Init(void) {
    TMOD |= 0x01;  
    TH0 = 0xFC;   // 定时器初值
    TL0 = 0x18;
    ET0 = 1;
    EA = 1;
    TR0 = 1;
}

void Timer0_ISR(void) interrupt 1 {
    uint i;
    TH0 = 0xFC;
    TL0 = 0x18;
    pwm_count++;
    if(pwm_count >= 100) pwm_count = 0;

    for(i=0; i<8; i++) {
        if(led_state[i] == 1) { // 一档 20%
            if(pwm_count < 20) P1 |= (1<<i);
            else P1 &= ~(1<<i);
        }
        else if(led_state[i] == 2) { // 二档 60%
            if(pwm_count < 60) P1 |= (1<<i);
            else P1 &= ~(1<<i);
        }
        else if(led_state[i] == 3) { // 三档 100%
            P1 |= (1<<i);
        }
        else {
            P1 &= ~(1<<i); // 关灯
        }
    }
}

3.5 LED控制函数

c 复制代码
void Set_LED(int num, int level) {
    if(num >= 0 && num < 8) {
        led_state[num] = level;
    }
}

4、总结

本设计基于STC89C52单片机,结合蓝牙模块和8位LED电路,实现了远程无线灯光控制。用户通过手机APP即可对LED灯进行逐个控制,调节其亮度等级,还能实现全部灯光的统一开关。系统采用PWM技术保证亮度控制的平滑性,同时利用蓝牙串口通信实现人机交互,具有良好的扩展性和应用价值。

该设计不仅展示了单片机在智能控制中的灵活性,也为蓝牙通信与多灯控制的结合提供了参考,可进一步扩展至智能家居照明系统等领域。

相关推荐
张人玉4 小时前
C# TCP 开发笔记(TcpListener/TcpClient)
stm32·单片机·嵌入式硬件
CHANG_THE_WORLD4 小时前
Windows程序字符串处理与逆向分析
windows·stm32·单片机
赵渝强老师4 小时前
【赵渝强老师】MongoDB的分布式存储架构
分布式·mongodb·架构
A9better5 小时前
嵌入式开发学习日志30——stm32之定时器中断简单项目练习
stm32·单片机·嵌入式硬件·学习
充哥单片机设计5 小时前
【STM32项目开源】基于STM32的智能电子秤
stm32·单片机·嵌入式硬件
非凡ghost6 小时前
极简时钟APP(手机全能计时工具) 极简版
windows·智能手机·软件需求
学不动CV了8 小时前
C语言(FreeRTOS)中堆内存管理分析Heap_1、Heap_2、Heap_4、Heap_5详细分析与解析(二)
linux·c语言·arm开发·stm32·单片机·51单片机
计算机毕业设计小帅13 小时前
【2026计算机毕业设计】基于Springboot的Android校园周边美食汇系统
android·spring boot·课程设计
10001hours14 小时前
(基于江协科技)51单片机入门:7.LED点阵屏
科技·嵌入式硬件·51单片机