PEC 代码简短参考 (简化摘录)
PEC( Portable Embedded Classes) 代表便携式嵌入式类,是微控制器应用程序的类库。
供应用程序开发人员使用的所有类和模板都以 前缀 Pec … 开头。这些库模块的专有使用确保了所创建应用程序的可移植性。以下简短参考显示了最重要的 PEC 库模块及其基本功能。可以从相应的类模型自动生成所有 PEC 模块的完整文档。.
PEC 库模块的使用始终遵循以下模式:
- 为每个系统组件创建一个单独的类
- 搜索并分配合适的PEC库块
- 分配或配置使用的特定硬件
- 创建系统块的实例
示例 1: 在引脚 B0 上提供用于错误显示的指示灯 LED。
- 定义系统块的名称并创建类: ErrorLED
- 对于此类应用程序,库提供了高级类模板 PecLed,可以将其分配
- 模板必须补充资源pinB0
- 应用程序需要块的实例,例如作为控制器(Controller)类中的聚合
示例2: 控制器UART0 上提供RS232 端口,用于嵌入式系统的配置
- 定义系统模块的名称并创建一个类:终端 Terminal
- 该库为此类用例提供了类模板 PecUart 来分配它们
- 模板必须补充资源uart0xxx
- 应用程序需要块的实例,例如作为控制器( Controller)类中的聚合
注意: 所用硬件的名称是特定于控制器的!!
GPIO的基本组件
PecPinInput «template» 需要 pinXn 作为参数, [pullUp]bool getState() // 从引脚 0/1 读取当前状态
PecPinOutput «template» 需要 pinXn 作为参数bool getState() // 从引脚 0/1 读取当前状态 void setState(bool) // 设置引脚 0/1 的新状态 void on() // 打开引脚 1 void off() // 关闭引脚 0 void toggle() // 引脚切换0->1 / 1->0
PecPinInterrupt «template» 需要 pinXn 作为参数, [pullUp]bool getState() // 从引脚 0/1 读取当前状态 virtual void onPinEvent() // 用于覆盖,事件处理功能
pinXn «parameter» 模板的«参数»#define %port% X #define %pin% n
pinPullUp «parameter» 模板的«参数»#define %pinLevel% 1!
面向应用的 GPIO 模块
PecPinOutputTimed «template» 需要 pinXn 作为参数void on(delay) // x 毫秒. 延迟开启(10 ms 网格) void off(delay) // x 毫秒. 延迟关闭(10 ms 网格) void toggle(delay) // x 毫秒. 延迟切换(10 ms 网格) void pulse(delay,pulseMs) // ______|-------| void pulse(delay,hiMs,loMs,count) // ______|-------|_______|------| ... bool isBusy() // 提供状态,true = 仍然忙
PecLED «template» 需要 pinXn 作为参数void on() // LED 打开 void off() // LED 关闭 void toggle() // LED 切换 void flash() // LED 短暂闪烁 void blink(code) // 在代码上切换闪烁代码 = 3 |||_|||_|||_... uint8_t getBlinkCode() // 提供当前闪烁代码 void nextBlinkCode() // 当前闪烁代码 +1 void slowBlink() // 缓慢闪烁 ... |__|__|__|__... void flicker() // 快速闪烁 ... ||||||||||||... void dim() // 亮度降低 50%
PecButtonClickAndHold «template» 需要 pinXn 作为参数bool isPressed() // 提供按钮的当前状态, true = 按下 virtual void onClick() // 覆盖,点击事件函数 virtual void onHoldStart() // 覆盖, 在开始时保持事件 virtual void onHolding() // 覆盖, 事件每 10 毫秒保持一次 virtual void onHoldEnd() // 覆盖, 事件保持结束
UART的基本模块
PecUart «template» 需要参数 baudrateXXX, uartN
void writeByte(byte) // 发送一个 8 位值(字节)(Byte) void writeString("String") // 发送文本 bool dataAviable() // 检查数据是否存在 uint8_t readByte() // 读取一个字节Byte void write(WORD) // 发送一个 16 位值 void write(DWORD) // 发送一个 32 位值 void writeData(buffer,count) // 从缓冲区发送 n 个字节
uartEventRx «template» 扩展模板 PecUart
void onEventRx(data) // 接收事件 // 必须覆盖
baudrateXXXX «参数» 用于模板 PecUart
#define %baud% xxx
ADC的基本模块
PecAdcSingle «template» 需要参数 adcX, resolutionX, channelN,unsigned int getValue() // 提供当前模拟值
PecAdcChannel «template» 需要参数 adcX, resolutionX, channelN,unsigned int getValue() // 提供通道的最后一个模拟值
adcX «parameter» PecAdc …需要 adcX «参数»#define %adc% X // 0, 1, 2, ...
channelN «parameter» PecAdc …需要 channelN «参数»#define %channel% N // 0, 1, 2, ...
adcResolutionX «parameter» PecAdc …需要 adcResolutionX «参数»#define %resolution% X // 8, 10, 12
TIMER定时器的基本模块
PecTimer «template» 需要参数 timerN// 自定义定时器的类模板 void configHz(hz) // 初始化并以 x Hz启动计时器 void configMs(ms) // 初始化并以 x mS启动计时器 void configUs(us) // 初始化并用 x µS启动计时器 void stop() // 停止计时器 virtual onTimerEvent() // 覆盖,定时器事件功能 // 如果需要,也可以直接在中断中处理
PecCounterMs «template» 需要参数 timerN// 秒表模板,实现毫秒计时 void start() // 从 0 开始秒表 unsigned int stop() // 停止秒表并提供测量值 unsigned int getCount() // 提供当前值,秒表继续运行 unsigned int reStart() // 秒表从 0 开始重新启动,执行当前值
PecCounterUs «template» 需要参数 timerN// 秒表模板,实现微秒级计时 void start() // 从 0 开始秒表 unsigned int stop() // 停止秒表并提供测量值 unsigned int getCount() // 提供当前值,秒表继续运行 unsigned int reStart() // 秒表从 0 开始重新启动,执行操作.当前值
PecPwmChannel «template» 需要参数 timerN 和 channelXvoid configHz() // 配置PWM频率 void setDuty(duty) // 设置伪模拟值 0 ... 1000 void start() // 启动 PWM 输出 void stop() // 停止 PWM 输出
PecFrequencyChannel «template» benötigt Para. timerN und channelXvoid setHz(hz) // 配置输出频率 void on() // 启动频率输出 void off() // 停止频率输出
timerN «parameter» 用于 PecTimer…#define %timer% n // 0, 1, 2, ...
channelX «parameter» 用于 Pec…Channel#define %channel% X // A, B, C, ...
面向应用的 TIMER 模块
PecSimpleSound «template» 需要参数 timerN, channelXvoid play("SoundCode") // 播放字符串中编码的音调序列(旋律)) void stop() // 停止当前声音输出 bool isPlaying() // 检查是否还有声音输出
// -------------------------------------------------------------- // 声音代码: // 音调 = 字母,大写字母高八度 // cdefgah = ton // c´ = cis (des) =w // e´ = es (dis) =x // f´ = fis (ges) =y // a´ = as (gis) =z // b = (ais) // 音调 = 字母,大写字母高八度 // k...v = c...h inclusive cis,es,fis,as,b // / 从现在开始高 1 个八度 // \ 从现在开始低 1 个八度 // , 短停顿 1/4 音符长度 // . 长停顿 1/1 音符长度 // 标准 = 1/8 音符 // ^ 从现在开始快 2 倍(例如 1/16 音符) // v 从现在开始减慢 1/2(例如 1/4 音符) // 空格 = 没有意义也没有效果 //----------------------------------------------------------------- // 例子:一首童谣: speaker.play( "v d,e,f,g,aa,aa, h,h,h,h,aa,.. h,h,h,h,aa,.. g,g,g,g,ff,ff, a,a,a,a,dd" );