Browse Source

feature: 1.增加按键加减音量,存在bug,待修复

issu01
Zhangwen 4 months ago
parent
commit
70ef799e2f
  1. 16
      .vscode/settings.json
  2. 25
      keilp/cc_as_stc02_ps5ws.uvprojx
  3. 3
      source/app/app_config.c
  4. 2
      source/app/app_config.h
  5. 58
      source/app/app_data_save.c
  6. 32
      source/app/app_data_save.h
  7. 13
      source/app/app_eeprom.c
  8. 9
      source/app/app_eeprom.h
  9. 36
      source/app/main.c
  10. 4
      source/app/main.h
  11. 14
      source/app/task_appstatus.c
  12. 31
      source/app/task_keystatus.c
  13. 2
      source/app/task_keystatus.h
  14. 78
      source/bsp/bsp_WT2605B.c
  15. 8
      source/bsp/bsp_WT2605B.h
  16. 2
      source/bsp/bsp_oid.c
  17. 2
      source/clib/clib.c

16
.vscode/settings.json

@ -61,6 +61,20 @@
"string": "c",
"optional": "c",
"memory": "c",
"new": "c"
"new": "c",
"array": "c",
"istream": "c",
"ostream": "c",
"tuple": "c",
"utility": "c",
"modbus.h": "c",
"sstream": "c",
"task_encrypt.h": "c",
"deque": "c",
"unordered_map": "c",
"vector": "c",
"string_view": "c",
"initializer_list": "c",
"app_eeprom.h": "c"
}
}

25
keilp/cc_as_stc02_ps5ws.uvprojx

@ -388,6 +388,16 @@
<FileType>1</FileType>
<FilePath>..\source\app\task_keystatus.c</FilePath>
</File>
<File>
<FileName>task_w600.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_w600.c</FilePath>
</File>
<File>
<FileName>task_SmartConfig.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_SmartConfig.c</FilePath>
</File>
</Files>
</Group>
<Group>
@ -418,6 +428,21 @@
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_WT2605B.c</FilePath>
</File>
<File>
<FileName>bsp_wifi.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_wifi.c</FilePath>
</File>
<File>
<FileName>bsp_ooid.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_ooid.c</FilePath>
</File>
<File>
<FileName>bsp_oid.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_oid.c</FilePath>
</File>
</Files>
</Group>
<Group>

3
source/app/app_config.c

