单片机之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 0001delay(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();}
}	

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

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

相关文章

jdbc连SQL server,显示1433端口连接失败解决方法

Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“connect timed out。请验证连接属性。确保 SQL Server 的实例正在主机上运行&#xff0c;且在此端口接受 TCP/IP 连接…

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;涵…

ChatGPT 与 OpenAI 的现代生成式 AI(下)

原文&#xff1a;Modern Generative AI with ChatGPT and OpenAI Models 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 七、通过 ChatGPT 掌握营销技巧 在本章中&#xff0c;我们将重点介绍营销人员如何利用 ChatGPT&#xff0c;在这一领域中查看 ChatGPT 的主要用例…

VBA字典与数组第十三讲:数组与单一数据间的运算规则

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

npm install node-sass报错

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

ArcGIS 10.8中文版详细安装教程(附安装包)

ArcGIS 10.8中文版详细安装教程&#xff08;附安装包&#xff09; 关键词&#xff1a;ArcGIS 10.8中文版安装 1.概述 ArcGIS Desktop 10.8中文版是由ESRI公司开发的一款专业的地理信息系统&#xff0c;一套完整的桌面GIS软件套件&#xff0c;它包含ArcMap、ArcCatalog、ArcG…

提高空调压缩机能效的通用方法

压缩机的能效提高主要依靠技术改进而不是大幅度增加材料的消耗&#xff0c;这也是技术经济性最好的节能手段。 1、改进电机效率&#xff0c;电机效率的提高意味着压缩机电效率的提高和压缩机总体效率的提高&#xff1b; 1.1、降低定子铜耗 降低定子绕组中电流通过所产生的铜耗…

obs直播推流 + ffmpeg参数

OBS 启动参数设为 --startstreaming &#xff0c; 可以让它启动后自动开始直播 对应ffmpeg参数&#xff1a; echo off :loop ffmpeg -re -i a.mp4 -r 24 -c:v libx264 -preset ultrafast -profile:v baseline -g 24 -keyint_min 24 -x264-params nal-hrdcbr -b:v 2500k -minr…

挑战传统编程范式:Java函数式编程的魅力

1.概述 1.1概念 函数式编程是一种编程范式&#xff0c;即一切都是数学函数。在Java面向对象编程中&#xff0c;程序是一系列相互作用&#xff08;方法&#xff09;的对象&#xff0c;而在函数式编程中&#xff0c;程序会是一个无状态的函数组合序列。 1.2 优点 大数量下处理…

Emacs之解除comment-region绑定C-c C-c快捷键(一百三十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Gitee上传私有仓库

个人记录 Gitee创建账号 以KS进销存系统为例&#xff0c;下载到本地电脑解压。 新建私有仓库 仓库名称&#xff1a;ks-vue3&#xff0c;选择‘私有’ 本地配置 下载安装git配置git 第一次配置可以在本地目录右键【Open Git Bash here】输入【Git 全局设置】再输入【创…

【JavaScript】函数 ⑦ ( 函数定义方法 | 命名函数 | 函数表达式 )

文章目录 一、函数定义方法1、命名函数2、函数表达式3、函数表达式示例 一、函数定义方法 1、命名函数 定义函数的标准方式 就是 命名函数 , 也就是之前讲过的 声明函数 ; 函数 声明后 , 才能被调用 ; 声明函数的语法如下 : function functionName(parameters) { // 函数体 …