QQ:周小姐(342333772) 电话:0755-28130613 微信号:13714163197
富莱新世纪
服务热线:0755-28130613
  • 单片机接口模块通讯的意义是什么
  • 添加时间:2019年05月29日  作者:单片机接口模块  来源:单片机接口模块

单片机接口模块通讯的意义是什么

串口通讯是单片机当中用到的最多的一种通讯,对我而言,它最大的一个优势就是简单,相对于I2C、SPI等,参与串口通讯的线只有两根,分别为接收端、发送端,当然还包括电源线,我们暂且不管。

 

单片机接口模块通讯的意义是什么

单片机工作的时候一般都是单片机与之间单片机通讯,还有一种就是单片机与电脑的通讯,与电脑通讯主要是调试单片机的时候使用,那么串口通讯到底在通讯什么呢?它主要传输一些数据,比如12345、ABCD,也可以传输汉字,但是很少有人用汉字传输数据的,你知道为什么吗?

 

单片机接口模块通讯的意义是什么

单片机之间为什么要串口通讯呢?是它们闲的无聊?

 

当然不是,它所传输的所有数据都是为控制做准备,那么这些数据怎么就能控制外设的呢?比如说LED灯。这些数据是不能直接控制LED灯开关的,比如说电脑给单片机发送“关灯”口令,LED灯就会关闭吗?不会的,单片机怎么会知道“关灯”是什么呢,但是单片机可以判断接收到的字符串,但是我们可以提前设置好,也就是给单片机编程,当单片机接收到“关灯”这两个字符时,它就给LED引脚输出低电平,以此来达到关闭LED灯的目的。

 

单片机接口模块通讯的意义是什么

还有我们所传输的“关灯”,在单片机看来就是一堆二进制数字,比如说“10100011”,只有它接收到10100011这一串二进制数字时,单片机才会有所动作。这么看来单片机似乎有很傻、很死板,单片机是死的,但人是活的,我们可以把我们的思想写进单片机,这就是单片机的伟大之处。还有越是智能的芯片,人的参与越多,比如说现在流行的语音控制,苹果的SIRI、小米的小艾同学,它所能听懂的每一句话,都是软件工程师提前想好人们要说什么,并且写进芯片去的,这个工程就需要庞大的人力去完成。

 

单片机接口模块通讯的意义是什么

Hello world

说了这么多,我们先来做一个最简单的小实验,让Arduino在电脑上打印,也就是让Arduino发送数据,电脑就收数据,并且电脑接收到数据之后打印在屏幕上。

 

void setup() {

 

Serial.begin(9600);

 

}

 

void loop() {

 

Serial.print("Hello World");

 

delay(1000);

 

}

 

程序中 函数Serial.begin(9600)是设置串口通讯的波特率为9600;

 

单片机接口模块通讯的意义是什么

函数Serial.print("Hello World")是单片机的发送端向电脑发送引号之内的数据,即Hello World;

 

函数delay(1000)是延时1000毫秒,也就是一秒,为什么要延时呢?如果不延时,电脑接收数据会很频繁,你根本看不过来,给让人眼花缭乱的感觉。

 J131950406258529_S.jpg

在不加延时的情况下,我们可以观察Arduino板上的发送端LED灯,这时候它肯定是常亮的,正常情况下是只有接收到数据,LED灯才会闪烁一次,因为无时无刻在往电脑发送数据,我们来看一下是不是这样呢?可以看到TX(发送端)的LED灯是常亮(由于动图的清晰度太低,所以用普通照片代替Gif),如果我们加上延时之后LED灯就会每隔一秒闪烁一次。

 

单片机接口模块通讯的意义是什么

实验现象

 

每隔一秒向屏幕打印Hello World,但是接收端看上去的感觉很乱,第一个Hello World和第二个Hello World收尾相接,给人很混乱的感觉,这是为什么呢?

 

单片机串口通讯的意义是什么

原因在于Serial.print()函数只支持单纯的打印,并不支持换行,这时候我们需要用另外一个函数Serial.println()来解决这个问题,虽然只多了两个字母,但是打印出来的字符看的就舒服多了,因为它在打印完成之后,会另起一行继续打印,也可以理解为在打印完成数据之后,给电脑发送了回车键的命令。下面来看一下Serial.println()的实验效果。

 

单片机接口模块通讯的意义是什么

电脑向单片机发数据

