0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于CW32的薄膜式鍵盤的應(yīng)用設(shè)計

CW32生態(tài)社區(qū) ? 來源:CW32生態(tài)社區(qū) ? 2023-09-07 18:22 ? 次閱讀

一、簡介

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ā)板上留有矩陣鍵盤接口,可以直接將模塊插上使用。

cbf9af72-4d67-11ee-a25d-92fbcf53809c.png

鍵盤內(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;    //選中標識
uint8_t choose_index=0;   //數(shù)組下標
uint8_t exert_flag=0;     //執(zhí)行標識


uint8_t number[NUM_LENGTH]={0};    //存儲6位數(shù)字
uint8_t num_index=0;      //數(shù)組下標    
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í)行標識已打開
    {
      switch(temp)
      {
        case '<':           //選中左移
          if(choose_flag==0) position=choose_index+1; //向左選中數(shù)字
          if(position!=0)                              //若已有數(shù)字輸入
          {
            choose_flag=1;                            //打開選中標識        
            OLED_Clear_Row(2);                         //先清除已有標識符號‘^’
            if(--position==0) position=choose_index;  //選中左移
            OLED_ShowChar(2,position,'^');            //顯示選中標識符號'^'
          }
          break;
        case '>':
          if(choose_flag==0) position=choose_index;   //向右選中數(shù)字
          if(position!=0)                              //若已有數(shù)字輸入
          {
            choose_flag=1;                            //打開選中標識
            OLED_Clear_Row(2);                        //先清除已有標識符號'^'
            if(++position==choose_index+1) position=1;//選中右移
            OLED_ShowChar(2,position,'^');            //顯示選中標識符號'^'
          }
          break;
        case 'E':
          choose_flag=0;                              //關(guān)閉選中標識
          OLED_Clear_Row(2);                          //清除選中標識符號'^'
          break;
        default:
          if(choose_flag==0)                           //若未打開選中標識
          {
            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í)行標識
    }
    BTIM_ClearITPendingBit(CW_BTIM1,BTIM_IT_OV); //清除標志位
  }
}
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ù)高電平,準備置低下一行
    if(key != '.') break; //若key不是默認值,則代表已檢測到按鍵按下,退出置行循環(huán),結(jié)束本次按鍵掃描
  }
  
  return key;  //返回鍵值
}






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關(guān)注

    關(guān)注

    6023

    文章

    44376

    瀏覽量

    628297
  • 工業(yè)控制
    +關(guān)注

    關(guān)注

    36

    文章

    1385

    瀏覽量

    85647
  • OLED顯示屏
    +關(guān)注

    關(guān)注

    6

    文章

    211

    瀏覽量

    30544
  • CW32
    +關(guān)注

    關(guān)注

    1

    文章

    168

    瀏覽量

    501

原文標題:【CW32】基于CW32的薄膜式鍵盤的應(yīng)用

