JackCin's blog JackCin's blog
首页
  • 页面

    • Html
    • CSS
  • 核心

    • JavaScript基础
    • JavaScript高级
  • 框架

    • Vue
  • jQuery
  • Node
  • Ajax
Linux
  • 操作系统
  • 数据结构与算法
  • 51单片机
  • CC2530
  • 网站
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

JackCin

前端小菜鸡(✪ω✪)
首页
  • 页面

    • Html
    • CSS
  • 核心

    • JavaScript基础
    • JavaScript高级
  • 框架

    • Vue
  • jQuery
  • Node
  • Ajax
Linux
  • 操作系统
  • 数据结构与算法
  • 51单片机
  • CC2530
  • 网站
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 51单片机

    • 51单片机及补充知识
    • LED
    • 独立按键
      • 数码管
      • LCD1602液晶显示器
      • 矩阵按键
      • 定时器
      • 串口
      • LED点阵屏
      • 蜂鸣器
      • AT24C02存储器
      • AD与DA
      • DS18B20温度传感器
      • DS1302时钟
      • LCD1602液晶显示屏
      • 红外遥控
      • 呼吸灯与直流电机调速(PWM)
    • 单片机
    • 51单片机
    JackCin
    2023-09-13
    目录

    独立按键

    # 二、独立按键

    # 1、原理图

    独立按键原理图1

    独立按键原理图2

    • 因为独立按键的一端都接的是GND,而引脚默认为高电平,那么按下独立按键后,就会将P3_0~P3_3置为0,所以,我们可以通过判断P3_0~P3_3的值来进行一些操作,以达成使用独立按键控制的效果。

    # 2、按键的消抖

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

    按键抖动

    # 3、独立按键控制LED状态

    #include <REGX52.H>
    
    void Delay(unsigned int xms)		//@11.0592MHz
    {
    	unsigned char i, j;
    
    	while(xms){
    		i = 2;
    		j = 199;
    		do
    		{
    			while (--j);
    		} while (--i);
    		xms--;
    	} 
    	
    }
    
    
    void main()
    {
    	while(1){
    		if(P3_1==0){
    			
    			Delay(20);  
    			while(P3_1==0);  //判断按键是否松开,未松开者查询循环
    			Delay(20);
    			
    			P2_0=~P2_0; //取反
    		}
    	}
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

    # 4、独立按键控制LED显示二进制

    void main(){
    		unsigned char LEDNum=0;
    		while(1){
    			
    			if(P3_1==0){
    				
    					Delay(20);
    					while(P3_1==0);
    					Delay(20);
    				
    				LEDNum++;
    				P2=~LEDNum;
    			}
    		}
    		
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    • P2默认就是0xFF,所以这里要定义一个变量,来进行++操作,再取反,因为

      1111 1111 再加一就变成 1 0000 0000 了,这时P2反而变成了0x00.

    • 另一种简单的写法:

    • void main(){
      		while(1){
      			
      			if(P3_1==0){
      				
      					Delay(20);
      					while(P3_1==0);
      					Delay(20);
      				P2--;
      			}
      		}
      		
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13

    # 5、独立按键控制LED移位

    #include <REGX52.H>
    void Delay(unsigned int xms);
    
    unsigned char LEDNum;
    //定义在函数外部为全局变量,默认值为0
    //如果定义在函数内部就是局部变量,不赋值的话,值不确定
    
    
    void main()
    {
    	P2=~0x01;				//直接点亮LED1
    	while(1)
    	{
    		if(P3_1==0)			//按Kl键移动
    		{
    			Delay(20);
    			while(P3_1==0);
    			Delay(20);
    			
    			LEDNum++;		
    			if(LEDNum>=8)	//判断是否到第八位,是就重新开始
    				LEDNum=0;
    			P2=~(0x01<<LEDNum);	//LED根据LEDNum移位取反
    		}
    		if(P3_0==0)			//按K2键移动
    		{
    			Delay(20);
    			while(P3_0==0);
    			Delay(20);
    			
    			if(LEDNum==0)	//判断是否在第1个LED,是就从LED8开始
    				LEDNum=7;
    			else			
    				LEDNum--;
    			P2=~(0x01<<LEDNum);	//LED根据LEDNum移位取反
    
    		}
    	}
    }
    
    void Delay(unsigned int xms)
    {
    	unsigned char i, j;
    	while(xms--)
    	{
    		i = 2;
    		j = 239;
    		do
    		{
    			while (--j);
    		} while (--i);
    	}
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    编辑 (opens new window)
    上次更新: 2023/09/13, 12:29:52
    LED
    数码管

    ← LED 数码管→

    最近更新
    01
    51单片机及补充知识
    09-13
    02
    LCD1602液晶显示器
    09-13
    03
    LED
    09-13
    更多文章>
    Theme by Vdoing | Copyright © 2019-2023 Evan Xu | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式