当前位置: 首页 > news >正文

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

仿真效果图:

相关文章:

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 …...

香港云服务器怎么处理高并发和突发流量?

处理香港云服务器的高并发和突发流量需要综合考虑多种因素&#xff0c;包括服务器配置优化、负载均衡、缓存策略、CDN加速以及监控和自动化调整等措施。以下是处理高并发和突发流量的一些关键步骤和建议&#xff1a; 1. 优化服务器配置 选择高性能实例&#xff1a;根据预期的并…...

c,c++,qt从入门到地狱

前言 1 你所能用的正与你手写的效率相同2 你不需要为你没有用到的特性付出 (无脑的调用函数or公式的空壳人类请出门右转)c 001 scanf and strcpy "_s"bug? 微软官方说明1 Visual Studio 库中的许多函数、成员函数、函数模板和全局变量已弃用,改用微软新增的强化函数…...

iptables(6)扩展匹配条件--tcp-flags、icmp

简介 前面我们已经介绍了不少的扩展模块,例如multiport、iprange、string、time、connlimit模块,但是在tcp扩展模块中只介绍了tcp扩展模块中的”--sport”与--dport”选项,并没有介绍”--tcp-flags”选项,那么这篇文章,我们就来认识一下tcp扩展模块中的”--tcp-flags”和i…...

C#-Json文件的读写

文章速览 命名空间读取Json核心代码示例 写入Json核心代码示例 坚持记录实属不易&#xff0c;希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区&#xff01; 谢谢~ 命名空间 using Newtonsoft.Json;读取Json 核心代码 //核心代码using (StreamReader…...

【2023级研究生《人工智能》课程考试说明】

一&#xff0e;试题范围 考试题共包括4道大题&#xff1a; 第一大题&#xff1a;分类和回归----&#xff08;8选1&#xff09; 第二大题&#xff1a;降维和聚类----&#xff08;7选1&#xff09; 第三大题&#xff1a;API调用&#xff08;课程中学习过的所有云平台&#xff09…...

C语言队列操作及其安全问题

在C语言中&#xff0c;队列是一种常用的数据结构&#xff0c;特别适用于嵌入式开发中的任务调度、缓冲区管理等场景。下面是一个简单的循环队列的模板代码&#xff0c;它使用数组来实现队列&#xff0c;并提供了基本的入队&#xff08;enqueue&#xff09;和出队&#xff08;de…...

next.js v14 升级全步骤|迁移 pages Router 到 App Router

【概括】本文升级整体按照官网文档指引进行&#xff0c;在迁移 pages Router 前先看了官网的实操视频。 【注意】文章内对 .babel.ts、next.config.js 进行了多次更改&#xff0c;最终配置可见 报错3: Server Error ReferenceError: React is not defined 一、升级 Next.js 版…...

如何在Ubuntu上安装WordPress

如何在Ubuntu上安装WordPress 执行系统更新 apt update && apt upgrade第一步 安装 Apache apt install apache2确认 Apache 安装是否成功. systemctl status apache2安装成功后 打开浏览器输入 http://server-ip-address 第二步 安装 MySQL apt install mariad…...

处理导入Excel文件过大导致Zip bomb detected的问题

处理导入Excel文件过大导致Zip bomb detected的问题 处理导入Excel文件过大导致Zip bomb detected的问题解决方案完整示例代码处理内存溢出问题优化处理大文件的策略 处理导入Excel文件过大导致Zip bomb detected的问题 在Java应用中导入Excel文件时&#xff0c;可能会遇到文件…...

【FFmpeg】AVIOContext结构体

【FFmpeg】AVIOContext结构体 1.AVIOContext结构体的定义 参考&#xff1a; FFMPEG结构体分析&#xff1a;AVIOContext 示例工程&#xff1a; 【FFmpeg】调用ffmpeg库实现264软编 【FFmpeg】调用ffmpeg库实现264软解 【FFmpeg】调用ffmpeg库进行RTMP推流和拉流 【FFmpeg】调用…...

Python控制结构

文章目录 控制结构1. 条件语句1.1 if语句1.2 elif语句1.3 else 语句 2. 循环语句2.1 for循环2.2 while循环 控制循环的语句3.1 break语句3.2 continue语句3.3 else语句与循环配合 控制结构 Python中的控制结构是指管理代码执行流程的语句和机制&#xff0c;包括条件语句、循环…...

OpenCV--图形轮廓

