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;
}
}
|