单片机-控制按键点亮LED灯

news2025/1/31 22:38:50

1、按键电路图

定义四个按键引脚 

1、按键按下 为 输入为低电平

2、按键不按下 IO有上拉电阻,为高电平

// 定义 按键的 管教
sbit KEY1 = P3^1;
sbit KEY2 = P3^0;
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;

2、LED灯电路图

LED 输出高电平为亮

// 定义LED灯 管教
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;

3、编程思想设计

1、定义按键管教

2、定义LED灯管教

3、定义按键的键值

4、定义一个函数 来判断按键是否被按下

5、先判断 按键是否被按下--> 在判断没有按下按键怎么样-->否则返回 没有按下

static u8 key =1;  // 定义一个不被改变的u8 类型的 变量 key 赋值为1 
if(mode)key=1;       // 连续扫描按键,这里给 是单词扫描为0 ,多次扫描为1

if(key=1 && (KEY1==0 || KEY2==0 || KEY3==0 || KEY4==0))  // key1 ==0 为按下, 为什么用 || 或运算符 只有有一个为真,就是那个按键按下了

#include "reg52.h"

// 重新命名类型
typedef unsigned char u8;
typedef unsigned int u16;

// 定义 按键的 管教
sbit KEY1 = P3^1;
sbit KEY2 = P3^0;
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;

// 定义LED灯 管教
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;


// 使用宏定义独立按键按下的键值
#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0
// 延时函数
void delay_times(u16 times)
{
	while(times--);
}

// 按键函数
u8 key_scan(u8 mode)
{
	static u8 key =1;  // 定义一个不被改变的u8 类型的 变量 key 赋值为1 
	if(mode)key=1;	   // 连续扫描按键,这里给 是单词扫描为0 ,多次扫描为1
	if(key=1 && (KEY1==0 || KEY2==0 || KEY3==0 || KEY4==0))  // key1 ==0 为按下, 为什么用 || 或运算符 只有有一个为真,就是那个按键按下了
	{
	 	delay_times(1000);  // 消抖  1000us = 10 ms
		key =0;
		if(KEY1 == 0)
		{
			return KEY1_PRESS; 
		}
		else if(KEY2 == 0)
		{
			return KEY2_PRESS;
		}
		else if(KEY3 == 0)
		{
			return KEY3_PRESS;
		}
		else if(KEY4 == 0)
		{
			return KEY4_PRESS;
		}
	}
	else if(KEY1 ==1 && KEY2 ==1 && KEY3 == 1 && KEY4 ==1)	 // 这里是判断 按键没有被按下,为什么用 && 与运算  只要条件都为真,那就都为真
	{
		key =1;
	}
	return KEY_UNPRESS; 
}

// 主函数
void main()
{
	u8 key=0;
	while(1)
	{
		key=key_scan(1);	  // key_scan 有返回值需要被接收   
		if(key==KEY1_PRESS)
			LED1=~LED1;		  // LED1灯 取反 发光
		else if(key==KEY2_PRESS)
			LED2=~LED2;
		else if(key==KEY3_PRESS)
			LED3=~LED3;
		else if(key==KEY4_PRESS)
			LED4=~LED4;	
	}
}

4、实现效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/964865.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot2的后台业务管理系统

概述 SpringBoot-Plus 是一个适合大系统拆分成小系统的架构,java快速开发平台,或者是一个微服务系统。其中加入了Thymeleaf数据模板语言代替了之前的JSP页面方式。页面展示采用Layui前端框架,包含了用户管理,角色管理&#xff0c…

获取Linux内核源码

在嵌入式平台上做Linux开发的时候,我们用的kernel都是芯片厂家移植到自家平台上的,但是最初的原生Linux内核的源码是从哪里来的呢?下面我们介绍一下怎么获取原生的Linux源码。 从Linux社区获取内核kernel源码 Linux社区的官方网站是 https:…

【Day-26慢就是快】代码随想录-二叉树-对阵二叉树

给定一个二叉树,检查它是否是镜像对称的。 —————————————————————————————————————————— 分析: 需要比较的是根节点的左右子树,且是两个子树的里侧和外侧的元素是否相等。 根据后序遍历算法&…

Modbus通信协议

Modbus通信协议 一、概述 Modbus通信协议是一种工业现场总线协议标准,常用的Modbus协议有以下三种类型:Modbus TCP、Modbus RTU、Modbus ASCll。 Modbus通信协议解决了通过串行线路在电子设备之间发送信息的问题。该协议在遵循该协议的体系结构中实现主…

网络分层的真实含义

复杂的程序都要分层,这是程序设计的要求。比如,复杂的电商还会分数据库层、缓存层、Compose 层、Controller 层和接入层,每一层专注做本层的事情。 当一个网络包从一个网口经过的时候,你看到了,首先先看看要不要请进来…

