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

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

0、毕业设计选题原则说明(重点)

  • 选题之前,同学们要弄明白一件事情,做毕业设计是干什么用的!
  • 这里我告诉大家,毕业设计对于你来说,不是让你去搞研究,掌握运用所学知识的,也不是让你去比谁做的毕业设计多么牛逼,多么厉害。
  • 说白点,它的作用就是一个,让你顺利毕业,能够拿到学位证,毕业证而已!!!
  • 当你明白这一点后,作毕业设计的要求就是在满足老师的要求后,越简单越好,这样不但容易去做,而且你自己也容易去理解,掌握,同样也能花最少的钱!!!
  • 满足老师的要求,这个没办法,毕竟他是决定你是否能通过答辩的人。
  • 每年都有很多同学找到我的时候,后悔当初为什么要把功能写的那么复杂,后悔没有提前找我咨询一下!所以在这里提醒同学们,提交开题报告之前一定要多想想,咨询下以往的学长学姐,不要自己随便写一堆提交上去!!!
  • 大家找不到学长学姐的话,也可以找我咨询,我可以给大家一些建议
  • 点击此处即可咨询

1、项目简介

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;      //重新赋值 20ms
  TL0=(65536-10000)%256;
  EA=1;            //总中断打开
  ET0=1;           //定时器中断打开
  TR0=1;           //定时器开关打开
}
void Timer0_isr(void) interrupt 1 
{
  TH0=(65536-5000)/256;     //重新赋值 5ms
  TL0=(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.0592MHz
  TL1 = 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;
}


相关文章
|
6月前
4-2 51单片机点亮LED
4-2 51单片机点亮LED
63 2
|
1月前
|
Android开发 Swift iOS开发
python 基于电脑蓝牙连接获取手机的实时数据
python 基于电脑蓝牙连接获取手机的实时数据
53 0
|
6月前
|
语音技术 物联网 程序员
51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结-2
51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结-2
51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结-2
|
6月前
|
语音技术 传感器
51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结-1
51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结-1
51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结-1
【51单片机】Kn独立按键控制【LED亮灭】【LED状态】【LED二进制式显示】【LED不断移位】(4)
【51单片机】Kn独立按键控制【LED亮灭】【LED状态】【LED二进制式显示】【LED不断移位】(4)
|
6月前
|
编译器 C语言 C++
【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)
【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
|
6月前
|
C语言
独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”
独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”
|
6月前
|
C语言
点亮一个LED+LED闪烁+LED流水灯——“51单片机”
点亮一个LED+LED闪烁+LED流水灯——“51单片机”
|
6月前
|
编译器 C语言 开发者
单片机原理与应用:探索微型计算机世界
单片机原理与应用:探索微型计算机世界
57 1

热门文章

最新文章