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

}

仿真效果图:

相关推荐
honey ball2 小时前
LLC与反激电路设计【学习笔记】
单片机·嵌入式硬件·学习
Graceful_scenery8 小时前
STM32F103外部中断配置
stm32·单片机·嵌入式硬件
猿来不是梦11 小时前
RT_Thread内核源码分析(三)——线程
嵌入式硬件·系统架构·rt_thread操作系统
白书宇11 小时前
19.QT程序简单的运行脚本
linux·arm开发·嵌入式硬件·物联网·arm
Arciab12 小时前
51单片机入门:独立按键(02)
单片机
大梦百万秋13 小时前
嵌入式系统与单片机工作原理详解
单片机·嵌入式硬件
陌夏微秋13 小时前
硬件基础22 反馈放大电路
单片机·嵌入式硬件·硬件架构·硬件工程·智能硬件
&春风有信13 小时前
FreeRTOS之链表源码分析
c语言·数据结构·嵌入式硬件·链表
美式小田14 小时前
Altium Designer学习笔记 21.PCB板框的评估及叠层设置
笔记·嵌入式硬件·学习·ad
小郭爱学习@15 小时前
RLC串联谐振,品质因数的影响
嵌入式硬件·硬件架构·硬件工程