woshixy1 发表于 2024-12-7 23:28

如何实现 51单片机 2个针脚 调用相同的函数

本帖最后由 woshixy1 于 2024-12-8 02:08 编辑

<p>各位前辈你们好</p>

<p>我是自学的 这个问题困扰我很久了</p>

<p>两个管脚会调用相同的函数 而且 函数本身还会调用其他函数</p>

<p>但是每一个针脚调用的函数的顺序和命令都是一样的</p>

<p>也就是说 两个针脚的功能是完全一样的&nbsp; 我想实现 函数复用</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>&nbsp;</p>

<p>&nbsp;</p>

<p>void main()</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp; while(1)</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; led_on(led1); //这里不会代码实现 所以就先这样写了</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; led_on(led1);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; led_off(led2); //希望前辈们可以明白我的意思</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; led_off(led2);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>

<p>&nbsp;</p>

<p>}</p>

<p>&nbsp;</p>

<p>void led_on(u8 led_num)</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp; led_num = 1;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; 这里不会怎么实现 所以先这样表示</p>

<p>&nbsp;&nbsp;&nbsp; dey100ms;</p>

<p>}</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>void led_off(u8 led_num)</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp; led_num = 0;&nbsp; //&nbsp;&nbsp;&nbsp; 这里不会怎么实现 所以先这样表示</p>

<p>&nbsp;&nbsp;&nbsp; dey100ms;</p>

<p>}</p>

<p>&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>

tagetage 发表于 2024-12-8 10:00

<p>可以的,将IO作为函数的输入参数就可以了。我好久不写程序了。大约是下面这样的结构。</p>

<p>#define&nbsp; led_num1&nbsp; P2^1</p>

<p>#define&nbsp; led_num2&nbsp; 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>&nbsp;&nbsp;&nbsp; led_num = 1;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; 这里不会怎么实现 所以先这样表示</p>

<p>&nbsp;&nbsp;&nbsp; dey100ms;</p>

<p>}</p>

<p>void led_on的函数是一样的。</p>

woshixy1 发表于 2024-12-8 22:46

tagetage 发表于 2024-12-8 10:00
可以的,将IO作为函数的输入参数就可以了。我好久不写程序了。大约是下面这样的结构。

#define&nbsp; le ...

<p>谢谢 我试了一下 这样不行</p>

wangerxian 发表于 2024-12-9 09:38

<p>void led_on(u8 led_num)</p>

<p>{</p>

<p>&nbsp; &nbsp; P1 |= 0x01 &gt;&gt;&nbsp;led_num;</p>

<p>}</p>

<p>void led_off(u8 led_num)</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;P1 &amp;= ~(0x01 &gt;&gt;&nbsp;led_num);</p>

<p>}</p>

<p>类似这样实现,和32位的一样</p>

秦天qintian0303 发表于 2024-12-9 12:09

<p>没明白你的意思,两个引脚同样的操作,软件上封一层不就可以了,还是和你写的一样,不过是用一个函数封装上,直接操作寄存器的话可以对P2的整个全部引脚进行操作,实际上是差不多的,你也感觉不出来啊</p>

bigbat 发表于 2024-12-9 13:32

<p>sbit led1 = P2^1;</p>

<p>sbit led2 = P2^2;</p>

<p>void led_on(sbit&nbsp;*led_num)</p>

<p>{</p>

<p>&nbsp; &nbsp; P1 |= 0x01 &gt;&gt;&nbsp;led_num;</p>

<p>}</p>

<p>void led_off(sbit&nbsp;*led_num)</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;P1 &amp;= ~(0x01 &gt;&gt;&nbsp;led_num);</p>

<p>}</p>

<p>&nbsp;</p>

<p>call</p>

<p>led_on(&amp;led1);</p>

<p>led_off(&amp;led2);</p>

lansebuluo 发表于 2024-12-10 08:42

<div class='shownolgin' data-isdigest='no'>wangerxian 发表于 2024-12-9 09:38
void led_on(u8 led_num)

{

&nbsp; &nbsp; P1 |= 0x01 &gt;&gt;&nbsp;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>

wangerxian 发表于 2024-12-11 10:21

<div class='shownolgin' data-isdigest='no'>lansebuluo 发表于 2024-12-10 08:42
这个可以,专业都是这样写的,这样的函数,让我想起了51

<p>32位单片机入门学的就是这个。</p>
</div><script>showreplylogin();</script>
页: [1]
查看完整版本: 如何实现 51单片机 2个针脚 调用相同的函数