矩阵键盘驱动代码

2023-05-16

此代码仅提供了代码思路,具体移植应用可以私信博主。

key.c:

#include "stm32f10x.h"
#include "key.h"
#include "led.h"
#include "sys.h" 
#include "delay.h"

u16 keyz=0;

void KEY_Init(void) 
{ 
 	GPIO_InitTypeDef GPIO_InitStructure;
 	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOC, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOC, &GPIO_InitStructure);	
}

u8 keyscan(void)
{ 
	uint8_t LIE,HANG,k,i=0;
	
	GPIO_Write(GPIOC, 0xF0);                           
	if((GPIO_ReadInputData(GPIOC)&0xF0)!=0xF0)          
	{
	  delay_ms(40);                                     
	   if((GPIO_ReadInputData(GPIOC)&0xF0)!=0xF0)       
	   {
		   LIE=GPIO_ReadInputData(GPIOC);                
		   HANG=LIE;                                     
		   LIE=~LIE;                                     
		   LIE=LIE&0XF0;                                  
		   
			 for(i=0;i<4&&((HANG&0xF0)!=0xF0);i++)         
		   {                                              
		       GPIO_Write(GPIOC, (HANG&0xF0)|(0x01<<i));  
		       HANG=GPIO_ReadInputData(GPIOC);            		   
		   }
		   HANG&=0x0F;                                  
		   k=LIE|HANG;                                   
			 
			 
			 
		   GPIO_Write(GPIOC, 0xF0);                       
	     while((GPIO_ReadInputData(GPIOC)&0xF0)!=0xF0)  
		   {
		        delay_ms(40);                             
		   }
		   return k;                                     
	   }
	}	
	return (0);                                        
}

u8 keyhandle(void)
{ 
	uint8_t key_1=0;
	
	keyz=keyscan();
	if(keyz!=0)
		{ 
			switch(keyz)
			{
				case 0x11: key_1=1;break; 
				case 0x21: key_1=5;break; 
				case 0x41: key_1=9;break; 
				case 0x81: key_1=13;break; 
				case 0x12: key_1=2;break; 
				case 0x22: key_1=6;break; 
				case 0x42: key_1=10;break; 
				case 0x82: key_1=14;break;
				case 0x14: key_1=3;break;
				case 0x24: key_1=7;break;
        case 0x44: key_1=11;break;	
		    case 0x84: key_1=15;break;				
				case 0x18: key_1=4;break;
				case 0x28: key_1=8;break;
        case 0x48: key_1=12;break;	
		    case 0x88: key_1=16;break;		
				default:break;
			}
		
	}
	return key_1;
}

key.h:

#ifndef __KEY_H
#define __KEY_H	 
#include "sys.h"

#define  PortD   (GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7)
#define KEY0  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_0)
#define KEY1  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_1)
#define KEY2  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_2)
#define KEY3  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_3)
#define KEY4  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_4)
#define KEY5  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_5)
#define KEY6  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_6)
#define KEY7  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_7)

#define KEY0_PRES 1	
#define KEY1_PRES	2	
#define KEY2_PRES	3	
#define KEY3_PRES 4	
#define KEY4_PRES	5	
#define KEY5_PRES	6	
#define KEY6_PRES 7	
#define KEY7_PRES	8	

void KEY_Init(void);
u8 keyscan(void);
u8 keyhandle(void);

#endif

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

