C51单片机return返回是函数名,函数嵌套调用举例
时间: 2023-11-28 18:05:02 浏览: 41
C51单片机的return语句用于从函数中返回值并结束函数的执行。下面是一个嵌套调用函数的例子:
```
#include <reg52.h>
void func1();
void func2();
void main()
{
func1();
}
void func1()
{
// do something
func2();
// do something else
}
void func2()
{
// do something
return;
}
```
在上述代码中,`main`函数调用了`func1`函数,`func1`函数又调用了`func2`函数。当`func2`函数执行到`return`语句时,它会返回到`func1`函数,并继续执行`func1`函数中的剩余代码。当`func1`函数执行完毕后,程序会回到`main`函数中并结束程序的执行。
相关问题
C51单片机,调用实参是函数名,举例
在C51单片机中,调用实参可以是函数名。举个例子:
假设有以下两个函数:
```c
void func1(void)
{
/* do something */
}
void func2(void (*ptr)(void))
{
/* 调用传递进来的函数指针 */
(*ptr)();
}
```
在func2函数中,有一个形参是一个函数指针,它可以接收一个函数名作为实参。例如,我们可以这样调用func2函数:
```c
func2(func1);
```
这样就相当于把func1函数的地址作为实参传递给了func2函数,func2函数就可以通过函数指针调用func1函数了。
c51单片机流水灯延时函数循环亮
在C51单片机中,实现流水灯(也叫七段数码管)的延时循环亮通常涉及到以下几个步骤:
1. **硬件连接**:首先确保你的数码管和单片机的P0或P1口正确连接,并且数码管的驱动方式(共阴极或共阳极)与你的代码匹配。
2. **数据配置**:定义数码管的段地址和位映射,这通常需要用到74HC595接口或者直接控制GPIO引脚。
3. **定时器使用**:C51的延时函数通常是通过定时器T0或者T1配合中断实现。你需要设置定时器的工作模式,比如工作于模式1,然后计算出一个定时初值,使得定时器溢出一次对应一定的延时时间。
4. **点亮和熄灭**:使用循环,每次定时器溢出后,改变数码管对应的输出位,实现亮度的变化。你可以通过改变数码管的段选和位选来控制每个LED的亮灭。
5. **主循环**:在主程序中,不断调用定时器中断服务程序(ISR),并在其中处理数码管的显示逻辑。
6. **中断服务程序**:在这个函数中,处理定时器溢出事件,更新数码管的状态,然后返回主循环继续下一个周期。
下面是简单示例代码的概述:
```c
#include <reg52.h>
#define LED_SEGMENTS 8 // 数码管段数
#define LED_INTERVAL (1000/25) // 每个LED段亮的时间,单位是us,这里假设为20us
void timer0_ISR() interrupt 1 // 定时器0溢出中断
{
P0 = ~P0; // 或者使用P1或其他数码管接口,根据实际连接
__delay_us(LED_INTERVAL);
}
void display_LEDs()
{
for(int i = 0; i < LED_SEGMENTS; ++i)
{
// 控制数码管显示
// ...
}
}
void main()
{
TMOD |= 0x01; // 设置定时器0为模式1
TH0 = 0; // 设置初始计数值,计算得自LED_INTERVAL
TL0 = 0;
EA = 1; // 开启全局中断
ET0 = 1; // 启动定时器0
TR0 = 1; // 开始计时
while(1)
{
// 显示LEDs
display_LEDs();
}
}
```