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

}




仿真效果图:

相关推荐

  1. 51单片机汇编指令表--STC晶MCU

    2024-06-18 08:00:02       39 阅读
  2. 51单片机与ARM单片机区别

    2024-06-18 08:00:02       19 阅读
  3. 关于51单片机晶振定时问题

    2024-06-18 08:00:02       20 阅读
  4. 常用C语言定义

    2024-06-18 08:00:02       40 阅读
  5. c++ 常用一些定义

    2024-06-18 08:00:02       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 08:00:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 08:00:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 08:00:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 08:00:02       20 阅读

热门阅读

  1. Hi3861 OpenHarmony嵌入式应用入门--总引导连接

    2024-06-18 08:00:02       9 阅读
  2. 深入解析Python闭包:定义、实例与应用

    2024-06-18 08:00:02       10 阅读
  3. C++ explicit关键字的用法

    2024-06-18 08:00:02       10 阅读
  4. html + css + js 实现简易轮播图

    2024-06-18 08:00:02       9 阅读
  5. CSS学习

    CSS学习

    2024-06-18 08:00:02      7 阅读
  6. MySQL 保姆级教程(七):用正则表达式进行搜索

    2024-06-18 08:00:02       9 阅读
  7. 模板引擎与 XSS 防御

    2024-06-18 08:00:02       6 阅读
  8. 论文创新点和贡献点该如何挖掘?

    2024-06-18 08:00:02       7 阅读