蓝桥杯单片机快速开发笔记——特训1 LED闪烁和数码管同步显示

       

 一、示例题目:

在CT107D单片机综合训练平台上,通过I/O模式编写代码,实现以下功能:

  1. 系统上电后,初始状态为关闭蜂鸣器、继电器、全部指示灯和数码管,然后进入循环,实现灯光闪烁和数码管计数。
  2. 数码管显示:最右边两位显示L8指示灯的闪烁次数,最左边一位显示L1和L2指示灯同时翻转的次数。
  3. 循环功能:L8指示灯循环闪烁,每次闪烁时数码管最右边两位加1,范围为00到99,超过99后恢复为00;同时,每次L8闪烁时,L1和L2指示灯状态翻转,数码管最左边一位加1,范围为0到9,超过9后恢复为0。
  4. 确保在灯光闪烁和数码管计数过程中,精确控制138译码器和573锁存器,使两者协同工作,避免设备冲突、显示异常或刷新中断等问题。

        主要思路就是在闪烁延时中加入数码管显示

二、示例代码

#include "stc15.h"void hc573(unsigned char channel, unsigned char dat)
{P2 = (P2 & 0x1f) | 0x00;P0 = dat;switch(channel){case 4:P2 = (P2 & 0x1f) | 0x80;break;case 5:P2 = (P2 & 0x1f) | 0xa0;break;case 6:P2 = (P2 & 0x1f) | 0xc0;break;case 7:P2 = (P2 & 0x1f) | 0xe0;break;}	
}void delay_smg(unsigned int t)
{while(t--);
}#define TSMG 500
unsigned char num1 = 0;
unsigned char num2 = 0;code unsigned char Seg_Table[] = 
{0xc0, //00xf9, //10xa4, //20xb0, //30x99, //40x92, //50x82, //60xf8, //70x80, //80x90, //90x88, //A0x83, //b0xc6, //C0xa1, //d0x86, //E0x8e //F
};void smg_all(unsigned char dat)
{hc573(6, 0xff);hc573(7, dat);
}void smg_bit(unsigned char pos, unsigned char dat)
{hc573(6, 0x01 << pos);hc573(7, dat);delay_smg(TSMG);hc573(6, 0x01 << pos);hc573(7, 0xff);
}void smg_display()
{smg_bit(0, Seg_Table[num1]);smg_bit(6, Seg_Table[num2 / 10]);smg_bit(7, Seg_Table[num2 % 10]);
}void delay_led(unsigned int t)
{while(t--){smg_display();}
}unsigned char stat_led = 0xff;void led_display()
{stat_led = stat_led & 0x7f;hc573(4,stat_led);  //L8亮delay_led(200);stat_led = stat_led | ~0x7f;hc573(4,stat_led);  //L8灭delay_led(200);num2++;if(num2 >= 100){num2 = 0;}if((stat_led & 0x03) == 0x03){stat_led = stat_led & ~0x03;  //L1 L2亮}else{stat_led = stat_led | 0x03;   //L1 L2灭}hc573(4,stat_led);num1++;if(num1 >= 10){num1 = 0;}
}void init_sys()
{hc573(5,0x00);hc573(4,0xff);smg_all(0xff);
}void main()
{init_sys();while(1){led_display();smg_display();}
}

        

  1. hc573 函数:

    • 该函数用于控制 573 锁存器,根据传入的通道号和数据,设置相应的输出信号。
    • 通过设置 P2 和 P0 寄存器的值,控制数据输出到指定的通道。
  2. delay_smg 函数:

    • 这个函数用于实现延时,通过循环等待的方式进行时间延迟。
  3. smg_allsmg_bit 和 smg_display 函数:

    • smg_all 函数用于控制数码管显示全部位。
    • smg_bit 函数用于控制数码管显示指定位和数据。
    • smg_display 函数用于整体数码管显示控制。
  4. delay_led 函数:

    • 这个函数用于实现 LED 灯的延时显示,同时调用 smg_display 函数控制数码管显示。
  5. led_display 函数:

    • 该函数实现了 LED 灯的闪烁和计数逻辑,根据计数值控制 LED 灯的状态和数码管显示。
    • 在每次循环中,更新 LED 灯状态和计数值,并控制数码管显示。
  6. init_sys 函数:

    • 初始化系统,设置初始的 573 锁存器和数码管显示状态。
  7. main 函数:

    • 主函数中首先调用 init_sys 进行系统初始化。
    • 进入一个无限循环,循环调用 led_display 和 smg_display 函数,实现 LED 灯的闪烁和数码管的计数显示。

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

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

