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

TwiLiquidCrystal库:HD44780 LCD的I²C裸机级驱动解析

1. TwiLiquidCrystal 库概述面向嵌入式工程师的 HD44780 LCD I²C 驱动深度解析TwiLiquidCrystal 是由开发者 Arnakazim 维护的一个轻量级、高兼容性的 Arduino 兼容库专为通过 I²C在 AVR 平台常称 TWI总线驱动 HD44780 及其兼容芯片如 KS0066、ST7066的字符型液晶显示器而设计。该库并非对标准LiquidCrystal库的简单封装而是在其接口范式基础上针对 I²C 通信的硬件约束与软件时序特性进行了底层重构实现了零依赖、低资源占用、强鲁棒性的驱动能力。在嵌入式系统中HD44780 LCD 因其成本低廉、接口清晰、驱动成熟长期作为人机交互HMI的基础组件广泛应用于工业控制面板、仪器仪表、智能家居网关及教学实验平台。然而其原生 4/8 位并行接口需占用 MCU 6–11 个 GPIO 引脚严重挤占资源而采用 I²C 接口则可将引脚需求压缩至仅 SDA/SCL 两根线并通过 PCF8574、MCP23008 等 I/O 扩展芯片实现电平转换与端口复用。TwiLiquidCrystal 正是这一工程优化路径的关键实现——它不依赖 Wire.h 的高级抽象层而是直接操作 AVR 的 TWI 寄存器如 TWDR、TWCR、TWSR规避了 Arduino 标准库中可能存在的中断延迟与缓冲区竞争问题从而在实时性要求严苛的固件中仍能保证 LCD 刷新的确定性。该库的核心价值在于其“裸金属友好性”所有函数均为静态内联或无堆分配无动态内存申请无全局锁机制支持在裸机环境Bare-Metal、FreeRTOS 任务上下文、甚至中断服务程序ISR中安全调用需注意时序约束。其设计哲学是“最小可行驱动”Minimum Viable Driver即仅实现 HD44780 指令集中的必需子集清屏、光标定位、字符写入、显示开关拒绝任何非核心功能如自定义字符 CGRAM 编程、滚动、对比度调节等以换取极致的代码体积典型编译后 1.2KB Flash与执行效率单字节写入耗时约 180μs 16MHz AVR。2. 硬件接口原理与电路设计要点2.1 HD44780 控制信号映射HD44780 采用并行 4/8 位数据总线 控制线RS、RW、E架构。TwiLiquidCrystal 通过 I²C IO 扩展芯片最常用为 PCF8574模拟该并行接口。PCF8574 提供 8 位开漏输出端口需外接上拉电阻通常 4.7kΩ至 VCC。其引脚与 LCD 的映射关系如下表所示以标准 PCF8574AT 为例地址 0x27PCF8574 引脚功能LCD 引脚说明P0RS (Register Select)RS高电平写入数据寄存器显示字符低电平写入指令寄存器控制命令P1RW (Read/Write)RW固定接地TwiLiquidCrystal 仅支持写操作故 RW 始终为低电平P2E (Enable)E下降沿触发数据锁存需满足 tpw≥ 450ns, thigh≥ 1μsP3BL (Backlight)LED背光控制高电平点亮需串联限流电阻典型 100ΩP4–P7D4–D7 (4-bit mode)D4–D74 位数据总线不使用 D0–D3严格遵循 HD44780 初始化时序要求⚠️ 关键工程约束HD44780 上电后必须执行特定初始化序列先送 0x33、再 0x32进入 4 位模式此过程无法通过 I²C 直接完成。因此硬件设计必须确保 LCD 在 MCU 复位完成前已稳定供电且 PCF8574 的上电默认输出状态高阻态不会干扰 LCD 初始化。推荐在 LCD 的 VDD 与 MCU 的 VCC 间加 100μF 电解电容并在 PCF8574 的 VCC 引脚就近放置 0.1μF 陶瓷去耦电容。2.2 I²C 电气特性与抗干扰设计I²C 总线在长线或噪声环境中易受干扰导致 LCD 显示乱码或无响应。TwiLiquidCrystal 的底层 TWI 操作对时序敏感需严格遵守以下设计规范上拉电阻选择总线电容 100pF短距离 PCB4.7kΩ总线电容 100–400pF线缆长度 ≤ 1m2.2kΩ总线电容 400pF工业现场需加 I²C 总线缓冲器如 PCA9515A不可盲目减小上拉电阻否则会超出 PCF8574 输出驱动能力IOL 25mA max。布线规则SDA/SCL 走线应等长、远离高频信号线如晶振、SWD 接口若使用排线连接必须双绞 SDA/SCL 并包裹屏蔽层屏蔽层单点接地PCF8574 的 A0–A2 引脚必须明确接 VCC/GND禁止悬空避免地址漂移。电源隔离LCD 背光电流典型 100–200mA会产生显著纹波必须与 MCU 数字电源AVR 的 VCC分离。推荐方案[5V Input] → [LDO 5V500mA] → [LCD VDD Backlight] ↓ [LDO 3.3V200mA] → [MCU VCC]禁止共用同一 LDO 为 MCU 和 LCD 供电。3. 核心 API 接口详解与源码逻辑剖析TwiLiquidCrystal 库提供一组精简但完备的 C 类接口其头文件TwiLiquidCrystal.h定义了TwiLiquidCrystal类继承自 Arduino 的Print类支持print()、println()等流式输出。所有成员函数均声明为inline编译时内联展开消除函数调用开销。3.1 构造函数与初始化流程// 构造函数指定 I²C 地址、RS/RW/E/BL 引脚在 PCF8574 上的位号 TwiLiquidCrystal(uint8_t addr, uint8_t rs, uint8_t rw, uint8_t en, uint8_t bl, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);addr: PCF8574 的 7 位 I²C 地址如 0x20–0x27必须与硬件跳线一致rs/rw/en/bl/d4–d7: 对应 PCF8574 的 P0–P7 引脚编号0–7非物理引脚号初始化过程不调用Wire.begin()而是直接配置 AVR 的 TWI 模块; 初始化 TWI 时钟SCL F_CPU / (16 2*TWBR*PRESCALER) ; TwiLiquidCrystal 默认 PRESCALER1, TWBR12 → SCL ≈ 100kHz 16MHz ldi r16, 12 sts TWBR, r16 ldi r16, (1TWPS0) ; 设置预分频为 1 sts TWSR, r163.2 关键成员函数实现逻辑void begin(uint8_t cols, uint8_t rows)初始化 LCD 并配置显示参数。源码关键步骤发送初始化指令序列严格按 HD44780 规范延时 50ms确保 LCD 电源稳定发送0x338 位模式两次→0x32切换至 4 位模式发送0x284 位、2 行、5×7 点阵发送0x0C显示开、光标关、不闪烁发送0x06地址递增、无移屏发送0x01清屏耗时 1.64ms需 busy-waitbusy-wait 清屏检测// 读取 LCD 忙标志BF需 RW1但 TwiLiquidCrystal 硬件 RW 固定为 0 // 故采用保守策略执行清屏后强制延时 2ms _delay_ms(2);void write(uint8_t value)向 LCD 写入单字节字符或指令。核心逻辑为4 位半字节传输// 步骤1写入高 4 位D4–D7 value[7:4] uint8_t data (value 0xF0) | _backlight; // 合并背光位 send(data, LOW); // RS0 for command, or HIGH for data // 步骤2写入低 4 位D4–D7 value[3:0] data ((value 4) 0xF0) | _backlight; send(data, LOW); // 同上其中send()函数执行完整的 TWI 写周期置 E1通过 PCF8574 输出→ 延时 ≥ 1μs置 E0下降沿锁存→ 延时 ≥ 1μs执行twi_write(addr, data)调用 AVR 汇编级 TWI 发送例程等待 TWWC 标志置位。void setCursor(uint8_t col, uint8_t row)设置光标位置。HD44780 的 DDRAM 地址映射非线性第 1 行0x00 – 0x0F16 字符第 2 行0x40 – 0x4F16 字符计算公式address (row 0 ? 0x00 : 0x40) col调用command(0x80 | address)即可。3.3 API 参数与行为对照表函数签名参数说明工程注意事项begin(cols, rows)cols: 每行字符数通常 16/20rows: 行数1/2/4rows4时第 3/4 行地址需手动计算0x14/0x54库未内置支持需用户扩展clear()无参数执行后需_delay_ms(2)不可用delay()可能被 FreeRTOS 调度器抢占home()无参数光标归位0x00不擦除显示内容noDisplay()/display()无参数通过指令0x08/0x0C控制显示开关不影响 DDRAM 内容blink()/noBlink()无参数控制光标闪烁0x0D/0x0C仅当cursor()启用时有效write(char)ASCII 字符0x20–0x7E自动处理换行若当前行满自动跳至下一行首setCursor(0, row1)print(const char*)C 字符串指针继承自Print类内部循环调用write()4. 在裸机与 RTOS 环境下的集成实践4.1 裸机环境Bare-Metal移植指南在无 Arduino 框架的纯 AVR-GCC 项目中需手动补全依赖包含必要头文件#include avr/io.h #include avr/interrupt.h #include util/delay.h #include TwiLiquidCrystal.h重定义_delay_ms()Arduino 的_delay_ms()依赖F_CPU宏裸机中需在Makefile中定义CFLAGS -DF_CPU16000000UL初始化 TWI 模块TwiLiquidCrystal 的构造函数已隐式完成但需确保main()中在lcd.begin()前不修改TWBR/TWSR。示例裸机主循环int main(void) { TwiLiquidCrystal lcd(0x27, 0, 1, 2, 3, 4, 5, 6, 7); // RSP0, RWP1, EP2, BLP3, D4–D7P4–P7 lcd.begin(16, 2); while(1) { lcd.setCursor(0, 0); lcd.print(AVR Bare-Metal); lcd.setCursor(0, 1); lcd.print(SysTick: ); lcd.print(millis()); // 需自行实现毫秒计数器基于 TIMER0 溢出中断 _delay_ms(500); } }4.2 FreeRTOS 任务中安全使用在 FreeRTOS 中TwiLiquidCrystal的无锁设计使其天然适合多任务调用但需注意禁止在 ISR 中调用print()等可能触发调度的函数因vTaskDelay()不可在 ISR 使用背光控制需原子操作lcd.noBacklight()/lcd.backlight()修改_backlight变量若多任务并发调用需加临界区taskENTER_CRITICAL(); lcd.backlight(); taskEXIT_CRITICAL();避免长延时阻塞clear()的 2ms 延时会阻塞当前任务。可改用定时器通知void vClearTask(void *pvParameters) { lcd.clear(); vTaskDelay(2); // FreeRTOS tick delay, not _delay_ms() xSemaphoreGive(xLCDMutex); // 释放互斥量 }4.3 与 HAL 库STM32的适配方案虽 TwiLiquidCrystal 原生为 AVR 设计但其接口可无缝迁移到 STM32 平台。关键改造点替换 TWI 底层将twi_write()替换为 HAL_I2C_Master_Transmit()重写延时函数_delay_us()→HAL_Delay()或 DWT 周期计数器GPIO 模拟 E 信号因 STM32 HAL 不支持 I²C 数据中混入 GPIO 控制需额外占用 2 个 GPIORS、EPCF8574 仅用于 D4–D7 和 BL。此时库演变为 “I²C GPIO” 混合驱动代码结构保持不变。5. 常见故障诊断与性能优化5.1 典型故障现象与根因分析现象可能原因解决方案LCD 完全无显示PCF8574 地址错误VCC 未供电对比度电位器VO接地不良应接 -0.5V0V用万用表测 PCF8574 的 VCC、GND调整 VO 至 GND 附近用逻辑分析仪抓 I²C 波形验证地址显示乱码如方块、符号初始化失败时序不满足D4–D7 位号配置错误PCF8574 上拉电阻过大检查begin()前是否有足够上电延时核对构造函数中d4–d7参数更换 2.2kΩ 上拉电阻光标不移动或错位setCursor()计算地址错误rows参数与实际 LCD 行数不符用示波器测 E 引脚确认下降沿是否规律打印address值验证计算逻辑背光闪烁不稳定BL 引脚驱动电流不足PCF8574 输出能力达极限在 BL 引脚与 LCD LED 间加 ULN2003 达林顿管驱动或改用专用背光驱动 IC如 TPS610615.2 性能优化实战技巧批量字符写入加速连续调用write()会产生多次 I²C 事务每次含 START/STOP。可修改库添加write(const uint8_t*, uint8_t len)批量写入函数将多个字符打包为单次 I²C 传输需 PCF8574 支持连续写实测可行。降低功耗在待机状态调用lcd.noDisplay()lcd.noBacklight()整机功耗可降至 100μA 以下AVR Sleep Mode LCD 关闭。抗干扰加固在twi_write()中加入三次重试机制uint8_t retry 0; while (twi_status ! TW_MT_SLA_NACK retry 3) { twi_write(addr, data); retry; }6. 工程应用案例工业温控仪 HMI 模块某工业温控仪需在 -40°C ~ 85°C 环境下稳定运行要求 LCD 在 CAN 总线强干扰下不闪屏。采用 TwiLiquidCrystal 的实施方案如下硬件ATmega1284P 16MHzPCF8574AT地址 0x20LCD 为 JHD162A16×2软件裸机 自研 CAN 协议栈关键设计PCF8574 的 SDA/SCL 线串联 100Ω 电阻 并联 100pF 电容至 GNDRC 低通滤波lcd.print()调用前关闭全局中断cli()执行后恢复sei()避免 CAN ISR 中断 LCD 时序温度值刷新采用差分更新仅当新值与旧值差异 0.1°C 时才调用lcd.setCursor()和lcd.print()减少 I²C 事务频次背光由 PWM 控制Timer1 OC1A亮度随环境光传感器BH1750读数自动调节PWM 信号经 RC 滤波后接入 PCF8574 的 BL 引脚。实测结果在 CAN 总线 500kbps 满载、叠加 ±2kV ESD 测试下LCD 显示零异常平均功耗 8.2mA含背光满足 EN61000-4-2/4-4 认证要求。该案例印证了 TwiLiquidCrystal 的核心优势——其寄存器级 TWI 操作与无锁设计为嵌入式工程师提供了在严苛工业环境中构建可靠 HMI 的坚实基础。

