EDA课程设计--病房呼叫系统的设计
病房呼叫系统的设计
1 设计要求
1.用5个开关模拟5个病房的呼叫输入信号,1号优先级最高;1到5优先级依次降低;
2.用一个数码管显示呼叫信号的号码;没信号呼叫时显示0;又多个信号呼叫时,显示优先级最高的呼叫号(其它呼叫号用指示灯显示); 3.凡有呼叫发出5秒的呼叫声;
4.对低优先级的呼叫进行存储,处理完高优先级的呼叫,再进行低优先级呼叫的处理(附加)。
2 设计思路及方案
用74148优先编码器来实现病房呼叫的优先显示,用7447七段字形译码器接半导体数码管来用数字显示最高优先级的病房号,用计数器74193来实现模五的计数器,调节clock 输入脉冲的频率来实现五秒的控制来实现闪烁五秒。再用D 触发器来实现锁存和复位清零功能。
3 设计过程
3.1 优先编码和数据清零模块
优先编码和数据清零模块的电路图如图1所示。
图1 优先编码和数据清零模块
该病房呼叫系统一共有6个输入,分别是1~5号病房的呼叫开关
num1~num5和1个复位清零健action (初始工作时至“1”),这六个开关配合D 触发器来实现清零复位。由于74148低电平有效,所以输入74148前先用非门取反,此电路用到的74148管脚输入对应输出真值表如表1所示。
表1 74148输入输出真值表
3.2 模五计数器以及灯闪烁五秒的模拟
模五计数器电路图如图2所示。
图2 模五计数器电路图
如图先将74193接成模五计数器,当有病房呼叫时CLR 为0,计数器计数,当没有病房呼叫时计数器清零,通过调节clock 输入脉冲的频率来实现闪烁五秒的控制。
3.3 显示病房号功能
显示病房号功能的电路图如图3所示。
图3 显示病房号的电路图
说明:该模块的输入为74148的输入,通过7447七段字形译码器进译码,将结果输出到半导体数码管进行显示。
3.4 设计总图
设计总图如图4所示。
图4 设计总图
说明:护士将action 调节为1,表示工作。当有病人呼叫时,数码管显示优先级高的病房号,所有的指示灯均亮。74193和脉冲输入clock 来控制灯闪烁5秒。该设计基本上实现了病房呼叫系统的基本要求。
4 仿真结果
图5 3号床位呼叫仿真图
3号床位呼叫仿真图如图5所示。开始时,7447输出编码为0000001,相应的半导体数码管显示为0. 当3号病房呼叫,闪烁灯开始闪烁5秒,out3指示灯亮,7447输出编码为:0000110,对应的显示数字符号为3. 护士按下action 使其为0,实现复位。
图6 2、3、4号床位同时呼叫仿真图
2,3,4病房同时呼叫的仿真图如图6所示。2、3、4同时呼叫时闪烁灯开始闪烁5秒,out2,out3,out4指示灯亮,7447输出编码为:0010010,对应的数码显示为
2.
图7 复位后新一轮的呼叫仿真图
复位后新一轮的呼叫仿真图如图7所示。护士复位后,开始新一轮的病房呼叫。
图8 优先级高的呼叫仿真图
优先级高的呼叫仿真图如图8所示。优先级高的呼叫时,在还没处理低的优先级时,有高优先级呼叫,数码显示会变成高优先级病房号的显示。
设计总结
本设计是为在病人紧急需要时能很快进行救治的呼叫系统, 增强医护人员更好的监护病人。此系统的优点特色在于可以设立呼叫优先等级而不是单纯的病人呼叫,这样避免在有多个病人同时呼叫时,医护人员不知道应该先救治哪个。
在设计初期我不知道当有多个病人同时发出信号呼叫时,优先信号被优先编码器编码后,再经过译码显示后,医护人员处理完高级别信号,按下清零键;怎么样认其他病人的信号按照优先级别先后显示?当多信号同时呼叫时,对较低等级的呼叫信号不知道怎么处理,才能保证当高级别的信号被清零后,低级别的信号能及时的由系统自动呼出,而不再需要人为的控制输出的问题始终没有能找到合适有效的方法。还有就是如何实现在医护人员已处理完毕当前呼叫的病人后,系统对当前呼叫信号的清零以保证其他呼叫信号能够及时的呼出以便医护人员能及时的对其他病人进行救治,从而避免因系统对病人呼叫信号的延迟导致病人不能及时接受护理而产生的严重后果。特别是控制清零这个问题苦恼了我很长的时间,后来才在我翻阅相关书籍和浏览相关网站时找到了解决问题的办法,才知道这些问题可以通过对锁存器的合理使用来一一解决。这也使我对学习的认识有了更深入的了解,对理论联系实际有了更加深刻的体会。
参考文献
[1] Mark Zwolinski.Digital System Design with VHDL.电子工业出版
社,2002
[2] 汪国强.SOPC 技术与应用. 机械工业出版社,2006 [3] 范忠. 实用数字电子技术. 电子工业出版社,1998
[4] 刘延飞. 数字电子技术实验与仿真. 西北工业大学出版社,2010 [5] 侯建军,郭勇.SOPC 技术基础教程. 清华大学出版社,2008
附录 设计程序
1:非门 library ieee;
use ieee.std_logic_1164.all; entity as_not is port(a:in std_logic; f:out std_logic); end as_not;
architecture behave of as_not is begin f
use ieee.std_logic_1164.all; entity as_nand2 is port(a:in std_logic; b:in std_logic; f:out std_logic); end as_nand2;
architecture behave of as_nand2 is
begin
f
end behave;
3:2输入与门
library ieee;
use ieee.std_logic_1164.all;
entity as_and2 is
port(a:in std_logic;
b:in std_logic;
f:out std_logic);
end as_and2;
architecture behave of as_and2 is
begin
f
end behave;
4:优先编码器74148
library ieee;
use ieee.std_logic_1164.all;
entity as_74148 is
port(D:in std_logic_vector(7 downto 0); E1:in std_logic; Q:out std_logic_vector(2 downto 0);
E0:out std_logic);
end as_74148;
architecture rtl of as_74148 is
begin
process(E1,D) begin if(e1='1') then Q
elsif(D(6)='0' and E1='0')then
Q
elsif(D(5)='0' and E1='0')then Q
else end if; GS
end rtl;
5:7447数码显示:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all; entity as_7447 is
port
(
num:in std_logic_vector(3 downto 0); dout:out std_logic_vector(6 downto 0) );
end as_7447;
architecture a1 of as_7447 is begin
with num select
dout
6:D触发器
library ieee;
use ieee.std_logic_1164.all; entity as_d is
port(D:in std_logic;
CP:in std_logic; R:in std_logic;
Q:out std_logic; QB:out std_logic; end as_d;
architecture rtl of as_d is begin
process(CP,R) begin end if; if(CP' event and cp='1')then ELSE end if; Q
end process;
end rtl;