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