//电路说明如下。

//单片机:使用51系列兼容的即可;

//4×4矩阵键盘:接在P1口;

//两位数码显示器: P0口输出七段码,P2口输出位选码。

//==============================================================

//C语言程序如下。

/*************************************************************

* 文件名: KEY_LED.c

* 功能 : 对4×4矩阵键盘进行输出,在数码管后两位显示按键值。

**************************************************************/

#include

#include

#define uint unsigned int

#define uchar unsigned char

//uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};

uchar code table[10] = {0xC0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};

/**************************************************************

* 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x

* 输入 : x (延时一毫秒的个数)

* 输出 : 无

***************************************************************/

void Delay_1ms(uint x)

{

uint i;

uchar j;

for(i = 0; i < x; i++) for(j = 0; j <= 148; j++);

}

/**************************************************************

* 名称: Keyscan()

* 功能: P1外接4×4按键, 按照扫描法读出键值

* 输出: 按键值0~15/如无键按下, 返回16

***************************************************************/

uchar Keyscan(void)

{

uchar i, j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};

for(j = 0; j < 4; j++) { //循环四次

P1 = Buffer[j]; //在P1高四位分别输出一个低电平

temp = 0x01; //计划先判断P1.0位

for(i = 0; i < 4; i++) { //循环四次

if(!(P1 & temp)) //从P1低四位,截取1位

return (i + j * 4); //返回取得的按键值

temp <<= 1; //判断的位,左移一位

} }

return 16; //判断结束,没有键按下,返回16

} //呵呵,实质性的语句不过8行,就是这么简练!

/**************************************************************

* 名称: Display(uchar k)

* 功能: 将参数分成十位、个位分别显示

* 输入: k (键盘数值)

* 输出: P0口输出七段码,P2口输出位选码

***************************************************************/

void Display(uchar k)

{

P2 = 0; //消隐

P0 = table[k / 10];

P2 = 0x02; Delay_1ms(5); //显示5ms十位

P2 = 0; //消隐

P0 = table[k % 10];

P2 = 0x01; Delay_1ms(5); //显示5ms个位

}

/**************************************************************

* 名称 : Main()

* 功能 : 主函数

***************************************************************/

void Main(void)

{

uchar Key_Value = 16, Key_Temp1, Key_Temp2; //两次读出的键值

while(1) {

//---------以下读入按键、消掉、等待按键释放

P1 = 0xff;

Key_Temp1 = Keyscan(); //先读入按键

if(Key_Temp1 != 16) { //如果有键按下

//Delay_1ms(10); //延时一下

Display(Key_Value); //可用显示代替延时

Key_Temp2 = Keyscan(); //再读一次按键

if (Key_Temp1 == Key_Temp2)//必须是两次相等

Key_Value = Key_Temp1; //才保存下来,这就是消除抖动

while(Keyscan() <= 16); //等待按键释放

}

//---------以下是对按键的处理

Display(Key_Value); //显示键值

}

}

取消

评论

