单片机常用宏定义|枚举|自定义类型用法技巧
一个优秀的单片机程序不仅仅功能的实现,还需要具有模块化设计,可扩展性好,阅读性强,要想具备这些特点,那么不得不谈一下头文件的宏定义和枚举变量以及自定义类型的用法了。
对于一些常用的,我们可以将其配置在1个头文件中,后续直接调用即可.比如我喜欢放在config.h
常用的总结如下
外设端口定义使用有含义的单词来代表端口,在代码中比较常见,便于理解,如果更换端口,只需要改下端口定义即可。
2.常用的宏定义
判断输入电平高或者低,开关开或者关,如果用数字0或者1表示,不够直观,使用宏定义HIGH/LOW或者ON/OFF来代替,可读性大大增强
当串口发送一个16位数据(unsigned int 或 int)出去,通常要先换成两个字节数据,放入发送缓冲区中,如果每次都去写移位代码来换算,太过于麻烦,所以定义成宏定义,就会很方便。
3.通常把1个字节的其中某一位清零或置1,位操作也通常需要移位算法来计算,不够直观,换成宏定义如下,直观明了。
4.数据类型重定义
5.枚举变量类型定义,当函数返回1表示正确,返回0表示错误,用0和1代表并不直观,此时用枚举变量是最合适不过了。同样的道理,适合TRUE/FALSE
下一次我再和大家谈一谈单片机基于结构体的模块化编程思想
喜欢这篇文章,帮忙点个“关注 + 收藏”哦
初学单片机,C51编程也兴用昵称,美其名曰宏定义
大家都知道一位著名演员叫六小龄童,在影视剧里扮演孙悟空,他还有个真名叫章金莱。那么我们在c51编程的时候,也得像他一样多起几个名字,或者叫昵称。今天我们简单认识一下c51编程里起别名的宏命令:“define”。
下面用图来介绍一下:
图一.define的名次解说
图二.define宏定义的分类
图三.define宏定义的注意事项
举个例子:
在程序中我们往往要对一个端口赋值,等到最后自己都记不清楚该是“0”还是“1”了?这种情况就应该事先用宏定义把“0”和“1”内容化,给它赋予意义,之后在程序中就不会糊涂。例如:
#define isYes 1
#define isNo 0
在编程的时候就可以用宏名:
if(io_Led == isYes) io_Led = isNo;
这样的例子非常多,除了书写内容明确,它最大的优点还在于只更改一个宏定义的字符串,就可以改变全部源程序的内容。
下面再举个例子:
图四.define宏定义例子
上图中,头文件中还添加了条件编译:“#ifndef ...\ #endif”防止重复引用这个头文件。
上图中,定时器的“初装值计算公式”这个字符串被定义为宏名:T10MS,字符串中还包含了另一个宏名FOSC。
在下图中可以看到,右栏是c程序语句,左栏是“编译预处理”后的汇编语句,可以看出:“编译预处理”过程已经把公式里的计算结果(0xD8F0)直接用于汇编语句内容,也就是说,我们不用担心单片机在执行这种语句的时候会有额外的计算动作,在生成单片机代码之前,“编译预处理”事先把“T10MS”替换成了“0xD8F0”。
图五.define宏定义例子编译预处理结果
“define”宏定义命令不仅在头文件里不可缺少,在AVR、MSP430等单片机的端口定义里面更是应用广泛,这里就不再一一举例。
关于“defin”的例子还很多,我们今天暂时聊到这里。
感谢一起参与学习,如果您感兴趣,可以关注头条号/春天说,欢迎参与评价留言,如果喜欢,也欢迎分享给更多朋友。。。
相关问答
单片机 led=!led1什么意思?应该有一个LED的宏定义比如#defineledP10#defineled1P11"!"逻辑“非”;你问题应该是led!=led1应该是做逻辑判断if(l...
下面这个 单片机 编程为什么 led=0;led灯就亮 - 懂得这个是需要看外围电路的,不一定是输入低电平led就会亮,首先led的正极接到vcc,负极接到单片机的P1.0上,当单片机的P1.0为高电平时,LED两端电压一样,...
cortexM0 单片机 下面的 定义 是什么意思?__IOuint32_tPMD1:2;__...[最佳回答]字面上理解,uint32_t代表一个32位无符号的整型.___IO定义在core_m0.h中,宏定义volatile的意思.至于PMD2:2应该是一个变量名.字面上理解,uint32_t...
请问 单片机 中BIT5是什么意思啊啊?第5位的意思,你可以看一下你的程序里对BIT5的定义,应该是程序源作者写的宏定义吧.一般来说,为了便于程序的开发,程序的作者会事先进行宏定义:#defineBIT00x0...
sbitK1=P3^2;在 单片机 这表示什么意思?谢谢邀请,sbit是定义特殊功能寄存器的位变量在51系列的单片机,有这样的位操作,是可以直接定义对应引脚,在应用时候,可以直接进行赋值操作if(IsOK)K1=1;els...
单片机 C语言中uchartemp=0;是什么意思?这个是unsignedchartemp=0;这个是无符号字符型变量temp=0#defineucharunsignedchar应该上面有这一句的这是宏定义将unsignedc...
单片机 中LOADBITP1.2和DATA_FDATA034H是啥意思呢_作业帮[最佳回答]LOADBITP1.2是读P1.2口的状态,DATA_FDATA034H可能是定义的一个宏,表示地址为34H的存储空间
单片机 KEIL软件里如何添加头文件。h头文件该如何 定义 ?头文件都放在各个源文件里面,不用添加。头文件一般是变量的申明,宏定义,函数的申明等内容。头文件都放在各个源文件里面,不用添加。头文件一般是变量的申明,...
u8 i在 单片机 里啥意思?1.u8i在单片机里表示一个无符号8位整型变量。2.在单片机中,u8i通常用于存储和处理8位无符号整数数据,因为单片机的数据处理能力有限,使用较小的数据类型可...
absacc是干什么的?absacc可用于编程。这个头文件代表绝对地址访问的宏定义组,里面包含:CBYTE.XBYTE,PBYTE,DBYTE,PWORD,CWORDDWORD七个宏定义。如:#defineCOM8255...