尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

【嵌入式成长2】STC89C51独立按键|电平读取、软件消抖、触摸按键实战

【嵌入式成长2】STC89C51独立按键|电平读取、软件消抖、触摸按键实战 一、按键应用场景按键是单片机最基础的人机交互输入设备。生活中轻触开关、微动开关、电容触摸按键、光栅传感器都属于输入开关类器件。开发板上的独立按键本质就是机械轻触开关按下导通松开断开。二、按键硬件原理轻触按键可以理解为可手动控制的导线按下两根导线接通松开导线断开。上拉按键电路解析按键松开IO引脚被上拉电阻接到VCCIO为高电平1按键按下按键把引脚连接GNDIO为低电平0单片机通过读取IO引脚电平就能够判断按键是否按下。电平概念TTL电路 3.3V系统高电平2.4V ~3.3V代码中用1表示低电平0V ~0.8V代码中用0表示三、开发板硬件资源本开发板一共有3颗独立机械按键KEY1 → P3.7KEY2 → P3.6KEY3 → P3.5电路采用4.7K上拉电阻增加ESD保护二极管防止静电损坏单片机IO。最简单按键代码未消抖功能按下按键翻转LED状态LED接P2.7#includereg52.hsbit led1P2^7;sbit key1P3^7;voidmain(){while(1){//检测按键低电平代表按键按下if(key10){led1~led1;//翻转LED电平}}}⚠️直接运行该代码会出现BUG按一次按键LED会多次翻转。这就是机械按键抖动导致。四、按键抖动与软件消抖机械按键金属触点存在弹性按下、松开瞬间电平会反复跳变这个现象叫按键抖动。抖动持续时间一般5‑10ms。单片机运行速度极快会把一次按键识别成多次按下。解决方法软件延时消抖检测到按键低电平之后延时10ms再次读取IO电平如果依旧是低电平才确认按键真实按下。基础消抖版本#includereg52.hsbit led1P2^7;sbit key1P3^7;//毫秒延时函数 12MHz晶振voiddelay_ms(unsignedintxms){unsignedinti,j;for(ixms;i0;i--){for(j124;j0;j--){}}}voidmain(){while(1){if(key10){delay_ms(10);//延时跳过抖动if(key10){//再次确认按键状态led1~led1;delay_ms(1000);}}}}优化版本增加等待按键释放上面代码存在问题如果手一直按住按键会反复触发。增加while(key10);等待按键松开按下一次只执行一次动作。拓展开发板还带有电容触摸按键QC引脚接到P4.3需要手动定义P4寄存器地址。#includereg52.hsfr P40xe8;//手动定义P4口寄存器reg52.h默认没有定义P4sbit led1P2^7;sbit key1P4^3;//触摸按键QC输出引脚//毫秒延时函数 12MHz晶振voiddelay_ms(unsignedintxms){unsignedinti,j;for(ixms;i0;i--){for(j124;j0;j--){}}}voidmain(){while(1){if(key10){delay_ms(10);//软件消抖if(key10){led1~led1;//翻转LEDwhile(key10);//阻塞等待按键释放}}}}五、电容触摸按键原理拓展传统机械按键依靠金属触点导通电容触摸按键依靠感应电容变化。PCB上留有触摸PAD焊盘人体手指靠近时手指与大地形成额外感应电容总电容发生变化。触摸检测芯片PT2041A检测电容变化后输出电平信号给单片机。对于51单片机触摸按键输出引脚和普通机械按键用法完全一致只需要读取IO口电平同样需要软件消抖。不需要复杂算法代码和机械按键通用。PT2041A单通道触摸检测芯片宽电压、低功耗大量用于消费电子产品替代机械按键。六、本章小结独立按键硬件上拉电阻电路松开高电平按下低电平。机械按键存在5‑10ms抖动必须做消抖处理否则会误触发。软件消抖主流做法检测电平→延时10ms→再次确认电平。while(key0)等待按键释放实现一次按下只执行一次逻辑。电容触摸按键输出电平信号单片机代码和机械按键完全兼容。
返回列表