图形轮廓 图像轮廓查找轮廓绘制轮廓计算轮廓的面积和周长多边形逼近与凸包外接矩形 图像轮廓 import cv2 import numpy as np""" 图形轮廓--具有相同颜色或灰度的连续点的曲线 用于图形分析和物体的识别和检测 注意&#xff1a;为了检测的准确性&#xff0c;必…...

MYSQL通过EXPLAIN关键字来分析SQL查询的执行计划,判断是否命中了索引

在MySQL中&#xff0c;你可以通过EXPLAIN关键字来分析SQL查询的执行计划&#xff0c;从而判断是否命中了索引。 准备查询语句&#xff1a; 首先&#xff0c;你需要一个带有WHERE子句的SELECT查询&#xff0c;因为WHERE子句中的条件通常与索引相关联。例如&#xff1a; SELECT …...

clean code-代码整洁之道 阅读笔记(第十二章)

第十二章 系统 12.1 通过选进设计达到整洁目的 Kent Beck关于简单设计的四条规则&#xff0c;对于创建具有良好设计的软件有着莫大的帮助。 据Kent所述&#xff0c;只要遵循以下规则&#xff0c;设计就能变得"简单"&#xff1a;运行所有测试&#xff1b;不可重复&…...

FFmpeg YUV编码为H264

使用FFmpeg库把YUV420P文件编码为H264文件&#xff0c;FFmpeg版本为4.4.2-0。 需要yuv测试文件的&#xff0c;可以从我上传的MP4文件中用ffmpeg提取&#xff0c;命令如下&#xff1a; ffmpeg -i <input.mp4> -pix_fmt yuv420p <output.yuv> 代码如下&#xff1a;…...

【C语言】顺序表(上卷)

什么是数据结构&#xff1f; 数据结构是由“数据”和“结构”两词组合而来的。 数据需要管理。数据结构就是计算机存储、组织数据的方式。比如一个班级就是一个结构&#xff0c;管理的就是班级里的学生。如果我们要找三年2班的同学李华&#xff0c;就可以直接去三年2班找而不…...

Luma AI如何注册:文生视频领域的新星

文章目录 Luma AI如何注册&#xff1a;文生视频领域的新星一、Luma 注册方式二、Luma 的效果三、Luma 的优势四、Luma 的功能总结 Luma AI如何注册&#xff1a;文生视频领域的新星 近年来&#xff0c;Luma AI 凭借其在文生视频领域的创新技术&#xff0c;逐渐成为行业的新星。…...

一站式实时数仓Hologres整体能力介绍

讲师&#xff1a;阿里云Hologres PD丁烨 一、产品定位 随着技术的进步&#xff0c;大数据正从规模化转向实时化处理。用户对传统的T1分析已不满足&#xff0c;期望获得更高时效性的计算和分析能力。例如实时大屏&#xff0c;城市大脑的交通监控、风控和实时的个性化推荐&…...

如何在 Windows 上安装 Docker Desktop

如何在 Windows 上安装 Docker Desktop Docker 是一个开放平台&#xff0c;用于开发、部署和运行应用程序。Docker Desktop 是 Docker 在 Windows 和 macOS 上的官方客户端&#xff0c;它使得开发者能够轻松地在本地环境中构建、运行和共享容器化应用程序。本文将详细介绍如何…...

WPF由文本框输入的内容动态渲染下拉框

在做项目过程中&#xff0c;需要扫码枪扫描快递单号或者手动输入快递单号时&#xff0c;自动检索该单号是哪个快递公司的&#xff0c;下拉框中自动带出该单号的快递公司。当输入的快递单号不存在时&#xff0c;将数据库中所有快递公司都带出 效果&#xff1a; 通过输入的快递单…...

RPCMon:一款基于ETW的RPC监控工具

关于RPCMon RPCMon是一款基于事件跟踪的WindowsRPC监控工具&#xff0c;该工具是一款GUI工具&#xff0c;可以帮助广大研究人员通过ETW&#xff08;Event Tracing for Windows&#xff09;扫描RPC通信。 RPCMon能够为广大研究人员提供进程之间RPC通信的高级视图&#xff0c;该…...

【odoo】常用的字符转义:“>“,“<“,““,“/“等

概要 字符转义是指在编写代码或处理文本数据时&#xff0c;将特殊字符转换为另一种形式&#xff0c;以便在特定的上下文中正确解析和处理这些字符。 内容 特殊字符描述XML转义表示法&和符号&amp;<小于符号<>大于符号>"双引号&quot;单引号&ap…...

李宏毅深度学习项目——HW1个人笔记

视频链接 PDF链接 googleColab链接 GoogleColab是一个免费的jupyter notebook&#xff0c;可以用上面的gpu资源进行训练 题目 通过前两天的数据&#xff0c;预测第三天某个人感染新冠的概率 范例 导包 # Numerical Operations import math import numpy as np# Reading/Wr…...

3D Gaussian Splatting Windows安装

0.安装C++ 编译器 https://aka.ms/vs/17/release/vs_buildtools.exe 1.下载源码 git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive 2.安装cuda NVIDIA GPU Computing Toolkit CUDA Toolkit Archive | NVIDIA Developer 3.安装COLMAP...

人脸识别——可解释的人脸识别(XFR)人脸识别模型是根据什么来识别个人的

可解释性人脸识别&#xff08;XFR&#xff09;&#xff1f; 人脸识别有一个任务叫1:N&#xff08;识别&#xff09;。这个任务将一个人的照片与N张注册照片进行比较&#xff0c;找出相似度最高的人。 这项任务用于刑事调查和出入境点。在犯罪调查中&#xff0c;任务从监控摄像…...

仓库管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;公告管理&#xff0c;物资管理&#xff0c;基础数据管理&#xff0c;用户管理 用户账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;公告管理&#xff0c;物…...

最火AI角色扮演流量已达谷歌搜索20%!每秒处理2万推理请求,Transformer作者公开优化秘诀

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践&#xff0c;基于大语言模型和RAG技术&#xff0c;集合海量工业领域生态资源方优质产品和知识服务&#xff0c;旨在通过智能搜索、连续交互&#xff0c;实时生成个性化的内容…...

MySQL:MySQL分组排序函数rank()、row_number()、dense_rank()与partition by结合使用

一、前言 在 MySQL 中&#xff0c;虽然标准的 SQL 函数 RANK(), ROW_NUMBER(), 和 DENSE_RANK() 是 SQL 标准的一部分&#xff0c;但早期的 MySQL 版本并不直接支持这些窗口函数。然而&#xff0c;从 MySQL 8.0 开始&#xff0c;这些函数被引入以支持窗口函数&#xff08;也称为…...

opencv c++ 检测图像尺寸大小,标注轮廓

1. 项目背景 本项目旨在开发一个图像处理程序&#xff0c;通过使用计算机视觉技术&#xff0c;能够自动检测图像中物体的尺寸并进行分类。项目利用了开源的计算机视觉库 OpenCV&#xff0c;实现了图像的灰度处理、二值化、轮廓检测、边界框绘制以及尺寸分类等功能。通过这些功…...

青岛网站制作价格/网络广告有哪些形式

锁相环是一个能对输入信号进行自动跟踪的负反馈控制电路。锁相环在通信、无线电电子学、自动控制和电力系统自动化等领域得到了极为广泛的应用&#xff0c;其性能的好坏将直接影响整个电子系统的工作性能[1]。随着数字技术的不断发展&#xff0c;全数字锁相环的应用范围也更加广…...

杭州住房和城乡建设局网站首页/什么是引流推广

ps. 此文旨在纪录本人面试的经历&#xff0c;如有对文中的人或者公司有所冒犯&#xff0c;请海涵&#xff0c;不能接受者请mail我&#xff0c;说明情况&#xff0c;我将删掉相关文章 真的是学无止境&#xff0c;这次主要想总结下&#xff0c;近两次面试遇到的一些很细致的问题吧…...

汕头服饰网站建设/深圳专业建站公司

第一步&#xff1a; 安装fiddler 第二步&#xff1a; 下载fiddler证书生成器 第三步&#xff1a; 进入fiddler导出证书 第四步&#xff1a; 打开浏览器导入证书 第一步&#xff1a;安装fiddler 安装方法各位随意&#xff0c;但需保证是最新版本的&#xff1b; 这里直接用电脑管…...

做变态手术视频网站/网站优化种类

这是什么年头、不支持代码提示还叫IDE吗~~ 就不转了、直接去看吧&#xff1a; 原文地址&#xff1a;http://www.pythonclub.org/python-basic/vim 转载于:https://www.cnblogs.com/klobohyz/archive/2011/12/01/2270308.html...

上海装修公司排名榜前30名/企业网站seo优化

在mybaits中#{}和${}都可以用来传递参数&#xff0c;那么他们有何不同呢&#xff0c;下面来看看他们的是如何执行的&#xff0c;相信你看了之后就会明白他们的区别了。   #{}的方式&#xff1a;   XML文件配置的sql如下&#xff1a; <select id"findCommodityByKe…...

wordpress 需要空间/产品推广软文300字

改变程序的执行——————— 一旦使用GDB挂上被调试程序&#xff0c;当程序运行起来后&#xff0c;你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值&#xff0c;这个强大的功能能够让你更好的调试你的程序&#xff0c;比如&#xff0c;你…...