C51键盘接口技术

单片机矩阵按键应用——动态显示 矩阵按键、数码管 阅读详情

1. 实验仪器

计算机、keil c51软件、单片机开发板、下载线

2.实验项目

利用开发板的4×4键盘和数码管显示器,识别键盘按键,将键值在数码管上显示。

键盘接口电路如图所示。

 

设计c源码:

#include<reg51.h>

#define GPIO_DIG P0

#define GPIO_KEY P1

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

unsigned char code DIG_CODE[17]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsigned char KeyValue;                //存放键值

unsigned char KeyState;                //记录键盘有无键按下

unsigned char DisplayData[8];         //显示缓冲数组

void Delay10ms();  

void KeyDown();     

void DigDisplay(); //动态显示函数

void main(void)

{

    KeyState=0;

    while(1)

    {

       KeyDown();

        if(KeyState==1)

       {

           DisplayData[7]=DisplayData[6];

           DisplayData[6]=DisplayData[5];

           DisplayData[5]=DisplayData[4];

           DisplayData[4]=DisplayData[3];

           DisplayData[3]=DisplayData[2];

           DisplayData[2]=DisplayData[1];

           DisplayData[1]=DisplayData[0];

           DisplayData[0]=DIG_CODE[KeyValue];       

           KeyState=0;

       }

       DigDisplay();

    }            

}

void DigDisplay()

{

    unsigned char m,i;

    unsigned int j;

    for(i=0;i<8;i++)

    {

       switch(i)            //由低到高位依次选通

       {

           case(0):LSA=0;LSB=0;LSC=0; break;

           case(1):LSA=1;LSB=0;LSC=0; break;

           case(2):LSA=0;LSB=1;LSC=0; break;

           case(3):LSA=1;LSB=1;LSC=0; break;

           case(4):LSA=0;LSB=0;LSC=1; break;

           case(5):LSA=1;LSB=0;LSC=1; break;

           case(6):LSA=0;LSB=1;LSC=1; break;

           case(7):LSA=1;LSB=1;LSC=1; break; 

       }

        m= DisplayData[i];             //从显示缓冲数组依次读取显示数

GPIO_DIG= DIG_CODE[m];         //发送段码

        j=10;                  

while(j--); 

        GPIO_DIG=0x00;                 //消隐

    }

}

void KeyDown(void)                     //键盘扫描函数

{

unsigned int a=0;                    

     GPIO_KEY=0x0f;                    //低位列线送1(高电平)

     if(GPIO_KEY!=0x0f)                //检测有无键按下

    {

       Delay10ms();                    //有键按下,延时消抖

       if(GPIO_KEY!=0x0f)              //消抖后,再检测键盘

       {

           KeyState=1;                 //置有按键按下状态

           GPIO_KEY=0X0F;              //行线置零,测试列

           Delay10ms();

           switch(GPIO_KEY)             //读取列线,判哪一列有键按下

           {

              case(0X07):KeyValue=0;break;       //键值变量列号

              case(0X0b):KeyValue=1;break;

              case(0X0d):KeyValue=2;break;

              case(0X0e):KeyValue=3;break;

              default:   KeyValue=17;  //17是把数码管全灭掉。

           }

           GPIO_KEY=0XF0;              //列线置零,检测行

           Delay10ms();

           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;

              default:KeyValue=17;

           }

           while((a<500)&&(GPIO_KEY!=0xf0))   //延时等待键释放

           {

              Delay10ms();

              a++;

           }

           a=0;

       }

    }

}

void Delay10ms(void)   //延时函数

{

    unsigned char a,b,c;

    for(c=1;c>0;c--)

        for(b=38;b>0;b--)

            for(a=130;a>0;a--);

}

4*4矩阵键盘C51程序 <br />#include <reg51.h><br />#include <intrins.h><br />#define key_port  P0   //键盘接口定义<br />sbit key_port_0=key_port^0;<br />sbit key_port_1=key_port^1;<br />sbit key_port_2=key_port^2;<br />sbit key_port_3=key_port^3;<br />/****************************** 阅读详情

