等级考试四级学习小组 加入小组

288个成员 29个话题 创建时间:2019-02-21

使用define语句来定义端口和管脚的对应关系

发表于2019-03-06 644次查看

之前给大家分享过,使用int声明整型变量的方式,让芝麻豆主控的端口和管脚做对应,(详见上一篇:用int定义芝麻豆主控端口和管脚的对应关系用于方便编程,但是采用int声明变量,一个int 整型变量占2个字节,把所有的端口和管脚都做对应,会占用太多的内存,虽然我们用的主控板足以支持这么多的变量,但是还是要勤俭持家,省着点儿内存好一些。怎么办呢?我们可以用c语言中的define语句来做端口和管脚的对应。

首先一起学习一下define语句的语法:

#define
#define 是一个很有用的C语法,它允许程序员在程序编译之前给常量命名。在Arduino中,定义的常量不会占用芯片上的任何程序内存空间。在编译时编译器会用事先定义的值来取代这些常量。
然而这样做会产生一些副作用,例如,一个已被定义的常量名已经包含在了其他常量名或者变量名中。在这种情况下,文本将被#defined 定义的数字或文本所取代。
通常情况下,优先考虑使用 const 关键字替代 #define 来定义常量。
Arduino 拥有和 C 相同的语法规范。
语法
#define 常量名 常量值 注意,#是必须的。
例子
#define ledPin 3
//在编译时,编译器将使用数值 3 取代任何用到 ledPin 的地方。
提示
在#define 声明后不能有分号。如果存在分号,编译器会抛出语义不明的错误,甚至关闭页面。
#define ledPin 3; //这是一种错误写法
类似的,在#define声明中包含等号也会产生语义不明的编译错误从而导致关闭页面。
#define ledPin = 3 //这是一种错误写法
不能包含等号只能用空格

了解了define的功能和语法规则,我们就可以用define设置常量的方式来对应端口和管脚。示例程序如下,这个程序可以保存为示例程序,在后续使用的时候随时调用和修改,大家可以作为参考。

#define D1 6//端口D1主IO引脚
#define D1f 5//端口D1辅助IO引脚
#define D2 10//端口D2主IO引脚
#define D2f 9//端口D2辅助IO引脚
#define D3 11//端口D3主IO引脚
#define D3f 3//端口D3辅助IO引脚
#define D4 13//端口D4主IO引脚
#define D4f 12//端口D4辅助IO引脚
#define D5 2//端口D5主IO引脚
#define D5f 8//端口D5辅助IO引脚
#define D6 1//端口D6主IO引脚
#define D6f 0//端口D6辅助IO引脚
#define D7 4//端口D7主IO引脚
#define D7f 7//端口D7辅助IO引脚
#define D8 A5//端口D8主IO引脚
#define D8f A4//端口D8辅助IO引脚
#define ZMDA1 A0//端口A1IO引脚
#define ZMDA2 A1//端口A2IO引脚
#define ZMDA3 A2//端口A3IO引脚
#define ZMDA4 A3//端口A4IO引脚
//以上用define来将芝麻豆主控端口定义为常量并与管脚做对应
void setup() {
pinMode(D1,OUTPUT);//设置D1端口管脚模式为输出
pinMode(D4,INPUT);//设置D4端口管脚模式为输入
}

void loop() {
digitalWrite(D1,HIGH);//D1端口输出高电平
analogWrite(D2,255);//D2端口PWM输出255
digitalRead(D4);//D4端口接数字传感器
}

 

发表回复
你还没有登录,请先 登录或 注册!