找回密码
 立即注册
搜索
热搜: 中医 针灸 咳嗽
查看: 148|回复: 0

串口通信之jr6001模块调用案列

[复制链接]

3706

主题

1

回帖

1万

积分

管理员

积分
11870
发表于 2023-4-2 08:04:23 | 显示全部楼层 |阅读模式
config.h
[C] 纯文本查看 复制代码
/*
*----------------------------------------------------------------------------------------------
* 作者:t176
* 邮箱:t176#qq.com
* 说明:config.h头文件
* 备注:单片机专用框架
       :null
* 当前版本: Ver1.0
* 最后维护时间:2023/03/25 21:59:39
*----------------------------------------------------------------------------------------------
*/

#ifndef __CONFIG_H__
#define __CONFIG_H__
#include <STC32G.H>

// #define OPEN_VSCODE_DEBUG //注释该行,将不进入VSCODE调试,为了VSCODE代码编写兼容keil,在烧录前务必注释该行
#ifdef OPEN_VSCODE_DEBUG
#include "../debug/debug.h"
#endif

/*--------------宏定义--------------*/
#define ULONG unsigned long /*无符号整数类型(宏定义)*/

/*--------------变量定义--------------*/

sbit JR6001_BUSY = P3 ^ 5;

/*--------------函数声明--------------*/

void Sys_Init();
void Sys_Draw();
void User_Updata();
void Sys_Updata();

#endif


jr6001.h
[C] 纯文本查看 复制代码
/*
*----------------------------------------------------------------------------------------------
* 作者:t176
* 邮箱:t176#qq.com
* 说明:jr6001.c头文件
* 备注:语音模块
       :./ZH/

            02.mp3 2
            03.mp3 3
            04.mp3 4
            05.mp3 5
            06.mp3 6
            07.mp3 7
            08.mp3 8
            09.mp3 9
            10.mp3 0

            19.mp3 个
            11.mp3 十
            12.mp3 百
            13.mp3 千
            14.mp3 万
            15.mp3 点
            16.mp3 首
            17.mp3 元
            18.mp3 亿


            20.mp3 错误
            21.mp3 警告
            22.mp3 任务已完成
            23.mp3 系统启动完成
        ./
            00001.mp3 播放上一曲
            00002.mp3 播放下一曲
            00003.mp3 继续
            00004.mp3 暂停

* 当前版本: Ver1.0
* 最后维护时间:2023/03/30 18:29:49
*----------------------------------------------------------------------------------------------
*/






#ifndef __JR6001_H__
#define __JR6001_H__
#include "uart.h" //包含串口库
#include "STC32G.H"


/*--------------宏定义--------------*/



/*--------------变量定义--------------*/



/*--------------函数声明--------------*/

void Jr6001_Init();
void Play_Upper();
void Play_Next();
void Play_Pause();
void Play_Continue();
void Play_Assemble(char *p);
void Delay100us();
void Delay2000ms();


#endif


keys.h
[C] 纯文本查看 复制代码
/*
*----------------------------------------------------------------------------------------------
* 作者:t176
* 邮箱:t176#qq.com
* 说明:keys.h头文件 
* 备注:独立键盘P32-P34
       :null
* 当前版本: Ver1.0
* 最后维护时间:2023/04/01 09:31:09
*----------------------------------------------------------------------------------------------
*/






#ifndef __KEYS_H__
#define __KEYS_H__



/*--------------宏定义--------------*/



/*--------------变量定义--------------*/




/*--------------函数声明--------------*/

void Key_Init();
void Key_Scan();


#endif


uart.h
[C] 纯文本查看 复制代码
/*
*----------------------------------------------------------------------------------------------
* 作者:t176
* 邮箱:t176#qq.com
* 说明:uart.h头文件
* 备注:
       :null
* 当前版本: Ver1.0
* 最后维护时间:2023/03/26 09:22:33
*----------------------------------------------------------------------------------------------
*/

#ifndef __UART_H__
#define __UART_H__
#include "config.h"

/*--------------宏定义--------------*/
#define FOSC 11059200UL                       // 定义为无符号长整型,避免计算溢出
#define BRT (65536 - (FOSC / 115200 + 2) / 4) // 加 2 操作是为了让 Keil 编译

