单片机之LED与按键

目录

LED

LED灯亮的原理图

LED灯光闪烁

电路设计

keil文件

LED流水灯的实现

keil文件

单片机之按键

键盘的结构

按键消抖

软件消抖

硬件消抖

键盘的分类

独立式键盘

行列式键盘

键盘的识别

独立按键案例

电路图

keil文件

行列式键盘案例

电路图

对应按键判断

keil文件

LED

前言:中文名为发光二极管,用途为:照明、广告灯、指引灯、屏幕等。

注意:以上分别为LED灯的元器件符号,元器件实物和区分元器件正负极的方法。

LED灯亮的原理图

注意:

  • 上面的接法为共阳极接法,左边的接口分别连到单片机的引脚上,若单片机给该引脚低电平,那么就可以形成回路,进而导致LED灯亮。
  • 单片机控制引脚的方式为寄存器,寄存器通常每8位为一组;既可以8位一起处理,也可以按位方式使用(CPU通过控制寄存器来控制我们的硬件电路,硬件电路来执行我们想要完成的功能)
  • 寄存器对应的脚位顺序:P1=01011101——对应脚位顺序:P1.7,P1.6,P1.5,P1.4,P1.3,P1.2,P1.1,P1.0

LED灯光闪烁

电路设计

keil文件

#include "reg51.h"
#共阳极接法
#P2的0号脚位
sbit LED0=P2^0;
#大概nms的延时
void delay(unsigned int n){
	unsigned int i=0,j=0;
	for(i=0;i<n;i++){
		for(j=0;j<120;j++);
	}
}
void main()
{
    #我们要让51单片机一直运行
	while(1){
		#共阳极接法,那么单片机接口处给低电平,灯方可亮
		LED0=0;
		delay(5);
		LED0=1;
		delay(5);
	}
}

LED流水灯的实现

电路设计:和上面LED灯泡闪烁的电路一样

keil文件

#include "reg51.h"
#共阳极接法
sbit LED0=P2^0;
#大概nms的延时
void delay(unsigned int n){
	unsigned int i=0,j=0;
	for(i=0;i<n;i++){
		for(j=0;j<120;j++);
	}
}
#流水灯的实现
void led(){
	int i=0;
	for(i=0;i<8;i++){
		P2=~(0x01<<i);//0000 0001
		delay(100);
	}
}
void main()
{
	while(1){
	led();
	}
}

单片机之按键

键盘的结构

按键消抖

前言:对于机械开关,当机械触点断开,闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随着一连串抖动

软件消抖

注意:这个抖动会有个抖动时间,这个时间大概在10ms到20ms之间;我们可以依据这个原理错开这个时间来实现软件消抖。 

硬件消抖

理解:本质上还是利用了延时进行消抖。 

键盘的分类

独立式键盘

特点:

  • 每个独力健占用一根并口线,键位多时占用的并口线多
  • 用于键位较少的情况
  • 处理简单,直接判并口线

行列式键盘

特点:

  • 键位分布在行列交叉点上
  • 占用并口较少,键位越多越明显
键盘的识别

两步:第一步首先检测键盘上是否有键按下;第二部识别是哪一个键按下

  • 检测键盘上是否有键按下的处理方法——全扫描
  • 识别键盘中的哪一个键按下的方法——逐行逐列扫描

独立按键案例

需求:通过独立式按键控制数码管上的显示(每按下一次按键,数码管中显示的值加一)

电路图

keil文件

#include "reg51.h"
sbit key0=P1^0;
unsigned int num=0,flag=0;
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void key(){
	#第一次按下
	if(key0==0&flag==0){
		flag=1;
	}
	#已经按下了,但是按键抬起
	if(flag==1&key0==1){
		num++;
		flag=0;
		if(num==10){
		num=0;
		}
	}
}
void seg(){
	P2=s[num];
}
void main()
{
	while(1){
		key();
		seg();
	}
}

行列式键盘案例

需求:按第一个键盘,按键亮1;按第二个键盘,按键亮2;

电路图

对应按键判断

原理:按键按下时,高电平会被低电平拉至低电平。

编码H3H2H1H0L3L2L1L0
初值11110000

判断被按下按键的行数:检测第一个按键被按下,L0将H0拉至低电平:1110 0000

编码H3H2H1H0L3L2L1L0
初值00001111

判断被按下案件的列数:检测第一个按键被按下,L0被H0拉至低电平:0000 1110

