jianhong_wu 发表于 2015-2-2 23:35:22

单片机的IO口可以作为函数的形参吗?如果想要很多IO口共用一段代码怎么办?已解答。

小琪-山东:

int keytest()
{
       uint key_temp=0;
        if(key==0)
        {
                delayms(50);
                if(key==0)
                {
               

                        key_temp=1;
                                      
                }

               
        }
       while(key==0);
return key_temp;

}
为什么这个按键检测单独能用我把它写成
int keytest(uint in_sr)
{
       uint key_temp=0;
        if(in_sr==0)
        {
                delayms(50);
                if(in_sr==0)
                {
               

                        key_temp=1;
                                      
                }

               
        }
       while(in_sr==0);
return key_temp;

}
就不行了呢?我总不能一个按键写一次吧,郁闷死了。单独用能行,在函数里加上行参后就不能用了.


鸿哥-深圳:
形参是一个IO口的bit变量,所以不符合C语言规则,一般都不会用某个IO口作为形参的.
你想key_sec=keytest(P1^0)这样用,这样是妄想的。

小琪-山东:
那怎么办啊?我总不能一个按键写一次按键检测吧?

鸿哥-深圳:
我本人还是建议你把按键分开一个一个写比较好,不要企图去压缩代码。当然,你这个按键识别按键松开的方法和加delay消抖动的方法很多网友是不认可的,尤其是最后那个while(in_sr==0)。先不讨论这个问题,我先帮你改改你想要的结果,大概IO口复用代码的思路如下:

sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;



unsigned char key(unsigned char ucWhichKey)
{
unsigned char ucKeyReturn=1;
switch(ucWhichKey)
{
   case 10://P1.0
         if(P1_0==0)
         {
             ucKeyReturn=0;
         }
         else
         {
             ucKeyReturn=1;
         }
         break;
   case 11://P1.1
         if(P1_1==0)
         {
             ucKeyReturn=0;
         }
         else
         {
             ucKeyReturn=1;
         }
         break;
   case 12://P1.2
         if(P1_2==0)
         {
             ucKeyReturn=0;
         }
         else
         {
             ucKeyReturn=1;
         }
         break;
    // 继续往下添加你的IO口
}

return ucKeyReturn;
}

int keytest(unsigned char ucWhichKey)
{
       uint key_temp=0;
        if(key(ucWhichKey)==0)
        {
                delayms(50);
                if(key(ucWhichKey)==0)
                {
               

                        key_temp=1;
                                      
                }

               
        }
       while(key(ucWhichKey)==0);
return key_temp;

}


页: [1]
查看完整版本: 单片机的IO口可以作为函数的形参吗?如果想要很多IO口共用一段代码怎么办?已解答。