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;  // 左移一位,准备点亮下一个LED
        if (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); 
 
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

0012Java安卓程序设计-ssm记账app

文章目录 **摘要**目 录系统设计5.1 APP端&#xff08;用户功能&#xff09;5.2后端管理员功能模块开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅&#x1f427;裙&#xff1a;776871563 摘要 网络的广泛应用给生活带来了十分的便利。所以把记账管理与现在网络相…

GaussDB数据库语法及gsql入门

一、GaussDB数据库语法入门 之前我们讲了如何连接数据库实例&#xff0c;那连接数据库后如何使用数据库呢&#xff1f;那么我们今天就带大家了解一下GaussDB&#xff0c;以下简称GaussDB的基本语法。 关于如何连接数据库&#xff0c;请戳这里。 学习本节课程之后&#xff0c…

【金华模式】双龙旅游引燃露营设计和文旅产融合新方式

&#xff08;中国国际教育电视台 黎明&#xff09;金华双龙风景旅游区位于浙江省金华市北郊的金华山麓&#xff0c;是一处融自然山水、溶洞群景观、科普探险、康体休闲、避暑度假、观光朝圣于一体的景区。旅游区人文积淀深厚&#xff0c;道、儒、释文化兼收并蓄&#xff0c;东汉…

大语言模型有什么意义?亚马逊训练自己的大语言模型有什么用?

近年来&#xff0c;大语言模型的崭露头角引起了广泛的关注&#xff0c;成为科技领域的一项重要突破。而在这个领域的巅峰之上&#xff0c;亚马逊云科技一直致力于推动人工智能的发展。那么&#xff0c;作为一家全球科技巨头&#xff0c;亚马逊为何会如此注重大语言模型的研发与…

Blender学习:走路机器人,骨骼绑定

文章目录 建模骨骼创建骨骼绑定 教程地址&#xff1a;八个案例教程带你从0到1入门blender【已完结】 建模 1 做头&#xff1a;新建立方体&#xff0c;Ctrl2细分并应用&#xff0c;进入编辑模式&#xff0c;删除一半点&#xff0c;然后添加镜像修改器&#xff0c;开启范围限制…

软件测试20个基础面试题及答案

什么是软件测试&#xff1f; 答案&#xff1a;软件测试是指在预定的环境中运行程序&#xff0c;为了发现软件存在的错误、缺陷以及其他不符合要求的行为的过程。 软件测试的目的是什么&#xff1f; 答案&#xff1a;软件测试的主要目的是保证软件的质量&#xff0c;并尽可能…

python socket编程9 - PyQt6界面实现UDP server/client 多客户端通讯的例子

本篇实现 UDP server和client多客户端通讯的例子。 在UDP单机通讯的基础上进行重构&#xff0c;实现UDP server与多个 client通讯的例子。 创建两个 PyQt6的项目&#xff0c;一个作为UDP server 项目&#xff0c;另一个作为UDP client项目。 一、效果图 1、udp server界面 …

在线学习平台-课程分页、用户管理、教师查询

在线学习平台------手把手教程&#x1f448; 用户管理 添加功能增强 新增属性 若依里的用户模块(SysUser)是没有课程这一属性的,要实现我们自己的课程分页查询功能 这个位置传入的实体类SysUser要加上classId,记得加上get、set方法 更改sql语句 ctrl 鼠标左键不断点进去…

使用Gson完成java对象的序列化和反序列化

一、前言&#xff1a;json是什么&#xff1f;&#xff0c;Gson是什么&#xff1f; 1.JSON&#xff08;javaScript Object Notation&#xff09; 是一种轻量级的数据交换格式。易于人阅读和编写&#xff0c;同时也易于机器解析和生成。 2.Gson 是Google提供的用来在java对象…

Nextui使用

安装和使用 https://nextui.org/docs/frameworks/nextjs 自定义主题 https://nextui.org/docs/customization/customize-theme // tailwind.config.js const {nextui} require("nextui-org/react");/** type {import(tailwindcss).Config} */ module.exports {…

mysql:用SHOW CREATE TABLE tbl_name查看创建表的SQL语句

