一、簡介
1.薄膜式鍵盤是一種常見的輸入設(shè)備,它由一層薄膜電路板和一層觸摸膜組成。薄膜電路板上印有導(dǎo)電圖案,而觸摸膜則具有與之對應(yīng)的按鍵區(qū)域。這種鍵盤的應(yīng)用場景非常廣泛,以下是幾個典型的應(yīng)用場景:
(1)電子產(chǎn)品:薄膜式鍵盤被廣泛應(yīng)用于各種電子產(chǎn)品中,如手機、平板電腦、數(shù)碼相機等。由于其結(jié)構(gòu)簡單、體積小巧,可以很好地滿足電子產(chǎn)品的設(shè)計需求。
(2)工業(yè)控制:在工業(yè)自動化領(lǐng)域,薄膜式鍵盤常用于控制面板和操作界面。它們具有防塵、防水、抗腐蝕等特性,能夠適應(yīng)惡劣的工作環(huán)境。
(3)醫(yī)療設(shè)備:醫(yī)療設(shè)備通常需要高度衛(wèi)生和易清潔的特點,薄膜式鍵盤因其表面光滑、易擦拭的特性而被廣泛應(yīng)用于醫(yī)療設(shè)備中,如手術(shù)臺、心電圖儀等。
二、所需物料
本實驗使用到了CW32-48F大學(xué)計劃開發(fā)板、5*4薄膜式鍵盤模塊、0.96寸OLED顯示屏及Keil5開發(fā)環(huán)境。開發(fā)板上留有矩陣鍵盤接口,可以直接將模塊插上使用。
鍵盤內(nèi)部連線示意圖
注:鍵盤的9根引線從左至右分別與單片機引腳PB15、PB14、PB13、PB12、PA6、PA5、PA4、PA1、PA0相連。
三、核心代碼
main.c: #include "main.h" #include "OLED.h" #include "Key.h" #include "Delay.h" #include "BTIM.h" #define NUM_LENGTH 6 uint8_t choose_flag=0; //選中標(biāo)識 uint8_t choose_index=0; //數(shù)組下標(biāo) uint8_t exert_flag=0; //執(zhí)行標(biāo)識 uint8_t number[NUM_LENGTH]={0}; //存儲6位數(shù)字 uint8_t num_index=0; //數(shù)組下標(biāo) char temp='.'; //默認值'.' int main() { uint8_t i; uint8_t position=0; //選中的數(shù)字在數(shù)組中的位置 OLED_Init(); //OLED顯示 Key_GPIO_Init(); //5*4薄膜鍵盤GPIO初始化 BTIM_Init(); //定時器初始化,控制按鍵掃描周期 while(1) { if(exert_flag==1) //若執(zhí)行標(biāo)識已打開 { switch(temp) { case '<': //選中左移 if(choose_flag==0) position=choose_index+1; //向左選中數(shù)字 if(position!=0) //若已有數(shù)字輸入 { choose_flag=1; //打開選中標(biāo)識 OLED_Clear_Row(2); //先清除已有標(biāo)識符號‘^’ if(--position==0) position=choose_index; //選中左移 OLED_ShowChar(2,position,'^'); //顯示選中標(biāo)識符號'^' } break; case '>': if(choose_flag==0) position=choose_index; //向右選中數(shù)字 if(position!=0) //若已有數(shù)字輸入 { choose_flag=1; //打開選中標(biāo)識 OLED_Clear_Row(2); //先清除已有標(biāo)識符號'^' if(++position==choose_index+1) position=1;//選中右移 OLED_ShowChar(2,position,'^'); //顯示選中標(biāo)識符號'^' } break; case 'E': choose_flag=0; //關(guān)閉選中標(biāo)識 OLED_Clear_Row(2); //清除選中標(biāo)識符號'^' break; default: if(choose_flag==0) //若未打開選中標(biāo)識 { choose_index=num_index+1; if(num_index==0) { OLED_Clear_Row(1); for(i=0;i=18) { cnt=0; temp=Key_Scan(); //每180ms執(zhí)行一次按鍵掃描,返回值賦值給temp if(temp!='.') exert_flag=1; //打開執(zhí)行標(biāo)識 } BTIM_ClearITPendingBit(CW_BTIM1,BTIM_IT_OV); //清除標(biāo)志位 } } Key.c: #include "Key.h" #include "main.h" #include "Delay.h" #include "OLED.h" #define ROW_PORT CW_GPIOA //鍵盤行引腳端口 #define COL_PORT CW_GPIOB //鍵盤列引腳端口 #define ROW_NUM 4 //4行 #define COL_NUM 4 //4列 uint16_t row_pins[ROW_NUM]={GPIO_PIN_1,GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6}; //每一行所對應(yīng)的引腳 uint16_t col_pins[COL_NUM]={GPIO_PIN_15,GPIO_PIN_14,GPIO_PIN_13,GPIO_PIN_12}; //每一列所對應(yīng)的引腳 char key_value[ROW_NUM][COL_NUM]={ //鍵值 1, 2, 3, '(', 4, 5, 6, ')', 7, 8, 9, 'E', '<', 0, '>', 'Y' }; void Key_GPIO_Init(void) { __RCC_GPIOA_CLK_ENABLE(); __RCC_GPIOB_CLK_ENABLE(); //rows-->置行 GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.IT=GPIO_IT_NONE; GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出 GPIO_InitStruct.Pins=row_pins[0]|row_pins[1]|row_pins[2]|row_pins[3]; GPIO_InitStruct.Speed=GPIO_SPEED_HIGH; GPIO_Init(ROW_PORT, &GPIO_InitStruct); //cols-->檢列 GPIO_InitStruct.Mode=GPIO_MODE_INPUT_PULLUP; //上拉輸入 GPIO_InitStruct.Pins=col_pins[0]|col_pins[1]|col_pins[2]|col_pins[3]; GPIO_Init(COL_PORT, &GPIO_InitStruct); } char Key_Scan(void) { uint8_t i,j; char key = '.'; //默認值'.' for ( i = 0; i < ROW_NUM; i ++ ) //1-4行依次置低 { GPIO_WritePin(ROW_PORT,row_pins[i],GPIO_Pin_RESET); for( j = 0; j < COL_NUM; j ++ ) //依次檢測1~4列電平 { if( GPIO_ReadPin(COL_PORT,col_pins[j])==RESET ) //如果檢測到低電平,則代表有按鍵按下 { key = key_value[i][j]; //獲取鍵值 break; //跳出檢列循環(huán) } } GPIO_WritePin(ROW_PORT,row_pins[i],GPIO_Pin_SET); //本行恢復(fù)高電平,準(zhǔn)備置低下一行 if(key != '.') break; //若key不是默認值,則代表已檢測到按鍵按下,退出置行循環(huán),結(jié)束本次按鍵掃描 } return key; //返回鍵值 }
審核編輯:劉清
-
單片機
+關(guān)注
關(guān)注
6035文章
44554瀏覽量
634621 -
工業(yè)控制
+關(guān)注
關(guān)注
37文章
1451瀏覽量
85828 -
OLED顯示屏
+關(guān)注
關(guān)注
6文章
217瀏覽量
30675 -
CW32
+關(guān)注
關(guān)注
1文章
203瀏覽量
626
原文標(biāo)題:【CW32】基于CW32的薄膜式鍵盤的應(yīng)用
文章出處:【微信號:CW32生態(tài)社區(qū),微信公眾號:CW32生態(tài)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論