51单片机实现按键、键盘的功能

文章介绍了使用C语言编写的矩阵键盘控制程序,包括数据类型声明、延时函数、按键检测和LED状态切换。主要展示了如何通过GPIO控制键盘和数码管显示数字的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

typedef unsigned int u16; //对数据类型进行声明定义

typedef unsigned char u8;

sbit k1=P1^0; //定义P10口是k1

sbit led=P0^0; //定义P00口是led

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

  • 函 数 名 : delay

  • 函数功能 : 延时函数,i=1时,大约延时10us

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

void delay(u16 i)

{

while(i–);

}

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

  • 函 数 名 : keypros

  • 函数功能 : 按键处理函数,判断按键K1是否按下

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

void keypros()

{

if(k1==0) //检测按键K1是否按下

{

delay(1000); //消除抖动 一般大约10ms

if(k1==0) //再次判断按键是否按下

{

led=~led; //led状态取反

}

while(!k1); //检测按键是否松开

}

}

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

  • 函 数 名 : main

  • 函数功能 : 主函数

  • 输 入 : 无

  • 输 出 : 无

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

void main()

{

led=0;

while(1)

{

keypros(); //按键处理函数

}

}

矩阵键盘代码


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

  •                  矩阵按键实验                                                  *
    

实现现象:下载程序后数码管显示0,按下矩阵按键上的按键显示对应的数字

S1-S4:0-3

S5-S8:4-7

S9-S12:8-B

S13-S16:C-F。

注意事项:

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

#include “reg52.h” //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16; //对数据类型进行声明定义

typedef unsigned char u8;

#define GPIO_DIG P0

#define GPIO_KEY P1

u8 KeyValue; //用来存放读取到的键值

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

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

  • 函 数 名 : delay

  • 函数功能 : 延时函数,i=1时,大约延时10us

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

void delay(u16 i)

{

while(i–);

}

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

  • 函 数 名 : KeyDown

  • 函数功能 : 检测有按键按下并读取键值

  • 输 入 : 无

  • 输 出 : 无

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

void KeyDown(void)

{

char a=0;

GPIO_KEY=0x0f;

if(GPIO_KEY!=0x0f)//读取按键是否按下

{

delay(1000);//延时10ms进行消抖

if(GPIO_KEY!=0x0f)//再次检测键盘是否按下

{

//测试列

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; // 第四行 有按键按下

}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档,需要的读者可以戳这里免费领取!

帮助,可以扫码获取!!(备注:前端)**

[外链图片转存中…(img-WwN3GbCW-1713452341152)]

最后

前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档,需要的读者可以戳这里免费领取!

[外链图片转存中…(img-qXkckYqM-1713452341152)]

[外链图片转存中…(img-mmXDGjBl-1713452341153)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值