/*--------------变量定义--------------*/



/*--------------函数声明--------------*/


void UartRev();
void UartSendStr(char *p);
void UartSend(char dat);
void UartInit();

#endif








jr6001.c
[C] 纯文本查看 复制代码
#include "jr6001.h"

/*
*----------------------------------------------------------------------------------------------
* 函数名称:Jr6001_int()
* 函数功能: 语音库初始化(23),RXD_2/P3.6, TXD_2/P3.7
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/30 18:36:15
* 作者:t176#qq.com
* 创建时间:2023/03/30 18:36:15
-----------------------------------------------------------------------------------------------
*/
void Jr6001_Init()
{
  



    char cmd_val[] = "B7:23";
    S1_S1 = 0;
    S1_S0 = 1; // 设置串口引脚 //RXD_2/P3.6, TXD_2/P3.7


    Delay2000ms();
    while (JR6001_BUSY)
    {
        Delay100us();
    }
    Play_Assemble(cmd_val);
    while (JR6001_BUSY)
    {
        Delay100us();
    }
}

/*
*----------------------------------------------------------------------------------------------
* 函数名称:void Play_Upper(){

}
* 函数功能:播放上一曲(00001)
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/30 19:26:37
* 作者:t176#qq.com
* 创建时间:2023/03/30 19:26:37
-----------------------------------------------------------------------------------------------
*/
void Play_Upper()
{
    char cmd_msg[]="A7:00001";
    char cmd_val[] = "A5";


    Play_Assemble(cmd_msg);
    Delay2000ms();
    while (JR6001_BUSY)
    {
        Delay100us();
    }
    Play_Assemble(cmd_val);
    while (JR6001_BUSY)
    {
        Delay100us();
    }
}
/*
*----------------------------------------------------------------------------------------------
* 函数名称:Play_next
* 函数功能:播放下一曲(00002)
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/30 19:21:28
* 作者:t176#qq.com
* 创建时间:2023/03/30 19:21:28
-----------------------------------------------------------------------------------------------
*/
void Play_Next()
{

    char cmd_msg[]="A7:00002";
    char cmd_val[] = "A6";


    Play_Assemble(cmd_msg);
    Delay2000ms();
    while (JR6001_BUSY)
    {
        Delay100us();
    }
    Play_Assemble(cmd_val);
    while (JR6001_BUSY)
    {
        Delay100us();
    }
}
/*
*----------------------------------------------------------------------------------------------
* 函数名称:Play_Pause()
* 函数功能:暂停播放(00004)
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/30 19:23:59
* 作者:t176#qq.com
* 创建时间:2023/03/30 19:23:59
-----------------------------------------------------------------------------------------------
*/
void Play_Pause()
{
    char cmd_msg[]="A7:00004";
    char cmd_val[] = "A3";


    Play_Assemble(cmd_msg);
    Delay2000ms();
    while (JR6001_BUSY)
    {
        Delay100us();
    }
    Play_Assemble(cmd_val);
    while (JR6001_BUSY)
    {
        Delay100us();
    }
}

/*
*----------------------------------------------------------------------------------------------
* 函数名称:void Play_Continue()
* 函数功能:继续播放(00003)
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/30 19:25:23
* 作者:t176#qq.com
* 创建时间:2023/03/30 19:25:23
-----------------------------------------------------------------------------------------------
*/
void Play_Continue()
{
    char cmd_msg[]="A7:00003";
    char cmd_val[] = "A2";


    Play_Assemble(cmd_msg);
    Delay2000ms();
    while (JR6001_BUSY)
    {
        Delay100us();
    }
    Play_Assemble(cmd_val);
    while (JR6001_BUSY)
    {
        Delay100us();
    }
}

/*
*----------------------------------------------------------------------------------------------
* 函数名称:void Play_Assemble()
* 函数功能:组合播放模式
* 入口参数:val_ptr字符串指针
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/30 19:30:09
* 作者:t176#qq.com
* 创建时间:2023/03/30 19:30:09
-----------------------------------------------------------------------------------------------
*/
void Play_Assemble(char *val_ptr)
{
    UartSendStr(val_ptr);
}

