如果你使用 328 的话,就不要改了,因为端口全用完了。
如果你使用 2560 的话,是可以改的。因为我无法下载这个库,所以只能拿 SSD_1306 的库做比喻。又因为不同的库分别由不同的人来写,库中的内容和风格也许大不相同,使用方法也就有所不同。
一般来说,一个 设备驱动 库文件 要适应不同的 MCU ,就要能在程序中修改各个驱动端口,你用的这个库也不应该有例外。下面我用 驱动 SSD_1306 OLED屏的库为例说一下。也许有错,不要照搬。
#include <Adafruit_GFX.h> // 这是 Adafruit 的 通用 绘图 库文件,他要配合对应的 设备驱动库 一起工作,
// 不能单独使用。
#include <Adafruit_SSD1306.h> // 这个是他能配合的设备驱动库文件,这个设备是 OLED 显示屏,型号是:SSD_1306,
// If using software SPI (the default case): // 注释:如果你要使用 软件 SPI 通讯 驱动方式,那么就用下面的宏定义确定端口。
#define OLED_MOSI 9 // 主出从入 数据端口,在这里修改数字 9 也就修改了 端口定义。
#define OLED_CLK 10 // 下面几个都是。
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); // 这一句与库文件里的 类 相对应。
上面括号里的 每一句都对应着 一个 端口号,就是上面的宏定义。他的顺序对应着 库文件里相应的语句。你的显示屏是8 位数据总线,数据端口号应该是 D0 --- D7, 应该还有类似 #define LCD_D3 x 之类的语句, 这个 x 就是显示屏 数据端口 D3 要对应的 Arduino 的端口号,在你的程序里可能要定义成 #define LCD_Dn x 的形式, Dn 指的是 D0 ---- D7 的某一个,是不是这个形式,我不确定,但是可以检验。打开你的设备驱动 库文件目录,你的帖子里提到是 AdfruitTFT_LCD 其下有一个子目录,...\examples \ 这里有个示例文件,打开他, 有类似于上面提到的 长长的一串 宏定义,有一句注释语句说明了其下是端口定义,每一句宏定义后面的数字就是要对应的 Arduino 的 端口号, 因为我没有见到 库文件,按 Adafruit 官方的习惯做法,应该是这样,
如果你的示例程序里不是这样,也不奇怪。比如 u8glib 库,他就把 会图库和 设备驱动库 放在了一块,只包含一个 u8glib.h 就行了,但是 在 示例程序里 的 样式 是一样的,比如:
#include "U8glib.h"
// setup u8g object, please remove comment from one of the following constructor calls
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
下面有 长长的 一串 设备驱动 列表,与你类似的有:(其实你的屏一定可以在库里找到)
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
去掉 u8glib 前面的 注释符 // ,这一句设备驱动 语句就起作用了, // 8Bit Com: 后面的 符号 就是 对应端口的定义,但是他 D0 --- D7 对应的 端口号不能改,因为括号里没有选项,非要改的话就只能去库里改了。而 18, 17,19,,16 可以改,他的顺序和功能 由 他的注释里说明了。
按你说的,你使用 mega ,他的端口非常多,D0----D7 就不要改了,但是其他端口最好改一下,因为它们使用了 模拟端口,A0 ---- A4 ,(这是在使用 328 芯片的不得已做法)。
如果 英语好的话,请到下述网站看看:
https://www.adafruit.com/products/1770 |