Смекни!
smekni.com

Логічні елементи, що застосовуються в електронно-обчислювальній техніці (стр. 5 из 6)

ЛІТЕРАТУРА

1. Поджаренко В.О., Кучерук В.Ю., Марущак В.Ю. Основи цифрової техніки. – Вінниця:, ВДТУ, 2000р.

2. Хаімзон І. Я. Техніка передачі інформації. Функціональні вузли та схеми. Частина ІІ. – Вінниця:, ВДТУ,2000.- 112 с.

Додаток А

Текст програми selector.cpp

#include <iostream.h>

#include <conio.h>

#include <graphics.h>

#include <math.h>

//вибір типу мультиплексора

void sub_intro()

{

setcolor(3);

settextstyle(0,HORIZ_DIR,2);

outtextxy(90,100,"ПРИНЦИП РОБОТИ МУЛЬТИПЛЕКСОРА");

settextstyle(1,HORIZ_DIR,0);

setcolor(5);

outtextxy(210,150,"ВИБЕРІТЬ ТИП МУЛЬТИПЛЕКСОРА:");

setcolor(15);

settextstyle(0,HORIZ_DIR,2);

outtextxy(300,200,"4-1");

outtextxy(300,240,"8-1");

outtextxy(300,280,"16-1");

setcolor(1);

settextstyle(1,HORIZ_DIR,0);

outtextxy(460,400,"курсова робота");

outtextxy(460,420,"студента групи 1 ІС-05");

outtextxy(460,440,"Ткачука Андрія");

settextstyle(0,HORIZ_DIR,2);

}

//вибір мультиплексора, повернення значення кількості адресних входів

int intro()

{

int n,i,key;

i=0;

n=i+2;// n-кількість адресних входів

sub_intro();

setcolor(4);

outtextxy(280,200,">");

while(!kbhit())

{

key=getch();if(key==13) goto next;//вихід із функції

key=getch();

//управління клавішами курсора

switch(key)

{

case 72:cleardevice();

i--;

if(i<0) i=2;

n=i+2;

sub_intro();

setcolor(4);

outtextxy(280,200+i*40,">");

break;

case 80:cleardevice();

i++;

if(i>2)i=0;

n=i+2;

sub_intro();

setcolor(4);

outtextxy(280,200+i*40,">");

break;

}

}

next:cleardevice();

settextstyle(1,HORIZ_DIR,0);

return(n);

}

//виведення підказки користування клавішами

void instr(int x0,int y0,int n)

{

int x,y,zm;

if(n==4){x=x0+450;y=y0;zm=20;}

else {x=x0;y=y0;}

outtextxy(x,y,"КЛАВІШІ:");

if(n!=4)outtextxy(x,y+20,"ENTER – вибір мультиплексора ");

else

{

outtextxy(x,y+20,"ENTER -");

outtextxy(x,y+40,"вибір мультиплексора");

}

outtextxy(x,y+40+zm,"UP - вверх");

outtextxy(x,y+60+zm,"DOWN - вниз");

outtextxy(x,y+80+zm,"ESC - вихід");

}

//функція креслення таблиці істинності

void table(int x,int y,int n)//x,y-координати верхнього лівого кута

{ //n-кількість адресних входів

int i,L0=100/n;

setcolor(7);

for(i=0;i<pow(2,n)+3;i++)

line(x,y+i*L0,x+(n+2)*L0,y+i*L0);

for(i=0;i<(n+3);i++)

line(x+i*L0,y,x+i*L0,y+(pow(2,n)+2)*L0);

}

//функція заповнення таблиці істинності

void fill(int x,int y, int n)