void Delay100us() //@11.0592MHz
{
    unsigned char i;

    _nop_();
    i = 43;
    while (--i)
        ;
}
void Delay2000ms() //@11.0592MHz
{
    unsigned char i, j, k;

    _nop_();
    i = 15;
    j = 2;
    k = 235;
    do
    {
        do
        {
            while (--k)
                ;
        } while (--j);
    } while (--i);
}


keys.c
[C] 纯文本查看 复制代码
#include "keys.h"
#include "jr6001.h"

sbit S2 = P3 ^ 2;
sbit S3 = P3 ^ 3;
sbit S4 = P3 ^ 4;

/*
*----------------------------------------------------------------------------------------------
* 函数名称:void Key_Init()
* 函数功能:键盘初始化
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/04/01 09:33:07
* 作者:t176#qq.com
* 创建时间:2023/04/01 09:33:07
-----------------------------------------------------------------------------------------------
*/
void Key_Init()
{
    S2 = 1;
    S3 = 1;
    S4 = 1;
}
/*
*----------------------------------------------------------------------------------------------
* 函数名称:void Key_Scan()
* 函数功能:键盘扫描
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/04/01 09:36:43
* 作者:t176#qq.com
* 创建时间:2023/04/01 09:36:43
-----------------------------------------------------------------------------------------------
*/
void Key_Scan()
{
    if (S2 == 0) // 扫描S2
    {
        while (S2 == 0)
            ;
        Play_Upper();
        S2 = 1;
    }
    if (S3 == 0) // 扫描S3
    {
        while (S3 == 0)
            ;
        Play_Next();
        S3 = 1;
    }
    if (S4 == 0) // 扫描S4
    {
        while (S4 == 0)
            ;
       Play_Pause();
        S4 = 1;
    }
}


main.c
[C] 纯文本查看 复制代码
// 编译前,请务必阅读   README.md
#include "config.h"
#include "uart.h"
#include "jr6001.h"
#include "keys.h"
/*
*----------------------------------------------------------------------------------------------
* 函数名称:main()
* 函数功能:单片机编程框架
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/25 22:01:57
* 作者:t176#qq.com
* 创建时间:2023/03/25 22:01:57
* 框架说明:
		执行流程:
				1.数据定义
				(执行1次)
				---------------------

				2.Sys_Init()
				(执行1次)
				---------------------

				3,4,5
				(循环执行)
				3.Sys_Draw()数据绘制
				4.User_Updata()用户干预更新数据
				5.Sys_Updata()系统自动更新数据

-----------------------------------------------------------------------------------------------
*/
//  1.定义数据

void main()

{

	Sys_Init(); // 初始化
	while (1)
	{

		Sys_Draw();
		User_Updata();
		Sys_Updata();
	}
}
// 系统式编程框架-----------------------------------------------

/*
*----------------------------------------------------------------------------------------------
* 函数名称:Sys_Init()
* 函数功能:通常用于初始化一些参数
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/25 22:07:24
* 作者:t176#qq.com
* 创建时间:2023/03/25 22:07:24
-----------------------------------------------------------------------------------------------
*/
void Sys_Init()
{
	EAXFR = 1;	  // 使能访问 XFR
	CKCON = 0x00; // 设置外部数据总线速度为最快
	WTST = 0x00;  // 设置程序代码等待参数,
				  // 赋值为 0 可将 CPU 执行程序的速度设置为最快
	/*IO口初始化*/
	P0M0 = 0x00;
	P0M1 = 0x00;
	P1M0 = 0x00;
	P1M1 = 0x00;
	P2M0 = 0x00;
	P2M1 = 0x00;
	P3M0 = 0x00;
	P3M1 = 0x00;
	P4M0 = 0x00;
	P4M1 = 0x00;
	P5M0 = 0x00;
	P5M1 = 0x00;
	UartInit();

	ES = 1;
	EA = 1;
	//UartSendStr("Use uart1 \r\n");
	Jr6001_Init();

}
/*
*----------------------------------------------------------------------------------------------
* 函数名称:Sys_Draw()
* 函数功能:数据显示,比如数码管,LED灯,TFT 用于数据展示
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/25 22:08:05
* 作者:t176#qq.com
* 创建时间:2023/03/25 22:08:05
-----------------------------------------------------------------------------------------------
*/
void Sys_Draw()

