打印

开关程序问题........急急急

[复制链接]
1372|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
欧阳青云|  楼主 | 2009-8-20 16:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
头文件程序如下,我想实现的功能是:当其中一个键按下时,返回一个相应的值,而且是每次运行key_scan()这个按键扫描函数时一直返回这个值,直到下一个键被按下时才返回另一个相应的值。但我这个头文件不能实现这个功能,麻烦大家帮我改成可以实现那种功能的程序(头文件)。谢谢。
补充说明下:实物中用的是轻触开关,即按下后就弹起来的那种。
#ifndef __key_H__
#define __key_H__

#include "AT89X51.h"
sbit P24=P2^4;   
sbit P25=P2^5;   
sbit P26=P2^6;   
sbit P27=P2^7;   

void key_delay(uchar i);                //延时
void key_delay(uchar i)
{
        uchar j;
        for(;i>0;i--)
        for(j=248;j>0;j--);
}
key_scan()
{
         while(1)
         {
                if(P24==0)
                {
                        key_delay(15);
                        if(P24==0)
                        {
                              return(1);
                        }
                }
                else if(P25==0)
                {
                         key_delay(15);
                         if(P25==0)
                        {
                                  return(2);
                        }
                }
                else if(P26==0)
               {
                         key_delay(15);
                         if(P26==0)
                         {
                                 return(3);
                         }
               }
               else if(P27==0)
              {
                       key_delay(15);
                       if(P27==0)
                       {
                                 key_delay(1980);
                                 if(P27==0)
                                 {
                                         return(4);
                                 }
                                 else
                                 {
                                         return(5);
                                 }
                       }
             }
             else
             {;}
      }
}

相关帖子

沙发
chen3bing| | 2009-8-20 16:39 | 只看该作者
#ifndef __key_H__
#define __key_H__

#include "AT89X51.h"
sbit P24=P2^4;   
sbit P25=P2^5;   
sbit P26=P2^6;   
sbit P27=P2^7;   

void key_delay(uchar i);                //延时
void key_delay(uchar i)
{
        uchar j;
        for(;i>0;i--)
        for(j=248;j>0;j--);
}
key_scan()
{
         while(1)
         {
                if(P24==0)
                {
                        key_delay(15);
                        if(P24==0)
                        {while(P24==0);          //其余类同
                           
                              return(1);
                       }
                }
                else if(P25==0)
                {
                         key_delay(15);
                         if(P25==0)
                        {
                                  return(2);
                        }
                }
                else if(P26==0)
               {
                         key_delay(15);
                         if(P26==0)
                         {
                                 return(3);
                         }
               }
               else if(P27==0)
              {
                       key_delay(15);
                       if(P27==0)
                       {

                         key_delay(1980);
                                 if(P27==0)
                                 {
                                         return(4);
                                 }
                                 else
                                 {
                                         return(5);
                                 }
                       }
             }
             else
             {;}
      }
}

使用特权

评论回复
板凳
欧阳青云|  楼主 | 2009-8-21 16:12 | 只看该作者
那我这样可不可以?
#ifndef __key_H__
#define __key_H__


#include "AT89X51.h"

sbit P24=P2^4;                               
sbit P25=P2^5;                               
sbit P26=P2^6;                               
sbit P27=P2^7;                               
uchar E=0;

void key_delay(uchar i);                //延时
//uchar key_scan();                               // 扫键

void key_delay(uchar i)
   {
        uchar j;
        for(;i>0;i--)
        for(j=248;j>0;j--);
   }

key_scan()
{
        while(1)
        {
                if(P24==0)
                {
                        key_delay(15);
                        if(P24==0)
                        {
                                E=1;
                                return(1);while(P24==0);
                        }
                }
                else if(P25==0)
                {
                        key_delay(15);
                        if(P25==0)
                        {
                                E=2;
                                return(2);while(P25==0);
                        }
                }
                else if(P26==0)
                {
                        key_delay(15);
                        if(P26==0)
                        {
                                E=3;
                                return(3);while(P26==0);
                        }
                }
                else if(P27==0)
                {
                        key_delay(15);
                        if(P27==0)
                        {
                                key_delay(1980);
                                if(P27==0)
                                {
                                        E=4;
                                        return(4);        while(P27==0);
                                }
                                else
                                {
                                        E=5;
                                        return(5);while(P27==0);
                                }
                        }
                }
                /*else if(P27&&P26&&P25&&P24!=0)
                {
                        E=0;
                }*/
                else
                {
                        //E=E;
                        ;
                }
                if(P24&&P25&&P26&&P27!=0)
                return(E);
        }
}

使用特权

评论回复
地板
chen3bing| | 2009-8-21 17:57 | 只看该作者
恐怕不行吧。
return(5);while(P27==0);
你前面已经返回了,后面的语句就执行不到了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

47

主题

378

帖子

0

粉丝