如何实现 51单片机 2个针脚 调用相同的函数
本帖最后由 woshixy1 于 2024-12-8 02:08 编辑<p>各位前辈你们好</p>
<p>我是自学的 这个问题困扰我很久了</p>
<p>两个管脚会调用相同的函数 而且 函数本身还会调用其他函数</p>
<p>但是每一个针脚调用的函数的顺序和命令都是一样的</p>
<p>也就是说 两个针脚的功能是完全一样的 我想实现 函数复用</p>
<p>请问如何实现呢?例如</p>
<p>sbit led1 = P2^1;</p>
<p>sbit led2 = P2^2;</p>
<p>void led_on(u8 led_num);</p>
<p>void led_off(u8 led_num);</p>
<p> </p>
<p> </p>
<p>void main()</p>
<p>{</p>
<p> </p>
<p> while(1)</p>
<p> {</p>
<p> led_on(led1); //这里不会代码实现 所以就先这样写了</p>
<p> led_on(led1);</p>
<p> led_off(led2); //希望前辈们可以明白我的意思</p>
<p> led_off(led2);</p>
<p> }</p>
<p> </p>
<p>}</p>
<p> </p>
<p>void led_on(u8 led_num)</p>
<p>{</p>
<p> led_num = 1; // 这里不会怎么实现 所以先这样表示</p>
<p> dey100ms;</p>
<p>}</p>
<p> </p>
<p> </p>
<p>void led_off(u8 led_num)</p>
<p>{</p>
<p> led_num = 0; // 这里不会怎么实现 所以先这样表示</p>
<p> dey100ms;</p>
<p>}</p>
<p> </p>
<p> </p>
<p>可以的,将IO作为函数的输入参数就可以了。我好久不写程序了。大约是下面这样的结构。</p>
<p>#define led_num1 P2^1</p>
<p>#define led_num2 P2^2</p>
<p>void led_on(led_num1)</p>
<p>void led_on(led_num2)</p>
<p>void led_on(u8 led_num)</p>
<p>{</p>
<p> led_num = 1; // 这里不会怎么实现 所以先这样表示</p>
<p> dey100ms;</p>
<p>}</p>
<p>void led_on的函数是一样的。</p>
tagetage 发表于 2024-12-8 10:00
可以的,将IO作为函数的输入参数就可以了。我好久不写程序了。大约是下面这样的结构。
#define le ...
<p>谢谢 我试了一下 这样不行</p>
<p>void led_on(u8 led_num)</p>
<p>{</p>
<p> P1 |= 0x01 >> led_num;</p>
<p>}</p>
<p>void led_off(u8 led_num)</p>
<p>{</p>
<p> P1 &= ~(0x01 >> led_num);</p>
<p>}</p>
<p>类似这样实现,和32位的一样</p>
<p>没明白你的意思,两个引脚同样的操作,软件上封一层不就可以了,还是和你写的一样,不过是用一个函数封装上,直接操作寄存器的话可以对P2的整个全部引脚进行操作,实际上是差不多的,你也感觉不出来啊</p>
<p>sbit led1 = P2^1;</p>
<p>sbit led2 = P2^2;</p>
<p>void led_on(sbit *led_num)</p>
<p>{</p>
<p> P1 |= 0x01 >> led_num;</p>
<p>}</p>
<p>void led_off(sbit *led_num)</p>
<p>{</p>
<p> P1 &= ~(0x01 >> led_num);</p>
<p>}</p>
<p> </p>
<p>call</p>
<p>led_on(&led1);</p>
<p>led_off(&led2);</p>
<div class='shownolgin' data-isdigest='no'>wangerxian 发表于 2024-12-9 09:38
void led_on(u8 led_num)
{
P1 |= 0x01 >> led_num;
}
void led_off(u ...
<p>这个可以,专业都是这样写的,这样的函数,让我想起了51</p>
</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <div class='shownolgin' data-isdigest='no'>lansebuluo 发表于 2024-12-10 08:42
这个可以,专业都是这样写的,这样的函数,让我想起了51
<p>32位单片机入门学的就是这个。</p>
</div><script>showreplylogin();</script>
页:
[1]