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

单片机-89C51部分:6、按键

飞书文档https://x509p6c8to.feishu.cn/wiki/EtkHw8MG0ipz3NkHlZEcwpEnn4g

一、应用场景:

轻触开关、按键、电容开关、光栅传感器、微动、关电开关

二、原理:

轻触按键可以理解为两根导线,按下时导线连接,松开时导线断开。我们可以看下原理图:

按键按下时,引脚会被连接到GND,这时候引脚是低电平,按键松开时,引脚会被上拉到电源,这时候引脚会变成高电平,那我们就可以通过读取引脚的电平变化,来判断按键是按下还是松开了。

什么是电压?什么是电平?高电平?低电平?

以TTL电路为例:

TTL电源电压是3.3V,高电平是2.4V--3.3V,低电平0V--0.8V,按照惯例,使用1来表示高电平,使用0表示低电平。

三、按键值读取

看原理图可知,板卡上有三个按键,分别接到P3.5 P3.6 P3.7三个IO上


#include <reg52.h>sbit led1= P2^7;        
sbit key1 = P3^7;void main()
{while(1){//当按键按下时灯切换if(key1 == 0){led1= ~led1;}}               
}

四、按键去抖

上面的代码,在实测效果时,有时候我们会发现按下抬起时,灯会变化两次状态,其实这是因为按键在闭合和断开时,机械触点会存在抖动现象,所以需要消抖。

#include <reg52.h>sbit led1=P2^7;        
sbit key1 = P3^7;//延时ms函数,参数用来改变延时的具体时间
void delay_ms(unsigned int xms)   //@12MHz
{unsigned int i, j;for(i=xms;i>0;i--){for(j=124;j>0;j--){}}
}//主函数
void main()
{while(1){//当按键按下时灯切换if(key1 == 0){delay_ms(10);if(key1 == 0){led1= ~led1;delay_ms(1000);}}}               
}

相关文章:

  • 组件之间的信息传递的四种方法!!【vue3 前端】
  • 自然语言处理之机器翻译:Statistical Machine Translation(SMT)的评估方法解析与创新实践
  • 从零开始开发一个简易的五子棋游戏:使用 HTML、CSS 和 JavaScript 实现双人对战
  • 3、Linux操作系统下,linux的技术手册使用(man)
  • 杨洋出席青岛啤酒白啤品牌活动 共赴生活美学之旅
  • 高自由度与多功能指尖设计:Allegro灵巧手V5(4F Plus)的技术亮点
  • CSS元素动画篇:基于当前位置的变换动画(四)
  • 技术分享 | Oracle-RAC修改IP信息
  • 【博客系统】博客系统第一弹:博客系统项目配置、MyBatis-Plus 实现 Mapper 接口、处理项目公共模块:统一返回结果、统一异常处理
  • 如何将数据输入到神经网络中
  • 小刚说C语言刷题——1320时钟旋转
  • AIGC(生成式AI)试用 32 -- AI做软件程序测试 3
  • 疑难解析 | 解决金仓数据库中securecmdd服务连接报错“Permission denied“问题
  • 初步自定义layui的table(laravel 12)
  • C盘清理实用技巧整理
  • [创业之路-341]:华为人力资源管理 - 华为技术专家体系详解
  • final static 中是什么final static联合使用呢
  • matlab simulink中理想变压激磁电流容易有直流偏置的原因分析。
  • shell脚本部署disu博客
  • 多视觉编码器协同与高低分辨率特征融合技术综述
  • A股三大股指收跌:地产股领跌,银行股再度走强
  • 澎湃思想周报丨数字时代的育儿;凛冬已至好莱坞
  • “天链”继续上新!长三乙火箭成功发射天链二号05星
  • 多地征集农村假冒伪劣食品违法线索,全链条整治“三无”产品
  • 报告:到2030年我国无人机产业将率先实现万亿规模
  • 洛阳原副市长收礼品消费卡,河南通报6起违反八项规定典型问题