600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 项目一 51单片机蓝牙控制继电器

项目一 51单片机蓝牙控制继电器

时间:2023-09-23 09:21:35

相关推荐

项目一 51单片机蓝牙控制继电器

前言:作者想要帮助一些童鞋和爱好者进行项目构建,但自知能力有限,不喜可论,创作不易,勿喷。

系统由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

秉承思想开源劳动收费的原则,可能会收取少量积分或者金钱。如果需要实物,或者产品定制,皆可私聊。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。