色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

基于CW32的薄膜式鍵盤的應用設計

CW32生態社區 ? 來源:CW32生態社區 ? 2023-09-07 18:22 ? 次閱讀

一、簡介

1.薄膜式鍵盤是一種常見的輸入設備,它由一層薄膜電路板和一層觸摸膜組成。薄膜電路板上印有導電圖案,而觸摸膜則具有與之對應的按鍵區域。這種鍵盤的應用場景非常廣泛,以下是幾個典型的應用場景:

(1)電子產品:薄膜式鍵盤被廣泛應用于各種電子產品中,如手機、平板電腦、數碼相機等。由于其結構簡單、體積小巧,可以很好地滿足電子產品的設計需求。

(2)工業控制:在工業自動化領域,薄膜式鍵盤常用于控制面板和操作界面。它們具有防塵、防水、抗腐蝕等特性,能夠適應惡劣的工作環境。

(3)醫療設備:醫療設備通常需要高度衛生和易清潔的特點,薄膜式鍵盤因其表面光滑、易擦拭的特性而被廣泛應用于醫療設備中,如手術臺、心電圖儀等。

二、所需物料

本實驗使用到了CW32-48F大學計劃開發板、5*4薄膜式鍵盤模塊、0.96寸OLED顯示屏及Keil5開發環境。開發板上留有矩陣鍵盤接口,可以直接將模塊插上使用。

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

鍵盤內部連線示意圖

注:鍵盤的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;   //數組下標
uint8_t exert_flag=0;     //執行標識


uint8_t number[NUM_LENGTH]={0};    //存儲6位數字
uint8_t num_index=0;      //數組下標    
char temp='.';            //默認值'.'
         
int main()
{
  uint8_t i;
  uint8_t position=0;     //選中的數字在數組中的位置
  OLED_Init();            //OLED顯示
  Key_GPIO_Init();        //5*4薄膜鍵盤GPIO初始化
  BTIM_Init();            //定時器初始化,控制按鍵掃描周期
  while(1)
  { 
    if(exert_flag==1)     //若執行標識已打開
    {
      switch(temp)
      {
        case '<':           //選中左移
          if(choose_flag==0) position=choose_index+1; //向左選中數字
          if(position!=0)                              //若已有數字輸入
          {
            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;   //向右選中數字
          if(position!=0)                              //若已有數字輸入
          {
            choose_flag=1;                            //打開選中標識
            OLED_Clear_Row(2);                        //先清除已有標識符號'^'
            if(++position==choose_index+1) position=1;//選中右移
            OLED_ShowChar(2,position,'^');            //顯示選中標識符號'^'
          }
          break;
        case 'E':
          choose_flag=0;                              //關閉選中標識
          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執行一次按鍵掃描,返回值賦值給temp
      if(temp!='.')  exert_flag=1;    //打開執行標識
    }
    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};     //每一行所對應的引腳


uint16_t col_pins[COL_NUM]={GPIO_PIN_15,GPIO_PIN_14,GPIO_PIN_13,GPIO_PIN_12}; //每一列所對應的引腳


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;            //跳出檢列循環
      }
    }
    GPIO_WritePin(ROW_PORT,row_pins[i],GPIO_Pin_SET);  //本行恢復高電平,準備置低下一行
    if(key != '.') break; //若key不是默認值,則代表已檢測到按鍵按下,退出置行循環,結束本次按鍵掃描
  }
  
  return key;  //返回鍵值
}






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6035

    文章

    44554

    瀏覽量

    634634
  • 工業控制
    +關注

    關注

    37

    文章

    1451

    瀏覽量

    85829
  • OLED顯示屏
    +關注

    關注

    6

    文章

    217

    瀏覽量

    30675
  • CW32
    +關注

    關注

    1

    文章

    203

    瀏覽量

    626

原文標題:【CW32】基于CW32的薄膜式鍵盤的應用

文章出處:【微信號:CW32生態社區,微信公眾號:CW32生態社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    CW32移植Free-RTOS】CW32開發者扶持計劃

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

    【應用筆記】CW32 電容觸摸按鍵設計指南

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

    CW32快速開發入門

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

    CW32開發者扶持計劃#CW32 #芯片

    CW32
    CW32生態社區
    發布于 :2023年05月24日 16:56:14

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

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

    CW32電容觸摸按鍵設計指南

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

    cw32和stm32的區別

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

    cw32和gd32的區別

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

    基于CW32的無刷水泵方案

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

    基于CW32熱敏電阻采集溫度應用

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

    CW32 電容觸摸按鍵設計指南

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

    CW32 PWM輸出功能介紹

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

    CW32實時時鐘(RTC)介紹

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

    基于CW32的RC522刷卡模塊的應用

    基于CW32的RC522刷卡模塊的應用
    的頭像 發表于 11-02 14:53 ?1108次閱讀
    基于<b class='flag-5'>CW32</b>的RC522刷卡模塊的應用

    基于CW32的物聯網應用

    CW32】基于CW32的物聯網應用
    的頭像 發表于 11-02 15:55 ?783次閱讀
    基于<b class='flag-5'>CW32</b>的物聯網應用
    主站蜘蛛池模板: 久拍国产在线观看| 色婷婷粉嫩AV精品综合在线| 亚洲精品高清中文字幕完整版| 白百合在线观看| 美女脱衣服搞鸡| 在线亚洲免费| 精品国产午夜肉伦伦影院| 小货SAO边洗澡边CAO你动漫| 大香网伊人久久综合网2020| 欧美xxxx性喷潮| 99精品99| 两百磅美女| 中文字幕欧美一区| 久久久中日AB精品综合| 妖精视频免费高清观看| 海角社区在线视频播放观看| 校花的奶好大好浪| 国产剧情麻豆mv| 午夜国产大片免费观看| 国产精品JIZZ视频免费| 十二月综合缴缴情| 国产二级一片内射视频播放| 三级网站视频在线观看| 富婆夜店找黑人猛男BD在线| 日本高清免费一本在线观看| 北岛玲手机在线观看视频观看| 欧美午夜免费观看福利片| 99视频一区| 日本女人bbb| 欧美高清videossexo| 99RE6国产精品视频播放| 国产成人aaa在线视频免费观看| 性直播免费| 欧美九十老太另类| 国产一卡 二卡三卡四卡无卡乱码视频| 亚洲刺激视频| 欧美日韩久久久精品A片| 国产成人无码免费精品果冻传媒| 暖暖视频中国在线观看免费韩国 | 99久久99| 男生插女生下体|