@ -15,7 +15,10 @@ void L3_param_init(void)
{
G.head[0] = HEAD0;
G.head[1] = HEAD1;
G.tail[0] = TAIL0;
G.tail[1] = TAIL1;
G.volume = 0x15;
//U8 i;
G.debug = 1;
//station模式状态

2
source/app/app_config.h

@ -107,6 +107,8 @@ typedef struct global_param
U8 head[2];
U8 tail[2];
// 喇叭音量
U8 volume;
//调试模式
U8 debug;
U8 reset;

58
source/app/app_data_save.c

@ -1,58 +0,0 @@
#include "../app/app_data_save.h"
#include "../msp/msp_eeprom.h"
#include "app_config.h"
DATA_SAVE data_save_arr[DATA_SAVE_LEN] = {0};
//初始化存放数据的结构体数组data_save_arr
void data_save_init()
{
int i = 0;
for(i = 0;i < DATA_SAVE_LEN; i++)
{
data_save_arr[i].head[0] = HEAD0;
data_save_arr[i].head[1] = HEAD1;
data_save_arr[i].available = 1;
data_save_arr[i].val = 0;
data_save_arr[i].tail[0] = TAIL0;
data_save_arr[i].tail[1] = TAIL1;
}
}
//存放数据到eeprom中:1.从eeprom中取出数组 2.遍历寻找空位 3.把数组放回(写入)eeprom中
void data_save_push(U8 Data)
{
int i = 0;
int free = 0;
// 从eeprom中取出数组
L0_Iap_Read_array(EEPROM_DATA_ADDR, data_save_arr,sizeof(data_save_arr));
if(data_save_arr[0].head[0] != HEAD0 || data_save_arr[0].head[1] != HEAD1
|| data_save_arr[0].tail[0] != TAIL0 || data_save_arr[0].tail[1] != TAIL1)
{
data_save_init();
}
// 遍历寻找空位
for(i = 0;i < DATA_SAVE_LEN; i++)
{
if(data_save_arr[i].available == 1)
{
free = i;
break;
}
}
// 当都有数据时
if(i == DATA_SAVE_LEN)
{
for(i = 0; i < DATA_SAVE_LEN - 1; i++)
{
data_save_arr[i] = data_save_arr[i+1];
}
free = DATA_SAVE_LEN - 1;
}
// 放到free位置
data_save_arr[free].available = 0;
data_save_arr[free].val = Data;
// 把数组放回(写入)eeprom中
L0_Iap_Program_array(EEPROM_DATA_ADDR, data_save_arr,sizeof(data_save_arr));
}

32
source/app/app_data_save.h

@ -1,32 +0,0 @@
#ifndef _APP_DATA_SAVE_H
#define _APP_DATA_SAVE_H
#include "../bsp/bsp_config.h"
//定义所使用内存的起始和结尾标志
#define HEAD0 0xa3
#define HEAD1 0xa4
#define TAIL0 0xa5
#define TAIL1 0xa6
#define DATA_SAVE_LEN 10 //寄存器需要存放的最大数量为10组
// #define EEPROM_DATA_ADDR 0x00 //定义一个起始地址为0x00的寄存器
//用来存储重量数据的结构体(数组)
typedef struct
{
U8 head[2];
U8 available;
U8 val;
U8 tail[2];
}DATA_SAVE;
extern DATA_SAVE data_save_arr[DATA_SAVE_LEN];
extern void data_save_init(void);
extern void data_save_push(U8 Data);
#endif

13
source/app/app_eeprom.c

@ -0,0 +1,13 @@
#include "../app/app_eeprom.h"
#include "../app/app_config.h"
// 读取EEPROM中的参数到G结构体
void L3_param_read(void)
{
L0_Iap_Read_array(EEPROM_DATA_ADDR, (U8*)&G,sizeof(G));
if(G.head[0] != HEAD0 || G.head[1] != HEAD1 || G.tail[0] != TAIL0 || G.tail[1] != TAIL1)
{
L3_param_init();
}
}

9
source/app/app_eeprom.h

@ -0,0 +1,9 @@
#ifndef _APP_EEPROM_H
#define _APP_EEPROM_H
#include "../msp/msp_eeprom.h"
extern void L3_param_read(void);
#endif

36
source/app/main.c

@ -72,11 +72,13 @@ void main(void)
{
//板U初始化
L0_MCU_init();
//eeprom参数读取
L3_param_read();
//BSP层初始化
L0_BSP_init();
//任务初始化
L0_TASK_init();
//获取mcu id
L0_id_get_rom(G.mcu_id);
L0_uart0_sendstr("MCU_ID = ");
@ -87,14 +89,6 @@ void main(void)
L0_uart0_sendArray("PEN_V2",6);
L0_uart0_0d0a();
// 读取EEPROM中的参数到G结构体
L0_Iap_Read_array(EEPROM_DATA_ADDR,&G,sizeof(G));
if(G.head[0] != HEAD0 || G.head[1] != HEAD1 || G.tail[0] != TAIL0 || G.tail[1] != TAIL1)
// if(1)
{
L3_param_init();
}
while(1)
{
// L1_Oid_readoid();
@ -102,25 +96,25 @@ void main(void)
if(1 == s_nos_tick.t1s_heartbeat)//1s
{
s_nos_tick.t1s_heartbeat = 0;//置0清空
// L0_uart0_uc('.');
L0_uart0_uc('.');
// L0_uart0_sendstr("_s_w600_mode =");
// L0_uart0_uchex(_s_task_w600_para.mode);
// L0_uart0_0d0a();
// L0_uart0_sendstr("R.app_status =");
// L0_uart0_uchex(R.app_status);
}
// 系统状态任务
L3_task_appstatus_handler(&_s_task_appstatus);
// 系统状态测试任务
// L3_task_AppTest_handler(&_s_task_apptest);
// 按键状态任务
// // 系统状态任务
// L3_task_appstatus_handler(&_s_task_appstatus);
// // 系统状态测试任务
// // L3_task_AppTest_handler(&_s_task_apptest);
// // 按键状态任务
L3_task_keystatus_handler(&_s_task_keystatus);
// WIFI任务
if (R.app_status != POW_OFF)
{
L3_uart2_wifi_parse();
L2_task_W600_flow_handle(&_s_task_w600_para);
}
// // WIFI任务
// if (R.app_status != POW_OFF)
// {
// L3_uart2_wifi_parse();
// L2_task_W600_flow_handle(&_s_task_w600_para);
// }
#if 0
if(s_uart0_rec.ok)

4
source/app/main.h

@ -66,9 +66,10 @@
#include "../app/app_task_tcp_control.h"
#include "../app/app_task_speech.h"
#include "../app/task_game.h"
#include "../app/app_data_save.h"
#include "../app/app_config.h"
#include "../app/app_eeprom.h"
#include "../app/task_appstatus.h"
#include "../app/task_appTEST.h"
#include "../app/task_keystatus.h"
@ -76,7 +77,6 @@
#include "../app/task_SmartConfig.h"
#include "../bsp/bsp_led.h"
#include "../bsp/bsp_key.h"
#include "../bsp/bsp_WT2605B.h"

14
source/app/task_appstatus.c

@ -65,7 +65,7 @@ void L3_task_appstatus_handler(S_TASK_APPSTATUS *s)
// LED灯灭
L2_LED_OFF();
// // 音频播放关机语音后断电
L2_WT2605B_broadcast(&audio_powerdown);
L2_WT2605B_Broadcast(&audio_powerdown);
// Lc_delay_ms(1000);
// L2_WT2605B_PWROFF();
// OID、WIFI关闭
@ -78,7 +78,7 @@ void L3_task_appstatus_handler(S_TASK_APPSTATUS *s)
// 音频通电后播放开机语音
// L2_WT2605B_PWRON();
// Lc_delay_ms(1000);
L2_WT2605B_broadcast(&audio_poweron);
L2_WT2605B_Broadcast(&audio_poweron);
// OID、WIFI开启
L2_OID_WIFI_Open();
//wifi任务初始化
@ -90,19 +90,19 @@ void L3_task_appstatus_handler(S_TASK_APPSTATUS *s)
// 灯灭
L2_LED_OFF();
// 音频播放
L2_WT2605B_broadcast(&audio_config_mode);
L2_WT2605B_Broadcast(&audio_config_mode);
// 配网任务初始化,进入配网
// L3_gm35_send_str("+++");
L3_task_W600_flow_init(W600_SC);
}
else if (s->status == WIFI_CONFIG_Phone)
{
L2_WT2605B_broadcast(&audio_config_phone);
L2_WT2605B_Broadcast(&audio_config_phone);
}
else if (s->status == WIFI_CONFIG_COMPLETE)
{
L2_WT2605B_broadcast(&audio_config_complete);
L2_WT2605B_Broadcast(&audio_config_complete);
// 配网成功,进入STAION模式
L3_task_W600_flow_init(W600_ST);
}
@ -111,14 +111,14 @@ void L3_task_appstatus_handler(S_TASK_APPSTATUS *s)
// 灯灭
L2_LED_OFF();
// 音频播放
L2_WT2605B_broadcast(&audio_wifi_connected);
L2_WT2605B_Broadcast(&audio_wifi_connected);
}
else if (s->status == TCP_CONNECTED)
{
// LED红灯灭,LED绿灯常亮
L2_GREEN_LED_ON();
// 音频播放
L2_WT2605B_broadcast(&audio_TCP_connected);
L2_WT2605B_Broadcast(&audio_TCP_connected);
}
L2_task_go_Tdelay(D_task_DETECTCHANGE,D_Tdelay_300ms);

31
source/app/task_keystatus.c

@ -11,11 +11,11 @@
//////////////////////////////////////////////////////////////////////////////
#include "../app/task_keystatus.h"
#include "../bsp/bsp_key.h"
#include "../app/app_config.h"
#include "../msp/uart0.h"
#include "../app/task_w600.h"
#include "../bsp/bsp_key.h"
#include "../bsp/bsp_WT2605B.h"
#include "../msp/uart0.h"
S_TASK_KEYSTATUS _s_task_keystatus;
@ -26,7 +26,10 @@ void L3_task_KeyStatus_init(void)
_s_task_keystatus.Key1_Down_Begin_Time = 0;
_s_task_keystatus.Key2_Down_Begin_Time = 0;
_s_task_keystatus.Key3_Down_Begin_Time = 0;
_s_task_keystatus.Key1_handled = 0;
_s_task_keystatus.Key2_handled = 0;
_s_task_keystatus.Key3_handled = 0;
L3_task_s_go(_s_task_keystatus,D_task_init);
}
@ -36,7 +39,6 @@ void L3_task_KeyStatus_init(void)
void L3_task_keystatus_handler(S_TASK_KEYSTATUS *s)
{
TTSS_Task_init()
L2_task_go_Tdelay(D_task_KEY_DETECT,D_Tdelay_300ms);
TTSS_Task_step(D_task_KEY_DETECT)
@ -72,16 +74,33 @@ void L3_task_keystatus_handler(S_TASK_KEYSTATUS *s)
if (R.app_status != POW_OFF)
{
R.app_status = WIFI_CONFIG;
s->Key3_handled = 1;
}
}
}
}
}
}
if (L2_ReadKey1() == Key_Down)
{
if (s->Key1_handled == 0)
{
s->Key1_handled = 1;
L2_WT2605B_VioceUp(); // 音量增加
}
}
if (L2_ReadKey2() == Key_Down)
{
if (s->Key2_handled == 0)
{
s->Key2_handled = 1;
L2_WT2605B_VioceDown(); // 音量减少
}
}
else
{
s->Key3_Down_Begin_Time = 0;
s->Key1_handled = 0;
s->Key2_handled = 0;
s->Key3_handled = 0;
}
L2_task_go_Tdelay(D_task_KEY_DETECT,D_Tdelay_300ms);

