跪求高手解答!!一按键或多按键选择性控制IO口。

2019-07-15 18:56发布


         //作者;【周平DIY 开发】
         //时间;2014年、5月;15日。



#include <reg51.h>

sbit OUT1 = P2 ^ 1;

sbit   k1    =  p3 ^ 2;

sbit   k3    =  p3 ^ 3;

void delay(unsigned int i);  //声明延时函数

  void delay(unsigned int i)
{
    unsigned char j;
    for(i; i > 0; i--)
        for(j = 155; j > 0; j--);

}
main()
{

        求高手解答;  我想要加两个控制按键进来不知怎么样实现它!!!

最终的效果就是;当两个按键没有任何动作时,单片机就默认执行【第二段程序】。当按下按键K1时就执行【第一段程序】,松开后回到默认的程序   , 循环执行默认的程序。    当按下k3时执行【第三段程序】,松开回到默认的程序,循环执行默认的程序。       如能帮忙解答,小弟在此跪谢啦!!!


          这是第一段【       OUT1 = 0 ;       delay(1500); // 延时         超低频阶段!!!
                                      OUT1 = 1  ;       delay(1500); //    】


         这是第二段,默认段也是初始段【        OUT1 = 0 ;       delay(200); // 延时           中频阶段!!!
                                                                      OUT1 = 1 ;       delay(500); // 延时        】

  
            第三段    【       OUT1 = 0 ;       delay(120); // 延时          高频阶段!!!
                                     OUT1 = 1 ;       delay(350); // 延时         
                                     OUT1 = 1 ;       delay(2500); // 延时         主频!  }】

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
呆呆1991
1楼-- · 2019-07-15 23:29
#include<reg52.h>    //包含单片机寄存器的头文件

#define uchar unsigned char
#define uint unsigned int

/* 函数申明 -----------------------------------------------*/
void delay(uint i);

/* 变量定义 ----------------------------------------------*/
sbit OUT1 = P1 ^ 0;

sbit   key1    =  P3 ^ 2;

sbit   key3=  P3 ^ 3;


/*
********************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
********************************************************************************
*/
void main()
{
         while(1)                         //无限扫描
         {
                 if(key1==0)
                {
                        delay(5);          //消抖动
                        if(key1==0)          //确认按键被按下
                        {
                                OUT1 = 0 ;   
                                delay(1500); // 延时         超低频阶段!!!
                OUT1 = 1  ;     
                                delay(1500);
                        }
          
                }
                if(key3==0)
                {
                        delay(5);          //消抖动
                        if(key3==0)          //确认按键被按下
                        {
                                OUT1 = 0 ;  
                                delay(120); // 延时          高频阶段!!!
                OUT1 = 1 ;     
                                delay(350); // 延时         
                OUT1 = 1 ;   
                                delay(2500); // 延时  
                        }
                }
                if(key1==1&key3==1)
                {
                        delay(5);          //消抖动
                        if(key1==1&key3==1)          
                        {
                               
                                OUT1 = 0 ;      
                                delay(200); // 延时           中频阶段!!!
                OUT1 = 1 ;                                                                                                 
                                delay(500); // 延时     
                        }
                }
                delay(10);       
        }
}

/*
********************************************************************************
** 函数名称 : delay(uint i)
** 函数功能 : 延时函数
********************************************************************************
*/
void delay(uint i)
{
    unsigned char j;
    for(i; i > 0; i--)
        for(j = 155; j > 0; j--);

}
最佳答案
xunfeng0862
2楼-- · 2019-07-16 02:01
unsigned char Key_Code;

uchar Key_Scan(void)
{
        unsigned char ucValue = 0;

        if(k1 == 0)
        {
                ucValue |= 0x01;
        }
        if(k3 == 0)
        {
                ucValue |= 0x02;
        }

        if(Key_Code != ucValue)
        {
                Key_Code = ucValue;
                return 0;
        }

        return 1;
}

void Key_Function(void)
{
        if(Key_Scan())
        {
                switch(Key_Code)
                {
                        case 0:
                                //无按键程序
                                break;

                        case 0x01:
                                //按键1处理
                                break;

                        case 0x02:
                                //按键2处理
                                break;
                }
        }

        delay(10);
}

zhoupingaaa
3楼-- · 2019-07-16 02:59
呆呆1991 发表于 2014-8-1 15:45
#include    //包含单片机寄存器的头文件

#define uchar unsigned char

高手谢谢您啊,感谢万飞感谢!!!!!!

一周热门 更多>