如何进行微服务测试?一文4个知识点带入门微服务测试!

关注留言点赞,带你了解最流行的软件开发知识与最新科技行业趋势。 本文将讨论微服务测试的重要性、挑战和最佳实践。 微服务架构是一种越来越流行的构建复杂分布式系统的方法。在此体系结构中,大型应用程序被分成较小的、独立的服务,这些服务…

uniapp 实现滑动元素删除效果

官网地址:uni-app官网 (dcloud.net.cn) 最终效果如下图: 滑动删除需要用到 uni-ui 的 uni-swipe-action 组件和 uni-swipe-action-item 属性名类型可选值默认值是否必填说明left-optionsArray/Object--否左侧选项内容及样式right-optionsArray/Object--…

算法通关村第10关【黄金】| 归并排序

归并排序(Merge Sort)是一种常见的基于比较的排序算法,它的主要思想是分而治之(Divide and Conquer)。它的核心思想是将一个大的问题分解为小的子问题,解决子问题,然后将它们合并(me…

【论文阅读】Pay Attention to MLPs

作者:Google Research, Brain Team 泛读:只关注其中cv的论述 提出了一个简单的网络架构,gMLP,基于门控的MLPs,并表明它可以像Transformers一样在关键语言和视觉应用中发挥作用 提出了一个基于MLP的没有self-attentio…

一篇文章搞定《实战中的设计模式之Android版》

一篇文章搞定《实战中的设计模式之Android版》 前言单例设计模式模式选用说明场景复现: 构建者设计模式模式选用说明场景复现 工厂设计模式模式选用说明场景复现 策略设计模式模式选用说明场景复现 装饰者设计模式模式选用说明场景复现 适配器设计模式模式选用说明场…

C++--动态规划其他问题

1.一和零 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0…

如何使用Cygwin编译最新版的Redis源码,生成适用于Windows的Redis

文章目录 一、准备Cygwin环境二、下载Redis源码三、编译redis-7.2.01. 执行make命令2. 重新执行make命令3. 再次执行make命令4. 将编译后的可执行文件及依赖放到同一个文件夹5. 测试编译生成的可执行程序 四、换其他redis版本重新编译1. 编译redis-7.0.122. 编译redis-6.2.133.…

算法:分治思想处理归并递归问题

文章目录 算法原理实现思路典型例题排序数组数组中的逆序对计算右侧小于当前元素的个数 总结 算法原理 利用归并思想进行分治也是很重要的一种思路,在解决逆序对的问题上有很大的需求空间 于是首先归并排序是首先的,归并排序要能写出来: c…

还在苦恼如何开发一个Chrome插件吗?十分钟带你实现一个实用小插件

你是否曾考虑过创建自己的 Chrome 插件,但又挠头毫无思路?那么在接下来的几分钟里,我不仅会介绍 Chrome 浏览器扩展的基本知识,还会指导你通过五个简单的步骤来制作自己的扩展。 知道怎么做吗?让我们一探究竟&#xff…

探索在云原生环境中构建的大数据驱动的智能应用程序的成功案例,并分析它们的关键要素。

文章目录 1. Netflix - 个性化推荐引擎2. Uber - 实时数据分析和决策支持3. Airbnb - 价格预测和优化5. Google - 自然语言处理和搜索优化 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专…

EG1164大功率同步整流升压模块开源,最高效率97%

EG1164大功率同步整流Boost升压电源模块,最高效率97%,输入电压8~50V,输出电压8~60V可调,最大功率300瓦以上,开关频率219kHz。 白嫖了张嘉立创的彩色丝印券就随便画了个板试试,第一次打彩色丝印。 因为我测…

word导出为HTML格式教程,同时也导出图片

在写文档教程时,有时需要借鉴人家的专业文档内容,一般都是word格式文档。word直接复制里面的内容,帐帖到网站编辑器会有很多问题,需要二次清楚下格式才行,而且图片是没办法直接复制到编辑器内的。所以最方便的办法是将…

ARM编程模型-指令流水线

流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一。 1. 3级流水线 到ARM7为止的ARM处理器使用简单的3级流水线,它包括下列流水线级。 (1&#xff0…

如何中mac上安装多版本python并配置PATH

摘要 mac 默认安装的python是 python3,但是如果我们需要其他python版本时,该怎么办呢? 例如:需要python2 版本,如果使用homebrew安装会提示没有python2。同时使用python --version 会发现commond not found。 所以本…

linux安装minio以及springboot整合使用

文章目录 1.linux安装minio2.springboot整合minio使用 1.linux安装minio 1.新建文件夹 mkdir /home/minio # 数据文件夹 mkdir /home/minio/data # 创建日志文件夹 mkdir /home/minio/log2.进入文件夹 cd /home/minio3.下载minio,链接可从官网获取 wget https://…