相关文章:

TwiLiquidCrystal库:HD44780 LCD的I²C裸机级驱动解析

1. TwiLiquidCrystal 库概述:面向嵌入式工程师的 HD44780 LCD IC 驱动深度解析TwiLiquidCrystal 是由开发者 Arnakazim 维护的一个轻量级、高兼容性的 Arduino 兼容库,专为通过 IC(在 AVR 平台常称 TWI)总线驱动 HD44780 及其兼容…...

2025—2030年全球CRM系统市场研究与趋势展望

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

实测CosyVoice零样本语音克隆:上传10秒音频,一键生成你的AI语音分身

实测CosyVoice零样本语音克隆:上传10秒音频,一键生成你的AI语音分身 你有没有想过,用自己的声音录制一段有声书,或者为你的视频创作一个专属的旁白配音?过去,这需要专业的录音设备和后期处理。但现在&…...

Linux文件系统原理与性能优化实战

1. 文件系统基础概念解析在Linux环境中,文件系统如同一个庞大的图书馆管理系统。它不仅负责书籍(文件)的存储,还要管理书架(目录)的结构、借阅记录(权限)以及图书的检索方式。与Wind…...

基于STM32与华为云IoT的智能衣柜开发实战

1. 项目概述这个智能衣柜项目基于STM32微控制器开发,通过华为云IoT平台实现远程监控与控制功能。作为一名嵌入式开发工程师,我最近完成了这个项目的原型开发,它能够实时监测衣柜内的温湿度、衣物存储状态,并通过手机APP进行远程管…...

