在天问block环境下LU-ASR01与51单片机的基础运用

本文介绍了LU-ASR01模块的特性,包括I/O口、DHT口和TX口的使用。详细讲解了如何下载安装天问block软件,新建项目并进行串口通信设置。在51单片机STC89C52RC上编写代码,实现通过串口控制灯光。同时,文中提到了解决模块连接和下载问题的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、LU-ASR01模块

二、天问block软件下载安装

三、 在天问block新建第一个项目

四、天问block生成与编译 

五、51单片机代码

六、问题总结

一、LU-ASR01模块

如图1:

a、LU-ASR01有八个I/O口,为IO1-IO8,其中IO1-IO6可以作为PWM信号输出口和普通I/O口使用,IO7、IO8只能作为普通I/O口使用,不能输出PWM信号;DHT口可接入DHT11、DS18B20模块等;

b、LU-ASR01有一个TX口,硬件上该模块串口通信只能发送,不能用于接收,但是事实上LU-ASR01仍然可以用串口接收(软串口形式,本系列会有介绍,请移步本栏目!);

c、最后是一个接5V的电源和一个接地端;可以通过5V接口为该模块供电,而不一定需要通过如图3来供电;

如图2:

a、这里是一个喇叭接口;

如图3:

a、这里是type-c接口,用于烧录和供电;

二、天问block软件下载安装

天问block软件下载网址:天问Block天问Block 单片机开发利器,支持STC全系列8位单片机,32位ARM和RISC-V内核。http://www.haohaodada.com/new/twen51/index.php

 2.1 复制地址到浏览器(如图所示),点击下载。

2.2  注意,下载该软件时需要联网,同时关闭电脑杀毒软件等;

2.3 需要安装驱动。使用LU-ASR01模块需要下载CH340/CH341驱动;

三、 在天问block新建第一个项目

3.1 点击设备选择 TWEN-ASR,如下图所示:

3.2 新建项目,并编上语句;这里编码目的是使用51单片机来输出高低电平控制灯光亮灭,并不是用LU-ASR01的I/O口来控制灯光亮灭。而单片机想要与LU-ASR01通信使用的是串口通信,即上面第一点说的TX口,ASR01的TX口接51单片机的RX口(P3^0)。注:我的单片机是STC89C52RC,不同单片机RX口不一样;

 

四、天问block生成与编译 

4.1 点击生成模型,出现账号登录界面,如果有账号登录即可生成模型;没有账号需要注册用户,注册用户是免费的,只需要一个手机号即可;生成模型时间大概需要等待1-3分钟。

 4.2 编译下载前,注意模块是否与电脑连接,如图所示。可以通过电脑设备管理器中的端口查看端口号;(如果正确接上模块,会自主识别)。编译下载需要等待一分钟左右,下载完成后ASR01会播报“欢迎使用智能电灯,用多多唤醒我”(就是我们设置ASR01的欢迎词)

 

五、51单片机代码

注:以下代码在STC89C52单片机使用

#include "reg52.h"

typedef unsigned char uchar;

sbit LED1 = P2^0;

//串口通信初始化
void uart_init(uchar baud)
{
	TMOD|=0X20;	//设置计数器工作方式2
	SCON=0X50;	//设置为工作方式1
	PCON=0X80;	//波特率加倍
	TH1=baud;	//计数器初始值设置
	TL1=baud;
	ES=1;		//打开接收中断
	EA=1;		//打开总中断
	TR1=1;		//打开计数器		
}

//主函数
void main()
{	
	uart_init(0xfa);        //波特率为9600

	while(1)
	{			
	    ;					
	}		
}

//串口通信中断函数
void uart() interrupt 4 
{
	uchar rec_data;

	RI = 0;			//清除接收中断标志位
	rec_data=SBUF;	//存储接收到的数据

	if(rec_data == '1')         //开灯
    {
        LED1 = 0;    
    }
    else if(rec_data == '0')    //关灯
    {
        LED1 = 1;
    }			
}

六、问题总结

6.1  下载天问block之前最好将杀毒软件关闭。

6.2  正确步骤将模块和电脑连接后,仍然显示未连接(如4.1中图片中的编译下载后面显示未连接),可以尝试关闭软件后尝试,如果仍然不行换一条type-c线再试;以上方式都不行,可能要怀疑ASR01硬件损坏,跟商家联系!!!

6.3  不使用ASR01直接控制I/O口来使灯亮灭,主要是因为测试ASR01与单片机的通信,后续都是使用ASR01与单片机通信来控制功能。 

