矩阵按键

电路

每个按键一端和同行一端相连(JP4的高4位),另一端和同列一端相连(JP4的低4位)

判断按键是否按下:

法一:逐行扫描

for(int i = 8 ; i>3 ; i-- )
{
JP4^i = 0;
If ( 低四位不全为1)
低四位为0的那一列,第i行 的按键被按下
}

法二:行列扫描

完整代码:

#include <reg51.h>
typedef unsigned int u16;
typedef unsigned char u8;
#define delaytime 50000000
#define GPIO_DIG P0
#define GPIO_KEY P1 //这里用的静态数码管是共阳的 //RAM 占用少,存在flash 里面:code
//共阴的表
u8 code ledSegment [16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,
0x7d, 0x07, 0x7f, 0x6f, 0x77,
0x7c, 0x39, 0x5e, 0x79, 0x71};
u8 KeyValue=0;
void delay(u16 i)
{
while(i--);
}
void KeyDown()
{
char a = 0;
GPIO_KEY = 0x0f; //高四位低电平,第四位高电平
if(GPIO_KEY!= 0x0f)
{
delay(1000);
if(GPIO_KEY!= 0x0f)
{
//--------------------------求列数----------------------------------//
switch(GPIO_KEY)
{
case(0x07): KeyValue = 0; break; //0000 0111 : 第一列
case(0x0b): KeyValue = 1; break; //0000 1011 : 第二列
case(0x0d): KeyValue = 2; break; //0000 1101 : 第三列
case(0x0e): KeyValue = 3; break; //0000 1110 : 第四列
}
//--------------------------求行数----------------------------------//
GPIO_KEY = 0xf0; //高四位高电平,第四位低电平
switch(GPIO_KEY)
{
case(0x70): KeyValue += 0; break; //第一行
case(0xb0): KeyValue += 4; break;
case(0xd0): KeyValue += 8; break;
case(0xe0): KeyValue += 12; break; //第四行
}
//退出条件:按键松开或超过
while((a<50)&&(GPIO_KEY!= 0xf0)) // GPIO_KEY!= 0xf0 说明按键还没松
{
delay(1000);
a++;
}
}
}
} void main(void)
{ while(1)
{
KeyDown();
//KeyValue = 1;
GPIO_DIG = ~ledSegment[KeyValue];
}
}

接线

在普中科技的开发试验仪上,注意矩阵按键和P1端口的排线要反接,同事可能要拔掉74HC165上的短接片

C51 矩阵按键 个人笔记的更多相关文章

  1. C51 独立按键 个人笔记

    独立按键类似于一个开关,按下时开关闭合 防抖 硬件防抖 软件防抖 通过延时,滤掉抖动的部分 电路图 普中科技的开发板,独立按键电路图如下 判断按键按下 因此判断是否按下开关的方法是看引脚是否为低电平( ...

  2. C51 原创电子琴 (蜂鸣器/计时器/中断/矩阵按键)

    需求分析 用C51的16个矩阵按键当作两个八度的琴键 按下时发出相应音调的声音,静态数码管显示相应音符的数字. 为了解锁更多曲目,两个多的琴键设计成#4,显示时加上小数点 下图分别为1和#4的显示,其 ...

  3. 【C51】单片机独立按键与矩阵按键

    独立按键 首先既然是检测输入,对于当然要用到拉电阻,来检测引脚电平变化变化.51单片机中,除了P0口外,P2,P3,P4都是内置上拉电阻的准双向IO口,一般 的 51 P0引脚都外接了上拉电阻,当然也 ...

  4. AD按键-矩阵按键:

    原理:利用数组分压+AD采集: 优点:一个IO口可以做成多个按键,节省IO口(矩阵键盘在>4时优点才能体现出来):可备用作为AD基准输入. 缺点:不能做成组合按键(或者电阻要精确选择):且离IO ...

  5. AD按键-矩阵按键-独立按键:

    原理:利用数组分压+AD采集: 优点:一个IO口可以做成多个按键,节省IO口(矩阵键盘在>4时优点才能体现出来):可备用作为AD基准输入. 缺点:不能做成组合按键(或者电阻要精确选择):且离IO ...

  6. 【.NET 与树莓派】矩阵按键

    欢迎收看火星卫视,本期节目咱们严重探讨一下矩阵按键. 所谓矩阵按键,就是一个小键盘(其实一块PCB板),上面有几个 Key(开关),你不按下去的时候,电路是断开的,你按下去电路就会接通.至于说有多少个 ...

  7. 矩阵按键的试验---verilog

    矩阵键盘的试验,采用三段式状态机处理方法. 难点在于检测状态机中:按键消抖以后逐列检测. 电路图: 代码 /********************************Copyright***** ...

  8. C51 定时器/计数器 个人笔记

    C51的周期 结构图 两个功能寄存器 51单片机定时/计数器的工作由两个特殊功能寄存器控制.TMOD用于设置其工作方式:TCON用于控制其启动和中断申请. 工作方式寄存器TMOD 其中方式一和方式二常 ...

  9. 入门级的按键驱动——按键驱动笔记之poll机制-异步通知-同步互斥阻塞-定时器防抖

    文章对应视频的第12课,第5.6.7.8节. 在这之前还有查询方式的驱动编写,中断方式的驱动编写,这篇文章中暂时没有这些类容.但这篇文章是以这些为基础写的,前面的内容有空补上. 按键驱动——按下按键, ...

随机推荐

  1. 在Linux下使用linuxdeployqt发布Qt程序

    一.简介 linuxdeployqt 是Linux下的qt打包工具,可以将应用程序使用的资源(如库,图形和插件)复制到二进制运行文件所在的文件夹中. 二.安装linuxdeployqt 去github ...

  2. 构造 HDOJ 5400 Arithmetic Sequence

    题目传送门 题意:问有多少个区间,其中存在j使得ai + d1 == ai+1(i<j) && ai + d2 == ai+1 (i>j) 构造:用c1[i], c2[i] ...

  3. C#DataTable学习心得[转]

    一.DataSet.DataTable.DataRow.DataColumn 1] 在DataSet中添加DataTable DataSet.Tables.Add(DataTable) 实例: Dat ...

  4. ural1437

    1437 记忆化 模拟倒水过程 #include <iostream> #include<cstdio> #include<cstring> #include< ...

  5. 如何理解JavaScript的单线程

    JS的本质是单线程的.这点区别于JAVA的两个线程并发 但是,平时的JS,确实是同时运行很多任务,这又是怎么回事???? First,js的代码分为两种.同步代码和异步代码. console.log( ...

  6. 使用Qt5.7.0 VS2015版本生成兼容XP的可执行程序

    版权声明:本文为灿哥哥http://blog.csdn.net/caoshangpa原创文章,转载请标明出处. 一.直接使用VS2012/VS2013/VS2015生成XP兼容的可执行程序 Visua ...

  7. spring mvc 配置运行报错误

    四月 06, 2015 10:51:18 上午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server version: Ap ...

  8. createlang - 定义一种新的 PostgreSQL 过程语言

    SYNOPSIS createlang [ connection-option...] langname [ dbname] createlang [ connection-option...] -- ...

  9. vue课程安排

    状态管理与vuex,即兄弟组件通信(选讲,了解即可)

  10. 第3节 mapreduce高级:8、9、自定义分区实现分组求取top1

    自定义GroupingComparator求取topN GroupingComparator是mapreduce当中reduce端的一个功能组件,主要的作用是决定哪些数据作为一组,调用一次reduce ...