总结:

  • 由此观之:行数:0xe0;列数:0x0e。由此观之第一个按键的行列标识为——行数+列数=0xe0+0x0e=0xee。
  • 单片机IO口是一种弱上拉,强下拉的工作模式(输出的1驱动能力是有限的,而输出0驱动能力是比较强的)

keil文件

#include "reg51.h"
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char num=99;
void delay(unsigned int n){
	unsigned int i=0,j=0;
	for(i=0;i<n;i++){
		for(j=0;j<120;j++);
	}
}
void key_scan()
{
	unsigned char temp=0,temp0=0,temp1=0;
	P1=0xf0; //为P1置初值,判断被按下按键的行数
	//检测按键是否被按下
	if(P1!=0xf0){
		delay(20); //软件消抖
		temp0=P1; //取出P1的值
		P1=0x0f; //为P1置初值,判断被按下按键的列数
		if(P1!=0x0f){
		temp1=P1;
		}
	}
	//取得被按下按键的标识
	temp=temp0+temp1;
	//被按下对应的按键执行对应的操作
	if(temp==0xee){
		num=0;
	}
	if(temp==0xed){
		num=1;
	}
}
void display(){
	P2=s[num];
}
void main()
{
	while(1){
	key_scan();
	display();
	}
}	

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯:七步诗 ← bfs

【题目来源】https://www.lanqiao.cn/problems/3447/learning/【题目描述】 煮豆燃豆苴&#xff0c;豆在釜中泣。本是同根生&#xff0c;相煎何太急?---曹植 所以&#xff0c;这道题目关乎豆子! 话说赤壁之战结束后&#xff0c;曹操的船舰被刘备烧了&#xff0c;引领军队从华容…

PAC性能开销权衡及优化措施

PAC性能开销&#xff1f;如何进行优化&#xff1f;本博客探讨这些问题。

11.python的字典dict(下) 遍历字典,结构优化

11.python的字典dict(下) 遍历所有的键值对 items()方法是字典的一个内置方法&#xff0c;用于返回字典中所有键值对的视图&#xff08;view&#xff09;。它返回一个可迭代的对象&#xff0c;每个元素都是一个包含键和对应值的元组。 下面用一个例子来说明items()方法的用法…

蓝桥杯单片机速成8-NE555频率测量

一、原理图 NOTE&#xff1a;使用NE555测量频率之前&#xff0c;需要将J3-15(SIGNAL)与J3-16(P34短接) 在使用矩阵键盘的时候也记得把跳冒拔下&#xff0c;因为有公共引脚P34 又是因为他的输出引脚是P34&#xff0c;所以只能用定时器0来作为计数器进行频率测量了 二、代码实现 …

Swing中的FlowLayout/WrapLayout在打横排列时候如何做到置顶对齐

前言 最近在开发swing客户端时候碰到一个棘手的问题&#xff1a; Swing中的FlowLayout/WrapLayout在打横排列时候如何做到置顶对齐如果是vue或者react&#xff0c;一搜百度什么都出来了&#xff0c;swing的话&#xff0c;嗯。。。资料有点少而且大部分是stack overflow上面的…

NASA数据集——1980 年至 2020 年北美 3km分辨率气温(摄氏度)、相对湿度(%)、风速(米/秒)、风向(真北偏角)、总降水量(雨+雪)等数据集

Daily SnowModel Outputs Covering the ABoVE Core Domain, 3-km Resolution, 1980-2020 简介 文件修订日期&#xff1a;2023-01-27 数据集版本: 1 摘要 该数据集提供了 1980 年 9 月 1 日至 2020 年 8 月 31 日期间 3 千米网格上的 SnowModel 每日模拟输出&#xff0c;涵…

AFCI 应用笔记二之数据采集

1. 简介 基于监督学习的神经网络算法需要大量数据作为输入&#xff0c;模型完全由数据驱动&#xff0c;其数据质量是算法有效的必要条件&#xff0c;所以如何高效的采集到数据&#xff0c;以及正确的标注或分析是极其重要的&#xff0c;如果第一步有问题&#xff0c;后续的所有…

反转链表 - LeetCode 热题 23

大家好&#xff01;我是曾续缘&#x1f497; 今天是《LeetCode 热题 100》系列 发车第 23 天 链表第 2 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#…

STM32串口 DMA 接收不定长数据的一种方法