矩阵键盘行列扫描c语言,单片机矩阵键盘按钮行列逐级扫描法相关推荐

  1. 单片机矩阵消抖延时c语言,单片机矩阵按键定时器消抖程序源码

    芯片是采用的stc89c51单片机. 下面是矩阵键盘的电路图,矩阵键盘是接在p2口的. 下面是单片机部分的图,数码管显示等完整的原理图可以从http://www.51hei.com/f/ks51.pd ...

  2. ...矩阵键盘计算器的C语言,单片机: 简易计算器的实现(键盘)

    利用矩阵键盘实现一个简易的计算器. 为了简化问题,我们假设只支持小于100的非负整数之间的加.减.乘的运算,并且支持连续运算(结果的数值可以再进行运算). 本程序中C为加号,D为减号,E为乘号,F为等 ...

  3. 矩阵的QR分解c语言编程,[矩阵的QR分解系列五] Eigen中的QR分解

    之前介绍的矩阵的三角分解系列介绍了利用矩阵初等变换解决了矩阵三角化问题以及具体的三角分解.但是以初等变换工具的三角分解方法并不能消除病态线性方程组不稳定问题,而且有时候对于可逆矩阵有可能也不存在三角分 ...

  4. 独立键盘控制风火轮c语言,单片机项目教程--C语言版(十二五)(高职高专)...

    单片机项目教程--C语言版(十二五)(高职高专) 作 者:周坚 编著 出版时间:2013年03月 定 价:26.00 I S B N :9787811247817 所属分类: 大中专教材 &n ...

  5. 8279键盘扫描c语言程序,8279键盘显示C程序

    8279键盘显示C程序 8279键盘和显示程序 #include #include #include #define COM8279 XBYTE [0xF2FF] //定义8279控制口 #defin ...

  6. 阵列式键盘实训C语言,阵列式键盘实验详解.doc

    阵列式键盘实验详解 实验二 阵列式键盘实验 一.实验目的 1.掌握键盘和显示器的接口方法和编程方法 2.掌握阵列式键盘的硬件组成和软件编程方法 二.实验说明 本实验提供了一个4X4小建盘,向P0口的低 ...

  7. 4x4矩阵键盘工作原理及扫描程序_单片机人机交互矩阵按键

    按键是一种常开型按钮开关,与单片机的常见接法如图所示.按键未按下时两个触点断开,单片机I/O口输入高电平:当按键闭合时,I/O口输入低电平. 一.按键讲解 当I/O口为P0口时,由于没有内部上拉电阻, ...

  8. 学习笔记之51单片机键盘篇(非编码键盘与编码键盘、非编码键盘的扫描方式、独立键盘、矩阵键盘)

    这篇博文主要记录51单片机键盘篇(非编码键盘与编码键盘.非编码键盘的扫描方式.独立键盘.矩阵键盘.键盘消抖等)包含原理图.代码等 (一)基础补充 1.键盘的任务 2.键盘的识别 3.如何消除按键的抖动 ...

  9. 51单片机矩阵键盘的控制原理-扫描及使用方式

    矩阵键盘 矩阵键盘一般和之前学的LCD1602液晶屏一起控制,建议先看一下之前的博客学习一下液晶屏的使用. 当然矩阵键盘也可以和数码管和LED等一起操作,但是数码管需要扫描,很费CPU,LED又不能直 ...

  10. 51单片机矩阵键盘扫描及使用方法

    一.矩阵键盘简介 矩阵键盘,也称矩阵按键,是为了节约单片机IO口占用所引入的一种外设. (图片截取至普中A2开发板原理图) (图片截取至普中A2开发板实物图) 我们知道,一个独立按键需要1个IO口.但 ...

最新文章

  1. android fersco 框架,Android Fresco框架的简单使用
  2. C#基础概念二十五问
  3. 2021暑假每日一题 【week4 完结】
  4. 大数据时代第一部分思维导图_大数据时代总结思维导图模板分享
  5. 解决国内NPM安装依赖速度慢问题
  6. JAVASE图书系统期末试题
  7. linux 权限管理 lvm,Linux LVM 设置和管理
  8. 怎么解锁blockinput锁定的键盘_电脑键盘上的三个灯分别是什么作用?虽然很简单,但是很实用...
  9. 38张技术知识图谱,IT架构师必备【附下载】
  10. 暗黑破坏神2 符文自动合成--按键精灵源码
  11. 显卡4k性能测试软件,碰上UHD都得跪 AN新一代显卡4K对比横评
  12. pyqt 事件更新图片显示_暗黑战神3D网游ARPG实战案例(Unity 2017.3)更新
  13. 【教程】安装torch_sparse、torch_cluster、torch_scatter、torch_spline
  14. delphi创建excel写入数据并创建二维折线图
  15. 第四章、Tibbo Basic
  16. 3. Python控制结构
  17. Proxifier设置代理上网详细操作
  18. android 数字滚动抽奖_Android滚动的数字更好看
  19. 免费大数据分析云平台有哪些
  20. 大数据集群迁移的那一夜是怎么过的|回忆录

热门文章

  1. colorui 使用iconfont图标
  2. UE4+Cesium
  3. Windows系统安装Mysql前运行库依赖
  4. libjpeg-turbo编译流程
  5. 图片复印如何去除黑底_如何处理打印出来的图片很黑的情况
  6. VBA函数传递参数方式
  7. MK60单片机开发环境-IAR Embedded Workbench的搭建
  8. Csdn账号如何注销?
  9. 第14课:JSP动作 JSP param动作(JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
  10. 《Unity3D脚本编程与游戏开发》学习Day one