当前位置: 首页 > news >正文

03 51单片机之独立按键控制LED状态

文章目录

  • 1、独立按键
  • 2、键盘的类型
  • 3、原理图示意
  • 4、新建工程
  • 5、工程编码
  • 6、C51数据运算
  • 7、按键抖动
  • 8、工程编码(防抖操作)
  • 9、独立按键控制LED并显示二进制
  • 9、独立按键控制LED移位


1、独立按键

键盘是电子系统中人机对话的重要组成部分,是人向机器发出指令、输入信息的必须设备。键盘在单片机应用系统中是使用最广泛的一种数据输入设备。键盘是由多个按键组成的。按键的工作原理:按键通常是一种常开型开关,常态下按键的两个触点处于断开状态,按下按键时它们才闭合
在这里插入图片描述

Figure1. 独立按键

2、键盘的类型

通常键盘有编码键盘和非编码键盘两种。编码键盘通过硬件电路产生被按按键的键值码,这种键盘使用方便,所需程序简单,但硬件电路复杂,如计算机的键盘,单片机则通常不采用编码键盘。而软件编程来识别的称为非编码键盘,非编码键盘硬件电路简单。在单片机组成的各种系统中,最常用的是非编码键盘。

3、原理图示意

在这里插入图片描述

Figure2. 独立按键原理图

注意:按键一端与IO口连接,另外一端接地。通过控制IO口输出高电平即可检测按键是否按下,当按下时IO口会被拉低,松开后IO口回到高电平

4、新建工程

在这里插入图片描述

Figure3. 新建工程

5、工程编码

在这里插入图片描述

Figure4. 工程编码

#include <REGX52.H>void main()
{while(1){/* Press on the Button. */if(0 == P3_1){/* Light up LED. */P2_0 = 0;}else{/* Light off LED. */P2_0 = 1;}}
}

6、C51数据运算

在这里插入图片描述

Figure5. C51数据运算

#include <REGX52.H>void main()
{while(1){/* Press on the Button. */if((0 == P3_1)&&(0 == P3_0)){/* Light up LED. */P2_0 = 0;}else{/* Light off LED. */P2_0 = 1;}}
}

7、按键抖动

对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。
在这里插入图片描述

Figure6. 按键抖动

8、工程编码(防抖操作)

在这里插入图片描述

Figure7. 工程编码(防抖操作)

#include <REGX52.H>void DelayMs(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void main()
{while(1){/* Press on the Button. */if(0 == P3_1){/* Delay time is 20ms. */DelayMs(20);while(0 == P3_1);/* Delay time is 20ms. */DelayMs(20);P2_0 = ~P2_0;}}
}

9、独立按键控制LED并显示二进制

在这里插入图片描述

Figure8. 独立按键控制LED并显示二进制

#include <REGX52.H>void DelayMs(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void main()
{unsigned char LedNum = 0; // 8 bitwhile(1){/* Press on the Button. */if(0 == P3_1){/* Delay time is 20ms. */DelayMs(20);while(0 == P3_1);/* Delay time is 20ms. */DelayMs(20);/* After Power on. P2 pin is high level status. P2 = 1111 1111 */LedNum++;P2 = ~LedNum;}}
}

9、独立按键控制LED移位

在这里插入图片描述

Figure9. 独立按键控制LED移位

#include <REGX52.H>void DelayMs(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void main()
{unsigned char LEDNum = 0; // 8 bitP2 = ~0x01; // init Led status after power on.while(1){/* Press on the Button. */if(0 == P3_1){/* Delay time is 20ms. */DelayMs(20);while(0 == P3_1);/* Delay time is 20ms. */DelayMs(20);/* After Power on. P2 pin is high level status. P2 = 1111 1111 */LEDNum++;if(LEDNum >= 8)LEDNum = 0;P2 = ~(0x1 << LEDNum);}if(0 == P3_0){/* Delay time is 20ms. */DelayMs(20);while(0 == P3_0);/* Delay time is 20ms. */DelayMs(20);/* After Power on. P2 pin is high level status. P2 = 1111 1111 */if(LEDNum <= 0)LEDNum = 8;elseLEDNum--;P2 = ~(0x1 << LEDNum);}}
}
http://www.lryc.cn/news/589450.html

相关文章:

  • 论文 视黄素与细胞修复
  • 小型客厅如何装修设计?
  • 微信小程序开发-桌面端和移动端UI表现不一致问题记录
  • [ROS 系列学习教程] ROS动作通讯(Action):通信模型、Hello World与拓展
  • Linux操作系统之信号:保存与处理信号
  • Quick API:赋能能源行业,化解数据痛点
  • MongoDB 学习笔记
  • 三年高端随身WIFI销量冠军如何用“技术普惠”击穿行业暴利,用户直呼真香;随身WIFI哪个牌子性价比最高?
  • netstat -tlnp | grep 5000
  • 基于Python的图像文字识别系统
  • Linux探秘坊-------14.信号
  • ObservableValidator自定义错误样式
  • 从知识变现到创始人IP:知识付费的进阶之路
  • zip 加密压缩文件的原理是什么?
  • 【Java】【企业级应用】学生信息管理系统项目介绍
  • 算法入门:BFS与DFS详解(C++实现)
  • 【kubernetes】--ConfigMap
  • 极致cms多语言建站|设置主站默认语言与设置后台固定语言为中文
  • frp内网穿透(二)
  • 牛客:HJ20 密码验证合格程序[华为机考][字符串]
  • 一般芯片电气特性中Flash参数达到其最大值的条件是什么?
  • 【人工智能99问】激活函数有哪些,如何选择使用哪个激活函数?(5/99)
  • 全新 Python 项目托管到 Gitee 私有仓库完整流程(带详细命令注释)
  • 【PTA数据结构 | C语言版】构造二叉树
  • 软件质量概述
  • 使用 pdb 来 debug 调试 python 程序
  • I3C通信驱动开发注意事项
  • Linux715 磁盘管理:逻辑卷
  • golang二级缓存示例
  • 随机奖励能提升Qwen数学表现?本质是数据污染