矩阵键盘驱动代码 的相关文章

  • Oracle基础知识整理总结

    1 Oracle跟SQL Server 2005的区别 xff1f 宏观上 xff1a 1 最大的区别在于平台 xff0c oracle可以运行在不同的平台上 xff0c sql server只能运行在windows平台上 xff0c 由于
  • Javascript调用后台方法

    1 javaScript函数中执行C 代码中的函数 xff1a 方法一 xff1a 1 首先建立一个按钮 xff0c 在后台将调用或处理的内容写入button click中 2 在前台写一个js函数 xff0c 内容为document ge
  • Delphi设置某用户对文件(夹)的权限

    以下在代码在D7 43 2003和D7 43 XP中调试通过 unit NTSecurityU interface Uses Windows AclApi AccCtrl Const SECURITY NULL SID AUTHORITY
  • 关于VMWare压缩虚拟机的虚拟磁盘的问题

    随着我们使用虚拟系统的时间越长 xff0c Vmware创建的虚拟磁盘占用空间就越大 xff0c 即使将虚拟系统中的文件删除 xff0c 虚拟磁盘文件占用宿主系统硬盘空间也不会减少 xff0c 这个问题困扰了很多用户 a S 34 N 43
  • GB2312简体中文编码表

    const GB2312 中文编码 CHpb 61 B0 首页码 CHpe 61 F7 尾页码 CHab 61 A1 首地址 CHae 61 FE 尾地址 GB B 61 B0A1 GB E 61 F7FE ChCount 61 chpe
  • 自定义通信协议

    现在大部分的仪器设备都要求能过通过上位机软件来操作 xff0c 这样方便调试 xff0c 利于操作 其中就涉及到通信的过程 在实际制作的几个设备中 xff0c 笔者总结出了通信程序的通用写法 xff0c 包括上位机端和下位机端等 1 xff
  • vc的编译过程

    对VC 43 43 工程编译过程的梳理 VC 43 43 的项目和解决方案文件解读 xff0c 无非就是利用这些信息进行一个软件的编译 xff0c 这些文件里面是存放的项目的配置和工程的组织 xff0c 类似于makefile文件 但是只有
  • 用WSE在Web服务中验证用户身份

    一 Web服务安全与WS Security 毫无疑问 xff0c SOAP和XML Web服务在交互操作和标准上已经完全改变了电子商务领域的格局 然而直到最近 xff0c 在Web服务技术领域仍然存在着一些缺陷 xff0c 那就是处理消息级
  • 安装CUDA wget下载速度慢解决办法(天下无敌)

    因为墙的原因 xff0c 再加上英伟达工作人员脑筋不会急转弯 xff0c 以及wget是个弟中弟 xff0c 下载cuda时可能会很慢 断线 xff0c 翻墙又不方便 但是没关系 xff0c 谈笑间 xff0c 让我们用一分钟成交它 以ub
  • px4下载指定版本的固件、git用法

    https hub fastgit org PX4 PX4 Autopilot git describe tag 查看当前版本号 git tag l 查看所有版本 xff0c 也就是打个tag git checkout v1 9 1 跳转到
  • YOLOX网络结构

    本文为博主DaneAI原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 原文链接 xff1a https blog csdn net happyday d article detai
  • 阿木实验室P450无人机硬件接线图备忘录

    其中数传是定制的 xff0c 相当于是路由器 43 数传二合一 xff0c 既负责地面站计算机与pixhawk的通讯 xff0c 又负责发射WiFi信号 组建局域网 xff0c 使板载英伟达NX上位机和手机 平板 笔记本电脑等远程终端连接在
  • yolov3损失函数公式及代码位置,绝对良心(更新)

    版本 xff1a darknet yolov3 环境 xff1a ubuntu16 04 本人小白 xff0c 毕设正在做基于yolov3的目标检测系统研究 xff0c 在网上找了一万遍 xff0c 基本没有靠谱的损失函数 xff0c 全是
  • 使用http协议Header中的Authorization传递token

    1 span class token annotation punctuation 64 GetMapping span span class token punctuation span span class token string 3
  • Shell命令之终端打开网页

    一句话用Safari打开百度 span class hljs built in open span span class hljs operator a span span class hljs string 34 Applications
  • 数据结构期末复习五:内部排序

    排序的基本概念和分类 排序 xff1a 将杂乱无章的数据按关键字递增 xff08 或递减 xff09 有序排列 假设Ki 61 Kj xff0c 排序前Ri领先于Rj 稳定排序 xff1a 排序后的序列Ri仍领先于Rj 不稳定排序 xff1
  • 数据同步工具DataX从Mysql同步数据到HDFS实战

    目录 1 查看数据同步模板2 高可用HA的HDFS配置3 MysqlReader针对Mysql类型转换说明4 HdfsWriter支持大部分Hive类型5 Mysql准备数据如下6 新建job mysql2hdfs json7 执行job8
  • 目标检测yolov3+文字识别CRNN 实现文本检测和识别

    参考链接 xff1a https github com chineseocr chineseocr https zhuanlan zhihu com p 34757009 https wenku baidu com view f4ec95e
  • 关于51单片机串口通信的相关知识(寄存器)

    一 51单片机串口概念 1 51单片机的串行口 51单片机的串行口是一个可编程全双工的通信接口 xff0c 具有UART xff08 通用异步收发器 xff09 的全部功能 2 51单片机的硬件连接 简单双向串口通信有两根数据通信线 xff
  • Linux服务器--TCP协议详解

    1 TCP服务的特点 传输层协议主要有两个 xff1a TCP协议和UDP协议 TCP协议相对于UDP协议的特点是 xff1a 面向连接 字节流 可靠传输 使用TCP协议通信的双方必须先建立连接 xff0c 然后才能开始数据的读写 双方都必

