三人表决器.docx
《三人表决器.docx》由会员分享,可在线阅读,更多相关《三人表决器.docx(10页珍藏版)》请在冰豆网上搜索。
三人表决器
黑龙江科技学院
课程设计任务书
一、设计题目:
三人表决器
二、设计的主要内容:
按照设计题目,根据所学的组合逻辑所学的知识及数字电路和嵌入式的知识完成三人表决器的设计,使之能够满足表决时少数服从多数的表决规则,根据逻辑真值表和逻辑表达式完成表决功能。
指导教师:
于海英
日期:
教师评语:
评阅成绩:
评阅人:
日期:
摘要
本次设计的三人表决器,是投票系统中的客户端,是一种代表投票或举手表决的表决装置。
表决时,与会的有关人员只要按动各自表决器上“赞成”“反对”“弃权”的某一按钮,荧光屏上即显示出表决结果。
在三人表决器中三个人分别用手指拨动开关SW1、SW2、SW3来表示自己的意愿,如果对某决议同意,各人就把自己的指拨开关拨到高电平(上方),不同意就把自己的指拨开关拨到低电平(下方)。
表决结果用LED(高电平亮)显示,如果决议通过那么实验板上L2亮;如果不通过那么实验板上L1亮;如果对某个决议有任意二到三人同意,那么此决议通过,L2亮;如果对某个决议只有一个人或没人同意,那么此决议不通过,L1亮。
关键词:
投票系统系统,表决结果,决议通过
第1章三人表决器概述
1.1三人表决器的功能描述
三个人分别用手指拨动开关SW1、SW2、SW3来表示自己的意愿,如果对某决议同意,各人就把自己的指拨开关拨到高电平(上方),不同意就把自己的指拨开关拨到低电平(下方)。
表决结果用LED(高电平亮)显示,如果决议通过那么实验板上L2亮;如果不通过那么实验板上L1亮;如果对某个决议有任意二到三人同意,那么此决议通过,L2亮;如果对某个决议只有一个人或没人同意,那么此决议不通过,L1亮
1.2三人表决器”的逻辑功能
表决结果与多数人意见相同。
设X0、X1、X2为三个人(输入逻辑变量),赞成为1,不赞成为0;Y0为表决结果(输出逻辑变量),多数赞成Y0为1,否则,Y0为0.其真值表如表1所示。
表1“三人表决器”真值表
输入逻辑变量输出逻辑变量
X0
X1
X2
Y0
0
0
0
0
0
0
1
0
0
1
0
0
0
1
1
1
1
0
0
0
1
0
1
1
1
1
0
1
1
1
1
1
其中X0,X1,X2为输入表决信号即为sw1,sw2,sw3指示灯,Y0为输出结果即LED灯
由真值表写出逻辑表达式并化简得:
Y0=X0*X1+X0*X2+X1*X2
第2章三人表决器设计思想
2.1组合逻辑电路的分析
2.1.1组合逻辑电路的分析
输入
输出
A
B
C
F
0
0
0
0
0
0
1
0
0
1
0
0
0
1
1
1
1
0
0
0
1
0
1
1
1
1
0
1
1
1
1
1
从真值表发现:
输入变量A,B,C中有两个或两个以上为一,则输出为1,从而总结电路功能:
三人表决电路。
2.1.2分析组合逻辑电路的一般步骤
⑴由逻辑图写出各输出端的逻辑表达式;
⑵化简和变换各逻辑表达式;
⑶列出真值表;
⑷根据真值表和逻辑表达式对逻辑电路进行分析,最后确定其功能
2.2该设计的设计思路
设A、B、C为三个人,赞成为1,不赞成为0,Y0为表决结果,多数赞成Y0为1,否则,Y0为0。
画出逻辑图,列出真值表,出路基表达式。
第3章设计逻辑图及仿真
1.设计逻辑图
投票人通过sw1,sw2,sw3输入信号灯的开关,向X0,X1,X2输入表决能容,通过L1,L2表示出表示结果,如图3-1
图3-1
2.设计仿真图
当表决人的有两人及三人表决赞同时即真值为1是,输出y的结果为赞同即真值为1,反之则为反对,真值为0.如图3-2
图3-2
3程序的应用
将程序语句写入到PLC中,再进行接线:
用三个开关分别控制X0、X1、X2,用一盏指示灯来显示表决结果,并将COM1连接到24V直流电源的正极。
接线完毕就可以进行演示实验的操作了。
如果赞成,则合上开关;如果不赞成,则断开开关。
指示灯的亮灭,显示的是表决的结果。
灯亮表示多数赞成,灯不亮,则表示多数不赞成。
表决结果与多数人意见相同。
下面探讨一下由“逻辑表达式”来编写PLC程序的规律。
一般书上用A、B、C表示输入逻辑变量,用Y表示输出逻辑变量。
在这里为了编程的方便,我们有意把PLC的输入继电器(X)的触点作为输入逻辑变量,把输出继电器的线圈作为输出逻辑变量。
例如,在表达式
(1)中,X0、X1、X2为三个输入逻辑变量,代表三个人,Y0为输出逻辑变量,代表表决结果。
同时在PLC中,X0、X1、X2又是三个输入继电器,都是输入继电器的常开触点;Y0是一个输出继电器,是输出继电器的一个线圈。
式
(1)是一个“与或式”,在第一项X0*X1中,“X0”在项首,用[LD]指令,即LDX0,“*”是“与”逻辑,用[AND]指令,即ANDX1。
第二项、第三项也是这个规律,三项相加,
“+”是“或”逻辑,用[ORB]指令,[ORB]指令是“块或”指令。
因为每一个“与项”都是两个触点相串联的“串联电路块”,而“相加”就是作并联连接,即“串联电路块”作并联连接,所以要用“块或”指令。
Y0是输出,用线圈输出指令[OUT],即OUTY0。
程序结束用
[END]指令。
附程序代码
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitybjq3is
port(a,b,c:
instd_logic;
y:
outstd_logic);
end;
architectureoneofbjq3is
begin
y<=(aandb)or(aandc)or(bandc);
end;
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitybjq3is
port(a,b,c:
instd_logic;
y:
outstd_logic);
end;
architectureoneofbjq3is
signalm:
std_logic_vector(2downto0);
begin
m<=a&b&c;
y<='0'when(m="000")or(m="001")or(m="010")or(m="100")
else
'1';
end;
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitybjq3is
port(a,b,c:
instd_logic;
y:
outstd_logic);
end;
architectureoneofbjq3is
signalm:
std_logic_vector(2downto0);
begin
m<=a&b&c;
withmselect
y<='0'when"000"|"001"|"010"|"100",
'1'whenothers;
end;
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitybjq3is
port(m:
instd_logic_vector(2downto0);
y:
outstd_logic);
end;
architectureoneofbjq3is
begin
process(m)
begin
casemis
when"000"|"001"|"010"|"100"=>y<='0';
whenothers=>y<='1';
endcase;
endprocess;
end;
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitybjq3is
port(m:
instd_logic_vector(2downto0);
y:
outstd_logic);
end;
architectureoneofbjq3is
begin
process(m)
begin
ifm="000"theny<='0';
elsifm="001"theny<='0';
elsifm="010"theny<='0';
elsifm="011"theny<='1';
elsifm="100"theny<='0';
elsifm="101"theny<='1';
elsifm="110"theny<='1';
elsifm="111"theny<='1';
endif;
endprocess;
end;