LED和数码管及按键

目录

LED

LED灯亮的原理图

LED灯光闪烁

电路设计

keil文件

LED流水灯的实现

keil文件

数码管

显示的基本原理

LED数码管的显示方式

静态显示方式

动态显示方式

具体案例

数码管静态显示

电路图

keil文件

数码管动态显示

电路图

keil文件

74LS138译码器

译码表

译码器案例

电路图

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();}
}

数码管

LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成的8字型器件

注意:8个LED构成了数码管,数码管的连接方式有共阴极和共阳极连接。

显示的基本原理

LED数码管的显示方式

静态显示方式

特点

  • 公共端直接接地或接电源
  • 每个数码管的段选线与一组IO接口线相连
  • 每个数码管一直在显示

动态显示方式

特点

  • 所有的数码管的段选线与一组IO接口线并联在一起
  • 每个数码管的公共端由一根IO线控制
  • 显示为逐个显示(利用人眼的视觉暂留原理,数码管切换的速度够快就好像多个数码管一起显示)

注意:段码线决定晶体管显示的是什么,位码线决定是哪个晶体管要显示;若想要四个数码管均显示不同的数字那么就需要以很小的时间内不断地切换四个数码管的显示(人眼的视觉暂留)

具体案例

数码管静态显示

需求:共阴极的方式实现0——9的不断循环。

电路图

keil文件
#include "reg51.h"
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void delay(unsigned int n)
{unsigned int i=0,j=0;for(i=0;i<n;i++){for(j=0;j<120;j++);}
}
void seg()
{int i=0;for(i=0;i<10;i++){P2=s[i];delay(500);}
}
void main()
{while(1){seg();}
}

数码管动态显示

需求:在数码管上显示hello这个字符串

电路图

注意:英文字母为段码线,数字为位码线;

keil文件
#include "reg51.h"
unsigned char str[]={0x76,0x79,0x38,0x38,0x3F};
unsigned char wei[]={0x01,0x02,0x04,0x08,0x10};
void delay(unsigned int n){unsigned int i=0,j=0;for(i=0;i<n;i++){for(j=0;j<120;j++);}
}
void seg(){int i=0;for(i=0;i<5;i++){P3=~wei[i];P2=str[i];delay(5);}
}
void main()
{while(1){seg();}
}

74LS138译码器

前言:该译码器可以仅通过3个针脚来决定右面对应针脚的信号(其中一个为0剩下的全是1),进而对数码管的位选断进行选择。

理解:左边的针脚为数字输入端,右边的8个端口为数字输出端;上下两端分别为电源和接地;左下脚3个针脚为使能端(需要把G1接上高电平、G2A和G2B接上低电平)

译码表

  • 000——Y0
  • 001——Y1
  • 010——Y2
  • 011——Y3
  • 100——Y4
  • 101——Y5
  • 110——Y6
  • 111——Y7

注意:译码表输入端三个字母的排序为CBA 

译码器案例

需求:在特定位置显示特定数字。

电路图

