如何从C/C++程序中让LED闪烁?

13

如何通过C/C++程序从LED制作一个小电路的最简单步骤?

我希望所需的依赖和软件包数量最少。

  • 我应该连接到哪个端口?
  • 我应该使用哪个编译器?
  • 如何将数据发送到该端口?
  • 我是否需要使用微处理器?如果不需要,我不想为这个简单的项目使用微处理器。

编辑:对任何特定操作系统的解决方案感兴趣。

7个回答

17
这是一个使用并口的教程。
但我建议使用Arduino,它非常便宜且只需以下代码:
/* Blinking LED
 * ------------
 *
 * turns on and off a light emitting diode(LED) connected to a digital  
 * pin, in intervals of 2 seconds. Ideally we use pin 13 on the Arduino 
 * board because it has a resistor attached to it, needing only an LED

 * 
 * Created 1 June 2005
 * copyleft 2005 DojoDave <http://www.0j0.org>
 * http://arduino.berlios.de
 *
 * based on an orginal by H. Barragan for the Wiring i/o board
 */

int ledPin = 13;                 // LED connected to digital pin 13

void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}

void loop()
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
}

alt text

http://www.arduino.cc/en/Tutorial/BlinkingLED


好的链接!Arduino看起来很酷。我已经焊接了自己的Atmel/PIC原型板,这有点麻烦。但是,如果OP真的*只想连接几个LED,那么基于微控制器的板子就有些大材小用了! - Dan Lenski
Arduino是一款相当棒的设备,而且价格便宜,只需35美元。但是,我Arduino上方提到的链接涉及使用并口进行操作,这是显而易见且更便宜的解决方案。 - mwilliams
Arduino绝对是个不错的选择。 - itsmatt
@Dan,楼主没有说他们有一台电脑。如果他们只想闪烁LED灯,买一台电脑并安装操作系统和编译器可能有些过头了。 - Martin Beckett

6

哪个端口? 并口是我最喜欢的选择,因为它输出+5V(TTL逻辑电平)并且非常容易编程。大多数并口都有足够的功率驱动LED。重要的是要记住,一般计算机端口仅设计用于输出信号电压,并不能产生足够的电流来实际供电给大多数设备。

哪个编译器? 无所谓。但这种硬件操作在Linux下更有趣、更容易,所以GCC是个不错的选择。

如何发送数据? 取决于端口和操作系统。对于一个简单的项目来说,USB非常复杂,所以不要考虑它。串行和并行端口可以通过各种不同的接口进行控制。我的首选是在Linux下使用ioctl()系统调用直接控制并口引脚。以下是如何操作的信息:http://www.linuxfocus.org/common/src/article205/ppdev.html

我需要一个微处理器吗? 不需要,在外部设备中你不需要一个微处理器(显然,你的计算机已经有了微处理器 :-P)。如果你使用并行或串行端口,你只需要使用LED和一个或两个电阻以及连接LED的必要部件即可。

(另外:《Linux设备驱动程序》这本书可以免费在线获取,其中有关于将简单电子设备与并口相连并编写内核驱动程序的信息。)

编辑: 在这个帖子中似乎存在着巨大的混淆,“我是否需要一个微处理器?” 重申一下,仅凭计算机软件就可以通过并口驱动LED。在设备中不需要微处理器。但是,如果您希望设备能够在未连接到计算机的情况下自行控制,则需要微处理器或其他数字逻辑


2
如果你想在没有微处理器(这意味着没有 C/C++)的情况下闪烁 LED,可以使用一个简单的电路,其中包含一个 555 定时器集成电路。这些是初学者业余电子书或套件中常见的项目,因为它们非常简单,而且你可以在任何类似 Radio Shack 的地方购买零件。 如果你想在软件中实现它,就像Vlion所提到的那样,一切都取决于使用的硬件和连接LED电路的设计。
如果你想尝试在电脑上玩弄一些东西,这里有一篇文章介绍如何闪烁连接在PC并口引脚上的LED灯:

1
你可以尝试在串口发送端(引脚3)和地线(引脚5)之间加一个LED和一个300欧姆的电阻。然后发送数据以打开它。
串口可能只能提供10mA的电流。
祝好运。

1

对于快速而肮脏的操作,你有两个简单的选择:串行端口或并行端口。 串行端口更容易使用,但LED的数量受限。

要连接LED,您需要一个正确性别的外壳连接器(DB25/DB9),LED和一个电阻器。您需要自己查找电阻器的值。

串行端口具有由程序员控制的控制流信号。只需在打开串行端口后向MCR寄存器输出正确的位即可。

并行端口稍微难一些,因为需要进行更多握手操作,但通常写入寄存器的原理相同。

您可能需要与操作系统抢夺端口控制权。

使用Tx线路有些复杂,因为输出的信号是写入传输寄存器的串行比特流。建议使用CTS和DSR信号。

为了快速粗略地调试,我只是将数据写入寄存器并观察调制解调器灯。


我不同意串行端口和并行端口的区别:你可以将并行端口作为一个没有握手或其他任何东西的原始TTL输出设备来使用。它具有更多可用的引脚和TTL电平(+5V / 0V),而不是串行端口的RS-232电平(非标准但通常为+-12V)的优点。 - Dan Lenski

0

这还取决于操作系统。在Linux上,您可以使用适当的限流电阻器将LED直接连接到并行端口,并简单地使用C函数“ outb()”打开和关闭它。

在Windows上,情况要复杂得多,因为操作系统不允许用户应用程序直接访问端口。


@Vlion,Linux没有任何特定于并行端口的系统调用。但它确实有ioctl()通用系统调用。而且还有专门用于与并行端口通信的ioctl:http://www.linuxfocus.org/common/src/article205/ppdev.html - Dan Lenski

0

最容易实现的端口是串行或并行端口。请务必在 LED 与电路之间串联一个电阻,否则会烧坏它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接