51单片机双机通信。 在protues中设计两个51单片机实现有线通信,一方为发送,另一方为接收。 注意:要使电路正常运行! 要求: 利用按键实现双机串口通信,主机连接按键,从机连接液晶显示器LCD1602,当主机按下按键时,从机连接的LCD1602显示第一行“电科2102”,再次按下第二行显示“8206210202”,再次按下主机按键第三行显示“李鸿宇”
时间: 2023-11-21 08:05:31 浏览: 77
关于51单片机双机通信
很好,让我来回答你的问题。
要实现双机通信,你需要使用串口通信,将数据从一台单片机发送到另一台单片机。在这个过程中,你需要注意一些细节,确保电路能够正常运行。
首先,你需要设计一个发射端和一个接收端。发射端可以使用按键作为触发器,将数据发送到串口,接收端则需要连接一个液晶显示器,将接收到的数据显示出来。
以下是实现这个功能的步骤:
1. 确定硬件连接
首先,你需要将两个单片机连接在一起。可以使用串口通信连接,这需要连接两个引脚:TX和RX。TX代表传输端,RX代表接收端。此外,你还需要将它们的地(GND)连接在一起,确保正确的电气接地。
如果你使用的液晶显示器需要I2C接口,你还需要连接两个引脚:SDA和SCL。SDA代表串行数据,SCL代表串行时钟。
2. 编写代码
然后,你需要编写代码来实现双机通信。以下是一些代码片段,可以帮助你完成这个任务:
发射端:
```c
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
uchar a[] = "电科2102";
uchar b[] = "8206210202";
uchar c[] = "李鸿宇";
uchar i = 0;
void main()
{
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
SCON = 0x50;
while(1)
{
if(P1 == 0)
{
while(P1 == 0);
SBUF = a[i++];
while(!TI);
TI = 0;
if(i >= 9)
{
i = 0;
}
}
}
}
```
在这个代码中,当按键被按下时,将序列中的下一组字符发送到串口。
接收端:
```c
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
uchar buffer[16];
uchar len = 0;
void Delay1ms()
{
uchar i, j;
_nop_();
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
void LcdWRCmd(uchar cmd)
{
P2 = cmd;
P1 &= ~0x02;
Delay1ms();
P1 |= 0x04;
Delay1ms();
P1 &= ~0x04;
Delay1ms();
}
void LcdWRData(uchar dat)
{
P2 = dat;
P1 &= ~0x03;
Delay1ms();
P1 |= 0x05;
Delay1ms();
P1 &= ~0x04;
Delay1ms();
}
void LcdInit()
{
LcdWRCmd(0x38);
LcdWRCmd(0x08);
LcdWRCmd(0x01);
LcdWRCmd(0x06);
LcdWRCmd(0x0c);
}
void main()
{
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
SCON = 0x50;
LcdInit();
while(1)
{
if(RI)
{
buffer[len++] = SBUF;
RI = 0;
}
if(len == 9)
{
buffer[len] = 0;
LcdWRCmd(0x80);
LcdWRData('R');
LcdWRData(':');
LcdWRData(buffer[0]);
LcdWRData(buffer[1]);
LcdWRData(buffer[2]);
LcdWRData(buffer[3]);
LcdWRCmd(0xc0);
LcdWRData(buffer[4]);
LcdWRData(buffer[5]);
LcdWRData(buffer[6]);
LcdWRData(buffer[7]);
len = 0;
}
}
}
```
在这个代码中,每当单片机接收到一组字符时,它就会将这些字符保存在缓冲区中,并将它们输出到LCD1602显示器的第一行和第二行。
3. 运行程序
现在,你可以在Protues中模拟电路运行,检查它是否按预期工作。当你按下发射端的按键时,在接收端的LCD1602显示器上就会看到相应的消息。
这就是实现双机通信的方法。记住,这只是一个简单的例子,你可以根据自己的需求进行修改。如果你遇到了任何问题,请在评论区留言,我会尽快给你答复。
阅读全文