六、综合控制应用系统设计
下面讲复习提纲第六部分:六、综合控制应用系统设计。这一部分一般不是单纯背概念,而是考你能不能把I/O、按键、LED、定时器、中断、串口、状态机组合起来,设计一个实际控制系统。
1. 什么是综合控制应用系统
Section titled “1. 什么是综合控制应用系统”复习提纲中写:
能够使用前面的各项基础功能以及基础模块设计一个具体复杂应用的控制程序,例如电饭煲控制系统、洗衣机控制系统、电梯控制系统、交通等控制系统等;在以上控制系统中涉及具体机械装置或者大型元器件时,可以用 LED 灯或者开关等组合进行模拟即可。
这段话的核心意思是:
不要只会单独点亮LED不要只会单独写定时器要能把多个模块组合成完整系统例如交通灯系统就会同时用到:
I/O口:控制红黄绿LED定时器:产生秒计时中断:处理紧急按钮按键:切换模式状态机:管理当前交通灯状态综合题的重点不是器件有多复杂,而是控制逻辑是否清楚。
2. 综合系统设计的基本思路
Section titled “2. 综合系统设计的基本思路”遇到一个综合控制题,不要一上来就写代码。应该先拆需求。
可以按下面 6 个问题分析。
问题1:系统要完成什么功能
Section titled “问题1:系统要完成什么功能”例如交通灯:
控制南北方向和东西方向红黄绿灯按时间交替亮灭洗衣机:
完成注水、洗涤、排水、脱水、结束报警等流程电饭煲:
根据按键和温度状态控制加热、保温和报警问题2:有哪些输入
Section titled “问题2:有哪些输入”输入是单片机需要“读取”的东西。
常见输入:
按键开关传感器串口命令限位信号水位信号温度达到信号楼层按键信号在考试中,如果没有真实传感器,可以用按键或开关模拟。
问题3:有哪些输出
Section titled “问题3:有哪些输出”输出是单片机需要“控制”的东西。
常见输出:
LED蜂鸣器继电器电机驱动数码管LCD加热器电磁阀考试中大型执行机构常用 LED 模拟:
LED亮 = 电机启动LED灭 = 电机停止问题4:系统有哪些状态
Section titled “问题4:系统有哪些状态”复杂系统通常不是简单 if 语句能优雅解决的,而是应该分状态。
例如电饭煲:
待机加热保温完成故障交通灯:
南北绿东西红南北黄东西红南北红东西绿南北红东西黄紧急模式问题5:每个状态持续多久或由什么条件切换
Section titled “问题5:每个状态持续多久或由什么条件切换”状态切换条件可能是:
时间到按键按下传感器触发串口命令到达异常信号出现例如:
南北绿灯30秒后 -> 南北黄灯水位到达后 -> 洗涤温度达到后 -> 保温按下停止键 -> 待机问题6:程序结构怎么安排
Section titled “问题6:程序结构怎么安排”综合系统常用:
初始化主循环定时器中断外部中断状态机处理显示刷新按键扫描输出控制这比单纯堆延时更可靠。
3. PPT 第15章的应用系统设计步骤
Section titled “3. PPT 第15章的应用系统设计步骤”PPT 第15章把单片机应用系统设计分成 4 个阶段。
3.1 明确任务、需求分析、拟定方案
Section titled “3.1 明确任务、需求分析、拟定方案”这是第一步,也是考试设计题最容易被忽略的一步。
需求分析要说明:
要测什么要控什么输入是什么输出是什么工作环境如何是否需要显示是否需要报警是否需要通信性能指标是什么例如设计温度控制系统:
输入:温度传感器、按键输出:加热器、风扇、蜂鸣器、显示器指标:温度超过上限报警,低于下限加热PPT 也提醒,方案设计时不要把简单问题复杂化。能用简单可靠的方法解决,就不要过度设计。
3.2 硬件和软件设计
Section titled “3.2 硬件和软件设计”硬件设计包括:
单片机最小系统输入接口输出接口显示接口通信接口电源和复位驱动和保护电路软件设计包括:
程序流程图模块划分状态机按键扫描定时器中断显示刷新输出控制通信处理PPT 第15章强调,硬件设计和软件设计要结合。比如:
有些滤波、校准可用软件完成有些强实时、高功率控制必须靠硬件电路保证这就是“软硬件结合”的思想。
3.3 软硬件联合调试
Section titled “3.3 软硬件联合调试”调试可以分两步:
先用Proteus等软件仿真再进行实际硬件联调仿真能检查:
程序逻辑I/O连接LED显示按键响应定时流程但仿真通过不代表实物一定通过。实际硬件还可能有:
接线错误电源干扰按键抖动驱动能力不足器件损坏复位不可靠3.4 资料整理
Section titled “3.4 资料整理”系统完成后要整理:
任务说明总体方案电路原理图元件清单接线图程序流程图源程序调试记录使用说明考试中写设计说明,也可以按这个顺序组织。
4. 硬件设计要考虑什么
Section titled “4. 硬件设计要考虑什么”4.1 单片机最小系统
Section titled “4.1 单片机最小系统”任何应用系统首先要有最小系统:
单片机芯片时钟晶振电路复位电路电源这是系统能运行程序的基础。
4.2 输入部分
Section titled “4.2 输入部分”输入部分对应“测”。
常见输入有:
| 输入类型 | 例子 | 接口方式 |
|---|---|---|
| 按键 | 启动、停止、模式选择 | I/O口读取 |
| 开关量 | 水位开关、门磁开关 | I/O口读取 |
| 数字传感器 | 红外、霍尔、限位 | I/O或中断 |
| 模拟传感器 | 温度、压力、光照 | ADC转换 |
| 通信命令 | 上位机命令 | 串口接收 |
注意:
按键要消抖开关量常用上拉模拟量需要A/D转换紧急信号可接外部中断4.3 输出部分
Section titled “4.3 输出部分”输出部分对应“控”。
常见输出有:
| 输出类型 | 例子 | 注意点 |
|---|---|---|
| LED | 状态灯、模拟执行机构 | 串联限流电阻 |
| 蜂鸣器 | 报警提示 | 可能需要三极管驱动 |
| 继电器 | 控制电机、加热器 | 要加驱动和续流二极管 |
| 电机 | 洗衣机、电梯、风扇 | 需电机驱动电路 |
| 数码管/LCD | 显示时间、状态 | 动态扫描或接口驱动 |
| 串口输出 | 发给电脑 | 设置波特率 |
单片机 I/O 口驱动能力有限,不能直接驱动大功率器件。
考试答法:
对于电机、继电器、加热器等大功率负载,应通过三极管、MOS管、继电器驱动模块或光耦隔离电路控制,不能由单片机I/O口直接驱动。5. 软件设计要考虑什么
Section titled “5. 软件设计要考虑什么”PPT 第15章强调软件要模块化、子程序化,并先画流程图。
综合控制系统通常可以分成:
初始化模块按键扫描模块显示模块定时模块状态机模块输出控制模块通信模块报警模块典型程序框架:
void main(void){ system_init();
while (1) { key_task(); state_task(); display_task(); output_task(); uart_task(); }}定时器中断产生系统节拍:
void timer0_isr(void) interrupt 1{ TH0 = 0xFC; TL0 = 0x18;
tick_1ms++; if (tick_1ms % 10 == 0) flag_10ms = 1; if (tick_1ms % 100 == 0) flag_100ms = 1; if (tick_1ms >= 1000) { tick_1ms = 0; flag_1s = 1; }}主程序看到标志后再执行任务:
if (flag_1s){ flag_1s = 0; second_task();}这样比在主程序中写大量 delay() 更适合综合系统。
6. 状态机思想
Section titled “6. 状态机思想”综合控制题最推荐用状态机。
状态机就是:
把系统分成几个明确状态每个状态规定输出根据时间或输入条件切换到下一个状态状态机的好处:
逻辑清楚容易画流程图容易写程序容易调试适合复杂控制C 语言里常用枚举表示状态:
typedef enum{ STATE_IDLE, STATE_RUN, STATE_ALARM, STATE_STOP} SystemState;
SystemState state = STATE_IDLE;状态处理:
switch (state){case STATE_IDLE: // 待机输出 break;case STATE_RUN: // 运行输出 break;case STATE_ALARM: // 报警输出 break;default: break;}7. 示例一:交通灯控制系统
Section titled “7. 示例一:交通灯控制系统”这是最典型的综合题。
7.1 功能要求
Section titled “7.1 功能要求”设计十字路口交通灯:
南北方向绿灯亮30秒,东西方向红灯亮南北方向黄灯亮3秒,东西方向红灯亮东西方向绿灯亮30秒,南北方向红灯亮东西方向黄灯亮3秒,南北方向红灯亮循环执行可加一个紧急按键,使所有方向红灯亮或某方向优先通行。
7.2 输入输出分配
Section titled “7.2 输入输出分配”| 功能 | 引脚 |
|---|---|
| 南北红灯 | P1.0 |
| 南北黄灯 | P1.1 |
| 南北绿灯 | P1.2 |
| 东西红灯 | P1.3 |
| 东西黄灯 | P1.4 |
| 东西绿灯 | P1.5 |
| 紧急按键 | P3.2/INT0 |
如果 LED 低电平有效:
输出0:灯亮输出1:灯灭7.3 状态表
Section titled “7.3 状态表”| 状态 | 输出 | 时间 | 下一状态 |
|---|---|---|---|
| NS_GREEN | 南北绿、东西红 | 30s | NS_YELLOW |
| NS_YELLOW | 南北黄、东西红 | 3s | EW_GREEN |
| EW_GREEN | 东西绿、南北红 | 30s | EW_YELLOW |
| EW_YELLOW | 东西黄、南北红 | 3s | NS_GREEN |
| EMERGENCY | 紧急模式 | 按键控制 | 原状态或指定状态 |
7.4 程序思路
Section titled “7.4 程序思路”定时器0每1ms中断一次累计1000次得到1秒每秒剩余时间减1剩余时间为0时切换状态主程序根据状态输出红黄绿灯外部中断0处理紧急按键状态切换示意:
void next_state(void){ switch (state) { case NS_GREEN: state = NS_YELLOW; seconds = 3; break; case NS_YELLOW: state = EW_GREEN; seconds = 30; break; case EW_GREEN: state = EW_YELLOW; seconds = 3; break; case EW_YELLOW: state = NS_GREEN; seconds = 30; break; default: state = NS_GREEN; seconds = 30; break; }}输出函数示意:
void traffic_output(void){ P1 = 0xFF; // 全灭,低电平有效
switch (state) { case NS_GREEN: P1 &= ~(1 << 2); // 南北绿 P1 &= ~(1 << 3); // 东西红 break; case NS_YELLOW: P1 &= ~(1 << 1); P1 &= ~(1 << 3); break; case EW_GREEN: P1 &= ~(1 << 0); P1 &= ~(1 << 5); break; case EW_YELLOW: P1 &= ~(1 << 0); P1 &= ~(1 << 4); break; default: break; }}考试不一定要写完整代码,但要写清:
I/O分配定时方式状态表状态转换输出控制8. 示例二:洗衣机控制系统
Section titled “8. 示例二:洗衣机控制系统”8.1 功能拆分
Section titled “8.1 功能拆分”洗衣机可以分为几个状态:
待机注水洗涤排水脱水结束报警故障8.2 输入
Section titled “8.2 输入”启动键停止键水位开关门盖安全开关模式选择键8.3 输出
Section titled “8.3 输出”进水阀洗涤电机正转洗涤电机反转排水阀脱水电机蜂鸣器状态指示灯考试中可用 LED 模拟:
LED1亮:进水阀打开LED2亮:电机正转LED3亮:电机反转LED4亮:排水阀打开LED5亮:脱水电机运行8.4 状态表
Section titled “8.4 状态表”| 状态 | 条件 | 输出 | 下一状态 |
|---|---|---|---|
| 待机 | 等待启动键 | 全部关闭 | 注水 |
| 注水 | 水位未到 | 进水阀开 | 洗涤 |
| 洗涤 | 定时时间未到 | 电机正反转 | 排水 |
| 排水 | 水位未低 | 排水阀开 | 脱水 |
| 脱水 | 门盖关闭且时间未到 | 脱水电机开 | 结束 |
| 结束 | 完成 | 蜂鸣器提示 | 待机 |
8.5 程序重点
Section titled “8.5 程序重点”洗衣机程序一定要有:
定时器:控制洗涤时间、正反转时间、脱水时间按键扫描:启动、停止、模式选择安全检测:门盖未关闭不能脱水状态机:按流程切换9. 示例三:电饭煲控制系统
Section titled “9. 示例三:电饭煲控制系统”9.1 输入
Section titled “9.1 输入”开始按键保温/煮饭模式键温度传感器或温控开关锅盖/内胆检测开关9.2 输出
Section titled “9.2 输出”加热器保温指示灯煮饭指示灯蜂鸣器显示模块9.3 状态
Section titled “9.3 状态”| 状态 | 判断条件 | 输出 |
|---|---|---|
| 待机 | 未按开始键 | 加热关闭 |
| 加热 | 温度未达到 | 加热器开启 |
| 沸腾计时 | 温度达到阈值 | 按时间继续加热 |
| 保温 | 烹饪完成 | 周期性加热 |
| 完成提示 | 完成瞬间 | 蜂鸣器响 |
| 故障 | 传感器异常 | 关闭加热并报警 |
如果没有真实温度传感器,可用按键模拟:
按键K1 = 温度达到按键K2 = 故障10. 示例四:电梯控制系统
Section titled “10. 示例四:电梯控制系统”电梯系统适合考状态机和输入输出分配。
楼层按键上行/下行请求门开关检测限位开关急停按键电机上行电机下行开门电机关门电机楼层显示蜂鸣器待机上行下行开门关门报警/急停控制逻辑示例:
如果当前楼层 < 目标楼层 -> 上行如果当前楼层 > 目标楼层 -> 下行到达目标楼层 -> 停止电机 -> 开门 -> 延时 -> 关门急停按下 -> 立即停止并报警考试中可用 LED 模拟电机:
LED_UP亮 = 电梯上行LED_DOWN亮 = 电梯下行LED_DOOR亮 = 门打开11. 设计题答题模板
Section titled “11. 设计题答题模板”遇到综合系统设计题,可以直接按这个模板写。
11.1 系统功能
Section titled “11.1 系统功能”本系统以AT89C51/AT89S52单片机为核心,实现______控制。系统通过______采集输入信号,通过______输出控制信号,并利用定时器实现______,利用中断实现______。11.2 硬件组成
Section titled “11.2 硬件组成”硬件包括单片机最小系统、输入模块、输出模块、显示模块、报警模块和通信模块。11.3 I/O 分配
Section titled “11.3 I/O 分配”用表格写最清楚:
| 引脚 | 功能 |
|---|---|
| P1.0 | 输出1 |
| P1.1 | 输出2 |
| P3.2 | 外部中断按键 |
| P3.0/P3.1 | 串口通信 |
11.4 软件流程
Section titled “11.4 软件流程”系统上电后先初始化I/O口、定时器、中断和串口;然后进入主循环,循环检测按键和传感器状态,根据当前状态执行状态机控制,并刷新显示和输出。定时器中断用于产生系统节拍,外部中断用于处理紧急事件。11.5 关键模块
Section titled “11.5 关键模块”初始化模块按键扫描模块定时器中断模块状态机模块输出控制模块报警模块12. 常见考法
Section titled “12. 常见考法”考法1:问设计步骤
Section titled “考法1:问设计步骤”答案:
单片机应用系统设计一般包括明确任务和需求分析、拟定方案、硬件和软件设计、软硬件联合调试、资料整理等步骤。考法2:问硬件包括哪些部分
Section titled “考法2:问硬件包括哪些部分”答案:
硬件通常包括单片机最小系统、输入接口电路、输出接口电路、显示电路、报警电路、通信电路以及必要的驱动和保护电路。考法3:问软件设计原则
Section titled “考法3:问软件设计原则”答案:
软件设计应先画流程图,采用模块化和子程序化设计,合理分配RAM、ROM、定时器、中断源和I/O口资源,并通过状态机实现复杂控制流程。考法4:设计交通灯
Section titled “考法4:设计交通灯”答题要点:
用P1口控制红黄绿LED用定时器产生秒计时用状态机表示不同通行状态用外部中断或按键处理紧急模式考法5:问为什么大功率负载不能直接接 I/O
Section titled “考法5:问为什么大功率负载不能直接接 I/O”答案:
单片机I/O口输出电流有限,不能直接驱动电机、继电器、加热器等大功率负载,应通过三极管、MOS管、继电器驱动器或光耦隔离等接口电路进行驱动和保护。13. 易混点
Section titled “13. 易混点”1. 综合题不是只写代码
Section titled “1. 综合题不是只写代码”综合题通常要写:
系统功能硬件组成I/O分配软件流程关键程序只写一段代码,说明不完整。
2. 不要用大量 delay 堵死程序
Section titled “2. 不要用大量 delay 堵死程序”复杂系统如果大量使用长延时:
按键响应慢中断外的任务被卡住显示刷新不稳定更推荐:
定时器中断产生节拍主循环按标志执行任务3. LED 可以模拟执行机构
Section titled “3. LED 可以模拟执行机构”题目说电机、阀门、加热器,不代表必须画真实大功率电路。
复习提纲说明:
可以用LED灯或者开关等组合进行模拟4. 状态机比散乱 if 更清楚
Section titled “4. 状态机比散乱 if 更清楚”交通灯、洗衣机、电梯这类系统,最好用状态机。
状态 = 当前系统阶段条件 = 什么时候切换输出 = 当前状态下控制哪些设备5. 软硬件要结合
Section titled “5. 软硬件要结合”有些问题用软件方便:
按键消抖定时控制状态判断报警逻辑有些必须靠硬件:
大电流驱动电气隔离电源保护继电器续流抗干扰滤波第六部分背诵版
Section titled “第六部分背诵版”单片机综合控制应用系统是将I/O口、按键、LED、定时器、中断、串口、显示等基础模块组合起来,实现具体设备控制的系统。设计时应先进行任务分析,明确输入、输出、状态、定时要求和控制流程,再完成硬件和软件设计。
单片机应用系统硬件通常包括单片机最小系统、输入接口、输出接口、显示接口、报警接口、通信接口以及驱动和保护电路。输入部分可包括按键、开关、传感器和串口命令;输出部分可包括LED、蜂鸣器、继电器、电机、数码管等。对于电机、继电器、加热器等大功率负载,不能由单片机I/O口直接驱动,应加驱动电路和保护电路。
软件设计应模块化、子程序化,先画流程图,常用状态机描述复杂控制过程。定时器中断可产生系统节拍,外部中断可处理紧急事件,主循环负责按键扫描、状态处理、显示刷新和输出控制。交通灯、洗衣机、电饭煲、电梯等系统都可用LED和开关模拟其执行机构和输入信号。