2
source/app/task_keystatus.h

@ -27,6 +27,8 @@ typedef struct _s_task_keystatus
U32 Key1_Down_Begin_Time;
U32 Key2_Down_Begin_Time;
U32 Key3_Down_Begin_Time;
U8 Key1_handled;
U8 Key2_handled;
U8 Key3_handled;
}S_TASK_KEYSTATUS;

78
source/bsp/bsp_WT2605B.c

@ -1,25 +1,22 @@
#include "bsp_WT2605B.h"
#include "../bsp/bsp_WT2605B.h"
#include "../app/app_config.h"
#include "../msp/UART3.h"
#include "../msp/UART0.h"
#include "../msp/msp_eeprom.h"
TS_SPEECH_AUDIO audio_powerdown = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x31,0x8F,0xEF};
TS_SPEECH_AUDIO audio_poweron = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x32,0x90,0xEF};
TS_SPEECH_AUDIO audio_wifi_connected = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x33,0x91,0xEF};
TS_SPEECH_AUDIO audio_TCP_connected = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x34,0x92,0xEF};
TS_SPEECH_AUDIO audio_config_mode = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x35,0x93,0xEF};
TS_SPEECH_AUDIO audio_config_complete = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x36,0x94,0xEF};
TS_SPEECH_AUDIO audio_config_phone = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x37,0x95,0xEF};
TS_SPEECH_AUDIO audio_powerdown = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x31,0x8F,0xEF}; //电源关闭
TS_SPEECH_AUDIO audio_poweron = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x32,0x90,0xEF}; //电源开启
TS_SPEECH_AUDIO audio_wifi_connected = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x33,0x91,0xEF}; //WIFI连接成功
TS_SPEECH_AUDIO audio_TCP_connected = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x34,0x92,0xEF}; //TCP连接成功
TS_SPEECH_AUDIO audio_config_mode = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x35,0x93,0xEF}; //配置模式
TS_SPEECH_AUDIO audio_config_complete = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x36,0x94,0xEF}; //配置完成
TS_SPEECH_AUDIO audio_config_phone = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x37,0x95,0xEF}; //手机APP配置
TS_SPEECH_AUDIO audio_volume_up = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x38,0x96,0xEF}; //音量增加
TS_SPEECH_AUDIO audio_volume_down = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x39,0x97,0xEF}; //音量减少
TS_SPEECH_AUDIO audio_select = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x37,0x95,0xEF};
TS_SPEECH_AUDIO audio_begin = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x38,0x96,0xEF};
TS_SPEECH_AUDIO audio_tip = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x39,0x97,0xEF};
TS_SPEECH_AUDIO audio_zmg_again = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x3B,0x99,0xEF};
TS_SPEECH_AUDIO audio_zmg_success = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x3C,0x9A,0xEF};
TS_SPEECH_VOLUME volume_control = {0x7E,0x04,0xAE,0x1E,0xD0,0xEF};
TS_SPEECH_VOLUME volume_control = {0x7E,0x04,0xAE,0x1E,0xD0,0xEF}; //音量控制
void L2_WT2605B_init()
@ -29,7 +26,8 @@ void L2_WT2605B_init()
//电源控制引脚
D_HighI_P0(BITN5);
L2_WT2605B_PWRON();
// 初始化音量
L2_WT2605B_VolumeControl(G.volume);
}
void L2_WT2605B_PWRON()
@ -46,32 +44,46 @@ void L2_WT2605B_Broadcast(TS_SPEECH_AUDIO *music)
L0_uart3_sendArray((U8 *)music,9);
}
void L2_WT2605B_VioceControl(void)
void L2_WT2605B_VolumeControl(U8 grade)
{
L2_WT2605B_Broadcast(&audio_zmg_again);
L2_WT2605B_VioceUp();
L2_WT2605B_Broadcast(&audio_zmg_success);
volume_control.grade = grade;
volume_control.crc = volume_control.num + volume_control.cmd + volume_control.grade;
L0_uart3_sendArray((U8 *)&volume_control,6);
}
// 音量设置6个档位:0x15,0x17,0x19,0x1B,0x1D,0x1F
void L2_WT2605B_VioceUp(void)
{
if (volume_control.grade <= 0x1E)
if (volume_control.grade >= 0x15 && volume_control.grade < 0x1F)
{
volume_control.grade = volume_control.grade + 1;
volume_control.grade = volume_control.grade + 2;
G.volume = volume_control.grade;
L0_Iap_Program_array(EEPROM_DATA_ADDR,(U8*)&G,sizeof(G));
}
volume_control.crc = 0xab;
L0_uart3_sendArray((U8 *)&volume_control,6);
else
{
volume_control.grade = volume_control.grade;
G.volume = volume_control.grade;
L0_Iap_Program_array(EEPROM_DATA_ADDR,(U8*)&G,sizeof(G));
}
L2_WT2605B_VolumeControl(G.volume);
L2_WT2605B_Broadcast(&audio_volume_up);
}
void L2_WT2605B_VioceDown(void)
{
if (volume_control.grade >= 0x01)
if (volume_control.grade > 0x15 && volume_control.grade <= 0x1F)
{
volume_control.grade = volume_control.grade - 1;
volume_control.grade = volume_control.grade - 2;
G.volume = volume_control.grade;
L0_Iap_Program_array(EEPROM_DATA_ADDR,(U8*)&G,sizeof(G));
}
volume_control.crc == 0xab;
L0_uart3_sendArray((U8 *)&volume_control,6);
else
{
volume_control.grade = volume_control.grade;
G.volume = volume_control.grade;
L0_Iap_Program_array(EEPROM_DATA_ADDR,(U8*)&G,sizeof(G));
}
L2_WT2605B_VolumeControl(G.volume);
L2_WT2605B_Broadcast(&audio_volume_down);
}