{

int i,j,k,t,g,L0=100/n;

for(i=0;i<n;i++)

switch(i)

{

case 0:outtextxy(x+L0/3+i*L0,y+L0/2,"A0");

outtextxy(x+L0/3+i*L0,y+1.5*L0,"*");break;

case 1:outtextxy(x+L0/3+i*L0,y+L0/2,"A1");

outtextxy(x+L0/3+i*L0,y+1.5*L0,"*");break;

case 2:outtextxy(x+L0/3+i*L0,y+L0/2,"A2");

outtextxy(x+L0/3+i*L0,y+1.5*L0,"*");break;

case 3:outtextxy(x+L0/3+i*L0,y+L0/2,"A3");

outtextxy(x+L0/3+i*L0,y+1.5*L0,"*");break;

}

switch(n)

{

case 2:outtextxy(x+L0/3+2*L0,y+L0/2,"E");

outtextxy(x+L0/3+2*L0,y+1.5*L0,"0");

outtextxy(x+L0/3+3*L0,y+L0/2,"Q");

outtextxy(x+L0/3+3*L0,y+1.5*L0,"0");break;

case 3:outtextxy(x+L0/3+3*L0,y+L0/2,"E");

outtextxy(x+L0/3+3*L0,y+1.5*L0,"0");

outtextxy(x+L0/3+4*L0,y+L0/2,"Q");

outtextxy(x+L0/3+4*L0,y+1.5*L0,"0");break;

case 4:outtextxy(x+L0/3+4*L0,y+L0/2,"E");

outtextxy(x+L0/3+4*L0,y+1.5*L0,"0");

outtextxy(x+L0/3+5*L0,y+L0/2,"Q");

outtextxy(x+L0/3+5*L0,y+1.5*L0,"0");break;

}

t=2;

switch(n)//заповнення таблиці кодовими комбінаціями

{

case 2://для мультиплексора з 2-ма адресними входами

for(i=0;i<2;i++)

for(j=0;j<2;j++)

{

switch(i)

{

case 0:outtextxy(x+L0/3,y+t*L0+L0/2,"0");break;

case 1:outtextxy(x+L0/3,y+t*L0+L0/2,"1");

}

switch(j)

{

case 0:outtextxy(x+L0/3+L0,y+t*L0+L0/2,"0");break;

case 1:outtextxy(x+L0/3+L0,y+t*L0+L0/2,"1");

}

outtextxy(x+L0/3+2*L0,y+t*L0+L0/2,"1");

t++;

}

break;

case 3://з 3-ма адр. входами

for(i=0;i<2;i++)

for(j=0;j<2;j++)

for(k=0;k<2;k++)

{

switch(i)

{

case 0:outtextxy(x+L0/3,y+t*L0+L0/2,"0");break;

case 1:outtextxy(x+L0/3,y+t*L0+L0/2,"1");

}

switch(j)

{

case 0:outtextxy(x+L0/3+L0,y+t*L0+L0/2,"0");break;

case 1:outtextxy(x+L0/3+L0,y+t*L0+L0/2,"1");

}

switch(k)

{

case 0:outtextxy(x+L0/3+2*L0,y+t*L0+L0/2,"0");break;

case 1:outtextxy(x+L0/3+2*L0,y+t*L0+L0/2,"1");

}

outtextxy(x+L0/3+3*L0,y+t*L0+L0/2,"1");

t++;

}

break;

case 4: //з 4-ма адр. входами

for(i=0;i<2;i++)

for(j=0;j<2;j++)

for(k=0;k<2;k++)

for(g=0;g<2;g++)

{

switch(i)

{

case 0:outtextxy(x+L0/3,y+t*L0+L0/2,"0");break;

case 1:outtextxy(x+L0/3,y+t*L0+L0/2,"1");

}

switch(j)

{

case 0:outtextxy(x+L0/3+L0,y+t*L0+L0/2,"0");break;

case 1:outtextxy(x+L0/3+L0,y+t*L0+L0/2,"1");

}

switch(k)

{

case 0:outtextxy(x+L0/3+2*L0,y+t*L0+L0/2,"0");break;

case 1:outtextxy(x+L0/3+2*L0,y+t*L0+L0/2,"1");

}

switch(g)

{

case 0:outtextxy(x+L0/3+3*L0,y+t*L0+L0/2,"0");break;

case 1:outtextxy(x+L0/3+3*L0,y+t*L0+L0/2,"1");

}

outtextxy(x+L0/3+4*L0,y+t*L0+L0/2,"1");

t++;

}

}

for(i=2;i<(pow(2,n)+2);i++)

switch(i)

{

case 2:outtextxy(x+L0/4+(n+1)*L0,y+i*L0+L0/2,"D0");break;

case 3:outtextxy(x+L0/4+(n+1)*L0,y+i*L0+L0/2,"D1");break;

case 4:outtextxy(x+L0/4+(n+1)*L0,y+i*L0+L0/2,"D2");break;

case 5:outtextxy(x+L0/4+(n+1)*L0,y+i*L0+L0/2,"D3");break;

case 6:outtextxy(x+L0/4+(n+1)*L0,y+i*L0+L0/2,"D4");break;

case 7:outtextxy(x+L0/4+(n+1)*L0,y+i*L0+L0/2,"D5");break;

case 8:outtextxy(x+L0/4+(n+1)*L0,y+i*L0+L0/2,"D6");break;

case 9:outtextxy(x+L0/4+(n+1)*L0,y+i*L0+L0/2,"D7");break;

case 10:outtextxy(x+L0/4+(n+1)*L0,y+i*L0+L0/2,"D8");break;

case 11:outtextxy(x+L0/4+(n+1)*L0,y+i*L0+L0/2,"D9");break;

case 12:outtextxy(x+L0/10+(n+1)*L0,y+i*L0+L0/2,"D10");break;

case 13:outtextxy(x+L0/10+(n+1)*L0,y+i*L0+L0/2,"D11");break;

case 14:outtextxy(x+L0/10+(n+1)*L0,y+i*L0+L0/2,"D12");break;

case 15:outtextxy(x+L0/10+(n+1)*L0,y+i*L0+L0/2,"D13");break;

case 16:outtextxy(x+L0/10+(n+1)*L0,y+i*L0+L0/2,"D14");break;

case 17:outtextxy(x+L0/10+(n+1)*L0,y+i*L0+L0/2,"D15");break;

}

}

