EDA课程设计病房呼叫系统的设计.docx
《EDA课程设计病房呼叫系统的设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计病房呼叫系统的设计.docx(13页珍藏版)》请在冰豆网上搜索。
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所示。
表174148输入输出真值表
输入
输出
X
X
X
X
0
0
0
1
X
X
X
0
1
0
1
0
X
X
0
1
1
0
1
1
X
0
1
1
1
1
0
0
0
1
1
1
1
1
0
1
3.2模五计数器以及灯闪烁五秒的模拟
模五计数器电路图如图2所示。
图2模五计数器电路图
如图先将74193接成模五计数器,当有病房呼叫时CLR为0,计数器计数,当没有病房呼叫时计数器清零,通过调节clock输入脉冲的频率来实现闪烁五秒的控制。
3.3显示病房号功能
显示病房号功能的电路图如图3所示。
图3显示病房号的电路图
说明:
该模块的输入为74148的输入,通过7447七段字形译码器进译码,将结果输出到半导体数码管进行显示。
3.4设计总图
设计总图如图4所示。
图4设计总图
说明:
护士将action调节为1,表示工作。
当有病人呼叫时,数码管显示优先级高的病房号,所有的指示灯均亮。
74193和脉冲输入clock来控制灯闪烁5秒。
该设计基本上实现了病房呼叫系统的基本要求。
4仿真结果
图53号床位呼叫仿真图
3号床位呼叫仿真图如图5所示。
开始时,7447输出编码为0000001,相应的半导体数码管显示为0.当3号病房呼叫,闪烁灯开始闪烁5秒,out3指示灯亮,7447输出编码为:
0000110,对应的显示数字符号为3.护士按下action使其为0,实现复位。
图62、3、4号床位同时呼叫仿真图
2,3,4病房同时呼叫的仿真图如图6所示。
2、3、4同时呼叫时闪烁灯开始闪烁5秒,out2,out3,out4指示灯亮,7447输出编码为:
0010010,对应的数码显示为2.
图7复位后新一轮的呼叫仿真图
复位后新一轮的呼叫仿真图如图7所示。
护士复位后,开始新一轮的病房呼叫。
图8优先级高的呼叫仿真图
优先级高的呼叫仿真图如图8所示。
优先级高的呼叫时,在还没处理低的优先级时,有高优先级呼叫,数码显示会变成高优先级病房号的显示。
设计总结
本设计是为在病人紧急需要时能很快进行救治的呼叫系统,增强医护人员更好的监护病人。
此系统的优点特色在于可以设立呼叫优先等级而不是单纯的病人呼叫,这样避免在有多个病人同时呼叫时,医护人员不知道应该先救治哪个。
在设计初期我不知道当有多个病人同时发出信号呼叫时,优先信号被优先编码器编码后,再经过译码显示后,医护人员处理完高级别信号,按下清零键;怎么样认其他病人的信号按照优先级别先后显示?
当多信号同时呼叫时,对较低等级的呼叫信号不知道怎么处理,才能保证当高级别的信号被清零后,低级别的信号能及时的由系统自动呼出,而不再需要人为的控制输出的问题始终没有能找到合适有效的方法。
还有就是如何实现在医护人员已处理完毕当前呼叫的病人后,系统对当前呼叫信号的清零以保证其他呼叫信号能够及时的呼出以便医护人员能及时的对其他病人进行救治,从而避免因系统对病人呼叫信号的延迟导致病人不能及时接受护理而产生的严重后果。
特别是控制清零这个问题苦恼了我很长的时间,后来才在我翻阅相关书籍和浏览相关网站时找到了解决问题的办法,才知道这些问题可以通过对锁存器的合理使用来一一解决。
这也使我对学习的认识有了更深入的了解,对理论联系实际有了更加深刻的体会。
参考文献
[1]MarkZwolinski.DigitalSystemDesignwithVHDL.电子工业出版社,2002
[2]汪国强.SOPC技术与应用.机械工业出版社,2006
[3]范忠.实用数字电子技术.电子工业出版社,1998
[4]刘延飞.数字电子技术实验与仿真.西北工业大学出版社,2010
[5]侯建军,郭勇.SOPC技术基础教程.清华大学出版社,2008
附录设计程序
1:
非门
libraryieee;
useieee.std_logic_1164.all;
entityas_notis
port(a:
instd_logic;
f:
outstd_logic);
endas_not;
architecturebehaveofas_notis
begin
f<=nota;
endbehave;
2:
2输入与非门
libraryieee;
useieee.std_logic_1164.all;
entityas_nand2is
port(a:
instd_logic;
b:
instd_logic;
f:
outstd_logic);
endas_nand2;
architecturebehaveofas_nand2is
begin
f<=anandb;
endbehave;
3:
2输入与门
libraryieee;
useieee.std_logic_1164.all;
entityas_and2is
port(a:
instd_logic;
b:
instd_logic;
f:
outstd_logic);
endas_and2;
architecturebehaveofas_and2is
begin
f<=aANDb;
endbehave;
4:
优先编码器74148
libraryieee;
useieee.std_logic_1164.all;
entityas_74148is
port(D:
instd_logic_vector(7downto0);
E1:
instd_logic;
Q:
outstd_logic_vector(2downto0);
GS:
outstd_logic;
E0:
outstd_logic);
endas_74148;
architecturertlofas_74148is
begin
process(E1,D)
begin
if(e1='1')then
Q<="111";
GS<='1';
E0<='1';
elsif(D="11111111"andE1='0')then
Q<="111";
GS<='1';
E0<='0';
elsif(D(7)='0'andE1='0')then
Q<="000";
GS<='0';
E0<='1';
elsif(D(6)='0'andE1='0')then
Q<="001";
GS<='0';
E0<='1';
elsif(D(5)='0'andE1='0')then
Q<="010";
GS<='0';
E0<='1';
elsif(D(4)='0'andE1='0')then
Q<="011";
GS<='0';
E0<='1';
elsif(D(3)='0'andE1='0')then
Q<="100";
GS<='0';
E0<='1';
elsif(D
(2)='0'andE1='0')then
Q<="101";
GS<='0';
E0<='1';
elsif(D
(1)='0'andE1='0')then
Q<="110";
GS<='0';
E0<='1';
elsif(D(0)='0'andE1='0')then
Q<="111";
GS<='0';
E0<='1';
else
Q<="111";
GS<='1';
E0<='0';
endif;
endprocess;
endrtl;
5:
7447数码显示:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityas_7447is
port
(
num:
instd_logic_vector(3downto0);
dout:
outstd_logic_vector(6downto0)
);
endas_7447;
architecturea1ofas_7447is
begin
withnumselect
dout<="1111110"when"0000",
"0110000"when"0001",
"1101101"when"0010",
"1111001"when"0011",
"0110011"when"0100",
"1011011"when"0101",
"1011111"when"0110",
"1110000"when"0111",
"1111111"when"1000",
"1111011"when"1001",
"0000000"whenothers;
enda1;
6:
D触发器
libraryieee;
useieee.std_logic_1164.all;
entityas_dis
port(D:
instd_logic;
CP:
instd_logic;
R:
instd_logic;
Q:
outstd_logic;
QB:
outstd_logic;
endas_d;
architecturertlofas_dis
begin
process(CP,R)
begin
if(CP'eventandcp='1')then
if(R='0')then
Q<='0';
QB<='1';
ELSE
Q<=D;
QB<=notD;
endif;
endif;
endprocess;
endrtl;