上面的实验是Arduino向电脑发送数据,我们现在让电脑向Arduino发送数据,比如发送0或者1。发送数据很简单,只需要我们在串口监视助手上面输入0或者1即可把我们想要发送的数据传给单片机。但是问题来了,我们怎么知道单片机收到数据了,从Arduino往电脑上发数据,因为电脑有屏幕,我们可以看到现象,Arduino没有屏幕怎么办呢?

 

这时候就需要依靠强大的Arduino库函数,比如我们前面所说的 Serial.begin(9600)、delay(1000)等都是库函数,我们可以直接调用,而无需知道他的源代码。依靠库函数可以看到我们发送数据时应有的现象,比如说我们给Arduino发送1,当Arduino收到1之后点亮LED,而收到0之后熄灭LED。

 

单片机接口模块通讯的意义是什么

程序

 

int x = 0; //定义变量x

void setup() {

 pinMode(13,OUTPUT); //设置13引脚为输出模式

 Serial.begin(9600); //设置波特率为9600

}

void loop()

{

 if (Serial.available() > 0) //返回串口缓冲区中当前剩余的字符个数

 {

 x = Serial.read();//把收到的数据赋给x

 if(x=='1') //如果收到的是1

 digitalWrite(13,HIGH); //点亮LED

 if(x=='0') //如果收到的是0

 digitalWrite(13,LOW); //熄灭LED

}

}

程序里面写注释了,在这里就不多作解释。

 

单片机接口模块通讯的意义是什么

实验现象

 

当我们向Arduino发送1之后的实验现象,可以看到LED灯13亮了,然而屏幕上并没有显示任何东西,在点亮LED灯之后,Arduino是不是应该向电脑发送一些数据,比如发送“已经为你开灯”,当收到0之后,向电脑发送“已经为你关灯”。

单片机接口模块通讯的意义是什么

进阶程序

 

这个程序也很简单,只需要把我们最开始的串口打印函数加上就可以了, 代码基本上和上面的差不多程序如下:

 

int x = 0; //定义变量x

 

void setup() {

 

pinMode(13,OUTPUT); //设置13引脚为输出模式

 

Serial.begin(9600); //设置波特率为9600

 

}

 

void loop()

 

{

 

if (Serial.available() > 0) //返回串口缓冲区中当前剩余的字符个数

 

{

 

x = Serial.read();//把收到的数据赋给x

 

if(x=='1') //如果收到的是1

 

{

 

digitalWrite(13,HIGH); //点亮LED

 

Serial.println("已经为你开灯");

 

}

 

if(x=='0') //如果收到的是0

 

{

 

digitalWrite(13,LOW); //熄灭LED

 

Serial.println("已经为你关灯");

 

}

 

}

 

}

 

单片机接口模块通讯的意义是什么

实验现象

 

当收到1时,可以看到屏幕上的串口助手显示了“已经为你开灯”

当收到0时的实验现象

 

单片机接口模块通讯的意义是什么

不止0和1

除了用0和1之外,我们还可以用“汉字”开灯控制LED灯,道理是一样的,如果有功放的话,还可以做语音播报,还有现在大火的物联网领域所使用的8266WIFI模块所使用的就是串口透传,只不过那个8266WiFi模块可以无线传输,甚至可以把我们上面程序之外的0和1穿到大洋彼岸的美国。我们现在做实验可以用0和1直接控制,但是等我们真正做产品时,如果像刚才那样是断然不可以的,一般所发送的数据可能是十几位数或更多,这是为了保证数据的可靠性和防干扰。

 

单片机接口模块通讯的意义是什么

Final

列举一下我们用到的Arduino函数。

 

Serial.begin(); 设置串口波特率

 

Serial.print(); 不换行打印

 

Serial.println(); 换行打印

 

Serial.available() ;返回串口缓冲区中当前剩余的字符个数

 

Serial.read();读取一个字节

 

delay(); 延时函数

 

pinMode(); 设置引脚的输入输出

 

digitalWrite();给引脚高低电平


工业串口屏,单片机接口模块,HDMI触控屏,LVDS视频模块

MCU驱动模块-工业串口模块之间的通信-工业串口模块

工业显示屏-工业液晶显示屏的解决方案-工业液晶屏

工业液晶屏-超高清视频产值规模将达1.5万亿-工业显示屏

SPI串口模块-SPI总线协议介绍(接口定义,传输时序)

RS485串口模块详解RS232、RS485、RS485

lvds视频模块-高清探头抓拍交通违法-串口模块

如何使用RS232串口通信-RS485串口模块-SPI串口模块


mobile
在线咨询
0755-28130613