如何通过C/C++程序从LED制作一个小电路的最简单步骤?
我希望所需的依赖和软件包数量最少。
- 我应该连接到哪个端口?
- 我应该使用哪个编译器?
- 如何将数据发送到该端口?
- 我是否需要使用微处理器?如果不需要,我不想为这个简单的项目使用微处理器。
编辑:对任何特定操作系统的解决方案感兴趣。
/* 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
}
哪个端口? 并口是我最喜欢的选择,因为它输出+5V(TTL逻辑电平)并且非常容易编程。大多数并口都有足够的功率驱动LED。重要的是要记住,一般计算机端口仅设计用于输出信号电压,并不能产生足够的电流来实际供电给大多数设备。
哪个编译器? 无所谓。但这种硬件操作在Linux下更有趣、更容易,所以GCC是个不错的选择。
如何发送数据? 取决于端口和操作系统。对于一个简单的项目来说,USB非常复杂,所以不要考虑它。串行和并行端口可以通过各种不同的接口进行控制。我的首选是在Linux下使用ioctl()
系统调用直接控制并口引脚。以下是如何操作的信息:http://www.linuxfocus.org/common/src/article205/ppdev.html
我需要一个微处理器吗? 不需要,在外部设备中你不需要一个微处理器(显然,你的计算机已经有了微处理器 :-P)。如果你使用并行或串行端口,你只需要使用LED和一个或两个电阻以及连接LED的必要部件即可。
(另外:《Linux设备驱动程序》这本书可以免费在线获取,其中有关于将简单电子设备与并口相连并编写内核驱动程序的信息。)
编辑: 在这个帖子中似乎存在着巨大的混淆,“我是否需要一个微处理器?” 重申一下,仅凭计算机软件就可以通过并口驱动LED。在设备中不需要微处理器。但是,如果您希望设备能够在未连接到计算机的情况下自行控制,则需要微处理器或其他数字逻辑。
对于快速而肮脏的操作,你有两个简单的选择:串行端口或并行端口。 串行端口更容易使用,但LED的数量受限。
要连接LED,您需要一个正确性别的外壳连接器(DB25/DB9),LED和一个电阻器。您需要自己查找电阻器的值。
串行端口具有由程序员控制的控制流信号。只需在打开串行端口后向MCR寄存器输出正确的位即可。
并行端口稍微难一些,因为需要进行更多握手操作,但通常写入寄存器的原理相同。
您可能需要与操作系统抢夺端口控制权。
使用Tx线路有些复杂,因为输出的信号是写入传输寄存器的串行比特流。建议使用CTS和DSR信号。
为了快速粗略地调试,我只是将数据写入寄存器并观察调制解调器灯。
这还取决于操作系统。在Linux上,您可以使用适当的限流电阻器将LED直接连接到并行端口,并简单地使用C函数“ outb()”打开和关闭它。
在Windows上,情况要复杂得多,因为操作系统不允许用户应用程序直接访问端口。
最容易实现的端口是串行或并行端口。请务必在 LED 与电路之间串联一个电阻,否则会烧坏它。