Дело в том, что из вентилей составляют более сложные схемы, которые позволяют выполнить арифметические операции и хранить информацию. Причем схему, выполняющую определенные функции, можно построить из различных по сочетанию и количеству вентилей. Поэтому значение формального представления логической схемы чрезвычайно велико. Оно необходимо для того, чтобы разработчик имел возможность выбрать наиболее подходящий ему вариант построения схемы из вентилей. Процесс разработки общей логической схемы устройства (в том числе и компьютера в целом) таким образом становится иерархическим, причем на каждом следующем уровне в качестве «кирпичиков» используются логические схемы, созданные на предыдущем этапе.
Алгебра логики дала в руки конструкторам мощное средство разработки, анализа и совершенствования логических схем. В самом деле, гораздо проще, быстрее и дешевле изучать свойства и доказывать правильность работы схемы с выражающей ее формулы, чем создавать реальное техническое устройство. Именно в этом состоит смысл любого математического моделирования.
Логические схемы необходимо строить из минимально возможного количества элементов, что в свою очередь, обеспечивает большую скорость работы и увеличивает надежность устройства.
Алгоритм построения логических схем:
1) Определить число логических переменных.
2) Определить количество базовых логических операций и их порядок.
3) Изобразить для каждой логической операции соответствующий ей вентиль.
4) Соединить вентили в порядке выполнения логических операций.
Пример 10
Составить логическую схему для логического выражения: F=¬XvY&X.
1) Две переменные – X и Y.
2) Две логические операции: 1 3 2
¬XvY&X.
3) Строим схему, соединяя вентили в порядке выполнения логических операций:
int knopka=0; int knopka2=0; void setup () { pinMode(13,OUTPUT); pinMode(12,OUTPUT); pinMode(9,INPUT); pinMode(8,INPUT); } void loop () {//КНОПКА 1// if(digitalRead(8)==HIGH&&knopka==0)//если кнопка нажата // и перемення "knopka" равна 0 , то ... { delay(50);//защита от дребезга knopka++;//пишем 1 в переменную кнопка //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие digitalWrite(13, !digitalRead(13));//меняем значение порта на противоположное } if(digitalRead(8)==LOW&&knopka==1)//если кнопка НЕ нажата //и переменная knopka равна - 1 ,то ... { knopka=0;//обнуляем переменную "knopka" } //КНОПКА 2// if(digitalRead(9)==HIGH&&knopka2==0)//если кнопка нажата // и перемення "knopka2" равна 0 , то ... { delay(50); knopka2++;//пишем 1 в переменную кнопка //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие digitalWrite(12,!digitalRead(12)); } if(digitalRead(9)==LOW&&knopka2==1)//если кнопка НЕ нажата //и переменная knopka2 равна - 1 ,то ... { knopka2=0;//обнуляем переменную "knopka2" } }
Дело в том, что из вентилей составляют более сложные схемы, которые позволяют выполнить арифметические операции и хранить информацию. Причем схему, выполняющую определенные функции, можно построить из различных по сочетанию и количеству вентилей. Поэтому значение формального представления логической схемы чрезвычайно велико. Оно необходимо для того, чтобы разработчик имел возможность выбрать наиболее подходящий ему вариант построения схемы из вентилей. Процесс разработки общей логической схемы устройства (в том числе и компьютера в целом) таким образом становится иерархическим, причем на каждом следующем уровне в качестве «кирпичиков» используются логические схемы, созданные на предыдущем этапе.
Алгебра логики дала в руки конструкторам мощное средство разработки, анализа и совершенствования логических схем. В самом деле, гораздо проще, быстрее и дешевле изучать свойства и доказывать правильность работы схемы с выражающей ее формулы, чем создавать реальное техническое устройство. Именно в этом состоит смысл любого математического моделирования.
Логические схемы необходимо строить из минимально возможного количества элементов, что в свою очередь, обеспечивает большую скорость работы и увеличивает надежность устройства.
Алгоритм построения логических схем:
1) Определить число логических переменных.
2) Определить количество базовых логических операций и их порядок.
3) Изобразить для каждой логической операции соответствующий ей вентиль.
4) Соединить вентили в порядке выполнения логических операций.
Пример 10
Составить логическую схему для логического выражения: F=¬XvY&X.
1) Две переменные – X и Y.
2) Две логические операции: 1 3 2
¬XvY&X.
3) Строим схему, соединяя вентили в порядке выполнения логических операций:
Пример 11
Постройте логическую схему, соответствующую логическому выражению F=X&Yv¬(YvX).
Вычислить значения выражения для X=1, Y=0.
1) Переменных две: X и Y.
2) Логических операций четыре: конъюнкция, две дизъюнкции и отрицание. Определяем порядок выполнения операций:
1 4 3 2
X&Yv ¬(YvX).
3) Схему строим слева направо в соответствии с порядком выполнения логических операций:
4) Вычислим значение выражения: F=1&0v¬(0v1)=0.
Упражнение 15
Постройте логическую схему, соответствующую логическому выражению, и найдите значение логического выражения:
1) F=AvB&¬C, если A=1, B=1, C=1.
2) F = ¬(AvB&C), если A=0, B=1, C=1.
3) F =¬AvB&C, если A=1, B=0, C=1.
4) F =(AvB)&(CvB), если A=0, B=1, C=0.
5) F = ¬(A&B&C), если A=0, B=0, C=1.
6) F=B&¬Av¬B&A, если A=0, B=0.
7) F=¬(A&B&C)v(B&Cv¬A), если A=1, B=1, C=0.
Объяснение:
int knopka=0; int knopka2=0; void setup () { pinMode(13,OUTPUT); pinMode(12,OUTPUT); pinMode(9,INPUT); pinMode(8,INPUT); } void loop () {//КНОПКА 1// if(digitalRead(8)==HIGH&&knopka==0)//если кнопка нажата // и перемення "knopka" равна 0 , то ... { delay(50);//защита от дребезга knopka++;//пишем 1 в переменную кнопка //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие digitalWrite(13, !digitalRead(13));//меняем значение порта на противоположное } if(digitalRead(8)==LOW&&knopka==1)//если кнопка НЕ нажата //и переменная knopka равна - 1 ,то ... { knopka=0;//обнуляем переменную "knopka" } //КНОПКА 2// if(digitalRead(9)==HIGH&&knopka2==0)//если кнопка нажата // и перемення "knopka2" равна 0 , то ... { delay(50); knopka2++;//пишем 1 в переменную кнопка //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие digitalWrite(12,!digitalRead(12)); } if(digitalRead(9)==LOW&&knopka2==1)//если кнопка НЕ нажата //и переменная knopka2 равна - 1 ,то ... { knopka2=0;//обнуляем переменную "knopka2" } }