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; }