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

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 ,多次扫描为1if(key=1 && (KEY1==0 || KEY2==0 || KEY3==0 || KEY4==0))  // key1 ==0 为按下, 为什么用 || 或运算符 只有有一个为真,就是那个按键按下了{delay_times(1000);  // 消抖  1000us = 10 mskey =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.mzph.cn/news/64990.shtml

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

相关文章

bazel相关资料来源

bazel官方中文文档 bazel官方中文文档网址2 Bazel学习笔记 如何评价 Google 开源的 Bazel ? Bazel使用了解 编译构建工具-bazel 如何挖掘 Bazel 的极致性能 如何挖掘 Bazel 的极致性能_其它网站 Bazel入门(4. Remote Cache) Google Open Source Live "B…

【运维】hadoop 集群安装(三)hdfs、yarn集群配置、nodemanager健康管理讲解

文章目录 一. 配置说明1. hadoop各进程环境配置2. hadoop各进程配置2.1. etc/hadoop/core-site.xml2.2. etc/hadoop/hdfs-site.xml2.2.1. NameNode2.2.2. datanode 2.3. etc/hadoop/yarn-site.xml2.3.1. ResourceManager and NodeManager2.3.2. ResourceManager2.3.3. NodeMana…

pycharm 打开Terminal时报错activate.ps1,因为在此系统上禁止运行脚本,并因此无法进入虚拟环境

pycharm 打开Terminal时报错activate.ps1,因为在此系统上禁止运行脚本,并因此无法进入虚拟环境 如下图所示: 网上说可以set_restrictFalse什么的,虽然也可但可能会降低电脑安全性,可以将下面的终端改为cmd.exe即可

使用candump+grep查看CAN报文

在Linux系统中观察看CAN报文,我们一般使用candump,但是有时候会发现总线上CAN报文太多,例如开启了好几个PDO,这就导致想看的报文被夹杂到报文的海洋里,然后再去找,非常麻烦。 candump也提供了只观察某个报…

ImageSharp.Web实战:轻松搭建高效图片服务

很多情况下,在开发如PC、H5、小程序等综合平台的时候,图片的展示是个比较头疼的问题。尤其是有会员功能,会员可以上传图片的平台,更是一件麻烦事。 平台展示图片的地方,尺寸是定义好的。但用户不配合,上传的…

uni-app:监听数据变化(watch监听、@input事件)

方法一&#xff1a;文本框监听,使用input事件 <template><view><input type"text" v-model"wip_entity_name" input"handleInputChange" /></view> </template><script> export default {data() {return {…

开发总结:webpack

webpack官网webpack | webpack 中文文档 | webpack 中文网 一、什么是webpack webpack 可以看做是模块打包机&#xff0c;它所做的事情是&#xff1a;分析你的项目结构&#xff0c;找到JavaScript 模块以及其它的一些浏览器不能直接运行的拓展语言&#xff08;Scss&#xff0…

python tcp server client示例代码

功能&#xff1a; 实现基本的tcp server端、client端&#xff0c;并引入threading, 保证两端任意链接、断链接&#xff0c;保证两端的稳定运行 IP说明&#xff1a; server不输入IP&#xff0c;默认为本机的IP&#xff0c;client需要输入要链接的server端的IP 端口说明&#x…

Mysql /etc/my.cnf参数详解(二)

#buffer相关 #buffer pool根据实际内存大小调整,标准为物理内存的50% innodb_buffer_pool_size15996M //默认值128M&#xff0c;innodb_buffer_pool_size | 134217728 key_buffer_size 33554432 #根据物理内存大小设置 确保每个instance内的内存2G左右 <5000 1,>5000 &…

Ubuntu无法加载exfat的USB存储设备

当接入设备USB存储设备提示&#xff1a; 不能挂在63GB 卷 Error mounting /dev/sdb1 at /media/ubuntu/83C9-26F4: Command-line mount -t "exfat" -o "uhelperudisks2,nodev,nosuid,uid1000,gid1000,iocharsetutf8,namecase0,errorsremount-ro,umask0077"…

