我正在使用 C 语言对微型计算机(ATmega328p)进行编程,这只是一个学校项目。问题是我试图代表这个真实的表(A、B 和 C 只是输入,更具体地说是按钮),EXOR 是 LED 的输出,还有其他 3 个 LED,但它们正在执行不同的门,并且它们正在工作好的。
我对这个特定部分有问题,因为 exor 不起作用,当按下 2 个按钮时它应该关闭,但事实并非如此。只有当所有按钮都没有按下时才会关闭
if ( ((BTS & _BV(BT1)) ^ (BTS & _BV(BT2))) || ((BTS & _BV(BT2)) ^ (BTS & _BV(BT3)))) //EXOR
{
LEDS |= _BV(LED2); //Set 1 on LED2
}
else
{
LEDS &= ~_BV(LED2); //Set 0 on LED2
}`
我将完整的代码放在这里仅供参考。
type he#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
#define delay 500
//--Tags
//-Inputs
#define BTS PINB
#define BT1 PINB0
#define BT2 PINB1
#define BT3 PINB2
//-Outputs
#define LEDS PORTD
#define LED0 PORTD2
#define LED1 PORTD3
#define LED2 PORTD4
#define LED3 PORTD5
void init_ports(void);
int main(void)
{
init_ports();
while (1)
{
//Output 1
if ((BTS & _BV(BT1)) && (BTS & _BV(BT2)) && (BTS & _BV(BT3))) // AND
{
LEDS |= _BV(LED0); //Set 1 on LED0
}
else
{
LEDS &= ~ _BV(LED0); //Set 0 on LED0
}
//Output 2
if ((BTS & _BV(BT1)) || (BTS & _BV(BT2)) || (BTS & _BV(BT3))) // OR
{
LEDS |= _BV(LED1); //Set 1 on LED1
}
else
{
LEDS &= ~ _BV(LED1); //Set 0 on LED1
}
`//Output 3
if ( ((BTS & _BV(BT1)) ^ (BTS & _BV(BT2))) || ((BTS & _BV(BT2)) ^ (BTS & _BV(BT3)))) //EXOR
{
LEDS |= _BV(LED2); //Set 1 on LED2
}
else
{
LEDS &= ~_BV(LED2); //Set 0 on LED2
}`
//Output 4
if (!((BTS & _BV(BT1)) && (BTS & _BV(BT2)) && (BTS & _BV(BT3)))) // NOR
{
LEDS |= _BV(LED3); //Set 1 on LED3
}
else
{
LEDS &= ~_BV(LED3); //Set 0 on LED3
}
}
}
void init_ports (void)
{
//--Inputs
DDRB &= ~(_BV(BT1) | _BV(BT2) | _BV(BT3));
//-PULL-UP
PORTB &= ~(_BV(BT1) | _BV(BT2) | _BV(BT3));
//--Outputs
DDRD |= (_BV(LED0) | _BV(LED1) | _BV(LED2) | _BV(LED3));
//-Off
PORTD &= ~(_BV(LED0) | _BV(LED1) | _BV(LED2) | _BV(LED3));
}
re
有什么可能出问题的想法吗?泰! :D
我尝试使用这个布尔表达式 y = A'B'C + A'BC' + AB'C' + ABC
编写一些代码,使用布尔表达式构建真值表,并将其与作业中给出的表进行比较。他们匹配吗?如果没有,请仔细考虑给定的真值表并构造一个匹配的布尔表达式。您还可以在 Google 中搜索一种称为卡诺图的东西,它可以帮助您从真值表构建表达式。
#include <stdio.h>
int main()
{
printf(" A B C EXOR\n");
printf("------------------\n");
for (int a = 0; a <=1; a++) {
for (int b = 0; b <=1; b++) {
for (int c = 0; c <=1; c++) {
int exor = (a ^ b) || (b ^ c);
printf(" %i %i %i %i\n", a, b, c, exor);
}
}
}
}