【全栈计划 —— 单片机】——Part_04 IO口输入功能的使用

本文详细介绍了单片机中的独立按键和矩阵按键实验,包括代码实现和工作原理。独立按键通过检测IO口电平变化实现消抖,矩阵按键利用行列扫描法检测多个按键状态。实验代码展示了如何处理按键输入并控制LED灯。同时,文章强调了IO口的输入功能和消抖在实际应用中的重要性。

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

前言

杨枝的单片机专栏,多图多阐述,争取让大家在学习单片机的路上减少些许的痛苦
在这里插入图片描述
虽说是14天,但是我自己快更了半个月了,也才更了一半,我看了一下后面的知识,可以拎出来说的不是特别多啦,我已经在买STM32的板子啦,咱们重心还是得放在32~
14天了,是对于各位看这个篇文章的小伙伴来说嗷,一天看一篇,轻松上手,不再害怕单片机。
因为我自己现在呢,抬头是算法题海,低头是作业项目,很多时候只是写得完草稿,没有及时发出来,抱歉哈,原谅我🌹🌹🌹

在这里插入图片描述

独立按键实验

💒项目代码及效果

#include "reg52.h"

//使用宏定义来定义每个独立按键按下的键值
#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0

typedef unsigned int u16;
typedef unsigned char u8;

//根据电路图来定义需要操控的管脚
sbit KEY1 = P3^1;
sbit KEY2 = P3^0;
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;

//定义咱们要操作的LED1
sbit LED1 = P2^0;

//编写用于消抖的延时函数
void delay_10us(u16 ten_us) 
{
   
	while(ten_us--);
}


//检测独立按键是否按下,按下则返回对应键值
//mode = 0,单次扫描按键,只有当按键松开后才能触发下次的扫描,防止按下一次出现多次触发情况 
//mode = 1,连续扫描按键 ,会一直返回这个按键的键值,好处是可以很方便实现连按操作 
u8 key_scan(u8 mode) 
{
   
	static u8 key = 1;
	
	//支持连续扫描按键
	if(mode) key = 1;
	//常规的检查是否有按键按下
	if(key && (!KEY1 || !KEY2 || !KEY3 || !KEY4)) 
	{
   
		//通过延时函数消抖
		delay_10us(1000);
		//修改键值,在mode = 0的情况
		key = 0;
		if(!KEY1) 
			return KEY1_PRESS;
		else if(!KEY2)
			return KEY2_PRESS;
		else if(!KEY3)
			return KEY3_PRESS;
		else if(!KEY4)
			return KEY4_PRESS;	
	}else if(KEY1 && KEY2 
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨枝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值