盐城市亭湖区城乡建设局网站,如何在网上挣钱,做网站的外包公司有哪些,企业微信小程序如何开发基于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; //使用模式116位定时器使用|符号可以在使用多个定时器时不受影响 TH0(65536-10000)/256; //重新赋值 20msTL0(65536-10000)%256;EA1; //总中断打开ET01; //定时器中断打开TR01; //定时器开关打开
}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) //判断是接收中断产生{RI0; //标志位清零R_bufSBUF;if((R_bufO)||(R_bufo)){Commd_FlagOPEN; //接收到打开灯标志}else if((R_bufS)||(R_bufs)){Commd_FlagCLOSE; //接收到 关闭灯标志}else if((R_bufA)||(R_bufa)){ Commd_FlagDAGN01; //接收到 关闭灯标志}else if((R_bufB)||(R_bufb)){Commd_FlagDAGN02; //接收到 关闭灯标志}else if((R_bufC)||(R_bufc)){Commd_FlagDAGN03; //接收到 关闭灯标志}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_FlagINIT; //否则 初始化接受标志}if((Commd_FlagOPEN)||(Commd_FlagDAGN01)) //根据命令值进行打开相应的灯{switch(R_buf){case 1:pwmLed013;Commd_FlagINIT;break; //打开相应的灯 并恢复命令标志case 2:pwmLed023;Commd_FlagINIT;break; case 3:pwmLed033;Commd_FlagINIT;break; case 4:pwmLed043;Commd_FlagINIT;break; case 5:pwmLed053;Commd_FlagINIT;break; case 6:pwmLed063;Commd_FlagINIT;break; case 7:pwmLed073;Commd_FlagINIT;break; case 8:pwmLed083;Commd_FlagINIT;break;case N:pwmLed013;pwmLed023;pwmLed033;pwmLed043;pwmLed053;pwmLed063;pwmLed073;pwmLed083;Commd_FlagINIT;break;default:break; //此处错误判断 不可恢复命令标准}}
else if(Commd_FlagCLOSE)//根据命令值进行关闭相应的灯{switch(R_buf){case 1:pwmLed011;Commd_FlagINIT;break; //打开相应的灯 并恢复命令标志case 2:pwmLed021;Commd_FlagINIT;break; case 3:pwmLed031;Commd_FlagINIT;break; case 4:pwmLed041;Commd_FlagINIT;break; case 5:pwmLed051;Commd_FlagINIT;break; case 6:pwmLed061;Commd_FlagINIT;break; case 7:pwmLed071;Commd_FlagINIT;break; case 8:pwmLed081;Commd_FlagINIT;break;case N:pwmLed011;pwmLed021;pwmLed031;pwmLed041;pwmLed051;pwmLed061;pwmLed071;pwmLed081;Commd_FlagINIT;break;default:break; //此处错误判断 不可恢复命令标准}}else if(Commd_FlagDAGN02)//根据命令值进行关闭相应的灯{switch(R_buf){case 1:pwmLed016;Commd_FlagINIT;break; //打开相应的灯 并恢复命令标志case 2:pwmLed026;Commd_FlagINIT;break; case 3:pwmLed036;Commd_FlagINIT;break; case 4:pwmLed046;Commd_FlagINIT;break; case 5:pwmLed056;Commd_FlagINIT;break; case 6:pwmLed066;Commd_FlagINIT;break; case 7:pwmLed076;Commd_FlagINIT;break; case 8:pwmLed086;Commd_FlagINIT;break; default:break; //此处错误判断 不可恢复命令标准}}else if(Commd_FlagDAGN03)//根据命令值进行关闭相应的灯{switch(R_buf){case 1:pwmLed019;Commd_FlagINIT;break; //打开相应的灯 并恢复命令标志case 2:pwmLed029;Commd_FlagINIT;break; case 3:pwmLed039;Commd_FlagINIT;break; case 4:pwmLed049;Commd_FlagINIT;break; case 5:pwmLed059;Commd_FlagINIT;break; case 6:pwmLed069;Commd_FlagINIT;break; case 7:pwmLed079;Commd_FlagINIT;break; case 8:pwmLed089;Commd_FlagINIT;break; default:break; //此处错误判断 不可恢复命令标准}}SBUFR_buf; //返回接收到的数据}if(TI) //如果是发送标志位清零TI0;
}