什么是串口通信?
就是可以同时收发的通信方式,就比如:
A,B栋有两扇门,T门,R门,T门只能出不进,R门只进不出。
有两座桥把他们交叉连接起来了,那如果我要从A栋去B栋怎么去呢?
是不是就要在A栋从T门出来再到B栋R门进去?
那我从B栋去A栋是不是也是这样?
对!
R门就是串口通信中的===RXD
T门就是串口通信中的===TXD
发接收,收连发,一发一收,一收一发互不干扰!这就是串口通信!
那单片机怎么与蓝牙模块串口通信呢?
JDY-31蓝牙模块:
小桥精悍!它能干什么,当手机或者其他设备连接上了它,当告诉他你要发送什么数据的时候,他就会自动把数据接收并发给单片机!
52单片机:
那它如何接收数据?
单片机中自带一个UART!那又什么东西呢?
当接收到数据会把数据自动存在一个位置,当要发一个数据只需要将要发的数据放到一个位置他便会自动发送!
知道这些那手机与单片机是不是就很容易实现了?
第一:配置好蓝牙模块
JDY—31信号蓝牙模块在默认状态下基本上不用配置,直接连接即可(密码1234)
如果需要配置的话,将蓝牙模块与出口调试助手
第二:JDY—31将蓝牙模快与52单片机串口连接好
如图:RXD与TXD相连接

第三:配置好单片机UART定时器
如图:使用STC-ISP软件找到波特率计算器然后会自动计算好并配置好

当接收到数据后UART会触发中断,然后需要响应,进行接收数据读取
void UART_Routine() interrupt 4
{
//因为接收数据发送数据都会触发中断
//所以需要进行判断是接收中断再触发程序
if(RI==1)
{
RI=0;
RI_Byte=SBUF; //将接收到的数据给一个变量就行数据处理
}
}
第4:手机连接蓝牙,再下载一个软件蓝牙调试器,
注意!当以上步骤完成后,蓝牙模块led在闪烁时,将手机蓝牙打开,
并打开蓝牙调试助手,然后去手机设置里使用手机蓝牙搜索模块蓝牙,当搜索到后不要点连接!!!切换到蓝牙调试助手,这时软件才会出现模块蓝牙,然后连接后切换到对话模式那个界面发送数据,单片机便可以接收了。
因为看不到单片机数据,所以可以使用STC调试器软件里面的串口调试助手进行观察,是否接收到数据。

4步即可完成!
注意!注意!注意!
手机蓝牙调试器发送的数据是ASCII码数据,在进行数据判断时不能直接进行判断,需要进行数据转换,或者判断条件改变!!!
完整代码如下:
#include <REGX52.H>
#include "delay.h"
unsigned char RI_Byte;
void Uart_Init()//9600bps@11.0592MHz
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F;
TMOD |= 0x20; //设置定时器模式
TL1 = 0xFA; //设置定时初始值
TH1 = 0xFA; //设置定时重载值
ET1 = 0; //打开定时器1中断
TR1 = 1; //定时器1开始计时
EA=1; //打开总中断
ES=1; //打开串口中断
}
//发送一位数据
void Uart_SendByte(unsigned char Byte)
{
SBUF=Byte; //将要发送的数据放在缓存区(SBUF)
while(TI==0); //因为数据不是立刻发送,所以需要检查是是否发送了数据
TI=0; //已经发送了数据就关闭标志位额,也就是软件置零
}
void main()
{
Uart_Init();
while(1)
{
if(RI_Byte==0x31){P2=0;} //进行数据判断符合并作出反应
if(RI_Byte==0x32){P2=0xFF;}
}
}
void UART_Routine() interrupt 4
{
//因为接收数据发送数据都会触发中断
//所以需要进行判断是接收中断再触发程序
if(RI==1)
{
RI=0;
RI_Byte=SBUF; //将接收到的数据给一个变量就行数据处理
}
}
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
其实做自媒体的成本并不高,入门只需要一部手机即可!在手机上找视频素材、使用手机剪辑视频、最后使用手机发布视频作品获得收益!方法并不难,今天这期内容就来给粉丝们分享一种小方法,每天稳定收益100-300,抓紧点赞收藏!1、找素材(1)使用手机拍摄自己喜欢的经典段落,使用程序把文案内容提取出来(2)也可以在豆瓣、知乎、微博等网站中找一些自己需要的文案素材(3)把文案进行润色修改,可以加入一些自己的观点(4)视频素材可以使用软件中自带的素材,也可以在素材网站中下载完整版的素材2、文案配音(1)把复制好的文案直接导入小程序中(2)调整音色、音调后一键合成音频即可(3)可以选择自己朗读配音,需要花一点时
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
ValidPalindromeGivenastring,determineifitisapalindrome,consideringonlyalphanumericcharactersandignoringcases. [#125]Example:"Aman,aplan,acanal:Panama"isapalindrome."raceacar"isnotapalindrome.Haveyouconsiderthatthestringmightbeempty?Thisisagoodquestiontoaskduringaninterview.Forthepurposeofthisproblem
我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源
我正在根据Rakefile中的现有测试文件动态生成测试任务。假设您有各种以模式命名的单元测试文件test_.rb.所以我正在做的是创建一个以“测试”命名空间内的文件名命名的任务。使用下面的代码,我可以用raketest:调用所有测试require'rake/testtask'task:default=>'test:all'namespace:testdodesc"Runalltests"Rake::TestTask.new(:all)do|t|t.test_files=FileList['test_*.rb']endFileList['test_*.rb'].eachdo|task|n
我想要像“嘿那里”这样的东西变成,例如,#316583。我希望将任意长度的字符串“归结”为十六进制颜色。我不知道从哪里开始。我在想,每个字符串的MD5散列都是不同的-但如何将该散列转换为十六进制颜色数字? 最佳答案 你可以只取几位前几位:require'digest/md5'color=Digest::MD5.hexdigest('Mytext')[0..5] 关于ruby-如何使用Ruby基于字母数字字符串生成颜色?,我们在StackOverflow上找到一个类似的问题: