微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 跪求高手解答!一按键或多按键选择性控制IO口。

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

时间:10-02 整理:3721RD 点击:

         //作者;【周平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); // 延时         主频!  }】

#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--);
}

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);
}

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top