大家有不懂的地方请移步“格院生存指南”公众号

这里只提供代码的参考

请勿copy,请勿copy,请勿copy,重要的事情说三遍。这只是参考和思路分享。

exercise 1:

#include "mbed.h"
DigitalOUT REDLED (D5);
DigitalOut GREENLED (D6);
DigitalOut TESTPIN (D6);
int main()
{
    TESTPIN.write(0);
    //TESTPIN.write(1);
    while (true) {
        REDLED.write(1);
        GREENLED.write(0);
        ThisThread::sleep_for(1s);
        REDLED.write(0);
        GREENLED.write(1);
        ThisThread::sleep_for(1s);
        }
    }

exercise 2:

#include "mbed.h"

// 定义PWM参数
#define PWM_PERIOD_MS   1       // PWM周期,单位:毫秒
#define PWM_DUTY_CYCLE  0.5f    // PWM占空比,范围:0.0-1.0
#define DELAY_TIME      1000    // 延时时间,单位:毫秒

PwmOut pwm(D0);

int main()
{
    pwm.period_ms(PWM_PERIOD_MS);
    pwm.write(PWM_DUTY_CYCLE);
    
    while (true) {
        ThisThread::sleep_for(DELAY_TIME);
    }
}

exercise 3: 

#include "mbed.h"

// 定义引脚和参数常量
#define INPUT_PIN       A0      // 数字输入引脚
#define PWM_PIN         D0      // PWM输出引脚
#define DUTY_CYCLE      0.5f    // PWM占空比:50%
#define PERIOD_SLOW     5       // 慢速周期:5ms
#define PERIOD_FAST     2       // 快速周期:2ms
#define DELAY_TIME      1s      // 循环延时时间

// 创建输入输出对象
DigitalIn inputSignal(INPUT_PIN);   // 数字输入对象
PwmOut pwmOutput(PWM_PIN);          // PWM输出对象

int main()
{
    while (true) {
        // 设置固定占空比
        pwmOutput.write(DUTY_CYCLE);
        
        // 根据输入信号切换PWM周期
        if (inputSignal.read() == 1) {
            pwmOutput.period_ms(PERIOD_SLOW);    // 输入高电平时使用较慢周期
        } else {
            pwmOutput.period_ms(PERIOD_FAST);    // 输入低电平时使用较快周期
        }
        
        // 延时等待
        ThisThread::sleep_for(DELAY_TIME);
    }
}

exercise 4: 

#include "mbed.h"
DigitalOut p1(D4);
DigitalOut p2(D5);

int main()
{
    while (true) {
        p1.write(1);  p2.write(1);ThisThread::sleep_for(1s);
        p1.write(0);p2.write(1);ThisThread::sleep_for(1s);
        p1.write(1); p2.write(0);ThisThread::sleep_for(1s);
        p1.write(0); p2.write(0);ThisThread::sleep_for(1s);
    }
}

 exercise 5: 

#include "mbed.h"

// 定义七段数码管引脚
BusOut Display(A1, A2, A3, A4, A5, A6, A7);

// 定义显示字符的编码常量
#define DISPLAY_H  0x76    // 字母"H"的七段码
#define DISPLAY_E  0x79    // 字母"E"的七段码
#define DISPLAY_L  0x38    // 字母"L"的七段码
#define DISPLAY_O  0x73    // 字母"O"的七段码
#define DISPLAY_OFF 0x00   // 全部熄灭

// 定义时间常量
#define DISPLAY_DELAY 200ms  // 显示延时时间

int main()
{
    // 循环显示"HELO"五次
    for(int i = 0; i < 5; i++) {
        // 显示字母"H"
        Display = DISPLAY_H;
        ThisThread::sleep_for(DISPLAY_DELAY);
        
        // 显示字母"E"
        Display = DISPLAY_E;
        ThisThread::sleep_for(DISPLAY_DELAY);
        
        // 显示字母"L"
        Display = DISPLAY_L;
        ThisThread::sleep_for(DISPLAY_DELAY);

        // 显示字母"L"
        Display = DISPLAY_L;
        ThisThread::sleep_for(DISPLAY_DELAY);
        
        // 显示字母"O"
        Display = DISPLAY_O;
        ThisThread::sleep_for(DISPLAY_DELAY);
        
        // 短暂熄灭所有段,作为单词间的分隔
        Display = DISPLAY_OFF;
        ThisThread::sleep_for(DISPLAY_DELAY);
    }
}

 exercise 6: 

