51单片机应用从零开始(十一)·数组函数、指针函数

51单片机应用从零开始(九)·数组-CSDN博客
51单片机应用从零开始(十)·指针-CSDN博客
目录
1. 用数组作函数参数控制流水花样
2. 用指针作函数参数控制 P0 口 8 位 LED 流水点亮
1. 用数组作函数参数控制流水花样
要在51单片机中使用数组作为函数参数来控制流水灯效果,你可以按照以下步骤进行操作:
首先,定义一个存储灯光状态的数组,数组的长度取决于需要控制的灯的数量。例如,假设有8个灯,可以定义一个长度为8的数组。
#define LED_COUNT 8
unsigned char ledStates[LED_COUNT] = {0};
接下来,编写函数来控制灯的流水花样效果。函数的参数应该接收灯光状态数组和数组的长度作为输入。
void lightEffect(unsigned char *ledArray, unsigned char size) {// 在这里实现流水花样的逻辑
}
在 lightEffect 函数中,你可以根据需要的流水花样逻辑,对灯光状态数组进行修改。下面是一个简单的示例,实现了从左到右的流水灯效果。
void lightEffect(unsigned char *ledArray, unsigned char size) {for (unsigned char i = 0; i < size; i++) {ledArray[i] = 1; // 将当前灯点亮// 延时一段时间,使得灯效可见for (unsigned int j = 0; j < 50000; j++);ledArray[i] = 0; // 将当前灯熄灭}
}
在主程序中,你可以调用 lightEffect 函数来控制流水灯效果。
void main() {// 初始化LED状态数组for (unsigned char i = 0; i < LED_COUNT; i++) {ledStates[i] = 0;}while (1) {lightEffect(ledStates, LED_COUNT);}
}
这是一个简单的示例,演示了如何在51单片机中使用数组作为函数参数来控制流水灯效果。你可以根据自己的需求修改 lightEffect 函数来实现其他的流水花样效果。记得根据硬件设定适当地添加延时,以确保灯光效果可以被观察到。
精简版示例:
#include<reg51.h>
/*************************************************
函数功能:延时约 150ms
*************************************************/
void delay(void)
{ unsigned char m,n; for(m=0;m<200;m++) for(n=0;n<250;n++) ;
}
/*************************************************
函数功能:流水点亮 P0 口 8 位 LED
*************************************************/
void led_flow(unsigned char a[8])
{ unsigned char i; for(i=0;i<8;i++) { P0=a[i]; delay(); }
}
/*************************************************
函数功能:主函数
*************************************************/
void main(void)
{ unsigned char code
Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //流水灯控制码 led_flow(Tab); }
2. 用指针作函数参数控制 P0 口 8 位 LED 流水点亮
当你在51单片机中使用指针作为函数参数来控制P0口的8位LED流水点亮时,可以按照以下步骤进行操作:
首先,需要包含适当的头文件和定义51单片机特定的寄存器和常量。
#include <reg51.h>#define LED_COUNT 8
接下来,编写函数来控制LED的流水点亮效果。函数的参数应该接收一个指向P0口的指针。
void lightEffect(unsigned char *port) {// 在这里实现流水点亮的逻辑
}
在 lightEffect 函数中,你可以根据需要的流水点亮逻辑,对P0口的状态进行修改。下面是一个简单的示例,实现了从左到右的流水点亮效果。
void lightEffect(unsigned char *port) {unsigned char pattern = 0x01;while (1) {*port = pattern; // 控制P0口输出模式,点亮LED// 延时一段时间,使得点亮效果可见for (unsigned int i = 0; i < 50000; i++);pattern = pattern << 1; // 左移一位,准备点亮下一个LEDif (pattern == 0) {pattern = 0x01; // 如果所有LED都点亮过,重新开始}}
}
在主程序中,你可以调用 lightEffect 函数来控制流水点亮效果。
void main() {while (1) {lightEffect(&P0);}
}
在这个示例中,我们使用指针将P0口传递给 lightEffect 函数,然后在函数内部通过操作指针来控制P0口的输出,实现了流水点亮的效果。请注意,在51单片机中,我们直接通过特殊寄存器的地址来控制硬件,因此在修改端口状态时要格外小心。
精简版示例:
#include<reg51.h>
/*************************************************
函数功能:延时约 150ms
*************************************************/
void delay(void)
{ unsigned char m,n; for(m=0;m<200;m++) for(n=0;n<250;n++) ;
}
/*************************************************
函数功能:流水点亮 P0 口 8 位 LED
*************************************************/
void led_flow(unsigned char *p) //形参为无符号字符型指针
{ unsigned char i; while(1) { i=0; //将 i 置为 0,指向数组第一个元素while(*(p+i)!='\0') //只要没有指向数组的结束标志{ P0=*(p+i);// 取的指针所指变量(数组元素)的值,送 P0 口delay(); //调用延时函数i++; //指向下一个数组元素} }
}
/*************************************************
函数功能:主函数
*************************************************/
void main(void)
{ unsigned char code
Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F, 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE, 0xFF,0xFE,0xFC,0xFB,0xF0,0xE0,0xC0,0x80, 0x00,0xE7,0xDB,0xBD,0x7E,0xFF,0xFF,0x3C, 0x18,0x0,0x81,0xC3,0xE7,0xFF,0xFF,0x7E}; //流水灯控制码 unsigned char *pointer; pointer=Tab; led_flow(pointer); }

相关文章:
51单片机应用从零开始(十一)·数组函数、指针函数
51单片机应用从零开始(九)数组-CSDN博客 51单片机应用从零开始(十)指针-CSDN博客 目录 1. 用数组作函数参数控制流水花样 2. 用指针作函数参数控制 P0 口 8 位 LED 流水点亮 1. 用数组作函数参数控制流水花样 要在51单片机中…...
【PostgreSQL】从零开始:(八)PostgreSQL-数据库PSQL元命令
元命令 postgres# \? General\bind [PARAM]... set query parameters\copyright show PostgreSQL usage and distribution terms\crosstabview [COLUMNS] execute query and display result in crosstab\errverbose show most recent error…...
02 使用Vite创建Vue3项目
概述 A Vue project is structured similarly to a lot of modern node-based apps and contains the following: A package.json fileA node_modules folder in the root of your projectVarious other configuration files are usually contained at the root level, such …...
Shell三剑客:sed(简介)
一、前言 Stream EDitor:流编辑 sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后&…...
tp连接数据库
ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。采用PDO方式,目前包含了Mysql…...
jmeter,断言:响应断言、Json断言
一、响应断言 接口A请求正常返回值如下: {"status": 10013, "message": "user sign timeout"} 在该接口下创建【响应断言】元件,配置如下: 若断言成功,则查看结果树的接口显示绿色,若…...
dockerfite创建镜像---INMP+wordpress
搭建dockerfile---lnmp 在192.168.10.201 使用 Docker 构建 LNMP 环境并运行 Wordpress 网站平台 [rootdocker1 opt]# mkdir nginx mysql php [rootdocker1 opt]# ls #分别拖入四个包: nginx-1.22.0.tar.gz mysql-boost-5.7.20.tar.gz php-7.1.10.tar.bz2 wor…...
服务器数据恢复—raid5热备盘未激活崩溃导致上层oracle数据丢失的数据恢复案例
服务器数据恢复环境: 某品牌X系列服务器,4块SAS硬盘组建了一组RAID5阵列,还有1块磁盘作为热备盘使用。服务器上层安装的linux操作系统,操作系统上部署了一个基于oracle数据库的OA(oracle已经不再为该OA系统提供后续服务…...
生产派工自动化:MES系统的关键作用
随着制造业的数字化转型和智能化发展,生产派工自动化成为了提高生产效率、降低成本,并实现优质产品生产的关键要素之一。制造执行系统(MES)在派工自动化中发挥着重要作用,通过实时数据采集和智能调度,优化生…...
netty-daxin-2(netty常用事件讲解)
文章目录 netty常用事件讲解ChannelHandler接口ChannelHandler适配器类ChannelInboundHandler 子接口Channel 的状态调用时机ChannelHandler 生命周期示例NettServer&CustomizeInboundHandlerNettyClient测试分析 ChannelInboundHandlerAdapter适配器类SimpleChannelInboun…...
使用playbook部署k8s集群
1.部署ansible集群 使用python脚本一个简单的搭建ansible集群-CSDN博客 2.ansible命令搭建k8s: 1.主机规划: 节点IP地址操作系统配置server192.168.174.150centos7.92G2核client1192.168.174.151centos7.92G2核client2192.168.174.152centos7.92G2 …...
Python基础入门第四节,第五节课笔记
第四节 第一个条件语句 if 条件: 条件成立执行的代码1 条件成立执行的代码2 ...... else: 条件不成立执行的代码1 条件不成立执行的代码2 …… 代码如下: 身高 float(input("请输入您的身高(米):")) if 身高 >1.3:print(f您的身高是{身高},已经超过1.3米,您需…...
基于Java SSM框架实现智能停车场系统项目【项目源码+论文说明】
基于java的SSM框架实现智能停车场系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个智能停车场管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述…...
React系列:useEffect的使用
useEffect的使用 useEffect的第二个参数不同,useEffect的加载不同 当第二个参数为没有的时候 只在组件初始渲染和组件更新之后加载当第二个参数为[] 的时候 只在初始渲染之后加载当第二个参数为[有依赖] 的时候 只在初始渲染之后和依赖修改的时候进行加载 functi…...
Ps:形状工具 - 描边选项
在形状工具的工具选项栏或“属性”面板中,单击“设置形状描边类型” Set shape stroke type菜单图标可打开“描边选项” Stroke Options面板。 描边预设 Stroke Type 默认列出了实线、虚线和点线三种类型的描边,单击可应用。 自己创建并存储的描边类型&a…...
C#基础知识 - 变量、常量与数据类型篇
C#基础知识 - 变量、常量与数据类型篇 第3节 变量、常量与数据类型3.1 C#变量3.1.1 变量使用3.1.2 自定义变量3.1.2 接收用户输入 3.2 C#常量3.2.1 常量的使用 3.3 C#数据类型3.3.1 数据类型之值类型3.3.2 数据类型之引用类型 更多C#基础知识详解请查看:C#基础知识 …...
Java面向对象思想以及原理以及内存图解
文章目录 什么是面向对象面向对象和面向过程区别创建一个对象用什么运算符?面向对象实现伪代码面向对象三大特征类和对象的关系。 基础案例代码实现实例化创建car对象时car引用的内存图对象调用方法过程 成员变量和局部变量作用范围在内存中的位置 关于对象的引用关系简介相关…...
Gitbook----基于 Windows 10 系统本地安装配置 Gitbook 编写属于自己的电子书
查看原文 文章目录 一、安装 Nodejs二、安装 Gitbook三、gitbook 的使用方法四、设计电子书的目录结构五、设置 gitbook 常用配置 一、安装 Nodejs 若要在 Windows 10 系统即本地使用 Gitbook,需要安装 gitlab-cli 工具,而 gitbook-cli 工具是基于 Node…...
springMVC-Restful风格
基本介绍 REST:即Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用. 1.HTTP协议里面,四个表示操…...
【OS】操作系统总复习笔记
操作系统总复习 文章目录 操作系统总复习一、考试题型1. 论述分析题2. 计算题3. 应用题 二、操作系统引论(第1章)2.1 操作系统的发展过程2.2 操作系统定义2.3 操作系统的基本特性2.3.1 并发2.3.2 共享2.3.3 虚拟2.3.4 异步 2.4 OS的功能2.5 OS结构2.5 习…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

