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);

}

仿真效果图:

相关推荐
xiangw@GZ5 分钟前
802.11全系列标准调制编码与速率档对应关系
网络·单片机·嵌入式硬件·架构
希希之光15 分钟前
Aurix Tc3xx Port&Dio模块总结
单片机·嵌入式硬件
日拱一卒的小田32 分钟前
ZYNQ学习笔记2-ZYNQ的UART控制器1
单片机·嵌入式硬件
我想走路带风1 小时前
OPENWRT-Day01
stm32·单片机·嵌入式硬件
ACP广源盛139246256731 小时前
GSV2221@ACP#DP 1.4 MST 多屏转换芯片,物理 AI 多模态交互的视觉中枢
大数据·人工智能·嵌入式硬件·gpt·spark
云栖梦泽2 小时前
Linux内核与驱动:pinctl子系统和GPIO子系统
linux·单片机·嵌入式硬件
电气_空空3 小时前
基于 LabVIEW 的单片机串口通信设计
单片机·嵌入式硬件·毕业设计·labview
caimouse4 小时前
Reactos 第 9 章 设备驱动 — 9.10 磁盘的Miniport驱动模块
windows·嵌入式硬件
xiangw@GZ5 小时前
WiFi系统BCC与LDPC纠错编码技术性能对比
单片机·嵌入式硬件
AoDeLuo5 小时前
EthercCAT软件主站方案对比
stm32·单片机·嵌入式硬件