【蓝桥杯-单片机】LED和按键小练习:Led彩灯控制系统

文章目录

  • 【蓝桥杯-单片机】LED和按键小练习:Led彩灯控制系统
    • 01 题目描述
    • 02 题目解答
    • 03 本题总结
      • 整体逻辑框架(详细版)
      • 整体逻辑框架(缩略版)
      • 按键读取模块
      • 按键消抖模块
      • 流水灯显示模式
        • (1)从上向下流(循环左移)
        • (2)从下向上流(循环右移)
        • (3)从外向内流
        • (4)从内向外流

【蓝桥杯-单片机】LED和按键小练习:Led彩灯控制系统

01 题目描述

Led彩灯控制系统
彩灯运行模式:
模式1:Led1 – Led2 – Led3 – Led4 – Led5 – Led6 – Led7 – Led8
模式2:Led8 – Led7 – Led6 – Led5 – Led4 – Led3 – Led2 – Led1
模式3:Led1+Led8 – Led2+Led7 - Led3+Led5 – Led4+Led6
模式4:Led4+Led6 – Led3+Led5 – Led2+Led7 – Led1+Led8
按键功能定义:
S1:彩灯系统启动按键
S2:彩灯系统暂停按键
S3:显示模式调整按键(运行模式+1)(若模式4+1后返回到模式1)
S4:显示模式调整按键(运行模式-1)(若模式1-1后返回到模式4)
初始化状态:
上电时,默认为模式1-启动状态,固定流转时间500ms/次
在这里插入图片描述

02 题目解答