随机推荐

  • strpbrk函数

    strpbrk函数 1 函数功能 xff1a strpbrk是在源字符串 xff08 s1 xff09 中找出最先含有搜索字符串 xff08 s2 xff09 中任一字符的位置并返回 xff0c 若找不到则返回空指针 2 头文件 span
  • win10自带的office365怎么找到安装目录+mathtype

    遇到问题 xff0c 因为我要安装mathtype xff0c 但是一直显示错误代码53 显示运行时未找到mathpage wll 一般都在office文件夹中 xff0c 但是365死活在files和data中都找不到 xff0c 运行目
  • 面试问题记录

    csdn https www cnblogs com yinrw p 10795210 html 问题比较全面 问卷星 https www wjx cn xz 109293287 aspx 简述你在以前的工作中做过哪些事情 xff0c 比较
  • 学习记录2

    这是一个名字 新版换了之后跟之前的完全不太一样了 shell相关 Shell字符串截取 xff08 非常详细 xff09 苍青浪 博客园 这是一个快引用 linux相关 查看内容占用情况 输出 free m sed n 39 2p 39 a
  • leetcode 100热题

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言标题easy问题合集1 有效括号问题 前言 提示 xff1a leetcode简单题目100题中的easy部分 xff1a
  • java小项目之成绩管理、排课软件、局域网聊天软件

    大三下 xff0c 想把上个学期的一些东西整理一下 可能是突然有点想法吧 我把答辩ppt以及文档要求还有项目文件夹全部都放在了我的github里面啦 点击打开链接 项目一 问题描述 xff1a 教师在教学过程中 xff0c 需要记录学生的成
  • LeetCode 114 二叉树转链表

    一 题目 分析 xff1a xff08 1 xff09 要求转化为先序遍历顺序 xff0c 这个很容易想到设置一个链表 xff0c 然后先序遍历二叉树 xff0c 把节点和指针记录在链表就好了 xff08 2 xff09 题目要求in pl
  • 使用gstreamer,rtsp拉流,保存图像, jeston,使用硬件加速nvdec/nvenc

    jeston xff0c 拉流 xff0c 使用硬件加速nvdec nvenc span class token macro property span class token directive hash span span class
  • LeetCoed 无重复字符的最长子串(java)

    一 题目分析 分析 xff1a 最长子串 xff0c 而不是最长子序列 子串是字符串连续的一段 xff0c 子序列是可以不连续的 所以有一种方法叫做滑动窗口法 xff0c 我记得左程云老师讲过 xff0c 那个题是计算窗口内最大或者最小值的
  • leetcode 127 单词接龙(搜索 java)

    就是给一个单词词典 xff0c 给一个开始词汇和结束词汇 xff0c 在词典中找出开始词汇转变成结束词汇的过程 xff0c 求转变次数 每次只能转变单词的一个字符 可能会有多条路径可以到达 xff0c 搜索问题可以用DFS BFS解决 xf
  • gtest单元测试配置+vs 2015+OpenCppCoverage输出测试覆盖率 || cmake命令构建项目以及编译以及命令行测试

    目录 一 仅使用gtest 43 vs2015 1 下载和编译gtest 2 创建具体的项目 3 gtest自带十个例子 二 使用gtest 43 vs2015 xff0c 并且输出测试覆盖率 1 使用vs 2015企业版 2 使用Open
  • Cmakelists配置多级目录的gtest项目(项目代码和测试代码分离)

    cmake一些语法定义 之前的博客主要写了怎么配置gtest项目 xff0c 但是一般项目代码和测试代码并不在一起 xff0c 所以尝试将代码分离 主要分成三个部分 xff0c 下面给出demo的分级目录 gtest demo CMakel
  • WGS-84 ECEF ENU 坐标系学习记录

    地球坐标系固定在地球上而随地球一起在空间做公转和自转运动 xff0c 因此地球上任一固定点在地球坐标系的坐标就不会由于地球旋转而变化 地心地固直角坐标系和大地坐标系都属于这种坐标系 一 几种坐标系 地心地固直角坐标系 xff08 ECEF
  • 关于大学生计算机未来发展的个人规划

    本人今年大二 xff0c 计算机专业 xff0c 和很多大学生一样 xff0c 在大一期间仍保持着高中的习惯 xff0c 每天只是上课听讲 xff0c 课后写作业 xff0c 复习与预习 可以说 xff0c 除了课堂上老师讲的知识和书本上有
  • 关于scanf的一些注意事项

    第一点 xff0c 设定的接受变量应以地址的方式出现在scanf内 xff0c 这是因为scanf本身是一个函数 xff0c 若不加地址相当于值传递 xff0c 无法改变对应变量的值 如 xff1a 规定输入类型是整形 xff08 d xf
  • 关于长度未知,输入几组数据之后如何终止输入

    首先 xff0c 应确定结束标准 xff0c 一般题目中会给出以输入 xffe5 或者负数之类的结束 xff0c 若题中没给 xff0c 正常情况下我们自己编码是习惯以回车作为结束符号 故可以用getchar xff08 xff09 接受一
  • 关于TortoiseGit的个人见解

    首先先放一个下载链接 xff1a Download TortoiseGit Windows Shell Interface to Git TortoiseGit是一个用于用户本身和gitee之间进行文件传输的中介 xff0c 本质上是用来简
  • c语言实现扫雷

    实现在9乘9的格子内实现扫雷游戏 xff0c 可修改格子的大小和雷的个数 思路 xff1a 初始利用随机数种子生成10个雷的位置 xff0c 通过输入x xff0c y坐标来显示当前格子是否是雷 xff0c 若是雷游戏结束 xff0c 显示
  • 使用Gstreamer拉取rtsp流,使用jeston硬件加速解码,并保存buffer为图片。

    编译 xff1a g 43 43 demo666 cc o demo666 span class token variable span class token variable 96 span pkg config cflags libs
  • 矩阵键盘驱动代码

    此代码仅提供了代码思路 xff0c 具体移植应用可以私信博主 key c include 34 stm32f10x h 34 include 34 key h 34 include 34 led h 34 include 34 sys h