#include "mbed.h"

// 定义模拟输出引脚
AnalogOut VoltageTest(A3);

// 定义电压值常量
#define VOLTAGE_1  0.1515f  
#define VOLTAGE_2  0.3f     // 约1.00V (基于3.3V参考电压)
#define VOLTAGE_3  0.6f     // 约2.00V (基于3.3V参考电压)
#define VOLTAGE_4  0.76f    // 约2.50V (基于3.3V参考电压)

// 定义延时常量
#define DELAY_TIME 3s       // 每个电压级别的持续时间

int main()
{
    while (true) {
        // 输出第一级电压
        VoltageTest = VOLTAGE_1;
        ThisThread::sleep_for(DELAY_TIME);
        
        // 输出第二级电压
        VoltageTest = VOLTAGE_2;
        ThisThread::sleep_for(DELAY_TIME);
        
        // 输出第三级电压
        VoltageTest = VOLTAGE_3;
        ThisThread::sleep_for(DELAY_TIME);
        
        // 输出第四级电压
        VoltageTest = VOLTAGE_4;
        ThisThread::sleep_for(DELAY_TIME);
    }
}

 exercise 7:

这个结果纯纯试出来的,可信度不高

#include "mbed.h"

// 定义模拟输出引脚
AnalogOut Sawtooth_Wave(A3);

// 定义锯齿波参数
#define WAVE_STEPS      101     // 锯齿波的步进数量
#define STEP_INCREMENT  0.009   // 每步电压增量
#define STEP_DELAY      79      // 每步延时(微秒)

int main()
{   
    while (true) {
        // 生成锯齿波形
        for(int i = 0; i < WAVE_STEPS; i++) {
            // 计算并输出当前电压值
            Sawtooth_Wave.write(i * STEP_INCREMENT);
            
            // 延时以控制波形频率
            wait_us(STEP_DELAY);
        }
    }
}

 exercise 8:

#include "mbed.h"

// 定义LED引脚
#define LED1_PIN D4
#define LED2_PIN D5
#define LED3_PIN D6
#define LED4_PIN D9
#define VOLTAGE_PIN A3

// 定义电压阈值常量(基于3.3V参考电压)
#define THRESHOLD_1 0.18  // 约0.6V
#define THRESHOLD_2 0.35  // 约1.2V
#define THRESHOLD_3 0.54  // 约1.8V
#define THRESHOLD_4 0.70  // 约2.4V

int main()
{
    // 初始化LED输出引脚
    DigitalOut LED1(LED1_PIN);
    DigitalOut LED2(LED2_PIN);
    DigitalOut LED3(LED3_PIN);
    DigitalOut LED4(LED4_PIN);
    
    // 初始化模拟输入引脚
    AnalogIn InputVoltage(VOLTAGE_PIN);
    
    while (1)
    {
        // 读取当前电压值
        float voltage = InputVoltage.read();
        
        // 根据电压范围控制LED显示
        if (voltage <= THRESHOLD_1)  // 0 ~ 0.6V
        {
            LED1 = 0;
            LED2 = 0;
            LED3 = 0;
            LED4 = 0;
        }
        else if (voltage < THRESHOLD_2)  // 0.6V ~ 1.2V
        {
            LED1 = 1;
            LED2 = 0;
            LED3 = 0;
            LED4 = 0;
        }
        else if (voltage < THRESHOLD_3)  // 1.2V ~ 1.8V
        {
            LED1 = 1;
            LED2 = 1;
            LED3 = 0;
            LED4 = 0;
        }
        else if (voltage < THRESHOLD_4)  // 1.8V ~ 2.4V
        {
            LED1 = 1;
            LED2 = 1;
            LED3 = 1;
            LED4 = 0;
        }
        else  // 2.4V以上
        {
            LED1 = 1;
            LED2 = 1;
            LED3 = 1;
            LED4 = 1;
        }
    }
}

  exercise 9:

大一写的时候没注意保存

被我搞掉了

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