相关文章

代码随想录Day32

Day 32 贪心算法 Part03 今日任务 1005.K次取反后最大化的数组和 加油站 分发糖果 代码实现 1005.K次取反后最大化的数组和 这题有点思路&#xff0c;和题解也差不多&#xff0c;但是没完全通&#xff0c;感觉很复杂&#xff0c;无法下手 public int largestSumAfterKNeg…

Docker新手攻略:编辑Dockerfile、构建镜像、启动容器全攻略

万能dockerfile编写模板文件 FROM openjdk:11.0 as builder WORKDIR application ARG JAR_FILEtarget/*.jar COPY ${JAR_FILE} application.jar RUN java -Djarmodelayertools -jar application.jar extractFROM openjdk:11.0 WORKDIR application COPY --frombuilder applica…

Springboot项目结构

1. 一个正常的企业项目里一种通用的项目结构和代码层级划分的指导意见&#xff1a; 一般分为如下几层&#xff1a; 开放接口层 终端显示层 Web 层 Service 层 Manager 层 DAO 层 外部接口或第三方平台 2. 以当下非常火热的Spring Boot典型项目结构为例&#xff0c;创建出…

typeScript3(数组类型)

类型[ ] let arr: number[] [1,2,3] //数字类型的数组 let arr:string[] [1, 2] //字符串类型的数组 let arr:any[] [1,2,false] //任意类型的数组 数组泛型 Array<类型> let arr:Array<number> [1,2,3] 接口表示数组 //只要索引的类型是数字时&#xff0c;那…

Java基础---IO流习题

使用对象IO流简单练习一个图书管理系统 Book类&#xff08;书类&#xff09; package day2024_03_21.pojo;import java.io.Serializable;public class Book implements Serializable {private static final long serialVersionUID 1L;private Integer BookId;private Stri…

import * as的使用

import * as 是将一个模块的所有导出内容作为一个命名空间对象导入到当前模块中&#xff0c;其中 * 表示导入该模块中的所有导出内容&#xff0c;而 as 则用于指定导入的命名空间对象的名称。 例如&#xff1a;在 formatter 文件中有两个方法导出 const a () > {console.…

代码随想录算法训练营第三十四天 |1005. K 次取反后最大化的数组和 、134. 加油站、135. 分发糖果

代码随想录算法训练营第三十四天 |1005. K 次取反后最大化的数组和 、134. 加油站、135. 分发糖果 1005. K 次取反后最大化的数组和题目解法 134. 加油站题目解法 135. 分发糖果题目解法 感悟 1005. K 次取反后最大化的数组和 题目 解法 考虑绝对值 class Solution { public…

亚马逊广告八大打法,新手卖家须知

在亚马逊平台上&#xff0c;商家们可以利用各种广告产品来推广他们的商品和品牌。今天给大家分享亚马逊上常见的八种广告打法&#xff01; 亚马逊广告八大打法 一、Coupon白帽刷广告法 1️⃣ 发布大额优惠券&#xff1a;在产品详情页提供引人注意的大额优惠券&#xff08;打折幅…

图像分类的实战案例

图像分类是计算机视觉领域的一个基本任务&#xff0c;它在许多实际应用中都有广泛的应用。以下是一些图像分类的实战案例&#xff1a; 人脸识别&#xff1a; 应用&#xff1a;安全监控、身份验证、社交媒体面部标记。实例&#xff1a;使用深度学习模型识别和验证图像中的人脸&…

前端理论总结(css3)——css动画与js动画区别 // 选择器/优先级

一、 css动画与js动画区别 1&#xff1a;js是逐帧动画&#xff0c;css是补间动画。 2&#xff1a;js动画控制能力很强可以在动画播放过程中对动画进行控制&#xff1a;开始、暂停、回放、终止、取消都是可以做到的 3&#xff1a;js动画使用CPU运算&#xff0c;会阻…

真机笔记(3) 真机需求讲解

目录 拓扑分析&#xff1a; 设计理念&#xff1a; 1. 生产区交换需求&#xff1a; 2. 生产区交换需求&#xff1a; 3. 服务器区交换需求&#xff1a; 4. 路由设计 5. 地址规划&#xff1a; 拓扑分析&#xff1a; 蓝色&#xff1a;网线 红色&#xff1a;多模光纤 黄色&am…

【SpringBoot框架篇】37.使用gRPC实现远程服务调用

文章目录 RPC简介gPRC简介protobuf1.文件编写规范2.字段类型3.定义服务(Services) 在Spring Boot中使用grpc1.父工程pom配置2.grpc-api模块2.1.pom配置2.2.proto文件编写2.3.把proto文件编译成class文件 3.grpc-server模块3.1.pom文件和application.yaml3.2.实现grpc-api模块的…

Rust 语言中 Vec 的元素的删除方法

在 Rust 中&#xff0c;Vec&#xff08;向量&#xff09;提供了多种删除元素的方法。以下是一些常用的删除方法&#xff1a; remove: 这是最常用的删除方法&#xff0c;它接受一个索引作为参数&#xff0c;并移除该索引处的元素&#xff0c;同时返回被移除的元素。所有后面的元…

Java贪心算法(含面试大厂题和源码)

贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法策略。贪心算法解决问题的过程中&#xff0c;每一步都做出一个看似最优的决定&#xff0c;它永远不会回溯&#xff0c;这…

洛谷刷题 | B3623 枚举排列

枚举排列 题目描述 今有 n n n 名学生&#xff0c;要从中选出 k k k 人排成一列拍照。 请按字典序输出所有可能的排列方式。 输入格式 仅一行&#xff0c;两个正整数 n , k n, k n,k。 输出格式 若干行&#xff0c;每行 k k k 个正整数&#xff0c;表示一种可能的队…

2-Flume之Sink与Channel

Flume Sink HDFS Sink 将数据写到HDFS上。数据以文件形式落地到HDFS上&#xff0c;文件名默认是以FlumeData开头&#xff0c;可以通过hdfs.filePrefix来修改 HDFS Sink默认每隔30s会滚动一次生成一个文件&#xff0c;因此会导致在HDFS上生成大量的小文件&#xff0c;实际过程…

使用git下载github/gitee仓库部分或单个文件的方法

前言 有些时候在github或者gitee仓库中我们只需要下载整个项目中的我门需要的那一部分文件夹或文件就行了&#xff0c;不需要下载所有的项目。这样可以节省很多流量和时间 步骤 1.建立一个新的 git 本地仓库 这里我在D:\test中初始化 命令&#xff1a; git init2.在本地仓…

Istio 部署 Spring Coud 微服务应用

Istio 服务部署 这篇文章讲述如何将 Java Spring Cloud 微服务应用部署到 Istio mesh 中。 准备基础环境 使用 Kind 模拟 kubernetes 环境。文章参考&#xff1a;https://blog.csdn.net/qq_52397471/article/details/135715485 在 kubernetes cluster 中安装 Istio 创建一…

Excel双击单元格后弹窗输入日期

Step1. 在VBE界面新建一个窗体(Userform1),在窗体的工具箱的空白处右键,选中添加附件,勾选Calendar control 8.0,即可完成日历的添加。 PS:遗憾的是, Office 64 位没有官方的日期选择器控件。唯一的解决方案是使用Excel 的第三方日历。 参考链接:How to insert calen…