1.前言 使用串口接收不定长数据时&#xff0c;可以有多种方法&#xff0c;比如最常见的有额外使能一个定时器&#xff0c;在超过定时范围未收到后续的字节时&#xff0c;认为此帧结束&#xff1b;或者利用IDLE中断&#xff0c;当数据空闲时&#xff0c;自动产生中断&#xff1…

一文了解:工业互联网的技术构成,代表性平台。

一、什么是工业互联网 工业互联网是指将传统工业领域与互联网技术相结合&#xff0c;实现设备、系统和人员之间的信息传递和协同工作&#xff0c;以提高生产效率、降低成本和改善产品质量。 二、工业互联网构成 它的构成主要包括以下几个方面&#xff1a; 传感器和物联网设备…

【Linux】网络基础常识{OSI七层模型/ TCP/IP / 端口号 /各种协议}

文章目录 1.网络常识1.0DHCP协议1. 1IP地址/MAC地址/ARP协议是什么&#xff1f;IP/MACARP&#xff1a;IP ⇒ MAC 1.2手机连接wifi的原理 SSID与BSSID手机连接wifiSSID与BSSID 1.3手机如何通过“数据/流量”上网&#xff1f;1.4电脑连接wifi的原理&#xff1f;电脑通过热点上网…

npm install node-sass报错

前言 在使用 node-sass 时&#xff0c;你可能会遇到安装 node-sass 时出现各种错误的情况。在本文中&#xff0c;我们将探讨一些常见的 node-sass 安装错误&#xff0c;以及如何解决它们。 无论你是初学者还是有经验的开发者&#xff0c;本文都将为你提供有用的信息和技巧&…

基于DSP28335的直流伺服电机转速控制

目录 一、设计任务 1.1、任务 1.2系统参数 二、总体设计思路 2.1硬件结构 三、转速或位置测量的计算方法 3.1转速测量方法 3.2具体参数计算 控制算法的选择 4.1PID算法&#xff08;位置式与增量式&#xff09; 4.1.1位置式PID算法 4.1.2增量式PID算法 4.2专家PID算法 五、系统工…

一站式知识库服务平台真的有那么好用吗?看完你就懂了

在快速发展的信息化社会&#xff0c;我们经常会听到“知识就是力量”的这句话&#xff0c;而一个一站式的知识库服务平台就是这样一把“开启力量之门”的钥匙。那么&#xff0c;这把钥匙真的有那么好用吗&#xff1f;让我们一起探讨一下。 首先&#xff0c;“一站式”可能已经解…

计算机服务器中了helper勒索病毒怎么办,helper勒索病毒解密流程步骤

随着网络技术在企业中的不断应用&#xff0c;越来越多的企业离不开网络&#xff0c;网络为企业提供了极大便利&#xff0c;大大提升了生产运营效率&#xff0c;由此而产生的网络数据安全问题也成为了企业关心的主要话题。近期&#xff0c;云天数据恢复中心接到多家企业的求助&a…

Github 2024-04-05Java开源项目日报Top9

根据Github Trendings的统计,今日(2024-04-05统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目9TypeScript项目1OpenAPI 生成器:基于规范自动生成API工具 创建周期:2155 天开发语言:Java协议类型:Apache License 2.0Star数量:1…

Kafka参数介绍

官网参数介绍:Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/documentation/#configuration

第14章 数据结构与集合源码

一 数据结构剖析 我们举一个形象的例子来理解数据结构的作用&#xff1a; 战场&#xff1a;程序运行所需的软件、硬件环境 战术和策略&#xff1a;数据结构 敌人&#xff1a;项目或模块的功能需求 指挥官&#xff1a;编写程序的程序员 士兵和装备&#xff1a;一行一行的代码 …

Docker 容器编排技术解析与实践

探索了容器编排技术的核心概念、工具和高级应用&#xff0c;包括 Docker Compose、Kubernetes 等主要平台及其高级功能如网络和存储管理、监控、安全等。此外&#xff0c;文章还探讨了这些技术在实际应用中的案例&#xff0c;提供了对未来趋势的洞见。 一、容器编排介绍 容器编…

各种滤波算法

各种滤波算法 1. 半径离群点去除(Radius Outlier Removal&#xff0c;半径滤波)2. 统计离群点剔除(Statistical Outlier Removal, 统计滤波)3. 体素网格将采样(voxel grid downsampling)4. 最远点采样(Farthest Point Sampling, FPS)5. 正态空间将采样(Normal Space Sampling, …