https://dev.mysql.com/doc/refman/8.2/en/show-create-table.html 可以用SHOW CREATE TABLE tbl_name查看创建表的SQL语句。 例如&#xff0c;SHOW CREATE TABLE test_table;表示查询创建test_table表的SQL语句&#xff1a;

day23_jdbc详解

JDBC JDBC概述 什么jdbc Java DataBase Connectivity是一种用于执行SQL语句的Java API&#xff0c;它由一组用Java语言编写的类和接口组成。通过这些类和接口&#xff0c;JDBC把SQL语句发送给不同类型的数据库进行处理并接收处理结果。 jdbc的作用 提供java 操作不同数据库…

HTML面试题---专题一

文章目录 一、前言二、 HTML5 中 <header> 和 <footer> 标签的用途是什么&#xff1f;三、如何在 HTML 中嵌入 SVG&#xff08;可缩放矢量图形&#xff09;文件&#xff1f;四、解释 contenteditable 属性的用途五、如何创建随屏幕尺寸缩放的响应式图像&#xff1f…

虚幻学习笔记11—C++结构体、枚举与蓝图的通信

一、前言 结构体的定义和枚举类似&#xff0c;枚举的定义有两种方式。区别是结构体必须以“F”开头命名&#xff0c;而枚举不用。 额外再讲了一下蓝图生成时暴露变量的方法。 二、实现 2.1、结构体 1、定义结构体 代码如下&#xff0c;注意这个定义的代码一定要在“UCLASS()”…

如何将用户有过行为的item用list形式记录下来,另外如何计算list里的个数

导语&#xff1a; 最近做项目&#xff0c;发现有些语法想一想是知道&#xff0c;但实际操作起来跟想的情况不一样哈哈。不是遇见bug就是输出的结果不是自己想要的&#xff0c;CSDN跟知乎找了很多没怎么解决&#xff0c;后面多摸索多实操终于解决&#xff01; test_data[item_…

免费提升图片清晰度的AI平台,效果对比一目了然!

随着AI技术的不断发展&#xff0c;我们有了更多的机会去挖掘和提升图片清晰度的可能性。无论是老照片的翻新、档案的修复&#xff0c;还是遥感图像的处理、医学影像的分析&#xff0c;AI都能大显身手。在过去可能很难办到的将分辨率低的图片转为高清图&#xff0c;如今借助AI简…

如何在OpenWRT软路由系统部署uhttpd搭建web服务器实现远程访问——“cpolar内网穿透”

文章目录 前言1. 检查uhttpd安装2. 部署web站点3. 安装cpolar内网穿透4. 配置远程访问地址5. 配置固定远程地址 前言 uhttpd 是 OpenWrt/LuCI 开发者从零开始编写的 Web 服务器&#xff0c;目的是成为优秀稳定的、适合嵌入式设备的轻量级任务的 HTTP 服务器&#xff0c;并且和…

中伟视界:煤矿行业借力人工智能,防控灾害风险迈出新步伐 《“十四五”矿山安全生产规划》(应急(2022)64号),煤矿重大灾害风险防控系统

随着煤矿行业的发展&#xff0c;煤矿重大灾害风险防控成为了行业关注的重点之一。为了更好地预防和应对灾害风险&#xff0c;煤矿行业开始引入人工智能分析算法和检测场景&#xff0c;以提高灾害风险的识别和预警能力。 在煤矿的重大灾害风险防控中&#xff0c;AI算法发挥着重要…

利用C语言模拟实现堆的基本操作和调堆算法

利用C语言模拟实现堆的基本操作和调堆算法 文章目录 利用C语言模拟实现堆的基本操作和调堆算法前言一、堆的基本原理大根堆和小根堆的比较 二、实现堆的基本操作1&#xff09;结构定义2&#xff09;初始化堆&#xff08;HeapInit&#xff09;3&#xff09;销毁堆&#xff08;He…

基于FPGA的视频接口之高速IO

简介 相对于其他视频接口来说,高速IO接口(以Xilinx公司为例,spartan 6系列的GTP、Artix7系列的GTP,KENTEX7系列的GTX和GTH等)具有简化设计、充分利用FPGA资源、降低设计成本等功能。 高速IO接口传输视频,一般会被拓展为万兆以太网、40G以太网、10G光纤、40G光纤、3G-SDI、…