建设开发有限公司网站,浙江新中环建设有限公司 网站,千锋教育介绍,南宁企业网站排名优化1、独立按键
1.1、按键介绍
轻触开关是一种电子开关#xff0c;使用时#xff0c;轻轻按开关按钮就可使开关接通#xff0c;当松开手时#xff0c;开关断开。 1.2、独立按键原理
按键在闭合和断开时#xff0c;触点会存在抖动现象。P2\P3\P1都是准双向IO口#xff0c;…1、独立按键
1.1、按键介绍
轻触开关是一种电子开关使用时轻轻按开关按钮就可使开关接通当松开手时开关断开。 1.2、独立按键原理
按键在闭合和断开时触点会存在抖动现象。P2\P3\P1都是准双向IO口内部都有上拉电阻。P0口是漏极开路没有上拉只有外部加一个上拉才能对高低电平进行控制。 在硬件和软件上进行消抖处理 1硬件消抖电路成本高
通过RC的充放电延迟时间,利用施密特触发器74HC132可以整理波形成为方方正正的波形。 2软件消抖 通过延迟来解决。
1.3、编写独立按键控制程序
#include reg52.htypedef unsigned char u8;
typedef unsigned int u16;sbit led P2^0;
sbit k1P3^1; // 开关接口void delay(u16 i) //10us
{while(i--);
}void keypros()
{if(k10){//消抖处理delay(1000); //10msif(k10){led~led;}while(!k1); //再次按下}
}void main()
{while(1){keypros();}
}
2、矩阵按键
2.1、矩阵按键的由来
将独立按键每一个按键的管脚连接起来形成一根线。矩阵键盘用最少的IO口控制电路。 矩阵按键扫描的原理 逐行扫描我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描当低四位接收到的数据不全为1的时候说明有按键按下然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。行列扫描我们可以通过高四位全部输出低电平低四位输出高电平。当接收到的数据低四位不全为高电平时说明有按键按下然后通过接收的数据值判断是哪一列有按键按下然后再反过来高四位输出高电平低四位输出低电平然后根据接收到的高四位的值判断是那一行有按键按下就这样能够确定是哪一个按键按下了。
2.2、矩阵按键扫描原理
#include reg52.h
#include intrins.htypedef unsigned char u8;
typedef unsigned int u16;
//定义38译码器
sbit LSA P2^2;
sbit LSB P2^3;
sbit LSC P2^4;#define GPIO_KEY P1
#define GPIO_DIG P0u8 keyValue;// 发生字码:code关键词保持变量到flash里面如果没有code保持在data里面
u8 code smgduan[16] {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(u16 i)
{while(i--);
}
void keyDown()
{u8 a;GPIO_KEY0X0f;if(GPIO_KEY!0X0F){ // 判断是否按键按下delay(1000); //延迟消抖if(GPIO_KEY!0X0F){GPIO_KEY0X0F;swith(GPIO_KEY){case(0x07): keyValue0; break; //S1 根据按下的按键进行判断case(0x0b): keyValue1; break; //S2case(0x0d): keyValue2; break; //S3 case(0x0e): keyValue3; break; //S4}GPIO_KEY0XF0;swith(GPIO_KEY){case(0x70): keyValuekeyValue; break; //S1 根据按下的按键进行判断case(0xb0): keyValuekeyValue4; break; //S2case(0xd0): keyValuekeyValue8; break; //S3 case(0xe0): keyValuekeyValue12; break; //S4}// 判断按键是否松开GPIO_KEY检测行按键已经松开a50用于判断是否一直按着while((a50)(GPIO_KEY!0xf0)){ delay(10000);a;}}}}void main()
{//选择数码管LSA0;LSB0;LSC0;while(1){keyDown();GPIO_DIGsmgduan[keyValue];}
}