#include <stdlib.h>
#include <String.h>
struct People
{
char name[20]
int count
}leader[3]={{"zhang"},{"li"},{"sun"}}
int main(int argc, char * argv[])
{
char leader_name[20]
int i,j
for (i = 0i <10i++)
{
scanf("%s", leader_name)
for(j = 0j <3j++)
if (strcmp(leader_name, leader[j].name) == 0)
leader[j].count++
}
printf("the result: \n")
for (i = 0i <3i++)
printf("%5s : %d\n", leader[i].name, leader[i].count)
return EXIT_SUCCESS
}
编译可运行
“三人表决器”“三人表决器”的逻辑功能是:表决结果与多数人意见相同。
设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
由真值表写出逻辑表达式并化简得:y0=x0*x1+x0*x2+x1*x2
(1)
要实现这个逻辑功能,如果用“集成逻辑门”,则可选用三个两输入“与门”和一个三输入“或门”来实现。但是,这里我们不是用“集成逻辑门”,而是用plc“程序”来实现。
程序语句如下:
0
ld
x0
1
and
x1
2
ld
x0
3
and
x2
4
orb
5
ld
x1
6
and
x2
7
orb
8
out
y0
9
end
将这个程序语句写入到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]指令,即ld
x0,“*”是“与”逻辑,用[and]指令,即and
x1。第二项、第三项也是这个规律,三项相加,
“+”是“或”逻辑,用[orb]指令,[orb]指令是“块或”指令。因为每一个“与项”都是两个触点相串联的“串联电路块”,而“相加”就是作并联连接,即“串联电路块”作并联连接,所以要用“块或”指令。y0是输出,用线圈输出指令[out],即out
y0。程序结束用
[end]指令。认真总结由“逻辑表达式”来编写plc程序的规律,这对于快速编程很有好处。但是,一般的初学者,往往都是由“逻辑表达式”到“梯形图”,再到“程序语句”。为了帮助初学者,我们将这个程序的梯形图一并给出,如下图所示。
三人表决器实验我们实验采取3种输入方式:原理图方式,VHDL方式,VerilogHDL.你可以只看一种.下面我分别一一介绍
三人表决器的功能描述
三个人分别用手指拨动开关SW1、SW2、SW3来表示自己的意愿,如果对某决议同意,各人就把自己的指拨开关拨到高电平(上方),不同意就把自己的指拨开关拨到低电平(下方)。表决结果用LED(高电平亮)显示,如果决议通过那么实验板上L2(黄灯)亮;如果不通过那么实验板上L1(红灯)亮;如果对某个决议有任意二到三人同意,那么此决议通过,L2亮;如果对某个决议只有一个人或没人同意,那么此决议不通过,L1亮。
1.1 采用原理图设计三人表决器
我们根据三人表决器的直值表,可以通过卡诺图化简可以得到:
L2=SW1SW2+SW1SW3+SW2SW3
L1=_L2
那么我们可以在MAX+plusII中用原理图实现上面的三人表决器
下面仅把和VHDL不同的详细写下,相同或基本相同的就一带而过:
(1)打开MAX+plusII
(2)新建一个图形文件:File菜单>new
新建文件时选择Graphic Editor file
点OK
(3)输入设计文件
我们现在在图形文件中输入电路,我们这个电路需要AND2、OR3、NOT三个逻辑门电路和输入输出端,你可以
Symbol ->Enter Symbol(或者双击空白处)
d出窗口:
在Symbol Name中输入and2,点OK
同样可以加入or3、input、output、not
对input、output,鼠标左键双击PIN_NAME,那么PIN_NAME被选中,并且变黑,然后输入你要改的名字,如SW1
把元件拖动到合适位置,将光标放到元件的引线出,可以发现光标变为十字星,此时摁住左键就可以进行连线。
最后的电路图如下图
(4)保存文件:
保存为majority_voter.gdf,Automatic Extension选.gdf
把文件设为当前工程:FILE->PROJECT->SET PROJECT TO CURRENT FILE
MAX+PLUS II的标题条将显示新的项目名字
至此,程序输入就已经完成了
(5)检查编译
指定下载的芯片型号
指定芯片的管脚
(参见10分钟学会PLD设计2 -设计的编译)
此时的图形为:
下图为SW1放大的图,其中majority_voter@41中前部分为设计的文件名,后面41为EPM7128SLC84-15的41脚,也就是说电路图中SW1被指定到EPM7128SLC84-15的41脚(而实验板上41脚被连接到指拨开关SW1上了,这样电路图上SW1就和实验板上的硬件SW1实现了连接)。
1.2 采用VHDL设计三人表决器
打开MAX+plusII,在开始菜单内选择MAX+PLUS II 项,开始运行MAX+PLUS II(如下图)
你最好把图标放到桌面上,以后直接双击MAX+PLUS II图标就可以运行软件了
在MAX+PLUSII上点右键,选择发送到->桌面快捷方式(如下图),那么你桌面上就看到MAX+PLUS II了。
3.2 新建VHDL文档
(图形和verilog-HDL设计的过程见后面的部分)
FILE->NEW
或者点下图的新建图标:
连后选择Text Editor File文件,点OK如下图
3.3输入设计文件
在文本窗口中输入以下VHDL源程序:
LIBRARY IEEE
USE IEEE.STD_LOGIC_1164.ALL
--*********************************************
ENTITY majority_voter IS
PORT(SW : IN std_logic_vector(3 DOWNTO 1)
L : OUT std_logic_vector(2 DOWNTO 1))
--L2 is a yellow LED AND L1 is a RED LED
END majority_voter
--*********************************************
ARCHITECTURE concurrent OF majority_voter IS
BEGIN
WITH SW SELECT
L <= "10" WHEN "011",
"10" WHEN "101",
"10" WHEN "110",
"10" WHEN "111",
"01" WHEN OTHERS
END concurrent
--*********************************************
如下图
3.4保存文件
FILE->SAVE,或点工具栏上的存盘符号
存盘符号
把文件保存为majority_voter.vhd(路径中不要有中文字符,Automatic Extension选.vhd)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)