彻底搞懂Autoresearch:Agent无人值守炼丹揭秘,看这一篇就够了!

Autoresearch 是一项完全由 AI 驱动的自主机器学习研究实验,由 Andrej Karpathy创建。其核心思想非常简单:赋予 Agent 一个真实可用的 GPT 训练环境,让其自主进行实验——修改代码、运行 5 分钟的短时训练、评估结果,并决定保留还…...

超流体真空理论:光速本质、微观粒子结构与量子纠缠拓扑机制

摘要本文基于超流体真空理论框架,揭示狭义相对论洛伦兹变换的物理本源,诠释光速不变的底层形成机制,明确微观基本粒子的真空结构起源;同时提出原创性量子纠缠拓扑结构模型,定义纠缠传态的速度极限与物理机制&#xff0…...

如何高效定制暗黑破坏神2角色?全能d2s存档编辑器使用指南

如何高效定制暗黑破坏神2角色?全能d2s存档编辑器使用指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 在暗黑破坏神2的冒险旅程中,你是否曾因属性点分配失误、稀有装备获取困难或存档损坏而感到沮丧&a…...

VinXiangQi:如何用计算机视觉技术打造终极中国象棋智能辅助系统

VinXiangQi:如何用计算机视觉技术打造终极中国象棋智能辅助系统 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 在数字化时代,传统…...