相关推荐

Proteus-51单片机-TM1638(带键盘接口的LED驱动IC)测试

TM1638(带键盘接口的LED驱动IC)测试

让你爱上电路设计 699

51单片机矩阵键盘

矩阵键盘的原理很浅显易懂,不涉及任何寄存器,就是纯线路连接。矩阵键盘部分就是对I/O口电平不停地进行判断,不涉及任何寄存器和复杂电路,切记任何按键都不要忘记消抖。

weixin_69561921的博客 3370

C51独立式键盘接口实验:从原理到坑点全解析

单片机系统的设计,离不开对外部输入信号的处理,按键作为最基础的人机交互方式,其接口电路与检测程序是嵌入式开发必备技能。独立式键盘采用“一键一IO”结构,通过上拉电阻保证引脚电平稳定,由单片机读取高低电平判断按键状态。由于机械触点存在抖动现象,需借助延时确认或边沿检测等方法进行消抖处理,确保动作识别准确、避免误触发。该技术广泛用于工业控制面板、家电操作界面、仪器仪表等低功耗、高可靠场景,并构成矩阵键盘、中断扫描等进阶方案的基础。掌握独立式键盘的硬件连接、软件扫描逻辑与调试技巧,是通往复杂输入系统设计的关键一步

weixin_33910191的博客 326

【51单片机实验】5-串行接口与键盘接口技术应用(附Proteus电路)

一、实验目的 掌握51单片机串行口的应用设计 掌握按键的工作原理和消抖动的方法 二、实验设备 1、微机一台,Keil C集成开发环境 2、DP-51PRO.NET综合实验箱 3、Proteus仿真软件 三、实验内容 1、P1接8个按键或拨位开关,P2接8个发光LED,编程实现读入单片机P1状态,通过串行方式1实现自发、自收,并将接收到的内容从P2口的LED显示出来。 注意:TXD(P3.1)和RXD(P3.0)的接线。 程序及必要的注释: 分析与验证: 程序实现的功能: 2、P.

活着活着就有意义了 6888

51单片机应用开发实战代码大全(第2版)

单片机是一种集成电路芯片,它将中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口和中断系统等集成在一个单片芯片上。51单片机是一种经典的单片机类型,广泛应用于工业控制、智能仪器和家用电器等领域。汇编语言是低级编程语言,与硬件结构紧密相关。掌握汇编语言的编程技巧,不仅可以编写出运行速度快、资源消耗少的代码,还能对计算机的工作原理有更深刻的理解。下一章节将介绍C语言编程实践,这是另一种常用的语言,广泛用于嵌入式系统的开发。

weixin_29935511的博客 779

设计与实现基于51单片机的作息时间控制钟

51单片机,即基于Intel 8051微控制器架构的单片机,是早期电子设计中极为常见的一种微控制器。由于其简单性、灵活性,以及低成本的特性,51单片机广泛应用于嵌入式系统的教学、工业控制、家用电器、智能仪器等领域。定时器/计数器是单片机中非常重要的功能模块。掌握它们的工作原理和编程实现对于开发单片机应用具有重大意义。通过正确配置和使用定时器中断或计数器事件,我们可以高效地处理各种周期性任务和外部事件。在本章节中,我们详细探讨了定时器/计数器的硬件结构、工作模式、编程实现以及中断编程。

weixin_30653091的博客 1089

单片机C语言C51的输入输出

在C51语言中,它本身不提供输入和输出语句,输入和输出操作是由函数来实现的。在C51的标准函数库中提供了一个名为“stdio.h”的一般I/O函数库,它当中定义了C51中的输入和输出函数。当对输入和输出函数使用时,须先用预处理命令“#include <stdio.h>”将该函数库包含到文件中。 在C51的一般I/O函数库中定义的I/O函数都是通过串行接口实现,在使用I/O函数之前,...

嵌入式之斋 4675