Segment Routing原理

以上内容均属原创&#xff0c;如有不详或错误&#xff0c;敬请指出。本文作者&#xff1a; 坏坏 本文链接&#xff1a; http://t.csdn.cn/2fUE5 版权声明&#xff1a; 本博客所有文章除特别声明外&#xff0c;如需转载&#xff0c;请联系作者注明出处并附带本文链接&#xf…

处理时延降低24倍,联通云粒数据引擎优化实践

*作者&#xff1a;郑扬勇&#xff0c;云粒星河数据中台产品负责人 云粒智慧科技有限公司成立于 2018 年 6 月&#xff0c;是中国联通集团混改以来成立的首家合资公司&#xff0c;是中国智慧城市数智化建设者。一直以来&#xff0c;云粒智慧以数字化、智能化、集约化产品为核心&…

CS144(2023 Spring)Lab 0:networking warmup(环境搭建 webget bytestream)

文章目录 前言其他笔记相关链接 1. Set up GNU/Linux on your computer2. Networking by hand3. Writing a network program using an OS stream socket3.1 Linux配置3.2 C规范3.3 Writing webget3.3.1 实现3.3.2 测试 4. An in-memory reliable byte stream4.1 思路分析4.2 代…

HTTPS安全通信和SSL Pinning

随着互联网的迅速发展&#xff0c;网络通信安全问题日益凸显。在这一背景下&#xff0c;HTTPS作为一种加密通信协议得到了广泛应用&#xff0c;以保障用户的数据隐私和信息安全。本文将介绍HTTPS的基本原理、发展历程&#xff0c;以及与之相关的中间人攻击和防护方法。 1. HTT…

Lesson4-1:OpenCV图像特征提取与描述---角点特征

学习目标 理解图像的特征知道图像的角点 1 图像的特征 大多数人都玩过拼图游戏。首先拿到完整图像的碎片&#xff0c;然后把这些碎片以正确的方式排列起来从而重建这幅图像。如果把拼图游戏的原理写成计算机程序&#xff0c;那计算机就也会玩拼图游戏了。 在拼图时&#xff…

linux定时删除服务器日志

不说废话。直接进入操作流程 linux 定时任务是用的crontab 查看 crontab是否启动 service crond statusdead 死的 启动crontab service crond start 再次查看状态 running 运转的 查看 crontab cat /etc/crontab 查看 crontab任务 crontab -l 编辑 crontab任务 crontab …

进程、操作系统

文章目录 一、冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09;1. 概述2. CPU 二、操作系统&#xff08;Operating System&#xff09;三、进程(process)/任务(task) 一、冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09; 1. 概述 分类 CPU 中央处…

气候变化下的DNDC模拟

DNDC&#xff08;Denitrification-Decomposition&#xff0c;反硝化-分解模型&#xff09;是目前国际上最为成功的模拟生物地球化学循环的模型之一&#xff0c;自开发以来&#xff0c;经过不断完善和改进&#xff0c;从模拟简单的农田生态系统发展成为可以模拟几乎所有陆地生态…

记一次Zip Slip任意文件写漏洞 以及一些参考文章

记一次Zip Slip任意文件写漏洞以及参考文章们 记一次Zip Slip任意文件写漏洞漏洞复现漏洞原理分析扩展延申 参考文章一&#xff1a;Java之解压流&#xff08;ZipInputStream&#xff09;参考文章二&#xff1a;Zip Slip VulnerabilityExploitable Application FlowAre you Vuln…

简易版剪辑视频程序(python-VideoFileClip)

很多剪辑软件要收费&#xff0c;自己写了一个。 from moviepy.video.io.VideoFileClip import VideoFileClipdef trim_video(input_path, output_path, trim_duration):video_clip VideoFileClip(input_path)trimmed_clip video_clip.subclip(0, video_clip.duration - trim…