% 智能抢答器Simulink模型生成代码
clear all; close all; clc;
% 创建新的Simulink模型
modelName = 'SmartAnswererCircuit';
if exist(modelName, 'model')
close_system(modelName, 0);
end
new_system(modelName);
open_system(modelName);
set_param(modelName, 'ModelReferencing', 'on');
% --------------------- 添加模块 ---------------------
% 1. 抢答按键输入(4路脉冲信号)
add_block('simulink/Sources/Pulse Generator', [modelName '/Key1'], ...
'Amplitude', 1, 'Period', 20, 'PulseWidth', 1, 'PhaseDelay', 5); % 按键1(延迟5s模拟按下)
add_block('simulink/Sources/Pulse Generator', [modelName '/Key2'], ...
'Amplitude', 1, 'Period', 20, 'PulseWidth', 1, 'PhaseDelay', 10); % 按键2
add_block('simulink/Sources/Pulse Generator', [modelName '/Key3'], ...
'Amplitude', 1, 'Period', 20, 'PulseWidth', 1, 'PhaseDelay', 15); % 按键3
add_block('simulink/Sources/Pulse Generator', [modelName '/Key4'], ...
'Amplitude', 1, 'Period', 20, 'PulseWidth', 1, 'PhaseDelay', 20); % 按键4
% 2. 优先编码逻辑(模拟74LS148)
add_block('simulink/Logic and Bit Operations/Relay', [modelName '/PriorityRelay1'], ...
'InputThreshold', 0.5, 'OutputWhenEngaged', 1, 'OutputWhenDisengaged', 0);
add_block('simulink/Logic and Bit Operations/Relay', [modelName '/PriorityRelay2'], ...
'InputThreshold', 0.5, 'OutputWhenEngaged', 1, 'OutputWhenDisengaged', 0);
add_block('simulink/Logic and Bit Operations/Relay', [modelName '/PriorityRelay3'], ...
'InputThreshold', 0.5, 'OutputWhenEngaged', 1, 'OutputWhenDisengaged', 0);
add_block('simulink/Logic and Bit Operations/Relay', [modelName '/PriorityRelay4'], ...
'InputThreshold', 0.5, 'OutputWhenEngaged', 1, 'OutputWhenDisengaged', 0);
% 3. 锁存器(模拟74LS279)
add_block('simulink/Memory/Unit Delay', [modelName '/Latch1'], ...
'InitialCondition', 0, 'Reset', 'on');
add_block('simulink/Memory/Unit Delay', [modelName '/Latch2'], ...
'InitialCondition', 0, 'Reset', 'on');
add_block('simulink/Memory/Unit Delay', [modelName '/Latch3'], ...
'InitialCondition', 0, 'Reset', 'on');
add_block('simulink/Memory/Unit Delay', [modelName '/Latch4'], ...
'InitialCondition', 0, 'Reset', 'on');
% 4. 声光提示模块
add_block('simulink/Sinks/LED Display', [modelName '/LED1'], ...
'LEDColor', 'red', 'Position', [280, 120, 320, 160]);
add_block('simulink/Sinks/LED Display', [modelName '/LED2'], ...
'LEDColor', 'red', 'Position', [280, 80, 320, 120]);
add_block('simulink/Sinks/LED Display', [modelName '/LED3'], ...
'LEDColor', 'red', 'Position', [280, 40, 320, 80]);
add_block('simulink/Sinks/LED Display', [modelName '/LED4'], ...
'LEDColor', 'red', 'Position', [280, 0, 320, 40]);
add_block('simulink/Sinks/Buzzer', [modelName '/Buzzer'], ...
'Position', [400, 80, 440, 120]);
% 5. 计时模块
add_block('simulink/Sources/Pulse Generator', [modelName '/TimerPulse'], ...
'Amplitude', 1, 'Period', 1, 'PulseWidth', 0.5); % 1Hz计时脉冲
add_block('simulink/Discrete/Counter', [modelName '/MinuteCounter'], ...
'StartValue', 0, 'ResetValue', 0, 'UpperLimit', 60); % 60秒计数
add_block('simulink/Logic and Bit Operations/Compare To Constant', [modelName '/TimerReset'], ...
'ConstantValue', 60, 'Operator', '==', 'OutputWhenTrue', 1, 'OutputWhenFalse', 0);
% 6. 逻辑控制模块(模拟优先编码逻辑)
add_block('simulink/Logic and Bit Operations/Logical Operator', [modelName '/AND1'], ...
'Operator', 'AND', 'Inputs', '2');
add_block('simulink/Logic and Bit Operations/Logical Operator', [modelName '/AND2'], ...
'Operator', 'AND', 'Inputs', '2');
add_block('simulink/Logic and Bit Operations/Logical Operator', [modelName '/NOT1'], ...
'Operator', 'NOT');
% --------------------- 连接模块 ---------------------
% 1. 优先编码逻辑连接(简化逻辑:Key1优先级最高,Key4最低)
add_line(modelName, 'Key1/1', 'PriorityRelay1/1');
add_line(modelName, 'Key2/1', 'AND1/1');
add_line(modelName, 'NOT1/1', 'AND1/2');
add_line(modelName, 'AND1/1', 'PriorityRelay2/1');
add_line(modelName, 'Key3/1', 'AND2/1');
add_line(modelName, 'AND1/1', 'AND2/2');
add_line(modelName, 'AND2/1', 'PriorityRelay3/1');
add_line(modelName, 'Key4/1', 'PriorityRelay4/1');
% 2. 锁存器连接
add_line(modelName, 'PriorityRelay1/1', 'Latch1/1');
add_line(modelName, 'PriorityRelay2/1', 'Latch2/1');
add_line(modelName, 'PriorityRelay3/1', 'Latch3/1');
add_line(modelName, 'PriorityRelay4/1', 'Latch4/1');
% 3. 声光提示连接
add_line(modelName, 'Latch1/1', 'LED1/1');
add_line(modelName, 'Latch2/1', 'LED2/1');
add_line(modelName, 'Latch3/1', 'LED3/1');
add_line(modelName, 'Latch4/1', 'LED4/1');
add_line(modelName, 'Latch1/1', 'Buzzer/1');
add_line(modelName, 'Latch2/1', 'Buzzer/1', 'autorouting', 'on');
add_line(modelName, 'Latch3/1', 'Buzzer/1', 'autorouting', 'on');
add_line(modelName, 'Latch4/1', 'Buzzer/1', 'autorouting', 'on');
% 4. 计时模块连接
add_line(modelName, 'TimerPulse/1', 'MinuteCounter/1');
add_line(modelName, 'MinuteCounter/1', 'TimerReset/1');
add_line(modelName, 'TimerReset/1', 'NOT1/1');
add_line(modelName, 'TimerReset/1', 'Latch1/Reset');
add_line(modelName, 'TimerReset/1', 'Latch2/Reset', 'autorouting', 'on');
add_line(modelName, 'TimerReset/1', 'Latch3/Reset', 'autorouting', 'on');
add_line(modelName, 'TimerReset/1', 'Latch4/Reset', 'autorouting', 'on');
% --------------------- 模型配置 ---------------------
% 设置仿真参数
set_param(modelName, 'StopTime', '60');
set_param(modelName, 'Solver', 'discrete');
% 保存模型
save_system(modelName);
% 显示模型
open_system(modelName);
% 运行仿真
sim(modelName);
% 显示提示信息
disp('智能抢答器Simulink模型已生成,可在Simulink中查看逻辑连接!');
disp('说明:此模型为逻辑仿真,非硬件电路图,实际电路需用Multisim/Altium Designer绘制。');
能否正确运行