基于51单片机的电子密码锁设计与实现

在当今数字化时代,电子密码锁作为一种普遍的门禁设备,以其独特的使用便利性和较为高级的安全性,成为现代安防系统不可或缺的一部分。与传统的机械锁相比,电子密码锁无需携带实体钥匙,用户通过输入预设的数字密码来控制门锁的开关,这一特点极大地提升了用户的生活质量与安全等级。电子密码锁的核心在于其内置的电子密码控制系统。当用户输入正确的密码后,系统会通过一系列的电路运作,产生电磁力或者直接驱动锁具,从而实现对门锁的控制。这种技术不仅适用于个人住宅,同样在商业空间、公共设施以及高安全需求的场所中得到广泛应用。

weixin_32102617的博客 1469

8255A应用C语言不用373,51单片机的c语言程序设计与应用 第4章

第4章 单片机外部扩展资源的C51编程,在实际应用的51单片机系统中,很少是由以单块单片机独立构成的,经常需要对单片机的相关资源进行扩展,本章将介绍单片机的并行口、键盘、显示、A/D及D/A等扩展资源的C51编程。,4.1 并行口扩展的C51编程,并行口的扩展有简单I/O口的扩展、利用串行口扩展并行口、可编程并行口扩展等几种方法。,4.1.1 利用锁存器、三态门扩展简单并行口,1.使用锁存器扩...

weixin_39676979的博客 554

C51单片机开发板硬件原理图合集详解

C51单片机,也称为8051系列,是英特尔公司在1980年推出的经典微控制器。它的核心是一个8位的处理器,内部集成了ROM(或Flash)、RAM以及各种I/O接口,适用于众多控制类应用。C51单片机因其简单易用、成本低廉以及丰富的参考资料,在教学和工业控制领域拥有广泛的应用。51-单核-A5(V5.5)开发板是一个基于经典的8051单片机架构的集成开发环境,它为开发者提供了一系列的硬件组件以供学习、开发和测试。主要硬件组件包括:8051单片机核心。

weixin_33240461的博客 1272

TM1638在C51单片机系统中的应用与编程

TM1638模块的通信协议是一个基于串行接口的协议,具备简单的命令/数据结构,使得通信过程相对直观。协议工作在单主单从模式,即单片机作为主设备控制TM1638从设备。基本的通信步骤包括:数据位格式:数据以8位字节为单位进行传输,最高位先行。命令集:TM1638定义了一系列的命令集,例如显示控制、读写存储器等。数据格式:数据传输可以是单字节或多字节,取决于命令字节。时序控制:通信过程中时钟线CLK和数据线DATA的逻辑状态变化控制数据的发送和接收。

weixin_32480007的博客 1209

51单片机c语言6,mcs-51单片机c语言第6章.ppt

mcs-51单片机c语言第6章第6章 MCS-51系列单片机的接口技术 6.1 键盘接口技术 6.2 数码显示接口技术 6.3 液晶显示技术 6.4 A/D转换器与单片机的接口技术 6.5 D/A转换器与单片机的接口技术 6.6 串行接口技术 6.7 开关量输入/输出接口技术 第6章 MCS-51系列单片机的接口技术 6.1 键盘接口技术 在单片机应用系统中,键盘是人机交流...

weixin_36245032的博客 212

键盘接口实验实验报告总结及程序.doc.pdf

键盘接口实验实验报告总结及程序.doc.pdf键盘接口实验实验报告总结及程序.doc.pdf键盘接口实验实验报告总结及程序.doc.pdf键盘接口实验实验报告总结及程序.doc.pdf键盘接口实验实验报告总结及程序.doc.pdf键盘接口实验实验报告总结及程序.doc.pdf键盘接口实验实验报告总结及程序.doc.pdf键盘接口实验实验报告总结及程序.doc.pdf

《51单片机C语言开发教程》目录

