51实验11:矩阵键盘16个按键分别代表0-9,a-f,用最后一位数码管显示
#include#include
typedef unsigned int u16;
typedef unsigned char u8;
#define GPIO_DIG P0
#define GPIO_KEY P1
//数码管
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//数码表
u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,
0x71};
//储存按键标号
u8 KeyValue;
//延时函数
void delay(u16 i)
{
while(i--);
}
//获取按键标号
void KeyDown()
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)
{
//确定列
switch(GPIO_KEY)
{
case(0x07):KeyValue=0;break;
case(0x0b):KeyValue=1;break;
case(0x0d):KeyValue=2;break;
case(0x0e):KeyValue=3;break;
}
GPIO_KEY=0xf0;
//确定行
switch(GPIO_KEY)
{
case(0x70):KeyValue=KeyValue;break;
case(0xb0):KeyValue=KeyValue+4;break;
case(0xd0):KeyValue=KeyValue+8;break;
case(0xe0):KeyValue=KeyValue+12;break;
}
while((a<50)&&(GPIO_KEY!=0xf0))
{
delay(1000);
a++;
}
}
}
void main()
{
while(1)
{
//按键标号获取
KeyDown();
//确定数码管位置
LSA=0;LSB=0;LSC=0;
//keyvalue确定数字
GPIO_DIG=smgduan[KeyValue];
}
}
关键字:矩阵键盘
引用地址:
51实验11:矩阵键盘16个按键分别代表0-9,a-f
推荐阅读最新更新时间:2024-11-08 23:14
HOLTEK单片机-数码管显示
功能说明: 4个共阳极七段显示器每次显示4个数字,从0-F共有16个字,分成3-0,7-4,B-8,F-C四组数字,每次显示一组,依次显示,循环不止。 电路说明: 电路图如下图所示: 本实验所使用的共阳极七段显示器是由4个七段显示器做在一起,所以4个七段显示器共享一组七段控制线,而每一个七段显示器都有自己的共阳极脚,故这组共阳极七段显示器共有12只引脚。 晶体管Q1-Q4 作为电子开关,使用PNP型三极管,当晶体管的基极为低电位时,发射极与集电极导通,但是会有0.2V的压降。 由于每一个晶体管的发射极都可接上电源供给所控制的共阳极七段显示器,故在七段显示器的每一段LED上必须串接一个电阻,以防止LED被烧毁。
[单片机]
51 线反转法 实现矩阵键盘检测
背景:STC89C52RC单片机 1.矩阵键盘 线反转法算法 1.1矩阵键盘 矩阵键盘是指将键盘按钮放置在行线与列线的交叉点上,由多行和多列就构成了矩阵键盘。下图就是一个矩阵式键盘。 将键盘行线接到单片机的引脚之上 ,将键盘列线接到单片机的另一些引脚之上 。 1.2线反转法算法 对于外部键盘,程序在执行时必须随时扫描键盘跟单片机连接引脚的电平,看是否有键盘按钮被按下。而在扫描各个端口的时候,一次只能扫描到按键的哪一行或那一列,只有同时记录被按下按键的行和列才能决定按键的坐标。 最直接的方式是先逐行检测有哪一行的按键被按下,再逐列检测有哪一列的按钮被按下。这样就能够得到按键的行
[单片机]
51单片机入门 - 矩阵键盘行扫描实验
矩阵式键盘识别方法(行扫描法) 检测列线的状态: 列线Y4~Y7置高电平,行线Y0~Y3置低电平。只要有一列的电平为低,则表示键盘该列有一个或多个按键被按下。若所有列线全为高电平,则键盘中无按键按下。 判断闭合按键所在的位置: 行线置高电平,列线置低电平。检测行线的状态。 举例:当按下第一行第一列的按键时 行扫描,行线为低电平,列线为高电平,得到 1110 0000 列扫描,行线为高电平,列线为低电平,得到 0000 1110 将得到的结果进行或运算,得到 1110 1110,对应第一行第一列,十六进制为0xEE 按键表 行 列 bin hex 1 1 1110 1110 0xEE
[单片机]
单片机C语言程序设计:单只数码管循环显示 0~9
/* 名称:单只数码管循环显示 0~9 说明:主程序中的循环语句反复将 0~9 的段码送至 P0 口,使数字 0~9 循环显示 */ #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //延时 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t 120;t++); }
[单片机]
独立按键和矩阵键盘驱动原理
No.1 按键分类与输入原理 按键按照结构原理科分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。 在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其他按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入时与软件结构密切相关的过程。 对于一组键或一个键盘,总有一个接口电路与CPU相连。CPU可以采用查询或中断方式了解有无将按键输入,并检查是哪一个按键按下,将该键号送人累加器,然后通过跳转指令转
[单片机]
如何实现矩阵键盘自由灵活控制数码管显示数字
矩阵键盘 能实现 多个按键 连接少量I/O口, 矩阵键盘,按下一个键 即可 使 数码管显示相应数字 #include reg52.h unsigned char code table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x10}; unsigned char t=0; unsigned char i=0; void Delay(unsigned char i) { unsigned char j; for(; i 0; i--) for(j=110; j 0; j--); } void DisplayLED(unsigned c
[单片机]
STM32学习——矩阵键盘
在之前的学习中就学过了IO口的操作,矩阵键盘就是对IO口的操作,还有一个就是扫描模式。 方法一: 逐行扫描:通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。 方法二: 行列扫描:通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。 在这里用到了中断的方法,行输出高电平,列做模拟输入口。当有按键按
[单片机]
51单片机 动态数码管显示
本章博客写的内容主要围绕动态数码管显示,动态数码管显示与静态数码管显示比较稍有变化,主要在添加延时函数这点上 1.首先将上一章节使用子函数方法的代码复制过来 将Nixie( , )移到下方while循环中(因为要实现效果为动态的) void main() { while(1) { Nixie(1,1); Nixie(2,2); Nixie(3,3); } } 编译下载后效果为: 对于这种效果要进行消影的处理 因为单片机编译处理顺序是按照:位选 段选 (清零),位选 段选 ,位选 段选 由上一段的段选到下一部分的位选需要进行清零处理 接下来主要进行:增添延时函数和清零
[单片机]