AVR 矩阵键盘程序源代码2(有连续按键功能)(原创)
* 版本.........: 2.0
* 作者.........: 陈利栋
* 目标.........: AVR
* 文件名.......: Keyboard.h
* 编译器.......: AVR GCC 20100110
* 开发环境.....: AVR Studio V4.18
* 创建时间.....: 2010.09.12
* 最后修改.....: 2010.09.29
*****************************************/
#ifndef __KEYBOARD_H__
#define __KEYBOARD_H__
#include <avr/io.h>
#include <util/delay.h>
#define KEYBOARD_PORT PORTA
#define KEYBOARD_DDR DDRA
#define KEYBOARD_PIN PINA
#define KEY_NULL 0xff
#define KEY_READY_COUNT 100 // 此值在不同环境下应适当调整(1 - 65535),值越小,灵敏度越高
#define KEY_CONTINUE_START_COUNT 20000 // 检测连续按键开始需要的次数,需要适当调整
#define KEY_CONTINUE_RUNNING_COUNT 1000 // 连续按键间隔需要的次数,需要适当调整
extern unsigned char key_continue_flag; // 连续按键标记
extern unsigned char GetKeyValue(void);
#endif /* __KEYBOARD_H__ */
* 版本.........: 2.0
* 作者.........: 陈利栋
* 目标.........: AVR
* 文件名.......: Keyboard.c
* 编译器.......: AVR GCC 20100110
* 开发环境.....: AVR Studio V4.18
* 创建时间.....: 2010.09.12
* 最后修改.....: 2010.09.29
*****************************************/
#include "Keyboard.h"
unsigned char _key_last = KEY_NULL;
unsigned int _key_count = 0;
unsigned int _key_continue_count = 0;
unsigned char key_continue_flag = 0;
unsigned char KeyScan(void)
{
unsigned char temp = 0;
KEYBOARD_DDR = 0x0f;
KEYBOARD_PORT = 0xf0;
_delay_us(10);
temp = KEYBOARD_PIN;
KEYBOARD_DDR = 0xf0;
KEYBOARD_PORT = 0x0f;
_delay_us(10);
temp |= KEYBOARD_PIN;
if (temp != _key_last)
{
_key_count++;
if (_key_count >= KEY_READY_COUNT)
{
_key_last = temp;
_key_count = 0;
return _key_last;
}
key_continue_flag = 0;
}
else
{
if (temp != 0xff)
{
_key_continue_count++;
if (key_continue_flag == 0)
{
if (_key_continue_count >= KEY_CONTINUE_START_COUNT)
{
key_continue_flag = 1;
_key_continue_count = 0;
return temp;
}
}
else
{
if (_key_continue_count >= KEY_CONTINUE_RUNNING_COUNT)
{
_key_continue_count = 0;
return temp;
}
}
}
_key_count = 0;
}
return KEY_NULL;
}
unsigned char GetKeyValue(void)
{
switch (KeyScan())
{
case KEY_NULL: return KEY_NULL;
case 0x77: return '1';
case 0x7B: return '2';
case 0x7D: return '3';
case 0x7E: return 'A';
case 0xB7: return '4';
case 0xBB: return '5';
case 0xBD: return '6';
case 0xBE: return 'B';
case 0xD7: return '7';
case 0xDB: return '8';
case 0xDD: return '9';
case 0xDE: return 'C';
case 0xE7: return '*';
case 0xEB: return '0';
case 0xED: return '#';
case 0xEE: return 'D';
default : return KEY_NULL;
}
}
转载于:https://www.cnblogs.com/chenlidong/articles/1838368.html
AVR 矩阵键盘程序源代码2(有连续按键功能)(原创)相关推荐
- GPIO 按键及矩阵键盘程序------/* 自己实验确认并总结 */
新型的按键扫描程序 不过入式处理器上面我在网上游逛了很久,也看过不少源程序了,没有发现这种按键处理办法的踪迹,所以,我将他共享出来,和广大同僚们共勉.我非常坚信这种按键处理办法的便捷和高效,你可以移植 ...
- 矩阵键盘程序_独立按键与矩阵按键
一.独立按键原理 按键在闭合和断开时,触点会存在抖动现象 硬件消抖电路 独立按键控制程 二.独立按键控制程序 #include "reg52.h" typedef unsigned ...
- 4x4矩阵键盘c语言,4X4键盘矩阵键盘程序
#include//包含单片机内部资源预定义 __CONFIG(0x1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 intresult; voidd ...
- 【按键】短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动)--- 矩阵键盘
请先阅读上篇: 短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动) 上面的程序适用于单个按键,那是不是也可以适用于矩阵键盘呢? 答案是肯定的. 接下来在这里做一个简单的扩展,具体框架不用改变, ...
- 4*4按键扫描程序c语言,【资料】单片机4*4矩阵键盘扫描程序(c语言+汇编语言2个版本)...
;4X4矩阵键盘程序.主要原理为扫描键盘矩阵时,每次只有一行电平拉低.在逐次扫描拉低的这些行的同时,去读那些列的电平. ;被拉低的行上,按下的键对应的列的电平为0 ,其它为1. 用左移位的指令,在进位 ...
- LINUX矩阵键盘简单介绍,stm32矩阵键盘原理图及程序介绍
描述 STM32F0 系列产品基于超低功耗的 ARM Cortex-M0 处理器内核,整合增强的技术和功能,瞄准超低成本预算的应用.该系列微控制器缩短了采用 8 位和 16 位微控制器的设备与采用 3 ...
- 4x4矩阵键盘扫描c语言程序,单片机4*4矩阵键盘扫描程序(c语言+汇编语言2个版本)...
;4X4矩阵键盘程序.主要原理为扫描键盘矩阵时,每次只有一行电平拉低.在逐次扫描拉低的这些行的同时,去读那些列的电平. ;被拉低的行上,按下的键对应的列的电平为0 ,其它为1. 用左移位的指令,在进位 ...
- 最易移植的I/O任意定义的矩阵键盘驱动
网上的矩阵键盘代码非常非常多,但绝大部分都是要连续I/O口的,就比如PA0-PA7.PB3-PB10等等等,这些都要用到一排的连续的单片机引脚.用过STM32单片机的都知道,STM32单片机一排过去连 ...
- 【51单片机】七段数码管和矩阵键盘的综合实验——计算器(思路+仿真电路+源代码)
系列文章目录 [51单片机]矩阵键盘逐行扫描法仿真实验+超详细Proteus仿真和Keil操作步骤 [51单片机]点阵LED的显示实验 [51单片机]七段数码管显示实验+详细讲解 [51单片机]矩阵键 ...
最新文章
- 张首晟生前重磅演讲:要用第一性原理的思维方式来理解今天的世界
- Android深度探索第四章
- ping 不通容器 宿主_Docker容器间通信
- 成功解决AttributeError: module tensorflow.image has no attribute resize
- mysqldumpslow mysql慢日志分析工具
- QT学习:多线程控制
- Git之如何解决sourceTree已经pull全部下来但是本地没有更新的问题
- Java:在Runnable中处理RuntimeException
- 分布式存储首选,浪潮商用机器FP5466G2服务器测评分析
- linux shell 函数 格式化,速查笔记(linux shell编程)
- 海洋cms简洁免费下载视频网站正版原创自适应挖片模板
- 小型电商平台系统需求分析文档
- 服务器无线网卡ap软件,无线网卡虚拟成无线AP工具(将无线网卡虚拟成无线AP软件) 2017最新版...
- cesium获取坐标及高程
- 软件测试面试题【变态逻辑题】,盘点那些大厂面试必出变态逻辑题
- python ppt 图片_利用Python将PPT转换为图片并合成长图
- 学写毛笔字前要了解的
- 送给程序员的话 - 大牛们的经典语录
- 期末作业C#实现学生宿舍管理系统
- eclipse是什么工具?