ЛІТЕРАТУРА
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");