{
	//   UartRev();	

}

/*
*----------------------------------------------------------------------------------------------
* 函数名称:User_Updata()
* 函数功能:在程序运行中,通常有很多用户需要干预的过程,比如键盘输入
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/25 22:09:12
* 作者:t176#qq.com
* 创建时间:2023/03/25 22:09:12
-----------------------------------------------------------------------------------------------
*/
void User_Updata()
{
	Key_Scan();

}

/*
*----------------------------------------------------------------------------------------------
* 函数名称: Sys_Updata()
* 函数功能:通常用于系统自动维护执行的数据(无需用户干预)
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/25 22:10:37
* 作者:t176#qq.com
* 创建时间:2023/03/25 22:10:37
-----------------------------------------------------------------------------------------------
*/
void Sys_Updata()
{
}
/*----------------用户自定义的函数----------------*/


uart.c
[C] 纯文本查看 复制代码
#include "uart.h"

bit g_busy; 
char g_wptr;//写指针(即下一个要写入缓冲区的位置)
char g_rptr;//读指针(即下一个要读取缓冲区中数据的位置)
char g_buffer[16];//缓冲区。在串口接收中断中,当接收到数据时,将其存储在缓冲区中,并更新写指针

/*
*----------------------------------------------------------------------------------------------
* 函数名称:UartInit()
* 函数功能:串口1初始化
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/26 09:39:01
* 作者:t176#qq.com
* 创建时间:2023/03/26 09:39:01
-----------------------------------------------------------------------------------------------
*/
void UartInit()
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xE0;			//设置定时初始值
	TH1 = 0xFE;			//设置定时初始值
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时

    g_wptr = 0x00;
    g_rptr = 0x00;
    g_busy = 0;
}
/*
*----------------------------------------------------------------------------------------------
* 函数名称:UartIsr() interrupt 4
* 函数功能:串口中断
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/26 09:56:19
* 作者:t176#qq.com
* 创建时间:2023/03/26 09:56:19
-----------------------------------------------------------------------------------------------
*/
void UartIsr() interrupt 4
{
    if (TI)
    {
        TI = 0;
        g_busy = 0;
    }
    if (RI)
    {
        RI = 0;
        g_buffer[g_wptr++] = SBUF;
        g_wptr &= 0x0f;
    }
}
/*
*----------------------------------------------------------------------------------------------
* 函数名称: UartSend(char dat)
* 函数功能:发送一个字节
* 入口参数:@dat:需要发送的字节
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/26 09:57:08
* 作者:t176#qq.com
* 创建时间:2023/03/26 09:57:08
-----------------------------------------------------------------------------------------------
*/
void UartSend(char dat)
{
    while (g_busy);
    g_busy = 1;
    SBUF = dat;
}
/*
*----------------------------------------------------------------------------------------------
* 函数名称:void UartSendStr(char *p)
* 函数功能:发送字符串
* 入口参数:@p 字符串的指针
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/26 09:57:47
* 作者:t176#qq.com
* 创建时间:2023/03/26 09:57:47
-----------------------------------------------------------------------------------------------
*/
void UartSendStr(char *p)
{
    while (*p)
    {
        UartSend(*p++);
    }
}

/*
*----------------------------------------------------------------------------------------------
* 函数名称:void UartRev()
* 函数功能:串口接收数据
* 入口参数:@
* 函数返回:@
* 当前版本: Ver1.0
* 修改时间:2023/03/26 10:00:29
* 作者:t176#qq.com
* 创建时间:2023/03/26 10:00:29
-----------------------------------------------------------------------------------------------
*/
void UartRev()
{
    if (g_rptr != g_wptr)
    {
        // UartSend(g_buffer[g_rptr++]);
        UartSend(SBUF);
        
        g_rptr &= 0x0f;
    }
}



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|私人站点 ( 冀ICP备2023028127号-2 )

GMT+8, 2025-4-20 08:25 , Processed in 0.091200 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表