<think>好的,我现在需要帮助用户解决在天问 Block 中通过串口接收数据并实现播报功能的问题。首先,我得理解用户的需求。用户提到了使用天问 BlockASRPRO 芯片,想处理串口接收的数据并进行语音播报。根据用户提供的引用内容,特别是引用[2]和[4],看起来用户可能已经参考过一些使用软串口进行通信的例子,以及如何通过变量控制语音播放状态。 首先,我需要回顾一下天问 Block环境ASRPRO芯片的串口功能。根据引用[2],LU-ASR01没有硬件RX口,所以必须使用软串口来接收数据。这意味着在编程时,需要配置软串口,并设置相应的接收中断或轮询机制来获取数据。 接下来,用户想在接收到数据后进行播报。引用[4]提到,当接收到数据时,通过判断状态变量来决定是否播放语音。例如,当变量为0时播放并置为1,避免重复播报。这可能涉及到多线程处理,因为ASRPRO支持多线程,可以在一个线程处理串口接收,另一个线程处理语音播放。 然后,我需要考虑如何将接收到的数据转换为语音播报的内容。ASRPRO芯片通常支持语音合成或预存的语音片段。可能需要将接收到的数据(比如字符串或特定指令)映射到对应的语音资源,或者使用TTS功能。 现在,结合这些信息,步骤可能包括: 1. 初始化软串口,设置正确的波特率、数据位等参数。 2. 在串口接收中断或循环中读取数据,并存储到缓冲区。 3. 解析接收到的数据,可能需要处理协议或格式,比如特定的指令或字符串。 4. 根据解析结果,触发语音播报。这里需要设置状态变量,确保不会重复触发,如引用[4]中的方法。 5. 利用多线程模块,确保串口接收和语音播放不冲突。 可能的问题点包括软串口的稳定性、数据解析的正确性,以及多线程之间的同步。需要参考天问 Block 的官方文档或范例,确认如何正确使用软串口库函数和语音播放函数。 最后,根据用户提供的引用[1]中的多线程编程和ADC示例,可能需要类似的结构,将串口接收和语音播报放在不同的线程中,通过共享变量进行通信。同时,引用[3]提到的串口控制寄存器设置可能对初始化配置有帮助,尤其是在设置工作模式或中断时。 总结步骤:配置软串口、接收数据、解析数据、状态管理、触发播报,并确保线程安全。然后需要验证代码的正确性,可能涉及调试接收数据是否准确,播报是否及时,以及状态变量是否正确更新。</think>### 天问Block串口接收数据实现语音播报步骤解析 #### 1. **软串口初始化配置** 在LU-ASR01芯片中,由于没有硬件RX口,需使用**软串口**接收数据。通过天问Block的图形化编程模块配置以下参数: - 波特率:需发送端(如51单片机)一致,例如9600 - 数据位:8位 - 停止位:1位 - 校验位:无 代码示例(图形化模块转写): ```python import soft_uart uart = soft_uart.SoftUART(rx_pin=12, baudrate=9600) # 假设使用GPIO12作为软串口RX ``` #### 2. **数据接收缓冲区管理** 在**循环线程**中持续监听串口数据,使用状态变量控制接收流程: ```python data_buffer = "" while True: if uart.any(): # 检测是否有数据到达 data = uart.read() # 读取单字节数据 if data == '\n': # 假设以换行符结束 process_data(data_buffer) data_buffer = "" else: data_buffer += data ``` #### 3. **数据解析状态控制** 根据引用[4],需通过**状态变量**避免重复播报: ```python play_flag = 0 # 全局变量,0表示允许播放 def process_data(data): global play_flag if data == "WARNING" and play_flag == 0: play_sound("alert.wav") # 播放预存语音文件 play_flag = 1 elif data == "RESET": play_flag = 0 ``` #### 4. **语音播报触发** 利用天问Block的语音合成模块,可通过两种方式实现: - **预存语音片段**:将常用提示音存入芯片Flash - **动态合成**:调用TTS接口(需芯片支持) 图形化模块示例: ``` 语音播放 → 选择文件"alert.wav" ``` #### 5. **多线程处理(关键)** 通过**双线程架构**分离数据接收语音控制: - **线程1**:持续运行串口监听 - **线程2**:管理语音播放状态 引用[1]中提到的多线程模块可参考以下结构: ```python import _thread def uart_thread(): while True: # 数据接收逻辑 def voice_thread(): while True: # 状态检测语音播放 _thread.start_new_thread(uart_thread, ()) _thread.start_new_thread(voice_thread, ()) ``` #### 6. **异常处理调试** - **数据校验**:添加CRC校验避免错误触发 - **超时重置**:设置10秒无新数据自动复位`play_flag` - **调试输出**:临时添加串口打印功能确认数据接收 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值