【经验】基于CW32的薄膜式键盘的应用
一、简介
薄膜式键盘是一种常见的输入设备,它由一层薄膜电路板和一层触摸膜组成。薄膜电路板上印有导电图案,而触摸膜则具有与之对应的按键区域。这种键盘的应用场景非常广泛,以下是几个典型的应用场景:
(1)电子产品:薄膜式键盘被广泛应用于各种电子产品中,如手机、平板电脑、数码相机等。由于其结构简单、体积小巧,可以很好地满足电子产品的设计需求。
(2)工业控制:在工业自动化领域,薄膜式键盘常用于控制面板和操作界面。它们具有防尘、防水、抗腐蚀等特性,能够适应恶劣的工作环境。
(3)医疗设备:医疗设备通常需要高度卫生和易清洁的特点,薄膜式键盘因其表面光滑、易擦拭的特性而被广泛应用于医疗设备中,如手术台、心电图仪等。
二、所需物料
本实验使用到了CW32-48F大学计划开发板、5*4薄膜式键盘模块、0.96寸OLED显示屏及Keil5开发环境。开发板上留有矩阵键盘接口,可以直接将模块插上使用。
注:键盘的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<NUM_LENGTH;i++) //溢出清零
number[i]=0;
}
number[num_index]=temp;
OLED_ShowNum(1,num_index+1,number[num_index],1);
num_index++; //输入右移
choose_index=num_index;
if(num_index==NUM_LENGTH) num_index=0;
}
else
{
number[position-1]=temp; //若已打开选中标识,将获取的键值保存至数组中对应的位置
OLED_ShowNum(1,position,number[position-1],1);//显示屏上覆盖原有数字
}
break;
}
exert_flag=0; //执行后关闭标识
}
}
}
void BTIM1_IRQHandler(void) //基本定时器1中断服务函数
{
static uint8_t cnt = 0;
if(BTIM_GetITStatus(CW_BTIM1,BTIM_IT_OV))
{
if(++cnt>=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; //返回键值
}
四、效果演示
- |
- +1 赞 0
- 收藏
- 评论 0
本文由咪猫转载自CW32生态社区公众号,原文标题为:【CW32】基于CW32的薄膜式键盘的应用,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
【经验】基于CW32的AS608指纹模块的应用
AS608是一款集成了指纹图像采集和指纹比对算法的指纹识别模块。它采用了高质量的光学传感器,能够实时采集人体指纹图像,并通过指纹比对算法进行指纹识别。AS608具有高精度、快速、可靠的特点,广泛应用于各种指纹识别场景,如门禁系统、安防系统、考勤系统等。本实验用到了CW32-48F大学计划板、0.96寸OLED显示屏模块、AS608指纹模块及Keil5开发环境。
【CW32模块使用】VL53L0X激光测距传感器
VL53L0X是ST公司推出的新一代 ToF 激光测距传感器,采用了第二代 FlightSenseTM技术,利用飞行时间(ToF)原理,通过光子的飞行来回时间与光速的计算,实现测距应用。本文的目标是在CW32F030C8T6开发板上能够实现测量距离的功能。首先要获取资料,查看数据手册应如何实现读取数据,再移植至我们的工程。
使用JLink烧录CW32程序
本篇主要介绍使用JLink烧录CW32程序。
国民技术(Nations)芯片产品选型指南(中文)
描述- 国民技术持续创新,提供全场景、广覆盖、高性能、安全可靠的MCU产品。产品广泛应用于网络安全认证、电子银行、电子证照、移动支付及移动安全等应用方向。
型号- N32G032P6W7,NB201YBF6C,N32G451CEL7,N32L406MBL7,N32G031K6Q7,N32L403K8Q7,N32G455RBL7,N32G401K6L7,N32G030K6L7,N32G452CCL7,NS-LINK-PRO,N32G430K6Q7,N32G451RCL7,N32S032,N32S033,N32G430G8Q7,N32G430C8L7,N32L402RBL7,N32G031F8S7,N32G452MBL7,N32L433K8L7,N32G457VCL7,N32G031C8L7,N32G4FRHEQ7,N32G401,N32G430F6S7-1,N32G0XX,N32G457REL7,N32G430F8S7,N32G032F6S7,N32G455MCL7,N32H473KCU8,N32H474CEU8,N32H474CEU7,N32G455CEL7,N32L40X,N32G052RBL7,N32H473CCL8,N32H473CCL7,Z8D16R-2,N32G455RCL7,N32H482VEL7,N32G401F8Q7,N32H474QEL8,N32H474QEL7,N32G452CBL7,N32H473KCU7,N32G457MEL7,N32G432K8L7,N32G451RBL7,N32M0XX,N32WB031,N32WB452REQ6,N32G435RBL7-1,N32G435KBL7,N32L406RBL7,N32G432RBL7,N32G457QE_EVB,N32G401K8Q7,N32G031F8U7,N32G032F6U7,N32H474VEL8,N32H474VEL7,N32G430F6Q7,N32G455CBL7,N32G030C8L7,N32G451CCL7,N32G003F5Q7,N32M418,N32M417,N32G452VEL7,N32G401K8L7,N32L403KBQ7-1,N32G030F8S7,N32G435,N32M418K8L7,N32G432,N32G430,N32G430K8Q7,N32G4FRKCQ7,N32G455CEQ7,N32L43X,N32A455,N32G401F8S7-1,N32WB452,N32WB031KEQ6-2,N32G031F6S7,N32L402CBL7,N32L402R8L7,N32G457VEL7,N32G032K8L7,N32G430K6L7,N32G030K6Q7,N32H473KEU8,N32H473KEU7,N32G031X6,N32H473RCL7,N32G455CCL7,N32G031X8,N32H473RCL8,N32G451CBL7,N32G003F5S7,N32G003F4Q7,N32G435G8Q7,N32G432KBL7,N32G401C6Q7,N32H473CEL8,N32H482REL7,N32H473CEL7,N32G457,N32H7XX,N32G455,N32G451,N32G457QEL7,N32G452,N32G031K8Q7-1,N32A455VEL8,N32A455VEL7,N32H474CCL7,N32H474CCL8,N32G031F6U7,N32H473MCL8,N32H473MCL7,N32G4FRREL7,N32L406CBL7,N32G452QEL7,N32G435C8L7,N32WB452CEQ6,N32H487REL7,N32G4FRMEL7,N32G455MBL7,N32G430F8Q7,N32G451VEL7,N32G430C6Q7,N32L4XX,N32G430F8S7-1,N32L402C8L7,N32G030K6Q7-1,N32G4FR,N32G452REL7,N32A4XX,N32L406CBQ7,NB401KBQ6C,N32G003F4S7,N32G452VCL7,N32L406R8Q7,NB201,N32G4FRKEQ7,N32G032R8L7,N32G030F6S7,N32G031K8L7,N32G401C6L7,N32A47X,N32L402CBQ7,N32G4XX,N32G003,N32G430K8L7,N32G032K6L7,N32H473REL8,N32G435GBQ7,N32H473REL7,N32G401C8Q7,N32G435CBL7,N32G435R8L7,N32G432C8L7,N32H474MCL7,N32H473CCU8,N32L436MBL7,N32H473CCU7,N32H474CEL8,N32H474MCL8,N32H473VCL8,N32H473VCL7,N32G455VEL7,N32G030F6U7,N32H474CEL7,N32A455REL7,N32A455REL8,N32G452MEL7,N32L436RBL7,NS-LINK,N32M4XX,N32H473QCL8,N32H473QCL7,N32G452QCL7,NB401,N32H473MEL8,N32H473MEL7,N32H474RCL8,N32H474RCL7,N32G401G6Q7,N32H487VEL7,N32H474,N32H473,Z32HUA,N32G430C8Q7,N32G032P8W7,Z32HUB,N32WB031KCQ6-1,N32G452RCL7,N32G401F6S7-1,N32G031K8Q7,N32L403KBQ7,N32G032K6Q7,N32G030K8L7,N32G452CEL7,N32L436C8L7,N32H487,N32G455VBL7,N32G451REL7,N32G032,N32H482,N32G030C8T7,N32G430G6Q7,N32G030,N32G451VCL7,N32L402C8Q7,N32G031K6L7,N32G401C8L7,N32G430C6L7,N32G032C8L7,N32WB452LEQ6,N32H482ZEL7,N32L433KBL7,N32H47X,N32G455MEL7,N32S003,N32G4FRHCQ7,N32G430F6S7,N32G457RCL7,N32G031K6Q7-1,N32G032F8S7,N32G052CBL7,N32H474CCU8,N32H474CCU7,N32H473VEL8,N32G435RBL7,N32G452RBL7,N32H474QCL7,N32G401F6Q7,N32H473CEU8,N32H48X,N32H473CEU7,N32H474QCL8,N32H474MEL7,N32H473VEL7,N32G455VCL7,N32H474MEL8,N32G457MCL7,N32G052,N32G455REL7,N32H473QEL8,N32H473QEL7,N32G452MCL7,N32H487ZEL7,N32L436CBL7,N32H474VCL8,N32M417C8L7,N32H474VCL7,N32G435K8L7,N32G432CBL7,N32G401K6Q7,N32A0XX,N32G401G8Q7,N32A455CEL7,N32H474REL8,N32L436MBL7_EVB,N32H474REL7,N32L436R8L7,N32G432R8L7,N32L406C8Q7
【CW32模块使用】红外测距传感器
GP2Y0A02YKOF是夏普的一款距离测量传感器模块。本文的目标是将例程移植至立创·CW32F030C8T6开发板上【能够判断前方障碍物的功能】。首先要获取资料,查看数据手册应如何实现读取数据,再移植至我们的工程。
沁恒(WCH)通讯接口芯片和全栈MCU选型指南
目录- 企业简介 接口转换产品 MCU产品选型 USB转串口产品选型 低功耗蓝牙系列 单片机系列 网络系列 USB系列 USB PD协议/Type-C快充系列 PCI/PCIe系列 显示驱动及键盘扫描系列 单片机外围系列 产品方案
型号- CH24X,CH36X,CH32X035F8U6,CH32X035G8R6,CH32V103C6T6,CH32F205RBT6,CH370,CH372,CH343G,CH132,CH374,CH32F203C8T6,CH252,CH376,CH375,CH343K,CH378,CH440G,CH32X035,CH32V208WBU6,CH583M,CH32V208RBT6,CH341T,CH32V003J4M6,CH32F103C6T6,CH32V305RBT6,CH342F,CH382,CH384,CH342K,CH37X,CH9374B,CH237,CH236,CH58X,CH32F103C8U6,CH340K,CH22X,CH34X,NET-232-9120,CH340N,CH582M,CH340T,NET-SER-DT TTL,CH32V208GBU6,CH341B,CH341A,CH32L103F8P6,CH592,CH341F,CH32V203C8T6,CH591,CH231,CH486F,CH351,CH235,CH234,CH35X,CH368,CH32X035F7P6,CH247,CH484M,CH23X,CH32V307,CH32V203G6U6,CH482,CH340E,CH582F,CH32F203C8U6,CH32V305,CH481,CH32V203C8U6,CH340C,CH484,CH32V303,CH340B,CH241,CH483,CH365,CH486,CH364,CH246,CH367,CH340G,CH4XX,CH366,CH457,CH9339,CH578,CH9338,CH32V303VCT6,CH577,CH335,CH456,CH338,CH32V,CH337,CH579,CH56X,CH339,CH32V003A4M6,CH32X033F8P6,CH32F,BLE-TPT-A-ANT,CH32F203C6T6,BLE2U-A-ANT,CH9344,CH9102,CH565M,CH451,CH9101,CH9343,CH571,CH450,CH444G,CH453,CH573,CH452,CH334,CH9340,CH455,NET-TTL-9120,CH454,CH347,CH9328,CH57X,CH563Q,CH226,CH225,CH348,CH9329,CH32X035G8U6,CH9326,CH32L103C8T6,CH9342G,CH32F208RBT6,CH581,CH341,CH462,CH583,CH340,CH32F203VCT6,CH32F208WBU6,CH582,CH343,CH32X035R8T6,CH342,CH221,CH463,CH224,CH345,CH443K,CH344,CH344Q,CH556,CH555,CH558,CH557,CH317,CH438,CH54X,CH559,NET-485-9120,CH319,CH9434,CH32V203C6T6,CH563L,CH442E,CH552,CH32V307VCT6,CH551,CH554,CH224K,CH432,CH343P,CH567,CH446,CH445,CH569,CH55X,CH561Q,CH448,CH568,CH440R,CH31X,CH449,CH440P,CH9340K,CH9340C,CH32F207VCT6,CH440,CH561,CH563,CH32L103系列,CH442,CH344L,CH565,CH444,CH32V203F8P6,CH443,CH412,BLE-TPT-B-ANT,CH32V303RCT6,CH52X,CH32V103R8T6,CH32V003系列,CH448F,CH32F203K8T6,CH32V203F8U6,NET-SER-DT RS232,CH9103M,CH9143,CH93XX,CH9145,CH9140,CH32V203G8R6,CH532,CH9142,CH9141,CH531,CH545,CH424,CH423,CH544,CH547,CH546,CH446Q,CH549,CH53X,CH9126,CH446X,CH548,CH32F103R8T6,BLE-DONGLE,CH32F203RCT6,CH9104L,NET-SER-DT RS485,CH32L103,CH541,CH422,CH543,CH32V003,CH421,CH457S,CH32V003F4P6,CH9101Y,CH445P,CH32V303RBT6,CH32X035C8T6,CH9101N,CH9101R,CH9101U,CH9101H,CH32V307RCT6,CH32V203K8T6,CH9121,CH9120,CH32V307WCU6,CH347T,CH32V303系列,CH643,CH522,CH9102X,CH525,CH444P,CH524,CH527,CH9104,CH9103,CH528,CH565W,CH457C,CH457B,CH9344L,CH348L,BLE-SER-A-ANT,CH348Q,CH32V203F6P6,CH521,CH9350,CH32V203RBT6,CH9102F,CH641,CH483M,CH32F203CBT6,CH32V103C8T6,CH592X,CH483X,CH32L103F7P6,CH91XX,CH581F,CH34X系列,CH32F103C8T6,CH32F207,CH252L,CH32F205,CH32F203,CH32V103C8U6,CH32V003F4U6,CH482X,CH32L103K8U6,CH591R,CH32F208,CH182,CH32V208,CH592F,CH32V103系列,CH32V203,BLE2U-C-ANT,CH32V208CBU6,CH643U,CH643W,CH914X,CH643Q,CH449X,CH32V303CBT6,CH32L103F8U6,CH32V305FBP6,CH390,CH392,CH32V203K6T6,CH58,CH57,CH591D,CH482D,CH591F,CH395,CH274,CH397,CH38X,CH569W,CH315S,BLE232-NEP,CH32F103,CH449F,CH32L103G8R6,CH643L,CH32X035系列,CH32V103,CH39X,CH9150,CH481D
基于CW32的RC522刷卡模块的应用实验分享
RC522刷卡模块是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员,是NXP 公司针对“三表”应用推出的一款低电压、低成本、体积小的非接触式读写卡芯片。
【CW32模块使用】TTP224触摸传感器
该模块是一个基于触摸检测IC(TTP223B)的电容式点动型触摸开关模块。本文目标是将例程移植至CW32F030C8T6开发板上【实现添加指纹、删除指纹和搜索指纹的功能】。首先要获取资料,查看数据手册应如何实现读取数据,再移植至我们的工程。
武汉芯源半导体邀您相约CITE2024中国电子信息博览会
CITE2024第十二届中国电子信息博览会将于2024年4月9-11日在深圳福田会展中心隆重开展,武汉芯源半导体将为电子行业参观者展示智能指纹锁、麦克风、燃气表、LED调光板、可燃气体报警器、筋膜枪、角磨机、血氧仪、温控器、BLDC无刷电机、永磁同步电机无感FOC控制方案等多款CW32单片机典型应用方案,诚邀您莅临9B122武汉芯源半导体展位参观交流!
【应用】基于CW32的无刷水泵控制系统,使水泵更加节能、高效
本课题研究的目的是设计一套基于CW32的无位置传感器无刷直流电机控制系统,既可以改进水泵的工作模式,使水泵工作点最优;又可以使水泵电机结构简单,控制方式更为灵活。以此将整个系统加入各个不同场景中,让CW32低功耗优点,能让水泵共更加节能,高效。
【CW32模块使用】HX711称重传感器
该模块采用24位高精度的A/D转换器芯片hx711,是一款专为高精度电子秤而设计的,具有两路模拟通道输入,内部集成128倍增益可编程放大器。输入电路可配置为提供桥压的电桥式(如压力、称重)传感器模式,是一款理想的高精度、低成本采样前端模块。
【经验】地平线X3M开发板上AP6212模组的Wi-Fi功能使用方法
地平线X3M开发板上的AP6212模组是一种低成本、低功耗的模组,集成有WiFi,蓝牙和FM功能,广泛应用到智能手机和便携式设备中。本文主要介绍AP6212 WiFi功能的使用方法。
【经验】芯源CW32系列MCU电容式触摸按键设计指南
芯源半导体的CW32系列MCU电容式触摸按键设计指南向客户提供利用CW32内部资源结合软件编程实现电容式触摸按键有效触摸检测的方法。本指南内容重点在于工作原理、软件检测过程以及调试指引。通过本文可了解到如何利用内置电压比较器和内置定时器及软件配合,实现灵活方便的按键检测。在介绍标准演示板和演示软件的性能参数同时,还会给出详细的调试建议以及设计参数选择倾向分析,帮助客户快速自信地完成设计并实施调试。
【CW32模块使用】微波多普勒无线雷达传感器
由于微波传感器检测对象存在普遍性,在实际的生活应用中,会搭配另一个传感器来做针对性的检测。如微波传感器+红外热释电传感器,能够有效的判断是否有人经过,不会被阳光,被衣物颜色所干扰,也不会对其他物体产生反应。本次示例的目标是将例程移植至CW32F030C8T6开发板上【能够判断测量一定距离内是否物体运动】。首先要获取资料,查看数据手册应如何实现读取数据,再移植至我们的工程。
电子商城
现货市场
服务
可支持TI AM335x/AM5718 和NXP iMX6/iMX8芯片定制核心板和计算单板;支持NXP iMX6核心模组X / F / H系列、TI AM335x核心模组X / N / H系列,与兼容的底板组合定制单板计算机。
最小起订量: 1pcs 提交需求>
可加工PCB层数:1-30层;板材类型:FR4板/铝基板/铜基板/刚扰结合板/FPC板/高精密板/Rogers高频板;成品尺寸:5*5mm~53*84cm;板厚:0.1~5.0mm。
最小起订量: 1 提交需求>
登录 | 立即注册
提交评论