STC IO配置库

本文作为自学笔记,探讨STC单片机的IO配置库,讲解记号粘贴运算符##的用法,并通过宏定义简化IO口配置。通过宏定义实现对STC IO寄存器的直观配置,避免位运算的复杂性,以提高代码的可读性和易用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STC IO配置库

就当是自学笔记吧,对 记号粘贴运算符## 加深一下理解。

记号粘贴运算符是一个二元运算符,可以出现在所有宏的替换文本中。该运算符会把左、右操作数结合在一起,作为一个记号,因此,它常常被称为记号粘贴运算符(token-pasting operator)。如果结果文本中还包含有宏名称,则预处理器会继续进行宏替换。出现在 ## 运算符前后的空白符连同 ## 运算符本身一起被删除。

#define DEBUG_A_MSG "DEBUG_MSG_A"
#define DEBUG_B_MSG "DEBUG_MSG_B"
#define MSG(x) DEBUG_MSG_##x##MSG //这句使用了 记号粘贴运算符:##
a = MSG(A); 
b = MSG(B);

这些宏被预处理器替换以后,就换成了下面的代码:

#define DEBUG_A_MSG "DEBUG_MSG_A"
#define DEBUG_B_MSG "DEBUG_MSG_B"
a = DEBUG_A_MSG; 
b = DEBUG_B_MSG;

STC的IO寄存器如下图,在配置IO口寄存器PnM1和PnM0时一般会这样写,比如将配置P0.7为输出方向时:

P0M1 &= ~(1<<7);
P0M0 |= (1<<7);

在这里插入图片描述
如果能像Arduino那样更直观的配置这些IO那就太舒服了,所以如果我们能过宏定义巧妙的将这些有规律的定义统一起来写一段宏定义来替换上面那些原始写法,在以后的使用中将会比较方便。

做一个简单的尝试

#define _PnM1(n) P##n##M1
#define _PnM0(n) P##n##M0
void main(){
   
	_PnM1(0) &= ~(1<<7);
	_PnM0(0) |=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值