51单片机与python实现串口通信

利用51单片机,通过串口通信,控制上位机软件pygame,进行推箱子游戏。

环境准备

1.创建串口
我们首先用需要虚拟串口软件创建两个串口(虚拟串口配对软件的使用)在这里插入图片描述

然后打开虚拟串口助手(可以重复打开)

2.下载serial串口通信模块
win+R输入cmd打开命令行,输入:pip install pyserial(我刚开始下载的是serial结果运行出错)虽然下载的是pyserial,但是导入时却是serial。

import serial #导入通信模块
import time
ser = serial.Serial('COM4',9600,timeout=0.01) #接入串口“COM4”,波特率为9600,连接超时0.01秒
print(ser.is_open)   #检验窗口是否打开
while(1):
   s = ser.read(1)  #读入数据赋值给s. 函数read中的数字为读入数据位数,在此我只需读取以为即可
   if(s):       #需要判断有没有,不然会不停打印
        print(s)
      

然后我们用串口助手和python通信测试一下

下位机

1.我们先用proteus仿真单片机
接线和元器件如下

几个需要调节的地方

2.然后我们进入keil编写程序
初始化通信

void init()
{
 SCON =0x50; //0101 0000   方式一,允许接收
 TMOD=0x20;//0010 0000    采用定时器设置波特率
 TH1=0xfd;  //设置波特率为9600.所有的波特率都要相同发送才不会出现乱码
 TL1=0xfd;
 TR1=1; 启动T1
}

因为在这里我们的单片机只需要发送信号,不需要接收信号,而且由按键触发,所以在这里我就不用写中断函数了,写一下此过程的伪代码吧。

while(1)
 {
 当按键触发(单击事件):
 	{
	  SBUF = 0x01 //将要发送的数据储存在SBUF,就是缓存器 (发送会是十六进制)
	  while(!TI);//发送过程中TI为0,发送完成后自动变为1,跳出循环,功能是等待字节发送
	  TI=0; //置0后好进行下一次发送
	}
}

在这里插入图片描述

最后生成hex文件导入到protrus仿真中

单片机与python通信

1.首先分别连接串口

2.按下按键我们可以看见分别发送了四个不同的信号,我们发送采用的是十六进制,收到也是十六进制。在这里插入图片描述
此时我们只要稍加处理变可转化为我们需要的

s = ser.read(1)
m=s.decode("iso-8859-15"#将读入的数据转换为整数再打印
if(m): #需要判断有没有,不然会不停打印
     l=ord(m)
     print(l)
 ``

现在我们离成功不远了,我们只需把读取数据的代码放入到主循环中。这里有一点需要特别注意(敲黑板)还记得我们的通讯实例化吗?ser=serial.Serial('COM4',9600,timeout=0.01)一定一定要加入连接超时,不然就会出现阻塞,主循环就会卡住。然后只需将推箱子的操作函数改一下即可。
在这里插入图片描述

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值