首页 > 其他分享 >02-独立按键控制led

02-独立按键控制led

时间:2023-12-06 18:12:06浏览次数:35  
标签:02 P2 led -- unsigned Delay while 按键 xms

02-独立按键控制led

按键的抖动

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

一、控制led的亮灭

按住亮松开灭

#include <REGX52.H>

void main()
{
    while(1)
    {
        if(P3_1 == 0)
        {
            P2_7 = 0;
        }
        else if(P3_1 == 1)
        {
            P2_7 = 1;
        }
    }
}

二、控制led的状态

按一次亮,再按一次灭,再按一次亮,再按一次灭...

#include <REGX52.H>

void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;

    while(xms)
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        xms--;
    }
}


void main()
{
    P2_7 = 1;
    while(1)
    {
        
        
        if(P3_1 == 0)
        {
            Delay(20);		// 延迟消抖
            while(P3_1 == 0);
            Delay(20);		// 延迟消抖
            P2_7 = ~P2_7;	// 每次状态取反
        }
        
    }
}

三、控制led的二进制显示

0~255的二进制显示,亮表示1,灭表示0。每次按下显示的值加一

#include <REGX52.H>

void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;

    while(xms)
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        xms--;
    }
}


void main()
{ 
    unsigned char chLedNum = 0;
    unsigned char chTmp = 0;
    
    P2 = 0xFF;
    while(1)
    {
        if(P3_1 == 0)
        {
            Delay(20);
            while(P3_1 == 0);
            Delay(20);
            
            chLedNum++;
            P2 = ~chLedNum;
            
            chTmp = P2_0;
            P2_0 = P2_7;
            P2_7 = chTmp;
            
            chTmp = P2_1;
            P2_1 = P2_6;
            P2_6 = chTmp;
                        
            chTmp = P2_2;
            P2_2 = P2_5;
            P2_5 = chTmp;
            
            chTmp = P2_3;
            P2_3 = P2_4;
            P2_4 = chTmp;
        }
        
    }
}

四、控制led的移位

每按一次,从右向左移一位

#include <REGX52.H>

void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;

    while(xms)
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        xms--;
    }
}


void main()
{ 
    unsigned char chLedNum = 0x80;

    while(1)
    {
        if(P3_1 == 0)
        {
            Delay(20);
            while(P3_1 == 0);
            Delay(20);
            
            P2 = ~chLedNum;
            chLedNum /= 2;
            
            if(chLedNum == 0)
            {
                chLedNum = 0x80;
            }
        }
        
    }
}

标签:02,P2,led,--,unsigned,Delay,while,按键,xms
From: https://www.cnblogs.com/yljblogs/p/17880205.html

相关文章

  • 2023最新高级难度react面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度react面试题合集问:如何实现React中的组件缓存策略?在React中,我们可以使用多种策略来实现组件的缓存,包括但不限于以下几种方法:使用React.memo()React.memo()是一个高阶函数,它可以接收一个组件作为参数,并返回一个新的组件。......
  • 2023.12.6——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.jfinal明日计划:学习......
  • 2023最新中级难度Angular面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度Angular面试题合集问:Angular是什么?请简要介绍一下Angular框架的特点和优势。Angular是一个由Google维护的开源前端框架,用于构建高效、动态和响应式的单页面Web应用程序。它最初在2010年作为AngularJS发布,并于2016年进行了重写......
  • 2023最新高级难度Angular面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度Angular面试题合集问:解释一下Angular中的变化检测(ChangeDetection)是如何工作的?请介绍Angular的默认变化检测策略以及如何优化变化检测性能。Angular中的变化检测(ChangeDetection)是一个自动化的过程,用于检查组件树中的所有数......
  • 2023最新初级难度react面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-初级难度react面试题合集问:请详述React.js是什么?React.js是一个由Facebook开发的开源JavaScript库,用于构建用户界面(UserInterface,UI)。它是目前Web开发领域最流行和广泛使用的库之一。React.js主要提供了一个虚拟DOM(Virtua......
  • 2023最新中级难度react面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度react面试题合集问:请详述React中的HOC(高阶组件)的概念和应用场景?在React中,高阶组件(HighOrderComponent,简称HOC)是一种设计模式,它允许我们将共享的功能提取出来,形成一个新的可复用组件。HOC本质上就是一个接收组件作为参......
  • 2023最新初级难度PHP面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-初级难度PHP面试题合集问:请解释什么是PHP?PHP是一种开源的脚本语言,用于开发动态网站和Web应用程序。它是一种嵌入HTML中的语言,可以用来执行简单的任务,例如显示特定的图形或记录访客人数等。它可以轻松地插入到HTML页面中,并且支......
  • 2023最新中级难度PHP面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度PHP面试题合集问:请问如何在PHP中自定义魔术方法,例如__call()和__callStatic()?在PHP中,可以通过重写魔术方法来实现自定义行为。例如要实现自定义__call()方法,可以在类中定义一个名为__call的方法:classMyClass{......
  • 2023最新java面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-java面试题合集问:什么是抽象类和接口?抽象类和接口是面向对象编程中的两个重要概念,它们在Java、C#等编程语言中得到了广泛的应用。以下是关于抽象类和接口的解释:抽象类(AbstractClass):抽象类是一个不能被实例化的类,通常用于作为其他类......
  • 盘点2023年安防监控行业技术进展与LiteCVR视频云技术应用
    2023年安防监控行业的技术进展可谓日新月异,各种新技术的应用层出不穷。以下是对今年安防监控行业一些重要技术进展的盘点:1、人工智能(AI)技术在安防监控领域的应用越来越广泛在人工智能的推动下,智能视频分析技术得到了迅速发展,它可以通过对视频内容的自动识别、分析和理解......