//креслення мультиплексора

void mult(int x,int y,int n)//x,y-координати верхнього лівого кута

{ //кіль-сть адресних входів

int i,w=90/n,L0=80/n;

setcolor(7);

line(x,y,x,y+L0*(3+n+pow(2,n)));

line(x+w,y,x+w,y+L0*(3+n+pow(2,n)));

line(x+5*w,y,x+5*w,y+L0*(3+n+pow(2,n)));

line(x+6*w,y,x+6*w,y+L0*(3+n+pow(2,n)));

line(x,y,x+6*w,y);

line(x,y+L0*(3+n+pow(2,n)),x+6*w,y+L0*(3+n+pow(2,n))); line(x,y+L0*(1+pow(2,n)),x+w,y+L0*(1+pow(2,n)));

line(x,y+L0*(2+n+pow(2,n)),x+w,y+L0*(2+n+pow(2,n)));

outtextxy(x+L0/2,y+L0/3,"D");

outtextxy(x+L0/2,y+(1+pow(2,n))*L0+L0/3,"A");

outtextxy(x+L0/2,y+(2+n+pow(2,n))*L0+L0/3,"E");

line(x-w,y+(2+n+pow(2,n))*L0+L0/2,x,y+(2+n+pow(2,n))*L0+L0/2);

outtextxy(x+5*w+L0/2,y+L0*(3+n+pow(2,n))/2,"Q");

line(x+6*w,y+L0*(3+n+pow(2,n))/2,x+7*w,y+L0*(3+n+pow(2,n))/2);

for(i=0;i<n;i++)

//креслення та нумерація адресних входів

switch(i)

{

case 0:outtextxy(x+L0/2,y+(1+pow(2,n))*L0+L0+L0/3,"0");

line(x-w,y+(1+pow(2,n))*L0+L0+L0/2,x,y+(1+pow(2,n))*L0+L0+L0/2);

break;

case 1:outtextxy(x+L0/2,y+(1+pow(2,n))*L0+2*L0+L0/3,"1");

line(x-w,y+(1+pow(2,n))*L0+2*L0+L0/2,x,y+(1+pow(2,n))*L0+2*L0+L0/2);

break;

case 2:outtextxy(x+L0/2,y+(1+pow(2,n))*L0+3*L0+L0/3,"2");

line(x-w,y+(1+pow(2,n))*L0+3*L0+L0/2,x,y+(1+pow(2,n))*L0+3*L0+L0/2);

break;

case 3:outtextxy(x+L0/2,y+(1+pow(2,n))*L0+4*L0+L0/3,"3");

line(x-w,y+(1+pow(2,n))*L0+4*L0+L0/2,x,y+(1+pow(2,n))*L0+4*L0+L0/2);

break;

}

for(i=0;i<pow(2,n);i++)

//нумерація інформаційних входів

switch(i)

{

case 0:outtextxy(x+L0/2,y+L0/3+L0,"0");

line(x-w,y+L0/2+L0,x,y+L0/2+L0);break;

case 1:outtextxy(x+L0/2,y+L0/3+2*L0,"1");

line(x-w,y+L0/2+2*L0,x,y+L0/2+2*L0);break;

case 2:outtextxy(x+L0/2,y+L0/3+3*L0,"2");

line(x-w,y+L0/2+3*L0,x,y+L0/2+3*L0);break;

case 3:outtextxy(x+L0/2,y+L0/3+4*L0,"3");

line(x-w,y+L0/2+4*L0,x,y+L0/2+4*L0);break;

case 4:outtextxy(x+L0/2,y+L0/3+5*L0,"4");

line(x-w,y+L0/2+5*L0,x,y+L0/2+5*L0);break;

case 5:outtextxy(x+L0/2,y+L0/3+6*L0,"5");

line(x-w,y+L0/2+6*L0,x,y+L0/2+6*L0);break;

case 6:outtextxy(x+L0/2,y+L0/3+7*L0,"6");

line(x-w,y+L0/2+7*L0,x,y+L0/2+7*L0);break;

case 7:outtextxy(x+L0/2,y+L0/3+8*L0,"7");

line(x-w,y+L0/2+8*L0,x,y+L0/2+8*L0);break;

case 8:outtextxy(x+L0/2,y+L0/3+9*L0,"8");

line(x-w,y+L0/2+9*L0,x,y+L0/2+9*L0);break;

case 9:outtextxy(x+L0/2,y+L0/3+10*L0,"9");

line(x-w,y+L0/2+10*L0,x,y+L0/2+10*L0);break;

case 10:outtextxy(x+L0/5,y+L0/3+11*L0,"10");

line(x-w,y+L0/2+11*L0,x,y+L0/2+11*L0);break;

case 11:outtextxy(x+L0/5,y+L0/3+12*L0,"11");

line(x-w,y+L0/2+12*L0,x,y+L0/2+12*L0);break;

case 12:outtextxy(x+L0/5,y+L0/3+13*L0,"12");

line(x-w,y+L0/2+13*L0,x,y+L0/2+13*L0);break;

case 13:outtextxy(x+L0/5,y+L0/3+14*L0,"13");

line(x-w,y+L0/2+14*L0,x,y+L0/2+14*L0);break;

case 14:outtextxy(x+L0/5,y+L0/3+15*L0,"14");

line(x-w,y+L0/2+15*L0,x,y+L0/2+15*L0);break;

case 15:outtextxy(x+L0/5,y+L0/3+16*L0,"15");

line(x-w,y+L0/2+16*L0,x,y+L0/2+16*L0);break;

}

}

