目标是取任何 int 负数或正数并得到它的二进制。然后,如果该二进制数为 4 位或更少,则将其显示在树莓派上的 LED 上。不管用printf显示什么二进制文件。它需要可扩展,因此如果您想添加更多 LED,只需将引脚号添加到数据结构中就应该很容易,而无需修改程序。这需要是一个循环,因此在打印二进制文件后,它会要求再次找到它,我用于 LED 的接线 pi 编号是 0,2,3,5
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
int main()
{
int displayNumber;
wiringPiSetup();
pinMode(0, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
digitalWrite(0, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(5, LOW);
printf("Please select a number to display!\n");
scanf("%i", &displayNumber);
switch (displayNumber) {
case 0:
printf("0");
digitalWrite(0, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(5, LOW);
break;
case 1:
printf("1");
digitalWrite(0, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(5, LOW);
break;
case 2:
printf("10");
digitalWrite(0, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(5, LOW);
break;
case 3:
printf("11");
digitalWrite(0, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(5, LOW);
break;
case 4:
printf("100");
digitalWrite(0, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(5, LOW);
break;
case 5:
printf("101");
digitalWrite(0, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(5, LOW);
break;
case 6:
printf("110");
digitalWrite(0, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(5, LOW);
break;
case 7:
printf("111");
digitalWrite(0, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, LOW);
break;
case 8:
printf("1000");
digitalWrite(0, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(5, LOW);
break;
case 9:
printf("1001");
digitalWrite(0, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(5, HIGH);
break;
case 10:
printf("1010");
digitalWrite(0, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(5, LOW);
break;
case 11:
printf("1011");
digitalWrite(0, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
break;
case 12:
printf("1100");
digitalWrite(0, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(5, LOW);
break;
case 13:
printf("1101");
digitalWrite(0, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(5, HIGH);
break;
case 14:
printf("1110");
digitalWrite(0, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, LOW);
break;
case 15:
printf("1111");
digitalWrite(0, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
break;
}
return 0;
}
最佳答案
您可以使用如下所示的函数来写入引脚。请注意,我使用了 unsigned int
作为参数。这是为了避免按位运算中未定义的行为。
#define NO_PINS 4
#define MAXNO 16
int pinnos[NO_PINS] = {0,2,3,5}
void writetopin (unsigned int num)
{
if (num >MAXNO) {
// handle this condition
}
else {
unsigned int mask = 0x01;
for (i=0; i<NO_PINS; i++) {
unsigned int curr = num & mask;
if (curr == 0) {
digitalWrite(pinnos[i], LOW);
}
else {
digitalWrite(pinnos[i], HIGH);
}
mask = mask << 1;
}
}
}
该函数仅处理正整数。要处理负数,您需要定义符号位以及用于显示的位数。
关于c - 在 C 语言中使用 LEDS 进行二进制仿真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58946880/