案例2:简易十字路口交通信号灯控制(用Proteus软件仿真)案例13:用swtich语句的控制P1口8位LED的点亮状态。案例16:用do-while语句控制P1口8位LED流水点亮。案例11:用右移(或左移)运算流水点亮P1口8位LED。案例4:用P0口、P1口分别显示加法和减法运算结果。案例12:用if语句控制P1口8位LED的流水方向。案例3:通过对P1口地址的操作流水点亮8位LED。案例19:用有参函数控制P1口8位LED流水速度。案例7:用自增运算控制P1口8位LED流水花样。

qq_40844444的博客 1096

E-Prime脑电实验打mark全攻略:从端口查询到串并口实战(附常见问题解决)

本文提供了E-Prime脑电实验打mark的完整实战指南,涵盖端口查询、并口与串口配置的核心步骤及常见问题解决。文章深入解析了mark原理,并详细介绍了通过E-Basic脚本和Serial设备对象发送信号的两种方法,帮助研究者实现E-Prime与脑电设备的高精度时间同步,确保实验数据可靠性。

4k5l6j7h8的博客 354

LVGL v9的lv_scale控件实战:5分钟打造动态仪表盘(附完整代码)

本文详细介绍了LVGL v9中lv_scale控件的实战应用,通过5个关键步骤快速打造动态仪表盘。文章涵盖核心特性解析、代码实现、样式定制及性能优化,适用于工业HMI、智能家居等场景,并附完整代码示例。

gin88的博客 261

《51单片机C语言开发教程》第4章 C51单片机简单接口应用技术

独立式键盘每个按键独占一个I/O口,优点是编程简单,缺点是占用I/O口资源较多;矩阵式键盘通过行列交叉的方式连接按键,可有效减少I/O口的使用,但编程相对复杂。开关量输入接口用于检测外部设备的开关状态,如按键的按下与释放。开关量输出接口用于控制外部设备的通断,如控制LED的亮灭、继电器的吸合与释放等。单片机通过向I/O口输出高电平或低电平来控制外部设备的状态。通过控制单片机I/O口的电平,可使LED点亮或熄灭,实现简单的状态显示。它通过与单片机进行通信,接收单片机发送的指令和数据,从而实现相应内容的显示。

qq_40844444的博客 539

Oracle入门——基础语法篇

ROWID是Oracle中的一个伪列,用于唯一标识数据库中的每一行。在查询中,可以使用ROWID来定位和操作特定的行,例如,删除特定的行或更新特定的行。在Oracle中,子查询是指嵌套在另一个查询内部的查询语句,它可以作为主查询的一部分,用于提供额外的过滤条件、计算或数据源。在Oracle中,连接查询是通过使用JOIN子句将两个或多个表中的数据合并在一起,以获取满足特定条件的结果集。在Oracle数据库中,ROWID和ROWNUM都是用于对行进行标识和定位的伪列,它们在查询中的使用有一些不同之处。

麦当当的博客 3089

二、51单片机 使用Proteus仿真掌握矩阵键盘(仿真及代码)

51单片机,通过proteus仿真实现对矩阵键盘的掌握

m0_47235364的博客 1万+

LTR-390UV-01对比VEML6075:5个真实项目中的选型避坑指南

本文对比了LTR-390UV-01和VEML6075两款环境光传感器在5个真实项目中的表现,提供了选型避坑指南。通过智能手环、农业温室、紫外线消毒柜等场景的实测数据,分析了动态范围、抗干扰性、温度稳定性等关键差异,帮助开发者在成本与性能间做出最优选择。

weixin_28733777的博客 219

【RT-DETR涨点改进】全网独家首发、特征融合改进篇 | AAAI 2026 | 引入CDEM交叉动态增强模块,双向引导和融合,在低光图像增强中有效提升了图像的亮度,提升小目标和暗目标的检测准确率

