感謝沁恒開發(fā)們提供的三模demo,大家做鍵盤的時候一定要跟開發(fā)大大們要最新的demo,去年提供的demo鏈接藍(lán)牙和2.4G有問題,聯(lián)系了大大們提供的新demo測試藍(lán)牙、2.4G都正常
順帶提一句,demo里的按鍵掃描部分寫的不太適合移植,而做鍵盤這部分和Fn功能鍵部分是最需要調(diào)整的,這里建議優(yōu)化一下
對于鍵盤修復(fù)或者改裝的,需要用到現(xiàn)有鍵位掃描,把自己用的代碼分享給大家
#ifdef?ENABLE_KEY_DEFINE_SCAN uint8_t?getPinNum(uint32_t?pin)?{ ????uint8_t?pos=0; ????if(pin==0) ????return?99; ????while(pin>1)?{ ????????pos++; ????????pin=pin>>1; ????} ????return?pos; } void?keyPositionScan(void)?{ ????GPIO*?keys[ROW_NUM?+?COL_NUM]; ????uint8_t?i,?j,?idx?=?ROW_NUM?+?COL_NUM; ????//合并行列集合,方便遍歷 ????for?(i?=?0;?i?<?idx;?i++) ????{ ????????keys[i]?=?i?<?ROW_NUM???rowPins[i]?:?colPins[i?-?ROW_NUM]; ????????//全部初始化成推挽輸出,高電平(應(yīng)該設(shè)置為開漏,CH582不支持) ????????GPIO_SetBits(keys[i]); ????????GPIO_ModeCfg(keys[i],GPIO_ModeOut_PP_5mA); ????} ????while?(1) ????{ ????????for?(i?=?0;?i?<?idx;?i++) ????????{ ????????????//i切換為上拉輸入 ????????????GPIO_ModeCfg(keys[i],GPIO_ModeIN_PU); ????????????for?(j?=?0;?j?<?idx;?j++) ????????????{ ????????????????if?(i?!=?j) ????????????????{ ????????????????????//拉低j,檢查i電平,為低表示i:j按鍵按下 ????????????????????GPIO_ResetBits(keys[j]); //???????????????????????mDelaymS(1); ????????????????????if?(GPIO_ReadPortPin(keys[i])==0) ????????????????????{ ????????????????????????//切換i:j狀態(tài),再次檢查電平狀態(tài),j也為低表示無無沖二極管,j為高表示有無沖二極管,方向i正?j負(fù) ????????????????????????GPIO_SetBits(keys[j]); ????????????????????????GPIO_ModeCfg(keys[i],GPIO_ModeOut_PP_5mA); ????????????????????????GPIO_ModeCfg(keys[j],GPIO_ModeIN_PU); ????????????????????????GPIO_ResetBits(keys[i]); //???????????????????????????mDelaymS(1); ????????????????????????//j也為低表示無二極管 ????????????????????????if?(GPIO_ReadPortPin(keys[j])==0) ????????????????????????{ ????????????????????????????LOG_INFO("press?P%c%d--P%c%d\r\n",?keys[i]->port==0?'A':'B',?getPinNum(keys[i]->pin),?keys[j]->port==0?'A':'B',?getPinNum(keys[j]->pin)); ????????????????????????} ????????????????????????else ????????????????????????{ ????????????????????????????LOG_INFO("press?P%c%d->P%c%d\r\n",?keys[i]->port==0?'A':'B',?getPinNum(keys[i]->pin),?keys[j]->port==0?'A':'B',?getPinNum(keys[j]->pin)); ????????????????????????} ????????????????????????GPIO_SetBits(keys[i]); ????????????????????????GPIO_ModeCfg(keys[i],GPIO_ModeIN_PU); ????????????????????????GPIO_ModeCfg(keys[j],GPIO_ModeOut_PP_5mA); ????????????????????} ????????????????????GPIO_SetBits(keys[j]); ????????????????} ????????????} ????????????GPIO_ModeCfg(keys[i],GPIO_ModeOut_PP_5mA); ????????} ????} } #endif
熱門產(chǎn)品 :
CH182: 以太網(wǎng)PHY收發(fā)器芯片