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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/223689.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

回溯算法第一篇(子集树问题【三种思路】、0-1背包问题、最小重量机器设计问题)

目录 1. 子集树问题 解法一 解法二 解法三 2. 0-1背包问题&#xff08;使用子集树解决&#xff09; 3. 最小重量机器设计问题 1. 子集树问题 子集力扣链接 题目描述&#xff1a;给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&am…

NV040D语音芯片应用于取暖桌:智能语音提高用户体验

科技与生活的结合&#xff0c;是科技发展的展示。天气的降温&#xff0c;取暖桌越来越取得用户的心&#xff0c;时至今日传统的取暖桌已经没有办法满足用户的需求&#xff0c;智能语音取暖桌给用户的生活带来了不一样的体验。 NV040D语音芯片是一款性能稳定的芯片&#xff0c;拥…

XS9922B-国产cvi协议,满足国内车载视频传输领域国产化降本需求

XS9922B 是一款 4 通道模拟复合视频解码芯片&#xff0c;支持 HDCCTV 高清协议和 CVBS 标 清协议&#xff0c;视频制式支持 720P/1080P 高清制式和 960H/D1 标清制式。芯片将接收到的高清 模拟复合视频信号经过模数转化&#xff0c;视频解码以及 2D 图像处理之后&#xff0c;转…

Citespace、vosviewer、R语言的文献计量学可视化分析

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

星座生肖运势配对+周公解梦流量主小程序源码系统 带完整的安装部署教程·

近年来&#xff0c;人们对于星座和生肖的配对以及周公解梦的需求越来越大。罗峰发现了一款集星座、生肖配对和周公解梦于一体的流量主小程序源码系统。该系统具有丰富的功能和易于部署的特点&#xff0c;旨在为广大用户提供更加便捷、高效的星座生肖配对和周公解梦服务。 以下…

差分法详解

前言 差分算法适用于一些需要对数组和序列进行增减、查询和更新操作的问题&#xff0c;可以提高计算效率和降低存储空间的需求。今天我将带大家学习如何使用差分法&#xff0c;会以例题来带大家使用差分法以增进理解。话不多说让我们开始吧&#xff01; 文章目录 一维差分尾声…

spring boot集成mybatis和springsecurity实现登录认证功能

参考了很多网上优秀的教程&#xff0c;结合自己的理解&#xff0c;实现了登录认证功能&#xff0c;不打算把理论搬过来&#xff0c;直接上代码可能入门更快&#xff0c;文中说明都是基于我自己的理解写的&#xff0c;可能存在表述或者解释不对的情况&#xff0c;如果需要理论支…

camunda流程引擎——Java集成Camunda(上)(笔记)

目录 一、以一个处理流程开始1.1 后端1.2 前端1.3 执行 二、Camunda的补充2.1 使用方式2.2 可视化平台的Cockpit2.3 流程相关数据2.4 表介绍2.5 前端集成Modeler 三、用Java集成Camunda3.1 集成配置3.2 自动部署3.2.1 修改process.xml位置3.2.2 多进程引擎配置与多租户 3.3 历史…

typedef的使用

在C语言中&#xff0c;有一个关键字叫做typedef&#xff0c;有些人对此感到很疑惑。不熟悉此知识的同学都会对编程失去细心&#xff0c;直接劝退&#xff08;因为之前我就是这样&#xff09;。、 因为好不容易认识了C语言中所有的关键字&#xff08;就是类型吧&#xff0c;像啥…

详细教程 - 从零开发 Vue 鸿蒙harmonyOS应用 第一节

关于使用Vue开发鸿蒙应用的教程,我这篇之前的博客还不够完整和详细。那么这次我会尝试写一个更加完整和逐步的指南,从环境准备,到目录结构,再到关键代码讲解,以及调试和发布等,希望可以让大家详实地掌握这个过程。 一、准备工作 下载安装 DevEco Studio 下载地址&#xff1a;…

