独闷闷网
标题:
单片机的IO口可以作为函数的形参吗?如果想要很多IO口共用一段代码怎么办?已解答。
[打印本页]
作者:
jianhong_wu
时间:
2015-2-2 23:35
标题:
单片机的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;
}
复制代码
欢迎光临 独闷闷网 (http://dumenmen.com/)
Powered by Discuz! X3.2