文章出處:【微信號:CW32生態(tài)社區(qū),微信公眾號:CW32生態(tài)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    CW32移植Free-RTOS】CW32開發(fā)者扶持計劃

    CW32配置Free-RTOS全過程,CW32開發(fā)者扶持計劃
    的頭像 發(fā)表于 04-18 09:38 ?5930次閱讀
    【<b class='flag-5'>CW32</b>移植Free-RTOS】<b class='flag-5'>CW32</b>開發(fā)者扶持計劃

    【應(yīng)用筆記】CW32 電容觸摸按鍵設(shè)計指南

    前言CW32電容觸摸按鍵設(shè)計指南向客戶提供一種利用CW32內(nèi)部資源結(jié)合軟件編程實現(xiàn)電容觸摸按鍵有效觸摸檢測的方法。本指南的內(nèi)容重點在于工作原理、軟件檢測過程以及調(diào)試指引。利用芯源半
    的頭像 發(fā)表于 07-04 11:44 ?872次閱讀
    【應(yīng)用筆記】<b class='flag-5'>CW32</b> 電容<b class='flag-5'>式</b>觸摸按鍵設(shè)計指南

    CW32快速開發(fā)入門

    CW32快速開發(fā)入門
    的頭像 發(fā)表于 04-24 18:56 ?1684次閱讀
    <b class='flag-5'>CW32</b>快速開發(fā)入門

    CW32開發(fā)者扶持計劃#CW32 #芯片

    CW32
    CW32生態(tài)社區(qū)
    發(fā)布于 :2023年05月24日 16:56:14

    CW Programmer CW32系列芯片燒錄工具配套軟件

    CW Programmer CW32系列芯片的燒錄工具配套軟件
    發(fā)表于 09-15 07:44

    CW32電容觸摸按鍵設(shè)計指南

    CW32 電容觸摸按鍵設(shè)計指南向客戶提供一種利用 CW32 內(nèi)部資源結(jié)合軟件編程實現(xiàn)電容觸摸按鍵有效觸摸檢測的方法。本指南的內(nèi)容重點在于工作原理、軟件檢測過程以及調(diào)試指引。利用芯源
    發(fā)表于 09-15 06:00

    cw32和stm32的區(qū)別

    cw32和stm32的區(qū)別 CW32和STM32是兩種常見的單片機,被廣泛應(yīng)用于各種電子設(shè)備中。在本文中,我們將深入探討CW32和STM32之間的區(qū)別和優(yōu)劣勢。 1. 硬件性能 硬件性能是衡量單片機
    的頭像 發(fā)表于 08-16 11:15 ?3502次閱讀

    cw32和gd32的區(qū)別

    cw32和gd32的區(qū)別 CW32和GD32是兩種不同的芯片系列,分別由WCH和GigaDevice公司推出,兩者有很多不同之處,下面我們來詳細介紹。 首先從CW32系列開始,CW32
    的頭像 發(fā)表于 08-16 11:15 ?1657次閱讀

    基于CW32的無刷水泵方案

    基于CW32的無刷水泵方案
    的頭像 發(fā)表于 11-03 17:28 ?682次閱讀
    基于<b class='flag-5'>CW32</b>的無刷水泵方案

    基于CW32熱敏電阻采集溫度應(yīng)用

    基于CW32熱敏電阻采集溫度應(yīng)用
    的頭像 發(fā)表于 10-25 16:45 ?428次閱讀
    基于<b class='flag-5'>CW32</b>熱敏電阻采集溫度應(yīng)用

    CW32 電容觸摸按鍵設(shè)計指南

    CW32 電容觸摸按鍵設(shè)計指南
    的頭像 發(fā)表于 10-25 16:36 ?866次閱讀
    <b class='flag-5'>CW32</b> 電容<b class='flag-5'>式</b>觸摸按鍵設(shè)計指南

    CW32 PWM輸出功能介紹

    CW32 PWM輸出功能介紹
    的頭像 發(fā)表于 09-27 16:12 ?647次閱讀
    <b class='flag-5'>CW32</b> PWM輸出功能介紹

    CW32實時時鐘(RTC)介紹

    CW32實時時鐘(RTC)介紹
    的頭像 發(fā)表于 10-24 15:36 ?924次閱讀
    <b class='flag-5'>CW32</b>實時時鐘(RTC)介紹

    基于CW32的RC522刷卡模塊的應(yīng)用

    基于CW32的RC522刷卡模塊的應(yīng)用
    的頭像 發(fā)表于 11-02 14:53 ?871次閱讀
    基于<b class='flag-5'>CW32</b>的RC522刷卡模塊的應(yīng)用

    基于CW32的物聯(lián)網(wǎng)應(yīng)用

    CW32】基于CW32的物聯(lián)網(wǎng)應(yīng)用
    的頭像 發(fā)表于 11-02 15:55 ?605次閱讀
    基于<b class='flag-5'>CW32</b>的物聯(lián)網(wǎng)應(yīng)用