zoukankan      html  css  js  c++  java
  • 51单片机独立键盘原理

    我这按键是机械弹性按键,所以具有弹性,按键在按下和松开的瞬间均伴随有一连串的抖动,键抖动会引起一次按键被误

    读多次,然后为了保证cpu对键的一次闭合仅作一次处理,所以我们必须去除抖动。去除抖动有2种,硬件消抖和软件消抖。
    其中一软件消抖最方便。所以我就以软件消抖为例。



         独立按键的原理图和led的原理图如上,8个led的阳极都接了vcc(vcc认为是电源正极,gnd认为是电源负极),所以只需要led的阴极接的p2i(i取值0到7)口输入低电平(即0v)对应的led就可以发亮了.

    接下来看看独立按键的原理图,首先K1是和rxd管脚相连的,然后rxd管脚又是和P3^1口连接的,所以可以P3^1口是和k1开关连接的,可以知道当k1按键按下时电路就导通了,因为k1右边接了gnd,所以P3^1这个io口的输出电平就被拉低变0电平了。(p31io口电平能被拉低是因为P3口是准双向io口),所以我们可以通过判断P3^1io口的电平来获知按键的状态,P3^1==1,则按键k1没有按下,P3^1==0,则按键k1按下了。
    接下来展示一个通过独立键盘里的按键k1来控制led1的亮灭的程序

    #include<reg52.h>
    sbit led1=P2^0;//因为led1由p2^0口控制
    sbit k1=P3^1;//P31口的输出电平由按键k1控制
    void delay(int i)
    {
    	while(i--);
    }
    void keyproc()
    {
    	if(k1==0)
    	{
    		delay(1000);//延时消抖
    		if(k1==0)
    		{
    			led1=~led1;////led1状态反转,亮变灭,灭变亮
    		}
    		while(!k1) ;
    		
    	}
    }
    void main()
    {
    	while(1)
    	{
    		keyproc();
    	}
    }

    把这代码烧到单片机后,我们一按k1,led1就会亮,再按一次就会灭,一直这样下去


  • 相关阅读:
    golang 使用 os/exec
    golang调用 exec命令 出现too many open files
    nginx: [error] invalid PID number “” in “/usr/local/var/run/nginx/nginx.pid”
    Docker 实时查看docker容器日志
    curl 查看HTTP 响应头信息
    go -- go 程序 启动docker容器
    go -- 测试
    Linux /var/log下各种日志文件
    LDAP -- ldap 的cn, ou, dc的含义
    一条命令 杀死某个端口 所有程序
  • 原文地址:https://www.cnblogs.com/eason9906/p/11755132.html
Copyright © 2011-2022 走看看