c51单片机学习笔记-独立按键实验

2023-05-16

目的:通过开发板上的独立按键 K1 控制 D1 指示灯亮灭

编译软件:keil5

过程:

(1)定义独立按键控制脚

sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;

(2)定义 LED1 控制脚

sbit LED1=P2^0;

(3)使用宏定义独立按键按下的键值

#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0

(4)延时函数

void delay_10us(u16 ten_us)
{
while(ten_us--);
}

(5)key_scan函数

函数功能 : 检测独立按键是否按下,按下则返回对应键值

输 入 : mode=0:单次扫描按键 mode=1:连续扫描按键

输 出 : KEY1_PRESS:K1 按下

KEY2_PRESS:K2 按下

           KEY3_PRESS:K3 按下

           KEY4_PRESS:K4 按下

KEY_UNPRESS:未有按键按下

u8 key_scan(u8 mode)
{
	static u8 key=1;
	
	if(mode)key=1;
	if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))
	{
		delay_10us(1000);
		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;
	}
}

  key_scan 函数带一个形参 mode,该参数用来设定是否连续扫描按键,如果 mode 为 0,只能操作一次按键,只有当按键松开后才能触发下次的扫描,这样 做的好处是可以防止按下一次出现多次触发的情况。如果 mode 为 1,函数是支 持连续扫描的,即使按键未松开,在函数内部有 if(mode==1)这条判断语句,因 此 key 始终是等于 1 的,所以可以连续扫描按键,当按下某个按键,会一直返 回这 个按键的键值,这样做的好处是可以很方便实现连按操作。函数内的 delay_10us(1000)即为软件消抖处理,通常延时 10ms 即可。

  key_scan 函数还带有一个返回值,如果未有按键按下,返回值即为 KEY_UNPRESS,否则返回值即为对应按键的键值,如 KEY1_PRESS、KEY2_PRESS、 KEY3_PRESS、 KEY4_PRESS,这都是程序开头定义好的宏,方便大家理解和使用。 函数内定义了一个 static 变量 key,相当于全局变量,所以该函数不是一个可 重入函数。还有一点要注意的就是该函数按键的扫描是有优先级的,因为函数内 用了 if...else if...else 格式,所以最先扫描处理的按键是 KEY1,其次是 KEY2,然后是 KEY3,最后是 KEY4。如果需要将其优先级设置一样,那么可以全部用 if 语句。

  main 函数中主要就是调用 key_scan 函数用于检测按键,此时传入的 mode 值为 0,表示单次扫描按键,然后将扫描按键的值保存在变量 key 中,最后通过 if 判断语句控制 LED1 状态。

(6)主函数

