当前位置: 首页 > news >正文

wap建站程序免费logo设计网站推荐

wap建站程序,免费logo设计网站推荐,网站怎么做等级保护,社区建设网站文章目录 C语言装饰器模式详解与实践 - LED控制系统1. 什么是装饰器模式#xff1f;2. 为什么需要装饰器模式#xff1f;3. 实际应用场景4. 代码实现4.1 头文件 (led_decorator.h)4.2 实现文件 (led_decorator.c)4.3 使用示例 (main.c) 5. 代码分析5.1 关键设计点5.2 实现特点… 文章目录 C语言装饰器模式详解与实践 - LED控制系统1. 什么是装饰器模式2. 为什么需要装饰器模式3. 实际应用场景4. 代码实现4.1 头文件 (led_decorator.h)4.2 实现文件 (led_decorator.c)4.3 使用示例 (main.c) 5. 代码分析5.1 关键设计点5.2 实现特点 6. 编译和运行7. 注意事项8. 改进建议9. 总结参考资料 C语言装饰器模式详解与实践 - LED控制系统 1. 什么是装饰器模式 装饰器模式允许我们动态地向对象添加新的功能而不改变其原有结构。在LED控制系统中我们可以通过装饰器模式实现不同的LED效果叠加。 2. 为什么需要装饰器模式 动态添加LED效果效果可以自由组合不修改原有代码符合开闭原则代码复用性高 3. 实际应用场景 LED状态指示设备运行状态显示警告信号显示用户界面反馈调试信息显示 4. 代码实现 #mermaid-svg-dhIYfx7i809om8j0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dhIYfx7i809om8j0 .error-icon{fill:#552222;}#mermaid-svg-dhIYfx7i809om8j0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-dhIYfx7i809om8j0 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-dhIYfx7i809om8j0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-dhIYfx7i809om8j0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-dhIYfx7i809om8j0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-dhIYfx7i809om8j0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-dhIYfx7i809om8j0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-dhIYfx7i809om8j0 .marker.cross{stroke:#333333;}#mermaid-svg-dhIYfx7i809om8j0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-dhIYfx7i809om8j0 g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-dhIYfx7i809om8j0 g.classGroup text .title{font-weight:bolder;}#mermaid-svg-dhIYfx7i809om8j0 .nodeLabel,#mermaid-svg-dhIYfx7i809om8j0 .edgeLabel{color:#131300;}#mermaid-svg-dhIYfx7i809om8j0 .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-dhIYfx7i809om8j0 .label text{fill:#131300;}#mermaid-svg-dhIYfx7i809om8j0 .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-dhIYfx7i809om8j0 .classTitle{font-weight:bolder;}#mermaid-svg-dhIYfx7i809om8j0 .node rect,#mermaid-svg-dhIYfx7i809om8j0 .node circle,#mermaid-svg-dhIYfx7i809om8j0 .node ellipse,#mermaid-svg-dhIYfx7i809om8j0 .node polygon,#mermaid-svg-dhIYfx7i809om8j0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-dhIYfx7i809om8j0 .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-dhIYfx7i809om8j0 g.clickable{cursor:pointer;}#mermaid-svg-dhIYfx7i809om8j0 g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-dhIYfx7i809om8j0 g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-dhIYfx7i809om8j0 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-dhIYfx7i809om8j0 .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-dhIYfx7i809om8j0 .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-dhIYfx7i809om8j0 .dashed-line{stroke-dasharray:3;}#mermaid-svg-dhIYfx7i809om8j0 #compositionStart,#mermaid-svg-dhIYfx7i809om8j0 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dhIYfx7i809om8j0 #compositionEnd,#mermaid-svg-dhIYfx7i809om8j0 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dhIYfx7i809om8j0 #dependencyStart,#mermaid-svg-dhIYfx7i809om8j0 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dhIYfx7i809om8j0 #dependencyStart,#mermaid-svg-dhIYfx7i809om8j0 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dhIYfx7i809om8j0 #extensionStart,#mermaid-svg-dhIYfx7i809om8j0 .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dhIYfx7i809om8j0 #extensionEnd,#mermaid-svg-dhIYfx7i809om8j0 .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dhIYfx7i809om8j0 #aggregationStart,#mermaid-svg-dhIYfx7i809om8j0 .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dhIYfx7i809om8j0 #aggregationEnd,#mermaid-svg-dhIYfx7i809om8j0 .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-dhIYfx7i809om8j0 .edgeTerminals{font-size:11px;}#mermaid-svg-dhIYfx7i809om8j0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} LedController set_state() update() destroy() BasicLed -pin -state LedDecorator -wrapped BlinkLed -interval -counter -state BreathLed -period -counter SosLed -counter -pattern_pos -pattern -pattern_length 4.1 头文件 (led_decorator.h) #ifndef LED_DECORATOR_H #define LED_DECORATOR_H#include stdint.h #include stdbool.h// LED控制接口 typedef struct {void (*set_brightness)(void* self, uint8_t level);void (*update)(void* self);void (*destroy)(void* self); } LedController;// 基础LED控制器 typedef struct {LedController base;uint8_t pin; // LED引脚uint8_t brightness; // 当前亮度 } BasicLed;// LED装饰器基类 typedef struct {LedController base;LedController* wrapped; } LedDecorator;// 创建基础LED控制器 LedController* create_basic_led(uint8_t pin);// 创建闪烁装饰器 LedController* create_blink_led(LedController* wrapped, uint16_t interval_ms);// 创建呼吸灯装饰器 LedController* create_breath_led(LedController* wrapped, uint16_t period_ms);// 创建渐变装饰器 LedController* create_fade_led(LedController* wrapped, uint16_t fade_time_ms);// 销毁LED控制器 void destroy_led_controller(LedController* controller);#endif // LED_DECORATOR_H4.2 实现文件 (led_decorator.c) #include led_decorator.h #include stdio.h #include stdlib.h// 模拟硬件操作 static void hw_set_pin(uint8_t pin, uint8_t level) {printf(设置引脚 %d 亮度为 %d\n, pin, level); }// 基础LED控制器实现 static void basic_set_brightness(void* self, uint8_t level) {BasicLed* led (BasicLed*)self;led-brightness level;hw_set_pin(led-pin, level); }static void basic_update(void* self) {// 基础LED不需要更新 }static void basic_destroy(void* self) {free(self); }// 闪烁装饰器实现 typedef struct {LedDecorator base;uint16_t interval;uint16_t counter;bool state; } BlinkLed;static void blink_set_brightness(void* self, uint8_t level) {BlinkLed* led (BlinkLed*)self;led-base.wrapped-set_brightness(led-base.wrapped, level); }static void blink_update(void* self) {BlinkLed* led (BlinkLed*)self;led-counter;if (led-counter led-interval) {led-counter 0;led-state !led-state;led-base.wrapped-set_brightness(led-base.wrapped, led-state ? 255 : 0);} }static void blink_destroy(void* self) {BlinkLed* led (BlinkLed*)self;destroy_led_controller(led-base.wrapped);free(led); }// 呼吸灯装饰器实现 typedef struct {LedDecorator base;uint16_t period;uint16_t counter; } BreathLed;static void breath_set_brightness(void* self, uint8_t level) {BreathLed* led (BreathLed*)self;led-base.wrapped-set_brightness(led-base.wrapped, level); }static void breath_update(void* self) {BreathLed* led (BreathLed*)self;led-counter;if (led-counter led-period) {led-counter 0;}// 使用正弦波实现呼吸效果float phase (float)led-counter / led-period * 3.14159f * 2;uint8_t brightness (uint8_t)((sinf(phase) 1.0f) * 127.5f);led-base.wrapped-set_brightness(led-base.wrapped, brightness); }static void breath_destroy(void* self) {BreathLed* led (BreathLed*)self;destroy_led_controller(led-base.wrapped);free(led); }// 创建函数实现 LedController* create_basic_led(uint8_t pin) {BasicLed* led (BasicLed*)malloc(sizeof(BasicLed));led-base.set_brightness basic_set_brightness;led-base.update basic_update;led-base.destroy basic_destroy;led-pin pin;led-brightness 0;return (LedController*)led; }LedController* create_blink_led(LedController* wrapped, uint16_t interval_ms) {BlinkLed* led (BlinkLed*)malloc(sizeof(BlinkLed));led-base.base.set_brightness blink_set_brightness;led-base.base.update blink_update;led-base.base.destroy blink_destroy;led-base.wrapped wrapped;led-interval interval_ms;led-counter 0;led-state false;return (LedController*)led; }LedController* create_breath_led(LedController* wrapped, uint16_t period_ms) {BreathLed* led (BreathLed*)malloc(sizeof(BreathLed));led-base.base.set_brightness breath_set_brightness;led-base.base.update breath_update;led-base.base.destroy breath_destroy;led-base.wrapped wrapped;led-period period_ms;led-counter 0;return (LedController*)led; }void destroy_led_controller(LedController* controller) {if (controller controller-destroy) {controller-destroy(controller);} }4.3 使用示例 (main.c) #include led_decorator.h #include stdio.h #include windows.h // 用于Sleep函数void simulate_time(LedController* led, int ms) {printf(\n模拟运行 %d ms:\n, ms);for (int i 0; i ms; i 100) {led-update(led);Sleep(100); // 模拟时间流逝} }int main() {// 创建基础LED使用引脚13LedController* led create_basic_led(13);printf( 测试基础LED \n);led-set_brightness(led, 128); // 设置50%亮度printf(\n 测试闪烁LED \n);led create_blink_led(led, 500); // 500ms闪烁间隔simulate_time(led, 2000); // 运行2秒printf(\n 测试呼吸LED \n);led create_breath_led(led, 2000); // 2000ms呼吸周期simulate_time(led, 3000); // 运行3秒// 清理资源destroy_led_controller(led);return 0; }5. 代码分析 5.1 关键设计点 LED控制接口统一装饰器链式组合时间管理机制资源管理完善 5.2 实现特点 函数指针实现多态模块化设计效果可组合代码复用性高 6. 编译和运行 gcc -c led_decorator.c -o led_decorator.o gcc -c main.c -o main.o gcc led_decorator.o main.o -o led_demo7. 注意事项 时序控制精度内存管理硬件接口抽象中断处理 8. 改进建议 添加PWM控制实现更多效果优化时间管理添加错误处理 9. 总结 装饰器模式在LED控制系统中的应用使得我们可以灵活地组合不同的LED效果同时保持代码的清晰和可维护性。这种模式特别适合需要动态组合多种LED效果的场景。 参考资料 《嵌入式系统设计》《设计模式》《单片机编程实践》
http://www.pierceye.com/news/794547/

