STM32键盘扫描程序
STM32键盘扫描程序(带中断触发输入<可注释忽略>)
#include “key.h”
#include “delay.h”
//按键初始化函数
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PORTB时钟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
/*矩阵键盘,端口可自定义*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//高电平输入,配置为下拉输入
GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); //键盘有中断输入功能且配置为高电平触发时,初始化必须为1
}
//按键扫描函数
char Keyscan(void)//与或的位根据定义的端口修改
{
char KeyValue;
GPIO_SetBits(GPIOB,GPIO_Pin_12); //1
GPIO_ResetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);//0
if((GPIOB->IDR&0x0f00)!=0x0000)//判断PA8~11是否有输入
{delay_ms(10);if((GPIOB->IDR&0x0f00)!=0x0000){switch(GPIOB->IDR&0x0f00){case 0x0100:KeyValue='3';break;//不同端口及定义的值修改参数即可case 0x0200:KeyValue='7';break;case 0x0400:KeyValue='B';break;case 0x0800:KeyValue='F';break;}}while((GPIOB->IDR&0x0f00)!=0x0000);//等待松开GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); //键盘中断模式,输出端口全部置1,以便下次触发中断return KeyValue;
}GPIO_SetBits(GPIOB,GPIO_Pin_13); //1
GPIO_ResetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_15);//0
if((GPIOB->IDR&0x0f00)!=0x0000)
{delay_ms(10);if((GPIOB->IDR&0x0f00)!=0x0000){switch(GPIOB->IDR&0x0f00){case 0x0100:KeyValue='2';break;case 0x0200:KeyValue='6';break;case 0x0400:KeyValue='A';break;case 0x0800:KeyValue='E';break;}}while((GPIOB->IDR&0x0f00)!=0x0000);GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); //1return KeyValue;
}GPIO_SetBits(GPIOB,GPIO_Pin_14); //1
GPIO_ResetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_15);//0
if((GPIOB->IDR&0x0f00)!=0x0000)
{delay_ms(10);if((GPIOB->IDR&0x0f00)!=0x0000){switch(GPIOB->IDR&0x0f00){case 0x0100:KeyValue='1';break;case 0x0200:KeyValue='5';break;case 0x0400:KeyValue='9';break;case 0x0800:KeyValue='D';break;}}while((GPIOB->IDR&0x0f00)!=0x0000);GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); //1return KeyValue;
}GPIO_SetBits(GPIOB,GPIO_Pin_15); //1
GPIO_ResetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);//0
if((GPIOB->IDR&0x0f00)!=0x0000)
{delay_ms(10);if((GPIOB->IDR&0x0f00)!=0x0000){switch(GPIOB->IDR&0x0f00){case 0x0100:KeyValue='0';break;case 0x0200:KeyValue='4';break;case 0x0400:KeyValue='8';break;case 0x0800:KeyValue='C';break;}}while((GPIOB->IDR&0x0f00)!=0x0000);GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); //1return KeyValue;
}
GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); //1
return '!';//表明没键按下
}
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks |
'Isn't this fun?'
|
‘Isn’t this fun?’ |
Quotes |
"Isn't this fun?"
|
“Isn’t this fun?” |
Dashes |
-- is en-dash, --- is em-dash
|
– is en-dash, — is em-dash |
创建一个自定义列表
- Markdown
- Text-to-HTML conversion tool
- Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ(n)=(n−1)!∀n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ(z)=∫0∞tz−1e−tdt .\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
mermaid语法说明 ↩︎
注脚的解释 ↩︎
STM32键盘扫描程序相关推荐
- c语言键盘驱动程序,c语言键盘扫描程序
描述 c语言键盘扫描程序 4*4键盘扫描C语言程序 /* 4x4矩阵键盘的扫描程序 测试通过*/ #includesbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2= ...
- 基于FPGA的键盘扫描程序的设计
在现代电子「业的控制电路中,键盘扫描和显示电路时系统的调试和设置有着重要 的作用.随着EDA技术的发展,基于FPGA的扫描键盘因其结构简单,能有效防止机 械键盘按键抖动带来的数据错误等优点在许多电子设 ...
- 一个51单片机的键盘扫描程序,算法简单有效
一个51单片机的键盘扫描程序,算法简单有效 发一个51单片机的键盘扫描程序,算法简单有效 再给大家分享一个不错按键程序(来 ...
- 4x3矩阵键盘扫描法c语言,4X4矩阵键盘扫描程序
4X4矩阵键盘扫描程序 4X4矩阵键盘扫描: 1. 4根行线的GIO均设为Output,根列线的GIO均设为Input: 2. 4根行线的GIO分别置为0111.1011.1101.1110,读逐一读 ...
- 4*4按键扫描程序c语言,【资料】单片机4*4矩阵键盘扫描程序(c语言+汇编语言2个版本)...
;4X4矩阵键盘程序.主要原理为扫描键盘矩阵时,每次只有一行电平拉低.在逐次扫描拉低的这些行的同时,去读那些列的电平. ;被拉低的行上,按下的键对应的列的电平为0 ,其它为1. 用左移位的指令,在进位 ...
- 单片机矩阵式键盘扫描程序
单片机矩阵键盘判断某个按键按下 这是我第一次发表文章,关于51单片机矩阵式键盘逐行逐列扫描是否有按键按下,以及把键号显示用七段数码管显示出来的程序,分享如下. 矩阵键盘 51单片机 数码管显示 程序代 ...
- 4x4矩阵键盘扫描c语言程序,单片机4*4矩阵键盘扫描程序(c语言+汇编语言2个版本)...
;4X4矩阵键盘程序.主要原理为扫描键盘矩阵时,每次只有一行电平拉低.在逐次扫描拉低的这些行的同时,去读那些列的电平. ;被拉低的行上,按下的键对应的列的电平为0 ,其它为1. 用左移位的指令,在进位 ...
- 单片机4x4矩阵键盘c语言,求一个单片机4X4矩阵键盘扫描程序,C语言的。
满意答案 lfm630228 2013.05.08 采纳率:50% 等级:12 已帮助:8260人 uchar code KeyCodeTable[]= { 0x11,0x12,0x14,0x1 ...
- 4x4矩阵键盘工作原理及扫描程序_单片机人机交互矩阵按键
按键是一种常开型按钮开关,与单片机的常见接法如图所示.按键未按下时两个触点断开,单片机I/O口输入高电平:当按键闭合时,I/O口输入低电平. 一.按键讲解 当I/O口为P0口时,由于没有内部上拉电阻, ...
- 原子哥的STM32视频,我发现他们都看不懂原子哥里面按键扫描程序
近身边的很多同学都在学习原子哥的STM32视频,我发现他们都看不懂原子哥里面按键扫描程序.由于问的人多,所以我也写了个心得,分享一下,老鸟别喷我哈.先贴上代码吧: //返回值: //0,没有任何按键按 ...
最新文章
- 中南大学c语言程序设计2013年下学期期末考试,2013级计算机专业本科生C语言程序设计期末考试资料.doc...
- Spring boot中最大连接数、最大线程数与最大等待数在生产中的异常场景
- 深度学习(11)-- GAN
- 前端React结构工程-改写render
- 管理动物园动物c++_《过山车大亨》开发商公开新作 建立自己的动物园
- 确认密码参数php,laravel unique验证、确认密码confirmed验证以及密码修改验证的方法...
- 10万美元奖金!CVPR 2021 重磅赛事,安全AI挑战者计划
- 基于高光谱遥感技术的农作物病虫害应用研究现状
- (Sublime Text 3)完美替换 GAMS 难用的编辑器
- 免费英文文献下载攻略
- Linux配置并编译内核
- pc机 串口 并口 com口 详解
- 秋季 MacBook Pro 新品都有哪些变化
- 摄像头与成像——做图像处理必须了解的数字成像系统原理
- matlab 菱形符号,matlab 图形符号
- 解决scala 2.10.X 无法导入 actors的问题
- leetcode LCP 03. 机器人大冒险
- 漏洞优先级技术(VPT)导论
- Android画扇形区域,Android百度地图画扇形
- Android之手机电池电量应用
热门文章
- 卫计委电子病历架构基本概念
- Vim插件合集 (打造你的专属炫酷IDE)
- oracle断电ora-01033,ora-00600,
- Python-经验模态分解(EMD)分解及测试用例
- Petalinux配置
- 算法工程师面试常见问题
- 关于《ERP原理》的读书笔记和思考(二)_ERP原理初探
- matlab中注释多行
- MATLAB零基础入门教程视频课程
- mysql maxscale mha_maxscale配合MHA搭建读写分离的高可用架构(基于GTID replication主从架构,mysql5.6)...