一、老规矩 先上代码

#include <REGX52.H>void main()
{while(1){if(P3_1==0 || P3_0==0)    //如果K1按键或K2按键按下{P2_0=0;        //LED1输出0,点亮}else{P2_0=1;       //LED1输出1,熄灭}}
}

我们可以看到其本质还是对端口进行操作 因而我们需要从其原理图继续出发

我们可以看到 独立按键的每一个口右侧接地 因此单我们点击独立按键的时候 MCU所接受到的是低电平信号 所以我们可以利用这点来控制LED灯的亮灭

但是其缺点也很明显 就是我们只有持续按住的时候 LED灯才能够保持亮着的状态

二、通过独立按键对LED灯进行一波控制

1、首先,我们需要理解独立按键本身所存在的一些问题

对于机械开关所存在的抖动,我们需要利用延时函数进行处理,从而使我们的控制达到稳定的状态

2、因此我们的代码应该这样子设计

#include <REGX52.H>void Delay(unsigned int xms)
{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}
}void main()
{while(1){if(P3_1==0)         //如果K1按键按下{Delay(20);       //延时消抖while(P3_1==0); //松手检测Delay(20);        //延时消抖P2_0=~P2_0;      //LED1取反}}
}

其中 注意松手检测处 如果K1按下的时候 没有松手 就会在while里面一直循环不出来 也就没办法执行下一步语句 即灯不会亮

当我们再次按下K1的时候 灯就会重新暗淡下去 因为我们此时对灯进行了取反

三、通过独立按键对LED显示二进制

1、老规矩 先上代码

void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void main()
{unsigned char LEDNum=0;while(1){if(P3_1==0)         //如果K1按键按下{Delay(20);       //延时消抖while(P3_1==0); //松手检测Delay(20);        //延时消抖LEDNum++;       //变量自增P2=~LEDNum;      //变量取反输出给LED}}
}

2、在二的基础上 对控制灯的二进制数进行操作 关键点就是二进制的转换罢了

四、通过独立按键对LED显示二进制

1、上代码

#include <REGX52.H>
void Delay(unsigned int xms);unsigned char LEDNum;void main()
{P2=~0x01;             //上电默认LED1点亮while(1){if(P3_1==0)          //如果K1按键按下{Delay(20);while(P3_1==0);Delay(20);LEDNum++;     //LEDNum自增if(LEDNum>=8) //限制LEDNum自增范围LEDNum=0;P2=~(0x01<<LEDNum);  //LED的第LEDNum位点亮}if(P3_0==0)          //如果K2按键按下{Delay(20);while(P3_0==0);Delay(20);if(LEDNum==0) //LEDNum减到0后变为7LEDNum=7;else           //LEDNum未减到0,自减LEDNum--;P2=~(0x01<<LEDNum);   //LED的第LEDNum位点亮}}
}void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}

2、so easy 看看注释 你学会了不?

51单片机入门教程_独立按键控制系列相关推荐

  1. 51单片机(三)独立按键控制LED

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分:建议先学习51单片机,其是STM32等高级单片机的基础:这样再学习STM32时才能融会贯通. ☀️ 专栏适 ...

  2. 7.2单片机入门学习之独立按键控制流水灯

    ⏰1.配置寄存器 首先,我们先来配置下定时器,如何配置定时器,定时器就是要先把相关的符号进行声明的,但是由于#include<REGX52.H>当中已经帮我们声明好了,那么我们直接使用就可 ...

  3. 51单片机入门教程学习笔记

    基于江科大自化协B站教学视频<51单片机入门教程-2020版 程序全程纯手打 从零开始入门> 一.单片机介绍 单片机,英文Micro Controller Unit,简称MCU 内部集成了 ...

  4. 51单片机入门教程(6)——外部中断

    51单片机入门教程(6)--外部中断 一.外部中断 1.1 中断 1.2 外部中断 二.中断优先级 一.外部中断 1.1 中断 关于中断的概念在上一篇博客中已经提到了.(传送门:51单片机入门教程(5 ...

  5. 51单片机入门教程(5)——定时器中断

    51单片机入门教程(5)--定时器中断 一.中断的概念 二.定时器中断 2.1 软件延时的不足 2.2 中断寄存器 2.2.1 中断允许控制寄存器 IE 2.2.2 定时器工作方式寄存器 TMOD 2 ...

  6. 51单片机入门教程(1)——点亮一个LED灯

    51单片机入门教程(1)--点亮一个LED灯 一.什么是单片机 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU.随机存储器 ...

  7. 51单片机入门教程(3)——数码管显示

    51单片机入门教程(3)--数码管显示 一.LED数码管简介 二.数码管静态显示 三.数码管动态显示 特别鸣谢:HFUTer-朱聪强 一.LED数码管简介 LED数码管(LED Segment Dis ...

  8. b站江科大自化协51单片机入门教程笔记(1)

    文章目录 1 综述 2-1 点亮一个LED 2-2 LED闪烁 2-3 LED流水灯 2-4 LED流水灯PLus 3-1 独立按键控制LED亮灭 3-2 独立按键控制LED状态 3-3 独立按键控制 ...

  9. b站江科大自化协51单片机入门教程笔记(2)

    文章目录 6-1 矩阵键盘 6-2 矩阵键盘密码锁 7-1 定时器 7-2 按键控制LED流水灯 & 定时器时钟 独立按键模块 定时器模块 8-1 串口通信 8-2 串口向电脑发送数据 &am ...

最新文章

  1. 批处理实现从Excel导入Oracle
  2. proxool连接池空闲连接中断问题解决
  3. 在windows中设置程序运行的cpu
  4. HDFS的API调用,创建Maven工程,创建一个非Maven工程,HDFS客户端操作数据代码示例,文件方式操作和流式操作
  5. 添加vlan后无法上网_VLAN攻击如何有效防范?搞定虚拟局域网就在以下三点
  6. linux malloc命令,减少 curl 中内存分配操作(malloc)
  7. Golang闭包的典型应用
  8. java捕鱼达人代码java捕鱼游戏代码
  9. CocoStudio 骨骼动画制作过程
  10. javascript服务端编程
  11. 受力分析软件_大赛作品 | 关于Z型路灯受力情况分析
  12. IMC IMV SecurityCenter连通
  13. java网络编程1-查询Internet地址
  14. 同花顺面经(二面挂)
  15. ant vue 的datepicker类组件中英文混合显示解决
  16. 《Science》教你如何写好一篇博士毕业论文!
  17. linux cp命令 时间,Linux cp命令总结
  18. IE6/7常用的hack
  19. R语言散点图分类、配色、添加趋势线
  20. plotly画图(包含x轴设置marker类型设置)

热门文章

  1. PSP2000 USB视频输出到电脑!图文教程!
  2. Savitzky-Golay滤波器原理阐述
  3. CHATROOM项目整理
  4. Metalink Account
  5. python——输入出生和月,计算出接下来的生日距离今天还有多少天
  6. xlsx表格怎么做汇总统计_excel不同表格中的数据该怎么汇总到一个表格?
  7. 《数据包是如何在网络中传输的》TODO
  8. 第六章 项目进度管理
  9. 中软国际PM认证(分享PPT和自述录音)
  10. 每日一题---小凯的疑惑