旧Hadoop和新Windows怎么搭 - Windows下编译Hadoop 3.2.1实战指南

老旧的hadoop 怎么编译部署到新版本的windows服务器上 网上是有不少现成的hadoop windows二进制文件的,但都是有特定的编译环境和相应的系统兼容范围的。总有那么一些时候,现成的不管用,我们得自己来稍作调整,然后自己编译。 本笔记是基于在 Windows 11 上为Windows Serv…...

基于单片机的自动存包柜设计

1. 系统总体设计 点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/91926418 1.1 设计背景 随着公共场所(如商场、车站、学校等)对自助服务需求的不断提升,自动存包柜逐渐成为智能化服务设施的…...

MySQL ER_IB_MSG_919报错解析,故障修复与远程处理指南

快速解决MySQL错误ER_IB_MSG_919 (MY-012744)的方法是备份数据文件,检查并修复表空间文件损坏,必要时使用innodb_force_recovery参数启动并导出数据重建数据库。 错误代码含义解析 ER_IB_MSG_919,对应内部错误代码MY-012744,是M…...

Spring IOC 源码学习 事务相关的 BeanDefinition 解析过程 (XML)比

从0构建WAV文件:读懂计算机文件的本质 虽然接触计算机有一段时间了,但是我的视野一直局限于一个较小的范围之内,往往只能看到于算法竞赛相关的内容,计算机各种文件在我看来十分复杂,认为构建他们并能达到目的是一件困难…...