本文提出了一种基于CDEM(交叉动态增强模块)改进的rtdetr网络模型,有效提升了在低光和复杂环境下的目标检测性能。CDEM模块通过动态增强亮度与色彩特征,改善图像输入质量,增强细节和对比度。该模块具有轻量级结构,易于集成到现有模型中,能够显著提升小目标和暗目标的检测准确率与鲁棒性。文章详细介绍了CDEM模块的结构原理、实现方法,并提供了完整的代码实现和配置指南,包括三种改进版本的YAML配置文件。实验结果表明,该方法在图像增强和目标检测任务中均取得了优异性能。

Ai缝合怪、助力小伙伴高效发论文 143

c51语言的设计步骤,C51单片机项目式教程pdf

C51单片机项目式教程 作者:徐海峰,叶钢C51单片机项目式教程 出版社:清华大学出版社C51单片机项目式教程 内容简介《C51单片机项目式教程》从实际项目应用入手,以项目制作流程和项目实现思路为主导,由浅入深、循序渐进地讲述使用C语言为51单片机编程。其内容包括:C51语言及语法、MCS-51单片机硬件结构、设计制作流水灯、设计制作时钟、设计制作红外报警器、设计制作单片机点阵、设计制作数字电压表...

weixin_42551028的博客 831

uniapp(全端兼容) - 最新详细实现瀑布流列表及布局设计,uni-app全平台兼容的瀑布流示例,view容器自适应瀑布流布局,图片瀑布流布局、图像+文字卡片式瀑布流,类似小红书(详细示例代码)

uni-app,瀑布流,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,瀑布流布局,如何实现图片瀑布流,怎么做文字+图像瀑布流,uniapp仿小红书笔记瀑布流效果,uniAPP仿快手抖音布局列表,瀑布流列表详细教程,编译所有平台都能用的瀑布流列表,商品瀑布流列表,图文列表,小程序瀑布流,页面触底懒加载,瀑布流插件,详细示例代码教程,uni-app H5实现瀑布流效果,uniapp小程序做瀑布流,纯css瀑布流,用uniapp写瀑布流商品列表,

✅ 精选推荐文章 1万+

电子鼓敲击乐器键盘接口

使用万用表, 对于键盘矩阵的连接关系进行确认。通过测量, 的确, 16 个按键组成 4×4 的矩阵。通过对于C51 编程, 读取键盘动作, 然后通过光耦输出 10毫秒的导通脉冲, 便可以形成电子鼓的敲击动作。最后, 给模块喷上三防漆,  使得它不加装外壳的情况下使用。对于外部的灰尘、 潮湿的水分能够抵抗得住。文记录了利用一个键盘矩阵制作一个电子敲击乐器键盘接口的过程。利用这个键盘,  结合STC32单片机, 最终形成稳定的激发动作。铺设便于单面制版的PCB,  一分钟后, 得到测试电路板。

TSINGHUAJOKING 758

【华为OD机试真题 2025B卷】662、静态扫描 | 机试真题+思路参考+代码解析(C++、Java、Py)(B卷复用)

【华为OD机试真题 2025B卷】662、静态扫描 | 机试真题+思路参考+代码解析(C++、Java、Py)(B卷复用) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2024e卷,od机试,2024E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2024华为od,如何备战华为od

KJ.JK 5397

【STM32系统】基于STM32+手机APP设计的智能停车场系统

功能简介1、进出停车场时需要刷卡,进行一个记时、计费的功能。2、停车位配有超声波检测,主要识别车位是否被占用。3、车位区域配有OLED显示屏,用户可以通过显示屏看到空闲车位。4、车位配有车位灯。当用户找不到车位可以通过手机点亮车位灯5、停车场配有温湿度检测和烟雾检测模块。当环境发生异常状态。会触动紧急报警。6、停车场信息会通过Wi-Fi发送数据上传至阿里云。用户可以通过手机了解到停车场空闲车位和停车时间、费用。

嵌入式阿齐Archie 2万+
上一篇: 基于stm32的视觉和蓝牙控制F407芯片智能机械臂控制小车
下一篇: C51单片机控制蜂鸣器
StevenXander
博客等级 码龄5年 33粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值