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

2024-03-10 13:28

本文主要是介绍【蓝桥杯-单片机】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

这篇关于【蓝桥杯-单片机】LED和按键小练习:Led彩灯控制系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/794371

相关文章

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

基于人工智能的智能家居语音控制系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 随着物联网(IoT)和人工智能技术的发展,智能家居语音控制系统已经成为现代家庭的一部分。通过语音控制设备,用户可以轻松实现对灯光、空调、门锁等家电的控制,提升生活的便捷性和舒适性。本文将介绍如何构建一个基于人工智能的智能家居语音控制系统,包括环境准备

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

C语言蓝桥杯

一、语言基础 竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_s

物联网之流水LED灯、正常流水灯、反复流水灯、移动流水灯

MENU 硬件电路设计软件程序设计正常流水LED灯反复流水LED灯移动流水LED灯 硬件电路设计 材料名称数量直插式LED1kΩ电阻杜邦线(跳线)若干面包板1 每一个LED的正极与开发板一个GPIO引脚相连,并串联一个电阻,负极接GND。 当然也可以选择只使用一个电阻。 软件程序设计 正常流水LED灯 因为要用到多个GPIO引脚,所以最好把所有的GPI