从报告看懂安全隐患,提升防护能力

渗透测试报告不仅是“漏洞清单”,更是企业提升安全防护能力的“行动指南”。很多企业拿到报告后,只关注漏洞数量,却不知道如何解读隐患、落地整改,最终导致测试流于形式,安全风险依然存在。下面通俗拆解,教…...

实时行情系统设计:从协议选择到高可用架构,再到数据源选型计

一、核心问题及解决方案(按踩坑频率排序) 问题 1:误删他人持有锁——最基础也最易犯的漏洞 成因:释放锁时未做身份校验,直接执行 DEL 命令删除键。典型场景:服务 A 持有锁后,业务逻辑耗时超过锁…...

Flutter 动画控制器:打造流畅的动画体验

Flutter 动画控制器:打造流畅的动画体验掌握 Flutter 动画控制器的高级技巧,创造流畅而优雅的动画效果。一、动画控制器概述 作为一名把代码当散文写的 UI 匠人,我对 Flutter 动画控制器有着独特的见解。动画控制器是 Flutter 动画系统的核心…...

和AI一起搞事情#:边剥龙虾边做个中医技能来起号酌

1. 核心概念 在 Antigravity 中,技能系统分为两层: Skills (全局库):实际的代码、脚本和指南,存储在系统级目录(如 ~/.gemini/antigravity/skills)。它们是“能力”的本体。 Workflows (项目级)&#xff1a…...

Windows系统运行Android应用的终极方案:APK Installer完全指南

Windows系统运行Android应用的终极方案:APK Installer完全指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经遇到这样的情况:想在W…...

大模型压力测试与负载测试的完整指南:从理论到实践干货分享

