深入探索Arduino:库、外部接口与中断机制
立即解锁
发布时间: 2025-08-20 01:16:51 阅读量: 1 订阅数: 4 


Arduino C语言编程入门与实践
### 深入探索Arduino:库、外部接口与中断机制
#### 1. Arduino库的使用与自定义
在Arduino开发中,库的运用能极大提升开发效率。库是预先编写好的函数集合,通常围绕一个共同主题组织,可在自己的程序中直接使用。以下为你详细介绍不同类型的库。
- **核心库**:编译器在编译程序时常用的库。例如,`Arduino.h` 头文件会自动包含在所有编写的源程序中,它使编译器能调用各种库。同时,也有一些贡献库会自动安装。
- **贡献库**:由Arduino系统的用户提供。由于Arduino是开源项目,鼓励用户分享开发的代码,贡献库就是代码分享的成果之一。
若想自定义库并使其永久可供IDE使用,可将库放置在 `Libraries` 目录下,目录结构如下:
```plaintext
Libraries
YourLibraryName
examples
YourLibraryName.h
YourLibraryName.cpp
keywords.txt
```
其中,`examples` 包含至少一个使用该库的示例源代码。
此外,还可通过修改 `keywords.txt` 和 `theme.txt` 文件改变编辑器中关键字的显示方式。例如,使用Notepad++搜索方法修改 `theme.txt` 中的 `keyword2` 和 `keyword3` 的颜色值,保存为 `theme.txt` 后重新加载IDE,颜色更改将成为编辑器的默认颜色。若不喜欢更改,可将 `themebackup.txt` 重命名为 `theme.txt` 恢复默认颜色。
若不清楚 `theme.txt` 文件中RGB十六进制颜色值,可通过网络查询,如访问 [www.2createawebsite.com/build/hex-color-chart-grid.html](www.2createawebsite.com/build/hex-color-chart-grid.html) 挑选喜欢的颜色。
#### 2. 与外部世界的接口——SPI协议与LED显示
多数Arduino程序员希望将程序输出显示在除 `Serial` 监视器之外的设备上。常见的显示设备有2×16或4×20的LCD显示屏,价格实惠且能显示字母和数字数据,网络上有大量相关源代码。这里着重介绍8位7段LED显示屏,它使用MAX7219芯片通过串行外设接口(SPI)协议与Arduino通信。
SPI协议用于与一个或多个外设通信,Arduino通常作为主设备控制外设,通信通过四条共享线路完成:
- **MISO**:主设备输入、从设备输出线,用于从从设备向主设备发送数据。
- **MOSI**:主设备输出、从设备输入线,用于向从设备发送数据。
- **SCK**:串行时钟线,同步主设备的数据传输。
- **SS**:主设备用于选择设备的引脚。
由于SPI的普及,多数Arduino板将这些控制线引出到一个名为在线串行编程(ICSP)的单头接口,但ICSP头中缺少SS线。可使用任意数字引脚控制选择线,不过尽量避免使用0 - 3引脚,因为USB通信和中断常使用这些引脚。
以下是一个模拟计数器定时器的SPI程序示例:
```cpp
/*
Program is a quick-count stopwatch. The code starts with zero and
counts up from there. No protection rollover. Base code by Blair Thompson.
Modified by Dr. Purdum, 12/26/2014
*/
#include <LedControl.h> // From Arduino LedControl library
int DIN = 10;
int LOADCS = 11;
int CLK = 13;
int ledBrightness = 5; // range is 0-15. 0=lowest, 15 = full power
// DIN, CLK, Load/CS, 8 digits
LedControl myLEDs = LedControl(DIN, CLK, LOADCS, 8);
int hundredths0, hundredths1;
int seconds0, seconds1;
int minutes0, minutes1;
int hours0, hours1;
void setup()
{
pinMode(DIN, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(LOADCS, OUTPUT);
myLEDs.shutdown(0, false); // Wake 'em up
Reset();
myLEDs.setIntensity(0, ledBrightness ); //set the brightness
}
void loop()
{
BumpFrame(); // Bump the necessary display digits
}
/*****
This function increments the hundredths of a second counter and
rolls to the next digit as needed.
Parameter L
```
0
0
复制全文
相关推荐