keil文件
#include "reg51.h"
sbit P3_0=P3^0;
sbit P3_1=P3^1;
sbit P3_2=P3^2;
#1——9对应的段码
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void show(unsigned char location,unsigned char number){switch(location){case 1:P3_0=0;P3_1=0;P3_2=0;break;case 2:P3_0=1;P3_1=0;P3_2=0;break;case 3:P3_0=0;P3_1=1;P3_2=0;break;case 4:P3_0=1;P3_1=1;P3_2=0;break;case 5:P3_0=0;P3_1=0;P3_2=1;break;case 6:P3_0=1;P3_1=0;P3_2=1;break;case 7:P3_0=0;P3_1=1;P3_2=1;break;case 8:P3_0=1;P3_1=1;P3_2=1;break;}P2=s[number];
}
void main()
{while(1){#展示第三列的数字为8show(3,8);}
}

单片机之按键

键盘的结构

按键消抖

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

软件消抖

注意:这个抖动会有个抖动时间,这个时间大概在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/568714.html

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

相关文章

如何快速进行城市内涝模拟?HTWATER软件

原文链接&#xff1a;如何快速进行城市内涝模拟&#xff1f;HTWATER软件https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599079&idx2&sndc6f3da8b17c5587cf5b7766e7019729&chksmfa820200cdf58b16658983ecfbf2b369bff39813302942d6f7eb7b71428c68da71…

Vue+OpenLayers7入门到实战:OpenLayers图形绘制功能,OpenLayers实现在地图上绘制线段、圆形和多边形

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上实现图形绘制功能,OpenLayers地图实现在地图上绘制线段、圆形和多边形等基本图形。 注意:本章需要用到Element-UI组件,可能需要额外安装依赖,这里跳过不详述,具体…

电脑如何一键修复所有dll缺失,几种修复dll文件丢失的方法

修复所有DLL&#xff08;动态链接库&#xff09;文件缺失的问题通常不可能通过单一的"一键修复"按钮来实现&#xff0c;因为DLL文件缺失可能由各种不同的原因导致&#xff0c;比如应用程序安装不正确、病毒感染、或系统文件损坏等。 使用内置的系统文件检查器&#x…

网络原理(7)——以太网数据帧和DNS协议(数据链路层和应用层)

目录 一、以太网数据帧&#xff08;数据链路层&#xff09; 二、DNS协议(域名解析系统&#xff0c;应用层协议) 一、以太网数据帧&#xff08;数据链路层&#xff09; 以太网横跨了数据链路层和物理层&#xff0c;这里只做简单介绍&#xff0c;因为普通程序员用不到这一块&am…

Rust基本类型

数值类型 整数类型 无符号整数只能取正数和0&#xff0c;有符号整数可以取正数负数和0。isize和usize类型取决于程序运行的计算机CPU类型&#xff0c;若CPU是32位的&#xff0c;则这两个类型是32位的&#xff0c;若CPU是64位的&#xff0c;则它们是64位的。rust整型 默认使用…

基于Spring Boot的云上水果超市的设计与实现

摘 要 伴随着我国社会的发展&#xff0c;人民生活质量日益提高。于是对云上水果超市进行规范而严格是十分有必要的&#xff0c;所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套云上水果超市&#xff0c;帮助商家进行…

酒店管理系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a;https://download.csdn.net/download/qq_50954361/89036287 更多系统资源库…

拓展AI边界:去中心化人工智能的应用场景和主要项目盘点

随着区块链技术的发展和普及&#xff0c;去中心化人工智能&#xff08;AI&#xff09;逐渐成为技术领域的焦点之一。区块链的去中心化特性为AI技术的应用提供了新的可能性&#xff0c;使得数据共享、模型训练和应用部署更加安全、透明和可靠。本文将探索去中心化AI的应用场景&a…

达梦数据库自动备份(全库)+还原(全库) 控制台

一 前提 1.安装达梦数据库DB8(请参照以前文章) 我的数据库安装目录是 /app/dmDB8 2.已创建实例 (请参照上一篇文章) 二 准备测试数据 三 自动备份步骤 1.开启归档模式 开启DM管理工具管理控制台 弹不出来工具的 输入命令 xhost 第一步 将服务器转换为配置状态 右键-&g…

2.4 如何运行Python程序

如何运行Python程序&#xff1f; Python是一种解释型的脚本编程语言&#xff0c;这样的编程语言一般支持两种代码运行方式&#xff1a; 1) 交互式编程 在命令行窗口中直接输入代码&#xff0c;按下回车键就可以运行代码&#xff0c;并立即看到输出结果&#xff1b;执行完一行…

【网络爬虫】(1) 网络请求,urllib库介绍

各位同学好&#xff0c;今天开始和各位分享一下python网络爬虫技巧&#xff0c;从基本的函数开始&#xff0c;到项目实战。那我们开始吧。 1. 基本概念 这里简单介绍一下后续学习中需要掌握的概念。 &#xff08;1&#xff09;http 和 https 协议。http是超文本传输&#xf…

前端必会的一些基础

1、如何把obj对象 添加到arr数组对象内 2、手机号、邮箱、隐藏用户手机号中间四位正则 3、两个数组 数组a未全部人员 数组b为已选中人员 默认选中 4、数组去重、 5、localStorage 存取 数组 方法 6、数据filter过滤 7、请求接口时header 请求格式不对 需要怎么转换&#xf…