void main()
{	
	u8 key=0;
	
	
	while(1)
	{
	   	key=key_scan(0);
		  if(key==KEY1_PRESS)
			LED1=!LED1;
	}		

(7)编译代码得到hex文件烧录

(8) 连接P31-K1;P20-D1观察实验现象

当按下 K1 键,D1 指 示灯亮,再按下 K1 键,D1 指示灯灭,如此循环。

c51单片机学习笔记-独立按键实验现象

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c51单片机学习笔记-独立按键实验 的相关文章

  • K8S集群监控 Prometheus

    Prometheus xff08 普罗米修斯 xff09 是一个最初在SoundCloud上构建的监控系统 xff0c 自2012年成为社区开源项目 xff0c 拥有非常活跃的开发人员和用户社区 xff0c 为强调开源及独立维护 xff0c
  • kvm虚拟化

    https access redhat com documentation zh cn red hat enterprise linux 7 html virtualization getting started guide index h
  • git_gitlab

    本文作者 xff1a wuXing QQ 1226032602 E mail 1226032602 64 qq com git https git scm com book zh v2 Git诞生历史 我想大家还记得Linus torval
  • Jenkins-slave

    Jenkins插件 chinese Role based Authorization Strategy 用户权限 Credentials Binding 凭证管理 span class token function git span Dep
  • kubeadm-config说明

    https www cnblogs com breezey p 11770780 html 配置kubeadm config yaml 通过如下指令创建默认的kubeadm config yaml文件 xff1a kubeadm confi
  • c51单片机学习笔记-LED流水灯实验

    目的 xff1a 实现 LED 流水灯 xff0c 只需循环让 D1 D8 指示灯逐个点亮 方法 xff1a 点亮 D1 且把 D2 D8 熄灭 xff0c 延时一段时间后再点亮 D2 且把 D1 D3 D8 熄灭 xff0c 延时一段时间
  • 获得屏幕大小

    API 要取得屏幕大小 xff0c 可以用下面几个函数 xff1a int cx 61 GetSystemMetrics SM CXFULLSCREEN int cy 61 GetSystemMetrics SM CYFULLSCREEN
  • openstack

    云计算架构 openstack整体架构 openstack身份服务 Keystone 管理层次结构 Keystone三大组件 服务 xff08 Server xff09 身份 xff08 Identity xff09 服务 资源 xff08
  • streamlit

    安装streamlit模块 python3 V Python span class token number 3 6 span 8 pip3 span class token function install span upgrade pi
  • docker命令补全

    参考 https blog csdn net weixin 45444133 article details 116950552 系统补全 span class token comment centos span yum y span cl
  • docker监控-Weave-Scope

    Weave Scope服务是一个用来监控docker容器 k8s等 xff08 包括宿主机 xff09 的资源使用状况的 安装 方法1 span class token function wget span https github com
  • 结构化思维读书整理笔记

  • js编写学生系统---增删改查

    所有代码需要在consolg中查看 lt DOCTYPE html gt lt html gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt title gt 学生管理系统 lt title
  • mac安装homebrew被墙超时

    一 获取 install 文件 xff0c 把官网给的脚本拿下来 curl fsSL https raw githubusercontent com Homebrew install master install gt gt brew in
  • 块元素、行内元素、行内块元素区别及其作用

    块元素 块级元素独占一行 默认会新起一行 xff0c 如 xff1a div p h1 根据这个特性可以实现盒子水平居中margin 0 auto 原理 块级元素独占一行设置大小后水平方向会剩余空间 设置auto左右会自动分配剩余空间 行内
  • Ubuntu安装Docker 时遇到的一个问题

    Ubuntu安装Docker 详细步骤和结果展示 https docs docker com engine install ubuntu 问题描述 xff1a ubuntu 的包管理是通过 apt get 来做的 xff0c 但是默认的 a
  • win10 能Ping通却无法访问虚拟机Ubuntu 14.04 samba的问题(已解决)

    windows系统版本 xff1a Win10 虚拟机版本 xff1a VMware Workstation 12 Pro Ubuntu版本 xff1a 14 04 在更新windows10补丁之前 xff0c Win10是能访问Ubunt
  • c51单片机学习笔记-LED流水灯库函数实验

    目的 xff1a 实现 LED 流水灯 xff0c 只需循环让 D1 D8 指示灯逐个点亮再从D8 D1逐个点亮 xff0c 循环下去 方法 xff1a 利用移位库函数 xff0c 点亮 D1 且把 D2 D8 熄灭 xff0c 延时一段时
  • 关于STM32F405单片机控制雷达模块lidar_lite_v3程序及说明

    include 34 stm32f4 iic h 34 include 34 lidar lite v3 h 34 include 34 stm32f4 delay h 34 uint8 t WriteBuffer 61 0x55 Read
  • 常用串口调试工具比较(详细)

    目前有许多免费的串口调试工具 xff0c 比较常用的有 xff1a 1 友善串口调试助手 xff08 v2 6 5 xff09 优点 xff1a 1 xff09 使用方便 xff0c 不丢包 xff1b 2 xff09 串口自动识别 xff

随机推荐

  • FreeRTOS 变量名,函数名,宏的命名规则(2)

    前言 内容均来自野火相关书籍 xff0c 写博客是为了方便查看 xff1b 博客内容并不完善 xff0c 慢慢补充 xff1b 函数名 xff1a 包含函数返回值的类型 函数所在的文件名和函数的功能 例 xff1a vTaskPriorit
  • 头文件包含顺序的建议

    使用标准的头文件包含顺序可增强可读性 避免隐藏依赖 xff0c 建议的包含顺序如下 xff1a C或C 43 43 等源文件中按照以下顺序包含 xff0c 建议按照稳定度排序 xff1a c cpp对应的头文件 C C 43 43 标准库的
  • [问题解决方案] ubuntu 14.04 分辨率调整 -- xrandr命令

    问题描述 xff1a 自己在安装ubuntu kylin 14 04 TLS系统成功后 xff0c 在调整分辨率的时候 xff08 系统设置 显示 xff09 发现分辨率的选项只有1024x768以及800x600两个选项 xff0c 而台
  • 1、烧录系统到sd卡,从sd卡启动系统

    烧写系统到sd卡 硬件 xff1a 用的是友善之臂的NanoPC T4工业级开发板 步骤 xff1a 1 准备好一个sd卡 xff08 class10以上高速SDHC卡 xff09 和一个读卡器 大小最好16g以上 xff0c 保证空间充裕
  • 12、Gazebo的安装问题

    一 Gazebo的安装问题 1 安装的官网的网址 xff1a http gazebosim org tutorials cat 61 install amp tut 61 install ubuntu amp ver 61 9 0 2 安装
  • 11、ros依赖包安装问题

    一 问题 在ROS编译过程中经常会遇到找不到ROS包的情况 xff0c 那么一般情况下该如何解决问题呢 xff1f 我们通常用apt来进行安装 xff0c 实际上有时候apt在处理依赖关系上是没有aptitude那么智能的 xff0c 所以
  • 12、TX2(ARM架构)平台换源

    关于换源的教程可参考一下其他博主的两篇文章 ARM架构换源 Ubuntu 国内源介绍 针对本机的换源操作如下 xff1a 进入配置目录 span class token function cd span etc apt 备份sources
  • VirtualBox 每天自动创建快照

    需求很简单 每天自动对虚拟机创建一个快照 避免忘记备份 同时给自己减少一点工作量 主要思路就是通过VBoxManage的命令行操作和windows的任务计划程序来完成定时备份的工作 VBoxManage 使用帮助如下 C Program F
  • c51单片机学习笔记-动态数码管实验(un)

    目的 xff1a 控制动态数码管从左至右显示数字 0 7 编译软件 xff1a keil5 过程 1 xff09 首先将 51 单片机的头文件包含进来 xff0c 然后定义 38 译码器的控制引脚 xff0c 并将共阴数码管 0 F 断码数
  • 在py-faster-rcnn/lib里make时报错: unrecognized command line option ‘-Wdate-time’

    在py faster rcnn lib里make时报错 xff1a c 43 43 pthread shared Wl O1 Wl Bsymbolic functions Wl Bsymbolic functions Wl z relro
  • C/C++ 日常学习总结(第十九篇)多线程详解

    这些讲解多线程文章都是非常好的 xff0c 我这边就归结出一个 lt 多线程详解 gt 出来 xff0c 感谢各位原创作者的辛苦劳动 xff0c 这些收藏起来方便自己消化 1 多线程笔试面试题汇总 解答地址 xff1a 概念问答 2 深入分
  • python3 算法题:七进制加法

    题目 xff1a 要求键盘输入两个七进制 0 6 数 xff0c 以空格分开 xff0c 计算两者之和输出 xff0c 例如 xff1a 输入 xff1a 16 1 输出 xff1a 20 思路 xff1a 这个题目跟十进制加法一样 xff
  • python3 实现麻将胡牌问题

    题目描述 xff1a 清一色是麻将番种之一 xff0c 指由一种花色的序数牌组成的和牌 数字1 9 xff0c 每个数字最多有4张牌 我们不考虑具体花色 xff0c 我们只看数字组合 刻子 xff1a 三张一样的牌 xff1b 如 111
  • python3爬虫简单介绍

    本文是为了防止自己以后忘了 xff0c 小白可以参考 xff0c 大神请绕道 先来扫盲 xff0c 什么是爬虫 xff1a 爬虫就是一系列按照某种规则自动从网上爬取信息的代码或者脚本 本文代码功能 xff1a 从百度百科里面爬取20个和py
  • python3 使用urllib.request.urlopen及re.findall爬取网页图片并保持本地

    本例使用urllib及re正则表达式 xff0c 爬取网页上 xff08 王俊凯百度百科 xff09 所有以jpg结尾的图片 xff0c 并保存本地 import re from urllib span class token punctu
  • python3 爬取网页内容解析并存入MySQL数据库

    爬取网页内容解析并存入MySQL数据库 用到的第三方库 xff1a BeautifulSoup xff1a 解析网页内容 xff0c 建议安装方法 xff1a pip install beautifulsoup4 pymysql xff1a
  • python二维列表按照某列(字符串列)排序;忽略大小写+区分大小写

    python二维列表按照某列 xff08 字符串列 xff09 排序 xff1b 忽略大小写 43 区分大小写 使用list自带的sorted 方法 xff0c data 61 sorted data key 61 lambda x x 1
  • tkinter 出现两个窗口 tk(未响应) 解决方法

    问题 xff1a tkinter界面开发 xff0c 莫名出现一个叫 tk 未响应 的小窗口 xff0c 最后发现是因为自定义了窗口图标导致产生多余窗口 解决方法 xff1a 将设置窗口图标代码放到设置窗口大小代码之后即可 xff08 该方
  • python3适配pykml教程

    pykml是用python2写的 xff0c 由于python3和python2语法及函数名有所不同 xff0c python3使用的时候需要手动修改几个地方 xff0c 如下 xff1a 1 出现 xff1a ModuleNotFound
  • c51单片机学习笔记-独立按键实验

    目的 xff1a 通过开发板上的独立按键 K1 控制 D1 指示灯亮灭 编译软件 xff1a keil5 过程 xff1a xff08 1 xff09 定义独立按键控制脚 sbit KEY1 61 P3 1 sbit KEY2 61 P3