相关文章:

  • 创建网站有免费的吗大庆网络推广
  • 南昌p2p网站建设公司福州seo关键词排名
  • 导航网站链接怎么做建设网站的费用调研
  • 北京营销型网站定制网站开发 建设叫什么
  • 用ps做企业网站分辨率是多少钱百度竞价是什么
  • 九江市建设局官方网站网站支付开发
  • 福建建设银行官方网站开发一个大型网站需要多少钱
  • 电子商务建立网站前期准备网站做的不好使
  • 网站建设绵阳电影发布网站模板
  • 河北商城网站搭建多少钱金融 网站 源码
  • 知乎 做网站的公司 中企动力中国十大招商平台
  • 做中英文版的网站需要注意什么怎么解决
  • 电子商务网站开发附件一个外国人做的汉子 网站
  • 找南昌网站开发公司电话寓意好的公司名字
  • 网站商城设计方案做网站的图片传进去很模糊
  • 百度站长平台电脑版cpm广告联盟平台
  • 哪些网站需要做分享按钮米卓网站建设
  • 做的网站怎样评估价值微商城网站建设平台
  • 后台网站更新 网站没显示广告投放代理商
  • 北京住房保障建设投资中心网站wordpress文章页面修改
  • 游戏网站建设项目规划书案例集约化网站群建设情况
  • 网站策划书编写阿里云部署多个网站
  • 品牌高端网站制作公司佛山新网站建设如何
  • 网站开发中怎么设置快捷键网页设计知名网站
  • 公司网上注册在哪个网站分析网络营销方式
  • 网站用什么颜色外贸企业建站公司
  • 网站下载音乐网站开发公司知乎
  • 什么样式表一般用于大型网站什么是seo搜索
  • 做网站用vue还是用jquery济宁网站建设 中企动力临沂
  • 网站专题教程最吸引人的营销广告词