//функція, що малює стрілку

void arrow(int x, int y)

{

setfillstyle(1,4);

setcolor(4);

line(x,y,x-20,y-10);

line(x,y,x-20,y+10);

line(x-15,y,x-20,y-10);

line(x-15,y,x-20,y+10);

floodfill(x-5,y,4);

}

//введення кодової комбінації на адресні входи мультиплексора

void adress(int x,int y,int n,int m)

{

int i,j,k,g,t,L0=100/n;

t=0;

switch(n)

{

case 2://для мультиплексора з 2-ма адр. входами

for(i=0;i<2;i++)

for(j=0;j<2;j++)

{

switch(i)

{

case 0:if(t==m)outtextxy(x-90/n,y+(1+pow(2,n))*L0,"0");

break;

case 1:if(t==m)outtextxy(x-90/n,y+(1+pow(2,n))*L0,"1");

}

switch(j)

{

case 0:if(t==m)outtextxy(x-90/n,y+(2+pow(2,n))*L0-L0/5,"0");

break;

case 1:if(t==m)outtextxy(x-90/n,y+(2+pow(2,n))*L0-L0/5,"1");

}

outtextxy(x-90/n,y+(3+pow(2,n))*L0-L0/2.5,"1");

t++;

}

break;

case 3:// для мультиплексора з 3-ма адр. входами

for(i=0;i<2;i++)

for(j=0;j<2;j++)

for(k=0;k<2;k++)

{

switch(i)

{

case 0:if(t==m)outtextxy(x-90/n,y+pow(2,n)*L0,"0");break;

case 1:if(t==m)outtextxy(x-90/n,y+pow(2,n)*L0,"1");

}

switch(j)

{

case 0:if(t==m)outtextxy(x-90/n,y+pow(2,n)*L0+L0-L0/4,"0");

break;

case 1:if(t==m)outtextxy(x-90/n,y+pow(2,n)*L0+L0-L0/4,"1");

}

switch(k)

{

case 0:if(t==m)outtextxy(x-90/n,y+pow(2,n)*L0+2*L0-L0/2,"0");

break;

case 1:if(t==m)outtextxy(x-90/n,y+pow(2,n)*L0+2*L0-L0/2,"1");

}

outtextxy(x-90/n,y+pow(2,n)*L0+3*L0-L0/1.5,"1");

t++;

}

break;

case 4:// для мультиплексора з 4-ма адр. входами

for(i=0;i<2;i++)

for(j=0;j<2;j++)

for(k=0;k<2;k++)

for(g=0;g<2;g++)

{

switch(i)

{

case 0:if(t==m)outtextxy(x-90/n,y+(pow(2,n)-2)*L0+L0/3,"0");

break;

case 1:if(t==m)outtextxy(x-90/n,y+(pow(2,n)-2)*L0+L0/3,"1");

}

switch(j)

{

case 0:if(t==m)outtextxy(x-90/n,y+(pow(2,n)-1)*L0+L0/6,"0");

break;

case 1:if(t==m)outtextxy(x-90/n,y+(pow(2,n)-1)*L0+L0/6,"1");

}

switch(k)

{

case 0:if(t==m)outtextxy(x-90/n,y+(pow(2,n))*L0,"0");break;

case 1:if(t==m)outtextxy(x-90/n,y+(pow(2,n))*L0,"1");

}

switch(g)

{

case 0:if(t==m)outtextxy(x-90/n,y+(pow(2,n)+1)*L0-L0/4,"0");

break;

case 1:if(t==m)outtextxy(x-90/n,y+(pow(2,n)+1)*L0-L0/4,"1");

}

outtextxy(x-90/n,y+(pow(2,n)+2)*L0-L0/2.5,"1");

t++;

}

}

}