#include <REGX52.H>
#include <intrins.H>//函数声明区//按键读取函数
unsigned char Key_Read()
{unsigned char temp = 0;if(P3_4 == 0) temp = 1;if(P3_5 == 0) temp = 2;if(P3_6 == 0) temp = 3;if(P3_7 == 0) temp = 4;return temp;
}//自定义延时函数
void Delay(unsigned int x)		//@12.000MHz
{unsigned char i, j;while(x--){i = 2;j = 239;do{while(--j);}while(--i);}
}//声明变量区
unsigned char Key_Val,Key_Down,Key_Up,Key_Old;
unsigned char Led_Data = 0xfe;
//0xfe->11111110
unsigned char Led_34_Data[4] = {0x7e,0xbd,0xdb,0xe7};//模式3和模式4数据
//0x7e->01111110 1、8亮
//0xbd->10111101 2、7亮
//0xdb->11011011 3、6亮
//0x70->11100111 4、5亮
unsigned char Led_Mode = 0;//流水灯显示模式
unsigned char Led_34_Data_Index;//数组索引
bit Led_Flag = 1;//流水灯是否启动标志位,上电默认启动int main()
{while(1){//按键消抖Key_Val = Key_Read();Key_Down = Key_Val & (Key_Val ^ Key_Old);Key_Up = ~Key_Val & (Key_Val ^ Key_Old);Key_Old = Key_Val;switch(Key_Down){case 1://彩灯系统启动按键Led_Flag = 1;break;case 2://彩灯系统暂停按键Led_Flag = 0;break;case 3://显示模式调整按键(moed+1)Led_Mode++;if(Led_Mode == 4) Led_Mode=0;break;case 4://显示模式调整按键(mode-1)Led_Mode--;if(Led_Mode == 255) Led_Mode = 3;break;}if(Led_Flag==1){switch(Led_Mode){case 0:P1 = Led_Data;Delay(500);Led_Data = _crol_(Led_Data,1);//Led_Data向左移位break;case 1:P1 = Led_Data;Delay(500);Led_Data = _cror_(Led_Data,1);//Led_Data向右移位break;case 2:P1 = Led_34_Data[Led_34_Data_Index];Delay(500);Led_34_Data_Index++;if(Led_34_Data_Index==4) Led_34_Data_Index = 0;break;case 3:P1 = Led_34_Data[Led_34_Data_Index];Delay(500);Led_34_Data_Index--;if(Led_34_Data_Index==255) Led_34_Data_Index = 3;break;}}}
}

03 本题总结

整体逻辑框架(详细版)

循环
循环
模式切换
模式切换
mode=0
mode=1
mode=2
循环
mode=3
循环
上电 默认彩灯系统启动
Key_down=1 彩灯系统启动
Key_down=2 彩灯系统暂停
Key_down=3 彩灯模式+1
Key_down=4 彩灯模式-1
Led_flag=1
Led_flag=0
Led_Mode++
Led_Mode==4
Led_Mode=0
Led_Mode--
Led_Mode==255
Led_Mode=3
Led_Data向左循环移位
Led_Data右循环移位
从左往右遍历Led_34_Data
数组Led_34_Data遍历一遍
Led_34_Data_Index==4
从右往左遍历Led_34_Data
数组Led_34_Data遍历一遍
Led_34_Data_Index==255

整体逻辑框架(缩略版)

循环
循环
模式切换
模式切换
mode=0
mode=1
mode=2
mode=3
上电 默认彩灯系统启动
Key_down=1 彩灯系统启动
Key_down=2 彩灯系统暂停
Key_down=3 彩灯模式+1
Key_down=4 彩灯模式-1
Led_flag=1
Led_flag=0
Led_Mode++
Led_Mode==4
Led_Mode=0
Led_Mode--
Led_Mode==255
Led_Mode=3
Led_Data向左循环移位
Led_Data右循环移位
从左往右遍历Led_34_Data
从右往左遍历Led_34_Data

按键读取模块

获取Key_Down的值用于分支按键功能定义:
S1:彩灯系统启动按键
S2:彩灯系统暂停按键
S3:显示模式调整按键(运行模式+1)(若模式4+1后返回到模式1)
S4:显示模式调整按键(运行模式-1)(若模式1-1后返回到模式4)

unsigned char Key_Read()
{unsigned char temp = 0;if(P3_4 == 0) temp = 1;if(P3_5 == 0) temp = 2;if(P3_6 == 0) temp = 3;if(P3_7 == 0) temp = 4;return temp;
}

按键消抖模块

		Key_Val = Key_Read();Key_Down = Key_Val & (Key_Val ^ Key_Old);Key_Up = ~Key_Val & (Key_Val ^ Key_Old);Key_Old = Key_Val;

流水灯显示模式

//声明变量区
unsigned char Key_Val,Key_Down,Key_Up,Key_Old;
unsigned char Led_Data = 0xfe;
//0xfe->11111110
unsigned char Led_34_Data[4] = {0x7e,0xbd,0xdb,0xe7};//模式3和模式4数据
//0x7e->01111110 1、8亮
//0xbd->10111101 2、7亮
//0xdb->11011011 3、6亮
//0x70->11100111 4、5亮
unsigned char Led_Mode = 0;//流水灯显示模式
unsigned char Led_34_Data_Index;//数组索引
bit Led_Flag = 1;//流水灯是否启动标志位,上电默认启动
(1)从上向下流(循环左移)
					P1 = Led_Data;Delay(500);Led_Data = _crol_(Led_Data,1);//Led_Data向左移位
(2)从下向上流(循环右移)
				  P1 = Led_Data;Delay(500);Led_Data = _cror_(Led_Data,1);//Led_Data向右移位
(3)从外向内流
				  P1 = Led_34_Data[Led_34_Data_Index];Delay(500);Led_34_Data_Index++;if(Led_34_Data_Index==4) Led_34_Data_Index = 0;
(4)从内向外流
				P1 = Led_34_Data[Led_34_Data_Index];Delay(500);Led_34_Data_Index--;if(Led_34_Data_Index==255) Led_34_Data_Index = 3;

tips:unsigned char类型的取值范围是0-255,即这里的0-1=255,当index的值减到255时需要重置index的值为3

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

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

相关文章

基于SVM模型的网络入侵检测模型训练与评估(NSL-KDD数据集)

简介 针对网络安全领域的NSL-KDD数据集进行分类任务的预处理和模型训练、以及超参数调优。 数据预处理 读取并解析数据集&#xff1b;检查并删除指定列&#xff08;outcome&#xff09;的缺失值&#xff1b;对类别型特征&#xff08;protocol_type, service, flag&#xff0…

GPT-4 等大语言模型(LLM)如何彻底改变客户服务

GPT-4革命&#xff1a;如何用AI技术重新定义SEO策略 在当今快节奏的数字时代&#xff0c;客户服务不再局限于传统的电话线或电子邮件支持。 得益于人工智能 (AI) 和自然语言模型 (NLM)&#xff08;例如 GPT-4&#xff09;的进步&#xff0c;客户服务正在经历革命性的转变。 在这…

【Python】成功解决NameError: name ‘a‘ is not defined

【Python】成功解决NameError: name ‘a’ is not defined &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订…

gensim 实现 TF-IDF;textRank 关键词提取

目录 TF-IDF 提取关键词 介绍 代码 textRAnk 提取关键词 这里只写了两种简单的提取方法&#xff0c;不需要理解上下文&#xff0c;如果需要基于一些语义提取关键词用 LDA&#xff1a;TF-IDF&#xff0c;textRank&#xff0c;LSI_LDA 关键词提取-CSDN博客 TF-IDF 提取关键词…

MySQL中批量修改某个字段的一部分字符,可以使用UPDATE语句结合REPLACE函数

示例语句 UPDATE your_table_name SET your_column_name REPLACE(your_column_name, old_string, new_string) WHERE your_column_name LIKE %old_string%; 原因&#xff1a; 项目用了一个服务上传地址原来是http开头&#xff0c;数据库存的地址也是http&#xff0c;后来加了…

基于java EE医疗机械设备采购管理系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 系统开发相关技术 3 1.1 J2EE技术简介 3 1.2 SSH框架技术 3 1.3 JQuery技术 3 1.4 CSS技术 3 1.5 XML技术 3 1.6 Ajax技术 4 1.7 MySQL数据库 4 1.8 本章小结 4 2 系统分析 5 2.1 概要分析 5 2.2 功能需求分析 6 2.3 功能初步设计 6 2.4 …

COMSOL热应力仿真

热应力 热膨胀子节点 热膨胀输入类型 假如直接知道热膨胀大小&#xff0c;可以直接对热应变进行赋值。 约束与载荷 对于自由膨胀&#xff0c;可以添加抑制刚体运动。 案例分析 在参数部分&#xff0c;设定体积参考温度Tref&#xff0c;假定在25[degC]模型无热应变。 APP开发器-…

vue 使用 PrintJs 实现打印pdf效果

一、print.js介绍 Print.js主要是为了帮助我们直接在应用程序中打印PDF文件&#xff0c;而无需离开界面&#xff0c;并且不使用嵌入。对于用户不需要打开或下载PDF文件的特殊情况&#xff0c;他们只需要打印它们。 例如&#xff0c;当用户请求打印在服务器端生成的报告时&…

IRLINK(红外遥控器)

工具 1.Proteus 8 仿真器 2.keil 5 编辑器 原理图 讲解 简介 红外遥控&#xff1a;是利用红外线进行通信的设备&#xff0c;由红外LED调制后的信号发出&#xff0c;由专用的红外接头进行解调&#xff1b; 通信方式&#xff1a;单工、异步&#xff1b; 红外LED波长&#x…

【微信小程序】传参存储

目录 一、本地数据存储 wx.setStorage wx.setStorageSync 1.1、异步缓存 存取数据 1.2、同步缓存 存取数据 二、使用url跳转路径携带参数 2.1、 wx.redirectTo({}) 2.2、 wx.navigateTo({}) 2.3、 wx.switchTab({}) 2.4 、wx.reLaunch({}) 2.5、组件跳转 三、…

docker拉取镜像失败的解决方案大全

更换国内源 创建或修改 /etc/docker/daemon.json 文件&#xff0c;修改&#xff1a; {"registry-mirrors" : ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https:…

Web APIs 5 Window对象、本地存储

Web APIs 5 一、Window对象1、BOM2、定时器-延时函数3、JS执行机制4、location对象案例&#xff1a;5秒钟之后跳转的页面 5、navigator对象6、histroy对象 二、本地存储本地存储 localStorage本地存储 sessionStorage存储复杂数据类型案例&#xff1a;学生就业统计表字符串拼接…

html css 导航栏 2

鼠标划过会向上移动改变颜色 html文件 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>导航栏</title><link rel"stylesheet" href"css/dhl1.css" /></head><body><div …

动态规划(带你了解 原理 实践)

目录 引言 一、动态规划的基本概念 二、动态规划的应用 1. 背包问题 2. 最短路径问题 3. 0-1背包问题的变种 4. 字符串匹配与编辑距离 5. 金融投资组合优化 6. 生产调度问题 7. 项目管理中的资源分配 三、动态规划算法的优缺点 优点 1 效率高 2 通用性强 缺点&a…

Java高频面试之消息队列与分布式篇

有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家 消息队列的基本作用&#xff1f; 异步通信&#xff1a;消息队列提供了异步通信的能力&#xff0c;发送方可以将消息发送到队列中&#xff0c;而无需等待接收方立即处理。发送方和接收方可以解耦&#x…

排序——希尔排序、插入排序

本节复习排序中的希尔排序&#xff0c;希尔排序属于插入排序。 希尔排序的代码和插入排序非常类似。 思想却相对于插入排序来说复杂。 在复习希尔排序之前&#xff0c; 我们需要先复习一下插入排序。 目录 插入排序 插入过程 代码实现 希尔排序 希尔排序的思想 代码实…

蓝桥杯之【01背包模版】牛客例题展示

牛客链接 #include <bits/stdc.h> using namespace std; int n,V; const int N1010; int v[N],w[N]; int dp[N][N]; int main() {cin>>n>>V;for(int i1;i<n;i){cin>>v[i]>>w[i];}for(int i1;i<n;i){for(int j1;j<V;j){dp[i][j]dp[i-1][…

Svg Flow Editor 原生svg流程图编辑器(一)

系列文章 Svg Flow Editor 原生svg流程图编辑器&#xff08;二&#xff09; 效果展示 项目概述 svg flow editor 是一款流程图编辑器&#xff0c;提供了一系列流程图交互、编辑所必需的功能&#xff0c;支持前端研发自定义开发各种逻辑编排场景&#xff0c;如流程图、ER 图、…

【xv6操作系统】Lab systems calls

一、实验前须知 阅读 xv6 文档的第 2 章和第 4 章的 4.3 节和 4.4 节以及相关源文件&#xff1a; 系统调用的用户空间代码在 user/user.h 和 user/usys.pl 中。 内核空间代码在 kernel/syscall.h 和 kernel/syscall.c 中。 与进程相关的代码在 kernel/proc.h 和 kernel/proc.c…

CorelDRAW Standard2024适合业余爱好者和家庭企业的图形设计软件

CorelDRAW Standard 2024是一款功能强大的矢量图形设计软件&#xff0c;专为图形爱好者、家庭用户、微型企业和学生们设计。该软件在Windows平台上运行&#xff0c;并提供了智能对象、布局、插图和模板等功能&#xff0c;帮助用户快速创建高质量的设计作品。 CorelDRAW Standa…