8
source/bsp/bsp_WT2605B.h

@ -33,10 +33,11 @@ extern TS_SPEECH_AUDIO audio_config_mode;
extern TS_SPEECH_AUDIO audio_config_complete;
extern TS_SPEECH_AUDIO audio_config_phone;
extern TS_SPEECH_AUDIO audio_volume_up;
extern TS_SPEECH_AUDIO audio_volume_down;
extern TS_SPEECH_AUDIO audio_select;
extern TS_SPEECH_AUDIO audio_begin;
extern TS_SPEECH_AUDIO audio_tip;
extern TS_SPEECH_AUDIO audio_powerdown;
extern TS_SPEECH_AUDIO audio_zmg_again;
extern TS_SPEECH_AUDIO audio_zmg_success;
@ -46,7 +47,8 @@ extern TS_SPEECH_VOLUME volume_control;
extern void L2_WT2605B_init();
extern void L2_WT2605B_PWRON();
extern void L2_WT2605B_PWROFF();
extern void L2_WT2605B_broadcast(TS_SPEECH_AUDIO *music);
extern void L2_WT2605B_Broadcast(TS_SPEECH_AUDIO *music);
extern void L2_WT2605B_VolumeControl(U8 grade);
extern void L2_WT2605B_VioceUp();
extern void L2_WT2605B_VioceDown();
#endif

2
source/bsp/bsp_oid.c

@ -54,7 +54,7 @@ void delay_ms(uint8_t ms)
void delay_us(uint8_t us)
{
uint16_t i;
// uint16_t i;
do{
// i = MAIN_Fosc / 10000000L;
// i = 1;///5 10 150u 1---50us

2
source/clib/clib.c

@ -299,7 +299,7 @@ int hexToDec(const char *source)
}
long hex2Dec(U8 *source ,U16 len)
{
int i,t,m;
int i,t;
long sum=0;
for(i=0;i<len;i++)
{

Loading…
Cancel
Save