总的来说,大模型压力测试与负载测试是确保其在高并发、大数据量场景下稳定可靠运行的关键环节。核心结论是:压力测试旨在探索系统极限,发现性能瓶颈;负载测试则用于验证系统在预期工作负载下的表现。两者结合,才能为模…...

【毫米波混合波束成形】第9章 多用户MIMO与干扰抑制的深度学习

目录 第一部分:原理详解 第9章 多用户干扰对齐与联合收发设计 9.1 多用户干扰对齐的网络求解 9.1.1 和速率最大化与最小用户速率公平性 9.1.1.1 加权最小均方误差(WMMSE)的展开 9.1.1.1.1 WMMSE迭代中接收波束与发射波束的交替更新层设计…...

Pyfa:EVE Online舰船配置的离线解决方案

Pyfa:EVE Online舰船配置的离线解决方案 【免费下载链接】Pyfa Python fitting assistant, cross-platform fitting tool for EVE Online 项目地址: https://gitcode.com/gh_mirrors/py/Pyfa 在EVE Online的浩瀚宇宙中,舰船配置是决定战斗胜负的关…...

5个关键场景深度解析:为什么你需要这个免费的Windows自动点击器

5个关键场景深度解析:为什么你需要这个免费的Windows自动点击器 【免费下载链接】AutoClicker AutoClicker is a useful simple tool for automating mouse clicks. 项目地址: https://gitcode.com/gh_mirrors/au/AutoClicker 在现代数字工作流程中&#xff…...

Token热潮下的低价骗局:数据安全谁来守护?

Token火爆背后:低价商品的疯狂蔓延2026年,Token成为科技圈热词,截至3月,我国日均词元调用量超140万亿,较2024年初增长1000多倍。‘龙虾’的火爆让Token走进大众视野,电商平台上低价Token商品随处可见&#…...

Go语言中的监控系统:从基础到高级

Go语言中的监控系统:从基础到高级 1. 引言 在生产环境中,监控是保证系统稳定运行的重要手段。通过监控,我们可以了解系统的运行状态、发现潜在问题、及时处理故障。Go语言生态中有丰富的监控工具和库,可以帮助开发者构建完善的监…...

Boost搜索引擎:正倒排索引实战解析

基于正倒排索引的Boost搜索引擎项目日志、Server代码及详解在本项目中,我们构建了一个高效的搜索引擎,使用正排索引和倒排索引技术,基于C和Boost库实现。正排索引存储文档ID到文档内容的映射,便于快速检索文档内容;倒排…...

vue el-table 切换页面、组件销毁会内存泄漏吗?99% 的人都误解了

el-table 切换页面、组件销毁会内存泄漏吗?99% 的人都误解了 前言 在 Vue 后台项目里,el-table 几乎是必用组件。 很多同学反馈:页面切走、组件销毁后,内存居高不下,怀疑 el-table 本身内存泄漏。 本文一次性讲清真相&…...

深度解析DHCP协议:工作原理、4步交互流程及应用场景

深度解析DHCP协议:工作原理、4步交互流程及应用场景 摘要一、DHCP协议:基础定义1.1 DHCP协议:是什么1.2 DHCP协议:解决什么问题 二、DHCP协议:核心工作原理(4步标准流程)2.1 DHCP 4步交互流程图…...

GLM-. 全面支持与 Gemini CLI 集成:HagiCode 的多模型进化之路赂

1. 流图:数据的河流 如果把传统的堆叠面积图想象成一块块整齐堆叠的积木,那么流图就像一条蜿蜒流淌的河流,河道的宽窄变化自然流畅,波峰波谷过渡平滑。 它特别适合展示多个类别数据随时间的变化趋势,尤其是当你想强调整…...

微软常用运行库 安装教程:一键修复VC++运行环境(AIO合集)

一、工具简介 微软运行库合集(MSVBCRT AIO)​ 是一款集成了多个版本 Microsoft Visual C Redistributable 的运行库安装工具。 许多 Windows 软件(尤其是游戏、专业工具)依赖这些运行库才能正常运行,缺失时常会提示类…...

面试题设计模式

策略模式:定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。 模板方法模式:模板的价值就在于骨架的定义,骨架内部将问题处理的流程已经定义好,通用的处理逻辑一般由父类实现,个性化…...