51单片机宏定义的例子

代码

demo.c

复制代码
#include "hardware.h"

void delay()
{
  volatile unsigned int n;

  for(n = 0; n < 50000; n++);
}

int main(void)
{

  IO_init();

  while(1)
  {
    PINSET(LED);
    delay();
    PINCLR(LED);
    delay();
  }

  return 0;
}

cfg.h

复制代码
#ifndef _CFG_H_
#define _CFG_H_

//ϵͳʱÖÓÆµÂÊ
#define F_CPU        8000000UL

//LEDÏÔʾ
#define LED          P0, 0


#endif

hardware.h

复制代码
#ifndef _HARDWARE_H_
#define _HARDWARE_H_ 1

#include <reg51.h>

#include "cfg.h"
#include "macromcu.h"

DEFPIN(LED);

extern void IO_init();


#endif

micromcu.h

复制代码
#ifndef _MACRO_MCU_H_
#define _MACRO_MCU_H_ 1

#include <reg51.h>

#define PIN_OUTPUT     1
#define PIN_INPUT      1

#define PIN_HIGH       1
#define PIN_LOW        0

#define MACRO_CONCAT2_EXPAND(a, b)  a ## b
#define MACRO_CONCAT2(a, b)         MACRO_CONCAT2_EXPAND(a, b)
#define MACRO_CONCAT3_EXPAND(a, b, c) a ## b ## c
#define MACRO_CONCAT3(a, b, c)      MACRO_CONCAT3_EXPAND(a, b, c)

#define MACRO_ARG21(a, b)           a
#define MACRO_ARG22(a, b)           b

#define PIN_PRRFIX                  PIN_
#define DEFPIN(pin)      sbit MACRO_CONCAT3(PIN_PRRFIX, MACRO_ARG21(pin), MACRO_ARG22(pin)) = MACRO_ARG21(pin) ^ MACRO_ARG22(pin)

#define PINDIR(pin, DIR)  MACRO_CONCAT3(PIN_PRRFIX, MACRO_ARG21(pin), MACRO_ARG22(pin)) = 1
#define PINOUT(pin, OUT)  MACRO_CONCAT3(PIN_PRRFIX, MACRO_ARG21(pin), MACRO_ARG22(pin)) = OUT
#define PININ(pin)        MACRO_CONCAT3(PIN_PRRFIX, MACRO_ARG21(pin), MACRO_ARG22(pin))

#define PINSET(pin)  MACRO_CONCAT3(PIN_PRRFIX, MACRO_ARG21(pin), MACRO_ARG22(pin)) = 1
#define PINCLR(pin)  MACRO_CONCAT3(PIN_PRRFIX, MACRO_ARG21(pin), MACRO_ARG22(pin)) = 0
#define PININV(pin)  MACRO_CONCAT3(PIN_PRRFIX, MACRO_ARG21(pin), MACRO_ARG22(pin)) = !MACRO_CONCAT3(PIN_PRRFIX, MACRO_ARG21(pin), MACRO_ARG22(pin))


#endif

hardware.c

复制代码
#include "cfg.h"
#include "macromcu.h"
#include "hardware.h"

void IO_init()
{
  PINDIR(LED, PIN_OUTPUT);
  PINCLR(LED);

}

仿真效果图:

相关推荐
YY_Share几秒前
为什么笔记本电脑电源适配器基本是19V供电
嵌入式硬件·电路设计
宁静致远20211 小时前
Cadence Allegro 17.4的neck模式(瓶颈模式)走线
嵌入式硬件·硬件
逐步前行1 小时前
STM32_NVIC_中断控制
stm32·单片机·嵌入式硬件
Suifqwu2 小时前
stm32之移植MbedTLS以及算法实现
stm32·嵌入式硬件·算法
forAllforMe2 小时前
用STM32+LAN9252做etherCAT 运动控制从机方案
stm32·单片机·嵌入式硬件
WYH2872 小时前
FreeRTOS工程项目实践
c语言·单片机·嵌入式硬件·学习
阿拉斯攀登4 小时前
第 9 篇 RK 平台安卓驱动实战 2:中断驱动开发,按键中断的完整实现
驱动开发·嵌入式硬件·rk3568·中断·瑞芯微·rk3576·rk安卓驱动
_muffinman5 小时前
LED点阵8*8驱动开发笔记(Ai8051U单片机)
驱动开发·笔记·单片机
LCMICRO-133108477465 小时前
长芯微LDC64115完全P2P替代AD4115,是一款低功耗、低噪声、24位、Σ-Δ(Σ-Δ)模数转换器(ADC)
stm32·单片机·嵌入式硬件·fpga开发·硬件工程·模数转换器
busideyang5 小时前
数据手册和参考手册区别
stm32·单片机·嵌入式硬件·嵌入式