void main()

{

int dr=DETECT,mod,y,i,n,L0,key,c;

initgraph(&dr,&mod,"");

again:;

n=intro();

table(25,10,n);

fill(25,10,n);

mult(310,10,n);

instr(20,380,n);

i=-1;

y=0;

L0=80/n;

setcolor(2);

//на адр. входи не подаються сигнали

if(n==2)outtextxy(310-90/n,75+(3+pow(2,n))*L0-L0/2.5,"0");

if(n==3)outtextxy(310-90/n,82+pow(2,n)*L0+3*L0-L0/1.5,"0");

if(n==4)outtextxy(310-90/n,95+n+(pow(2,n)+2)*L0-L0/2.5,"0");

outtextxy(310+450/n+1.5*L0,y+L0*(3+n+pow(2,n))/2,"0");

//на адр. входи подаються сигнали

while(!kbhit())

{

key=getch();if(key==13){cleardevice();goto again;}

if(key==27) goto next;

key=getch();

//керування стрілкою

switch(key)

{

case 72:cleardevice();//стрілка вверх

table(25,10,n);

fill(25,10,n);

mult(310,10,n);

instr(20,380,n);

i--;

if(i<0) i=pow(2,n)-1;

arrow(260,10+(i+1)*L0+L0/2);//y+L0/2+7*L0

setcolor(2);

//комутація з одного із інф. входів на вихід

switch(i)

{

case 0:outtextxy(310+450/n+1.5*L0,y+L0*(3+n+pow(2,n))/2,"D0");

break;

case 1:outtextxy(310+450/n+1.5*L0,y+L0*(3+n+pow(2,n))/2,"D1");

break;

case 2:outtextxy(310+450/n+1.5*L0,y+L0*(3+n+pow(2,n))/2,"D2");