逻辑回归的介绍和应用

逻辑回归的介绍 逻辑回归&#xff08;Logistic regression&#xff0c;简称LR&#xff09;虽然其中带有"回归"两个字&#xff0c;但逻辑回归其实是一个分类模型&#xff0c;并且广泛应用于各个领域之中。虽然现在深度学习相对于这些传统方法更为火热&#xff0c;但实…

基础算法(3):排序(3)插入排序

1.插入排序实现 插入排序的工作原理是&#xff1a;通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已经排序的序列从后向前扫描&#xff0c;找到位置并插入&#xff0c;类似于平时打扑克牌时&#xff0c;将牌从大到小排列&#xff0c;每次摸到一张牌就插入到正确的位…

12.4~12.14概率论复习与相应理解(学习、复习、备考概率论,这一篇就够了)

未分配的题目 概率计算&#xff08;一些转换公式与全概率公式&#xff09;与实际概率 &#xff0c;贝叶斯 一些转换公式 相关性质计算 常规&#xff0c;公式的COV与P 复习相关公式 计算出新表达式的均值&#xff0c;方差&#xff0c;再套正态分布的公式 COV的运算性质 如…

前后端项目,nginx部署前端项目后刷新浏览器报错404的问题

问题&#xff1a; Vue单页应用项目打包部署Nginx服务器后&#xff0c;刷新页面后&#xff0c;出现404。 原因&#xff1a; 加载单页应用后路由改变均由浏览器处理&#xff0c;而刷新时将会请求当前的链接&#xff0c;而Nginx无法找到对应的页面。 解决&#xff1a; 在Nginx配…

python爬虫学习-批量爬取图片

python爬虫学习-批量爬取图片 爬虫步骤爬取前十页图片到本地根据页码获取网络源码使用xpath解析网页解析网页并下载图片主函数如下 爬取的网站为站长素材&#xff08;仅做学习使用&#xff09; 爬取的目标网站为 https://sc.chinaz.com/tupian/qinglvtupian.html如果爬取多页&…

大数据讲课笔记1.2 Linux用户操作

文章目录 零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;用户账号管理1、用户与用户组文件2、用户账号管理工作 &#xff08;二&#xff09;用户操作1、切换用户&#xff08;1&#xff09;语法格式&#xff08;2&#xff09;切换到普通用户&#xff08;3&…

NVH软件导入音频文件

我们经常会遇到一种情况是&#xff1a;车主上下班路上经常会听到一个异响&#xff0c;但车交到我们手上&#xff0c;我们怎么在外面去试车&#xff0c;都听不到这个异响&#xff0c;或者条件达不到重现不了这个异响。如果是这样&#xff0c;我们是不是有点崩溃&#xff1f;但&a…

jstree组件的使用详细教程,部分案例( PHP / fastAdmin )

jstree 组件的使用。 简介&#xff1a;JsTree是一个jquery的插件&#xff0c;它提交一个非常友好并且强大的交互性的树&#xff0c;并且是完全免费或开源的&#xff08;MIT 许可&#xff09;。Jstree技持Html 或 json格式的的数据&#xff0c; 或者是ajax方式的动态请求加载数…

公司团队规范研发流程概要

一、背景 ● 背景&#xff1a;XXX研发部门开发流程步骤以及开发工具&#xff0c;依赖版本&#xff0c;开发规范等相关信息。 ● 技术定位&#xff1a;All。 ● 目标群体&#xff1a;所有相关研发部门技术人员。 二、操作步骤 2.1 开发前的准备 准备工作一 开发相关账号开通…

中职网络安全应急响应—Server2228

应急响应 任务环境说明: 服务器场景:Server2228(开放链接) 用户名:root,密码:p@ssw0rd123 1. 找出被黑客修改的系统别名,并将倒数第二个别名作为Flag值提交; 通过用户名和密码登录系统 在 Linux 中,利用 “alias” 命令去查看当前系统中定义的所有别名 flag:ss …