From 1aedc5880f14be070dd0e752f4c19ce5e5ce881e Mon Sep 17 00:00:00 2001 From: "mr.zhangsan" Date: Sat, 13 Jul 2024 23:51:48 +0800 Subject: [PATCH] =?UTF-8?q?feature:=20=E6=B7=BB=E5=8A=A0=E6=8C=89=E9=94=AE?= =?UTF-8?q?=E9=9D=9E=E9=98=BB=E5=A1=9E=E6=A8=A1=E5=BC=8F=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keilp/cc_as_stc02_ps5ws.uvprojx | 20 ++--- source/app/main.c | 3 +- source/app/main.h | 6 +- source/app/task_btn_nonblock.c | 113 ++++++++++++++++++++++++++ source/app/task_btn_nonblock.h | 35 ++++++++ source/app/task_rfid.c | 6 +- source/bsp/bsp_key nonblock.c | 138 ++++++++++++++++++++++++++++++++ source/bsp/bsp_key_nonblock.h | 12 +++ 8 files changed, 318 insertions(+), 15 deletions(-) create mode 100644 source/app/task_btn_nonblock.c create mode 100644 source/app/task_btn_nonblock.h create mode 100644 source/bsp/bsp_key nonblock.c create mode 100644 source/bsp/bsp_key_nonblock.h diff --git a/keilp/cc_as_stc02_ps5ws.uvprojx b/keilp/cc_as_stc02_ps5ws.uvprojx index d897f82..7f29a96 100644 --- a/keilp/cc_as_stc02_ps5ws.uvprojx +++ b/keilp/cc_as_stc02_ps5ws.uvprojx @@ -370,11 +370,6 @@ 1 ..\source\app\task_bled.c - - task_btn.c - 1 - ..\source\app\task_btn.c - task_nfc_auth.c 1 @@ -385,6 +380,11 @@ 1 ..\source\app\task_low_power.c + + task_btn_nonblock.c + 1 + ..\source\app\task_btn_nonblock.c + @@ -455,11 +455,6 @@ 1 ..\source\bsp\rs485.c - - bsp_key.c - 1 - ..\source\bsp\bsp_key.c - bsp_config_delay.c 1 @@ -475,6 +470,11 @@ 1 ..\source\bsp\bsp_led.c + + bsp_key nonblock.c + 1 + ..\source\bsp\bsp_key nonblock.c + diff --git a/source/app/main.c b/source/app/main.c index 72374ac..5cc3bb5 100644 --- a/source/app/main.c +++ b/source/app/main.c @@ -108,7 +108,8 @@ void L0_task_init() { //外设初始化 bsp_led_init(); - bsp_key_init(); + // bsp_key_init(); + bsp_key_nonblock_init(); bsp_rfid_init(); //任务初始化 diff --git a/source/app/main.h b/source/app/main.h index 5b6f4a3..594077d 100644 --- a/source/app/main.h +++ b/source/app/main.h @@ -41,7 +41,8 @@ #include "../bsp/bsp_config.h" #include "../bsp/bsp_config_delay.h" #include "../bsp/bsp_led.h" -#include "../bsp/bsp_key.h" +// #include "../bsp/bsp_key.h" +#include "../bsp/bsp_key_nonblock.h" #include "../bsp/bsp_rfid.h" #include "../bsp/chipid.h" #include "../bsp/cs1232.h" @@ -59,7 +60,8 @@ #include "../app/task_rfid.h" #include "../app/task_rs485.h" #include "../app/task_bled.h" -#include "../app/task_btn.h" +// #include "../app/task_btn.h" +#include "../app/task_btn_nonblock.h" #include "../app/task_nfc_auth.h" #include "../app/task_low_power.h" diff --git a/source/app/task_btn_nonblock.c b/source/app/task_btn_nonblock.c new file mode 100644 index 0000000..bc19b07 --- /dev/null +++ b/source/app/task_btn_nonblock.c @@ -0,0 +1,113 @@ +//////////////////////////////////////////////////////////////////////////// +///@copyright Copyright (c) 2018, 传控科技 All rights reserved. +///------------------------------------------------------------------------- +/// @file bsp_drv.c +/// @brief bsp @ driver config +///------------------------------------------------------------------------- +/// @version 1.0 +/// @author CC +/// @date 20180331 +/// @note cc_AS_stc02 +////////////////////////////////////////////////////////////////////////////// + +#include "task_btn_nonblock.h" +#include "../app/app_config.h" +#include "../bsp/bsp_config.h" +#include "../msp/uart0.h" +#include "../bsp/bsp_key_nonblock.h" +#include "../bsp/bsp_led.h" + +S_TASK_BTN _s_task_btn; +static int i; +static U8 key; + +void L3_task_btn_init(void) +{ + L1_task_init(&_s_task_btn.task); + L3_task_s_go(_s_task_btn,D_task_init); +} + +#define D_TASK_BTN_SCAN 0x50 +#define D_TASK_BTN_SHAKE 0x51 +#define D_TASK_BTN_COMPLETE 0x52 + +void L3_task_btn_handler(S_TASK_BTN *s) +{ + TTSS_Task_init() + L2_task_go(D_TASK_BTN_SCAN); + + TTSS_Task_step(D_TASK_BTN_SCAN) + //检测是否有按键按下,并记录行、列 + key = bsp_key_nonblock_scan(&s->row, &s->col); + if(key != BSP_KEY_NUM_MAX) + { + //检测到的按键按下次数 + s->times = 0; + //最大次数阈值,超过阈值停止检测,判定为按键放开 + s->times_threshold = 100; + //再次检测(防抖动、检测按键弹起) + L2_task_go_Tdelay(D_TASK_BTN_SHAKE, D_Tdelay_5ms); + } + + TTSS_Task_step(D_TASK_BTN_SHAKE) + //检测当前列是否仍处于按下状态,或者按下超时 + //此时row仍处于检测状态,不需要再次调用scan_row() + if(bsp_key_nonblock_scan_col(s->col) == 0 || s->times > s->times_threshold) + { + L2_task_go_Tdelay(D_TASK_BTN_COMPLETE, 0); + } + else + { + s->times ++; + //每5s检测一次 + L2_task_go_Tdelay(D_TASK_BTN_SHAKE, D_Tdelay_5ms); + } + + TTSS_Task_step(D_TASK_BTN_COMPLETE) + //至少一次,防抖动 + if(s->times > 1) + { + L0_uart0_uc('#'); + L0_uart0_uchex(key); + + //功能按键 + if(key == 0) + { + //设置功能按键按下 + R.func_btn = 1; + //此处代码注释掉:因为低功耗由上位机处理 + //功能键按下退出低功耗模式 + //L3_set_power_mode(POWER_NORMAL); + } + //心电模式 + else if(key == 13) + { + //设置心电模式按下 + R.xd_mode ^= 1; + //亮灯 + R.led_status[key] = R.xd_mode; + } + else if(key>=1 && key <=12) + { + //如果不需要授权 or 需要但已经授权 + if(!(R.auth_flag & 0xF0) || (R.auth_flag & 0x0F)) + { + //L0_uart0_uc('$'); + //L0_uart0_uchex(key); + + //设置对应的rfid + L3_new_rfid(R.rfid_table[key], 0, 0xFF); + + //亮灯 + R.led_status[key] = 1; + } + } + } + L2_task_go_Tdelay(D_TASK_BTN_SCAN,0); + + TTSS_Task_end(); +} + + + + diff --git a/source/app/task_btn_nonblock.h b/source/app/task_btn_nonblock.h new file mode 100644 index 0000000..d940545 --- /dev/null +++ b/source/app/task_btn_nonblock.h @@ -0,0 +1,35 @@ +//////////////////////////////////////////////////////////////////////////// +///@copyright Copyright (c) 2018, 传控科技 All rights reserved. +///------------------------------------------------------------------------- +/// @file bsp_drv.h +/// @brief bsp @ driver config +///------------------------------------------------------------------------- +/// @version 1.0 +/// @author CC +/// @date 20180331 +/// @note cc_AS_stc02 + +////////////////////////////////////////////////////////////////////////////// + +#ifndef _APP_TASK_BTN_NONBLOCK_H +#define _APP_TASK_BTN_NONBLOCK_H + +#include "../ctask/task.h" +#include "../clib/clib.h" + +typedef struct _s_task_btn +{ + TS_task task; + U8 row, col; + U16 times; + U16 times_threshold; +}S_TASK_BTN; + +extern S_TASK_BTN _s_task_btn; + +extern void L3_task_btn_init(void); +extern void L3_task_btn_handler(S_TASK_BTN *s); + + +#endif // #ifndef _APP_TASK_BTN_NONBLOCK_H + diff --git a/source/app/task_rfid.c b/source/app/task_rfid.c index ea4a37e..42fdc0a 100644 --- a/source/app/task_rfid.c +++ b/source/app/task_rfid.c @@ -89,7 +89,8 @@ U8 verify_mask(U8 *rfid) int i; for(i=0;i<6;i++) { - if(rfid[i] != RFID_READ_MASK[i]){ + if(rfid[i] != RFID_READ_MASK[i]) + { return 0; } } @@ -101,7 +102,8 @@ U8 verify_mask(U8 *rfid) //Type:00命令帧 /01响应帧 /02通知帧 //Command: 07指令桢 /22单次读写 /27多次轮询 /28停止轮询 /0C选择 / B6设置功率 //数据长度:00 11 -//数据:D5 30 00 E2 00 10 71 00 00 52 9B 09 40 B4 02 [EB 98] +//数据:RSSI PC PC EPC0 00 10 71 00 00 52 EPC7 ANT [EB 98] +//数据:D5 20 00 E2 00 10 71 00 00 52 9B 40 [EB 98] //校验:0C 从Type到数据字段 [02 22 00 11 D5 30 00 E2 00 10 71 00 00 52 9B 09 40 B4 02 EB 98] 的所有字节的累加和 //帧尾:7E void parse_rfid_pkg() diff --git a/source/bsp/bsp_key nonblock.c b/source/bsp/bsp_key nonblock.c new file mode 100644 index 0000000..0f2b09a --- /dev/null +++ b/source/bsp/bsp_key nonblock.c @@ -0,0 +1,138 @@ +#include "bsp_key_nonblock.h" + +U32 timeout = 0x3FFFFF; + +U8 bsp_key_nonblock_init(void) +{ + //初始化为高电平 + KR1 = KR2 = KR3 = KR4 = 1; + //初始化为高电平 + KC1 = KC2 = KC3 = KC4 = 1; + + return 0; +} + +void bsp_key_nonblock_scan_row(U8 r) +{ + KR1 = 1; + KR2 = 1; + KR3 = 1; + KR4 = 1; + switch(r){ + case 1: + KR1 = 0;break; + case 2: + KR2 = 0;break; + case 3: + KR3 = 0;break; + case 4: + KR4 = 0;break; + default: + break; + } +} + +U8 bsp_key_nonblock_scan_col(U8 c) +{ + if(c == 1) + { + return (KC1 == 0); + } + else if(c == 2) + { + return (KC2 == 0); + } + else if(c == 3) + { + return (KC3 == 0); + } + else if(c == 4) + { + return (KC4 == 0); + } + return 0; +} + +U8 bsp_key_nonblock_scan(U8 *row, U8 *col) +{ + //扫描第1行 + bsp_key_nonblock_scan_row(1); + *row = 1; + if(bsp_key_nonblock_scan_col(1) > 0){ + *col = 1; + return 0; + } + if(bsp_key_nonblock_scan_col(2) > 0){ + *col = 2; + return 1; + } + if(bsp_key_nonblock_scan_col(3) > 0){ + *col = 3; + return 2; + } + if(bsp_key_nonblock_scan_col(4) > 0){ + *col = 4; + return 3; + } + + //扫描第2行 + bsp_key_nonblock_scan_row(2); + *row = 2; + if(bsp_key_nonblock_scan_col(1) > 0){ + *col = 1; + return 4; + } + if(bsp_key_nonblock_scan_col(2) > 0){ + *col = 2; + return 5; + } + if(bsp_key_nonblock_scan_col(3) > 0){ + *col = 3; + return 6; + } + if(bsp_key_nonblock_scan_col(4) > 0){ + *col = 4; + return 7; + } + + //扫描第3行 + bsp_key_nonblock_scan_row(3); + *row = 3; + if(bsp_key_nonblock_scan_col(1) > 0){ + *col = 1; + return 8; + } + if(bsp_key_nonblock_scan_col(2) > 0){ + *col = 2; + return 9; + } + if(bsp_key_nonblock_scan_col(3) > 0){ + *col = 3; + return 10; + } + if(bsp_key_nonblock_scan_col(4) > 0){ + *col = 4; + return 11; + } + + //扫描第4行 + bsp_key_nonblock_scan_row(4); + *row = 4; + if(bsp_key_nonblock_scan_col(1) > 0){ + *col = 1; + return 12; + } + if(bsp_key_nonblock_scan_col(2) > 0){ + *col = 2; + return 13; + } + // if(bsp_key_nonblock_scan_col(KC3) > 0){ + // return 14; + // } + // if(bsp_key_nonblock_scan_col(KC4) > 0){ + // return 15; + // } + + return BSP_KEY_NUM_MAX; +} + diff --git a/source/bsp/bsp_key_nonblock.h b/source/bsp/bsp_key_nonblock.h new file mode 100644 index 0000000..1f1c1eb --- /dev/null +++ b/source/bsp/bsp_key_nonblock.h @@ -0,0 +1,12 @@ +#ifndef _BSP_KEY_NONBLOCK_H +#define _BSP_KEY_NONBLOCK_H + +#include "bsp_config.h" + +#define BSP_KEY_NUM_MAX 99 + +extern U8 bsp_key_nonblock_init(void); +extern U8 bsp_key_nonblock_scan(U8 *row, U8 *col); +extern U8 bsp_key_nonblock_scan_col(U8 col); + +#endif \ No newline at end of file