【STM32小案例 08 】STM32调用4*4矩阵键盘,未完待续
来源:互联网 发布:qq飞车猛禽数据 编辑:程序博客网 时间:2024/06/07 04:42
因为项目需要控制的设备和电机有点多,本来准备使用上位机直接控制下位机的。
实现原理是通过下位机的串口发送指令调用功能函数,但是重点还是如何在STM32的main程序中调用。
所以需要先写好STM32的下位机程序,那就使用矩阵键盘先实现按键调用把,到时候直接把按键触发更改为串口命令触发即可。
花了一个小时写了一段程序代码,明天再完善。
---------------------------------------------------------------------------------------
/***********************************/// teavamc仿写的4*4矩阵键盘程序// 1, 本程序中使用的引脚口是GPIOG PG0 ~ PG7// 2. GPIOG | PG0 到 PG3 固定为推挽输出// 3. GPIOG | PG4 到 PG7 固定为下拉输入// 4. 实现效果:// 无按键被按下时;PG4 - PG7 为0,为低电平状态// 有按键被按下时:PG0 - PG3 相应的引脚显示为高电平// // 5. 本程序暂时未经过测试// 制作时间: 2017 - 10 - 9 // 制作人 : teavamc CSDN|博客/************************************/#include "stm32f10x.h" //导入官方头文件#include "delay_other.h" //导入延时函数void Init44Key(void) //声明初始化矩阵键盘初始化函数{GPIO_InitTypeDef GPIO_InitStructure; //声明GPIO结构体,用于引脚定义RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE); //开启GPIOG时钟,使能时钟GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //定义推挽输出,对应的引脚是PG0 - PG3GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速率 50MHz 标准GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; //引脚为 PG0 - PG3GPIO_Init(GPIOG,&GPIO_InitStructure); //初始化GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //定义下拉输入, 对应的引脚为 PG4 - PG7GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_Init(GPIOG,&GPIO_InitStructure); //初始化}int Value44Key(void) //定义矩阵键盘的返回值,返回值对应相关功能,{int KeyValue = 0; //KeyValue是最后返回的按键数值u16 WriteVal = 0; //为写给PG口的数据GPIO_Write(GPIOG,(GPIOG->ODR & 0xfff0 | 0xf)); //先让PG0 - PG3全部输出高if((GPIOG->IDR & 0x00f0) == 0x0000) //先设置 PG4 - PG7 为0,如果没有按键按下,返回值为-1{return -1;}else //有按键按下{delay_ms(5); //延时5ms去抖动if((GPIOG->IDR & 0x00f0) == 0x0000) //如果延时5ms后 PG4 - PG7 又全为0, 则刚刚是抖动产生的{return -1; //所以还是返回 -1}}GPIO_Write(GPIOG, (GPIOG->ODR & 0xfff0 | 0x1 )); //要让 PG0 - PG3 输出二进制的 0001switch(GPIOG->IDR & 0x00f0) //对应的 PG4 - PG7 的值进行判断,输出不同的按键值{case 0x0010:KeyValue = 15;break;case 0x0020:KeyValue = 11;break;case 0x0040:KeyValue = 7;break;case 0x0080:KeyVal = 3;break;}GPIO_Write(GPIOG, (GPIOG->ODR & 0xfff0 | 0x2)); //要让 PG0 - PG3 输出二进制的 0010switch(GPIOG->IDR & 0x00f0) //对应的 PG4 - PG7 的值进行判断,输出不同的按键值{case 0x0010:KeyValue = 14;break;case 0x0020:KeyValue = 10;break;case 0x0040:KeyValue = 6;break;case 0x0080:KeyValue = 2;break; }GPIO_Write(GPIOG, (GPIOG->ODR & 0xfff0 | 0x4)); //要让 PG0 - PG3 输出二进制的 0100switch(GPIOG->IDR & 0x00f0) //对应的 PG4 - PG7 的值进行判断,输出不同的按键值{case 0x0010:KeyValue = 13;break;case 0x0020:KeyValue = 9;break;case 0x0040:KeyValue = 5;break;case 0x0080:KeyValue = 1;break; }GPIO_Write(GPIOG, (GPIOG->ODR & 0xfff0 | 0x8)); //要让 PG0 - PG3 输出二进制的 1000switch(GPIOG->IDR & 0x00f0) //对应的 PG4 - PG7 的值进行判断,输出不同的按键值{case 0x0010:KeyValue = 12;break;case 0x0020:KeyValue = 8;break;case 0x0040:KeyValue = 4;break;case 0x0080:KeyValue = 0;break; }return KeyValue;}
阅读全文
0 0
- 【STM32小案例 08 】STM32调用4*4矩阵键盘,未完待续
- stm32 4*4矩阵键盘
- STM32 f103 矩阵键盘
- STM32的代码升级-IAP---未完待续
- stm32位操作函数(未完待续)
- STM32 串口功能开发(未完待续)
- 【STM32小案例 07 】STM32完美可用的延时程序,自用延时程序库,直接调用
- 基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数!
- 再发一种基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数! .
- ARM开发(4)基于STM32的矩阵键盘按键控制TM1629A LED显示
- 4*4键盘程序代码 基于STM32
- 【STM32小案例 05 】STM32使用MQ135检测环境空气质量
- arm中stm32中矩阵键盘的问题
- 基于stm32的遥控小船(四)矩阵键盘
- ARM开发(3)基于STM32的矩阵键盘控制蜂鸣器
- STM32 tip(1)待续
- jquery小技巧(未完待续)
- STM32 USB 键盘
- WPS 快捷键
- 两个高效的cp 命令用法!
- 【SDOI2008】Sandy的卡片 DP
- mysql 主键 外键
- OpenCV 3.1.0在VS 2013下配置
- 【STM32小案例 08 】STM32调用4*4矩阵键盘,未完待续
- 2. Add Two Numbers
- hdu 2553 N皇后问题
- NKOJ 3051 浇花 (差分数组/区间DP)
- 酷狗桌面歌词效果
- 动态获取div的高度 随着窗口变化而变化 window.resize
- 机器学习 第五周 总结 知识点
- 十大Intellij IDEA快捷键(转)
- 目标跟踪之CVPR_2017_Attentional Correlation Filter Network for Adaptive Visual Tracking