前言:作者想要帮助一些童鞋和爱好者进行项目构建,但自知能力有限,不喜可论,创作不易,勿喷。
系统由STC89C51单片机、4路继电器、蓝牙模块及电源组成。
可以说是一个非常简单的设计,但这里我来说明一些内容。
第一,项目第一步我们应该干什么?
画图?写程序?还是画仿真?这些都不是。我认为第一步应该清楚我们需要干什么,这是画图,写程序之前需要理解的。
第二,我们做这些需要用到什么?这其中包括软件需要用到什么硬件需要用到什么,还有相应的单片机端口应该怎样选择?
第三,如果我们想要做成这个东西,那么我们中间遇到问题应该怎么办?需要哪些平台?
针对这三个问题,我一一来解答,对于这个系统来说:
第一,我们需要干什么?
从设计要求来看,就是利用蓝牙模块来控制4个继电器的开断。
好,那么问题就来了。蓝牙是否能够直接控制继电器,如同esp8266一样?答案显然是不能的。那么蓝牙要通过单片机控制继电器。现在我们就有一个很简单的一个模型。
手机蓝牙 (通信) ==> 板载蓝牙 (通信) ==> STC89C51单片机(控制) ==>继电器;
当然继电器模型后面还可以跟其他外设,但是我们这里就不继续添加,理解好电气原理即可。
第二,我们需要用到什么?
软件方面
编程软件 keil4
烧录软件 stc-isp-15xx-v6.86q.exe
链接:/s/1hsGnfBAvfWlGXgPjhYXsyg
提取码:6666
画图软件 AD20
链接:/s/1Fyxh-PHZftNI1HIAMSTZPw
提取码:6666
这个工程无法仿真模拟,所以没有仿真
硬件方面
购买器件可以选择淘宝、立创商城等。
打板子
可以在嘉立创或捷配。(两家都行,仁者见仁)
第三 遇到了问题可以参考csdn、51黑电子论坛等。当然如果在学校老师是不二之选。
第一步树立思路已经好了,第二步就是画图,刚刚说了,画图用AD20,但是有一些库我们是没有的,除了自己构建库之外,以下两个网站也是很好的途径。
PCBlib
AD官网
第二步图已经画好了,送去打板焊接之后。
那么第三步就开始要写程序了。
#include <reg52.h> #include <intrins.h>#include <stdio.h>#include "delay.h"//操作方法// 蓝牙发送字符 CX或cX 表示关闭x位灯, x取值1-8 // 蓝牙发送字符 OX或oX 表示关闭x位灯, x取值1-8#define INIT 0xFF //定义常量#define OPEN 0x22#define CLOSE 0x33unsigned long times_5ms=0; //定时计数unsigned char Commd_Flag=INIT; //初始化命令接收标志sbit relay1=P1^0; //初始化relay对应引脚sbit relay2=P1^1;sbit relay3=P1^2;sbit relay4=P1^3;sbit relay5=P1^4;sbit relay6=P1^5;sbit relay7=P1^6;sbit relay8=P1^7;void Init_Timer0(void);//定时器初始化void UART_Init(void); //函数声明void SendByte(unsigned char dat);void SendStr(unsigned char *s,unsigned char length);void main (void){Init_Timer0(); //定时器0初始化UART_Init(); //蓝牙 串口 波特率9600P1=0x00;DelayMs(200);//延时有助于稳定 上电检测下硬件P1=0xff;while(1) //主循环{;//蓝牙的接收处理 均在中断中处理 请查看串口中断}}void Init_Timer0(void){//**All notes can be deleted and modified**//TMOD |= 0x10; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响TH0=(65536-10000)/256; //重新赋值 20msTL0=(65536-10000)%256;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开}void UART_Init(void){//**All notes can be deleted and modified**//SCON = 0x05; // 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; //打开串口中断} void Timer0_isr(void) interrupt 1 {TH0=(65536-5000)/256; //重新赋值 5msTL0=(65536-5000)%256;times_5ms++; //定时5ms}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=='C')&&(R_buf=='c')){Commd_Flag=CLOSE;//接收到 关闭灯标志}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!='a')&&(R_buf!='A')){Commd_Flag=INIT; //否则 初始化接受标志}if(Commd_Flag==OPEN)//根据命令值进行打开相应的灯{switch(R_buf){case '1':relay1=0;Commd_Flag=INIT;break;//打开相应的灯 并恢复命令标志case '2':relay2=0;Commd_Flag=INIT;break;case '3':relay3=0;Commd_Flag=INIT;break;case '4':relay4=0;Commd_Flag=INIT;break;case '5':relay5=0;Commd_Flag=INIT;break;case '6':relay6=0;Commd_Flag=INIT;break;case '7':relay7=0;Commd_Flag=INIT;break;case '8':relay8=0;Commd_Flag=INIT;break;case 'A':relay1=0;relay2=0;relay3=0;relay4=0;relay5=0;relay6=0;relay7=0;relay8=0;Commd_Flag=INIT;break;case 'a':relay1=0;relay2=0;relay3=0;relay4=0;relay5=0;relay6=0;relay7=0;relay8=0;Commd_Flag=INIT;break;default:break; //此处错误判断 不可恢复命令标准}}else if(Commd_Flag==CLOSE)//根据命令值进行关闭相应的灯{switch(R_buf){case '1':relay1=1;Commd_Flag=INIT;break;//关闭相应的灯 并恢复命令标志case '2':relay2=1;Commd_Flag=INIT;break;case '3':relay3=1;Commd_Flag=INIT;break;case '4':relay4=1;Commd_Flag=INIT;break;case '5':relay5=1;Commd_Flag=INIT;break;case '6':relay6=1;Commd_Flag=INIT;break;case '7':relay7=1;Commd_Flag=INIT;break;case '8':relay8=1;Commd_Flag=INIT;break;case 'A':relay1=1;relay2=1;relay3=1;relay4=1;relay5=1;relay6=1;relay7=1;relay8=1;Commd_Flag=INIT;break;case 'a':relay1=1;relay2=1;relay3=1;relay4=1;relay5=1;relay6=1;relay7=1;relay8=1;Commd_Flag=INIT;break;default:break; //此处错误判断 不可恢复命令标准}}SBUF=R_buf; //返回接收到的数据}if(TI) //如果是发送标志位,清零TI=0;}
代码书写完成后,通过烧录软件烧录hex文件,可以进行板子运行。
第四步手机蓝牙连接,下载我所上传的蓝牙软件。即可匹配板载蓝牙。通过相应指令进行蓝牙信息通信,进而控制继电器。
详细内容下载地址
/download/qq_42704442/19694907?spm=1001..3001.5501
秉承思想开源劳动收费的原则,可能会收取少量积分或者金钱。如果需要实物,或者产品定制,皆可私聊。