【51单片机】初学者必会项目——按键控制LED流水灯模式(定时器&中断系统的应用)(10)

前言

大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

  • YY的《C++》专栏
  • YY的《C++11》专栏
  • YY的《Linux》专栏
  • YY的《数据结构》专栏
  • YY的《C语言基础》专栏
  • YY的《初学者易错点》专栏
  • YY的《小小知识点》专栏
  • YY的《单片机期末速过》专栏
  • YY的《C++期末速过》专栏
  • YY的《单片机》专栏
  • YY的《STM32》专栏
  • YY的《数据库》专栏
  • YY的《数据库原理》专栏

目录

  • 一.前置知识
  • 二.设计获取独立按键键码函数 KEY()
    • 1.按键前置知识
    • 2.根据需求配置键码
  • 三.实现流水灯功能
    • 1.引入函数库INTRINS.H与相关函数_crol_( )_lrol_( )介绍
    • 2.根据按键功能,设计按键设置中断函数的左右移
  • 四.烧入单片机观察现象

一.前置知识

  • 要实现该项目需要大家先阅读,前置知识:
  • 以下是前置知识博客大概内容:传送门在下方
  • 【51单片机】从零开始手把手带你【查手册】配置定时器,并完成小项目(定时器&中断的应用)(代码演示&单片机现象对照LCD闪烁)(9)
    在这里插入图片描述
  • 在上个实验中,我们已经成功控制小灯以1s为频率闪动
    在这里插入图片描述

二.设计获取独立按键键码函数 KEY()

1.按键前置知识

  • 要设计获取独立按键函数,我们需要查看它的原理图并进行相应配置,相关博客内容传送门在下方
  • 【51单片机】Kn独立按键控制【LED亮灭】【LED状态】【LED二进制式显示】【LED不断移位】(4)
  • 部分内容如下所示:
    在这里插入图片描述

2.根据需求配置键码

  • 我们通过1的博客,已经大致了解P31~P33如何操作
  • 我们现在 让P31到P33分别表示数字1~4
/*** @brief  获取独立按键键码* @param  无* @retval 按下按键的键码,范围:0~4,无按键按下时返回值为0*/
unsigned char Key()
{unsigned char KeyNumber=0;//寄存器值为0时,表示按下//Delay操作是为了避免按键抖动带来的误差if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);KeyNumber=1;}if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);KeyNumber=2;}if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);KeyNumber=3;}if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);KeyNumber=4;}return KeyNumber;
}
  • 主函数也实现功能: 伴随按键按下,LEDmode在0和1之间来回切换
  • 代表的功能分别是: 流水灯向左流水,流水灯向右流水
unsigned char KeyNum,LEDMode;
void main()
{P2=0xFE;Timer0Init();while(1){KeyNum=Key();		//获取独立按键键码if(KeyNum)			//如果按键按下{if(KeyNum==1)	//如果K1按键按下{LEDMode++;	//模式切换if(LEDMode>=2)LEDMode=0;}}}
}

三.实现流水灯功能

1.引入函数库INTRINS.H与相关函数_crol_( )lrol( )介绍

  • 进入头文件后,我们可以看到三个函数
    在这里插入图片描述
  • crol( ,)效果是向左移动1位,代码呈现效果如图所示
  • 与传统左移<<,右移>>不同点在于它是一个类似循环链表的移动方式,即最左边再向左移动会回到最右边的位置
unsgined char a =0x01;
a=_crol_(a,1);    //0x02unsgined char a =0x80;
a=_crol_(a,1);    //0x01            

2.根据按键功能,设计按键设置中断函数的左右移

unsigned char KeyNum,LEDMode;void main()
{P2=0xFE;//点亮LEDTimer0Init();while(1){KeyNum=Key();		//获取独立按键键码if(KeyNum)			//如果按键按下{if(KeyNum==1)	//如果K1按键按下{LEDMode++;	//模式切换if(LEDMode>=2)LEDMode=0;}}}
}void Timer0_Routine() interrupt 1
{static unsigned int T0Count;TL0 = 0x18;		//设置定时初值TH0 = 0xFC;		//设置定时初值T0Count++;		//T0Count计次,对中断频率进行分频if(T0Count>=500)//分频500次,500ms{T0Count=0;if(LEDMode==0)			//模式判断P2=_crol_(P2,1);	//LED输出if(LEDMode==1)P2=_cror_(P2,1);}
}

四.烧入单片机观察现象

  • 烧入的相关博客传送门在下方,本博客相关资源解压后烧写即可观察现象
  • 【51单片机】烧写教程:将代码下载到单片机中(图示&解析)
  • 现象:按下k1往左移,再次按下往右移(LEDmode变量起作用)在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

盘点全网好用的ai伪原创工具

在信息内容发展的今天&#xff0c;写作在我们每个人的生活当中息息相关。可能写作对于有的人来说很简单&#xff0c;但对于有些人来说可能也会很难&#xff0c;幸运的是&#xff0c;我们在这个技术发达的今天&#xff0c;对于很多难题都是可以迎刃而解的&#xff0c;即使对于那…

nginx服务基础用法(概念、安装、热升级)

目录 一、I/O模型概述 1、I/O概念 1.1 计算机的I/O 1.2 Linux的I/O 2、零拷贝技术 3、同步/异步&#xff08;消息反馈机制&#xff09; 4、阻塞/非阻塞 5、网络I/O模型 5.1 阻塞型 I/O 模型&#xff08;blocking IO&#xff09; 5.2 非阻塞型 I/O 模型 (nonblocking …

win系统下安装mysql5.7并配置环境变量、设置root用户和服务启动的详细操作教程

本篇文章主要讲解&#xff1a;win系统下安装mysql5.7并配置环境变量、设置root用户和服务启动的详细操作教程 日期&#xff1a;2024年2月22日 作者&#xff1a;任聪聪 一、mysql5.7版本的下载 官方下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 步骤…

Spring框架@Autowired注解进行字段时,使用父类类型接收子类变量,可以注入成功吗?(@Autowired源码跟踪)

一、 前言 平常我们在使用spring框架开发项目过程中&#xff0c;会使用Autowired注解进行属性依赖注入&#xff0c;一般我们都是声明接口类型来接收接口实现变量&#xff0c;那么使用父类类型接收子类变量&#xff0c;可以注入成功吗&#xff1f;答案是肯定可以的&#xff01;…

linux下执行文件包含^M,将window文件格式内容转为linux格式

查看文件内容 cat -v jvm_options 报错信息 ./bin/install-plugin.sh: /bigdata/opt/s/seatunnelsgg/apache-seatunnel-2.3.4/mvnw: /bin/sh^M: bad interpreter: No such file or directory install connector : connector-selectdb-cloud安装工具 yum install -y dos2uni…

一文了解LM317T的引脚介绍、参数解读

LM317T是一种线性稳压器件&#xff0c;它具有稳定输出电压的特性。LM317T可以通过调整其输出电阻来确保输出电压的稳定性&#xff0c;因此被广泛应用于各种电子设备中。 LM317T引脚图介绍 LM317T共有3个引脚&#xff0c;分别是&#xff1a; 输入引脚&#xff08;输入电压V_in&…

本地配置多个git账户及ll设置

本地配置多个git账户 清除全局配置将命令行&#xff0c;切换到ssh目录生成GitLab和Gitee的公钥、私钥去对应的代码仓库添加 SSH Keys添加私钥ll设置 管理密钥验证仓库配置关于gitgitee.com: Permission denied (publickey) 清除全局配置 此步骤可以不做&#xff0c;经测试不影…

测试环境搭建整套大数据系统(六:搭建sqoop)

一&#xff1a;下载安装包 https://archive.apache.org/dist/sqoop/ 二&#xff1a;解压修改配置。 tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt cd /opt mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop-1.4.7修改环境变量 vi /etc/profile#SQOOP_HOME export SQOOP_…

成功经营社区店的商业模式与案例分析

随着互联网的发展&#xff0c;线上购物已经成为了人们生活中不可或缺的一部分。然而&#xff0c;实体店依然具有不可替代的优势&#xff0c;特别是在社区环境中。 社区店不仅能够为居民提供便利的购物体验&#xff0c;还能为店主带来稳定的收入。 本人在社区开鲜奶吧已经5年时…

数据结构2月19日

题目&#xff1a;顺序表作业 代码&#xff1a; 功能区&#xff1a; #include <stdio.h>#include <stdlib.h>#include "./d2191.h"SeqList* create_seqList(){SeqList* list (SeqList*)malloc(sizeof(SeqList));if(NULL list){return NULL;}list->p…

罗克韦尔AB的PLC实现ModbusTCP和ModbusRTU协议标签方式通讯

本文是通过IGT-DSER智能网关读写AB罗克韦尔Compact、Control系列PLC的标签数据缓存并转为Modbus从站协议&#xff0c;与上位机通讯的案例。 打开智能网关的参数软件(下载地址)&#xff0c;通过功能->数据转发与平台对接&#xff0c;再选择数据转发与缓存’&#xff0c;进入以…

基于SpringBoot的教师宿舍管理系统设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SpringBoot的教师宿…

PolarDN MISC做题笔记

cat flag 使用01打开flag.png,发现图片尾部有padding的数据。D0 CF 11 E0 A1 B1 1A E1为office2007以前版本的文件头。将其另存为flag.doc,打开发现提示需要密码。&#xff08;可以注意到&#xff1a;D0CF11E0非常类似DOCFILE&#xff09; 使用john的office2john.py 提取hash …

第3部分 原理篇2去中心化数字身份标识符(DID)(2)

3.2.2. DID相关概念 3.2.2.1. 去中心化标识符 (Decentralized identifier&#xff0c;DID) 本聪老师&#xff1a;DID有两个含义&#xff0c;一是Decentralized identity&#xff0c;就是去中心化身份&#xff0c;是广泛意义的DID。另外一个是Decentralized identifier&#xf…

小兴教你做平衡小车-stm32程序开发(新建通用工程)

文章目录 1、准备工作2、拷贝文件2.1 拷贝文件到FWLIB文件夹2.2 拷贝文件到CMSIS文件夹2.3 拷贝文件到USER文件夹 3、keil新建工程4、通用工程下载 参考博客&#xff1a; 零死角玩转stm32初级篇1-从零创建STM32工程模板 1、准备工作 首先呢&#xff0c;我们用压缩软件解压之前…

基于springboot+vue的植物健康系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

2024开年,手机厂商革了自己的命

文&#xff5c;刘俊宏 编&#xff5c;王一粟 2024开年&#xff0c;AI终端的号角已经由手机行业吹响。 OPPO春节期间就没闲着&#xff0c;首席产品官刘作虎在大年三十就迫不及待地宣布&#xff0c;OPPO正式进入AI手机时代。随后在开年后就紧急召开了AI战略发布会&#xff0c;…

Django学习笔记-创建第一个django项目

1.创建一个虚拟环境的python项目 2.点击解释器设置 3.安装django包 4.终端选择Command Prompt 5.创建django项目运行django-admin startproject demo01(自命名) 6.修改连接数据库为mysql 7.修改语言(中国汉语)和时区(亚洲上海)USE_TZ改为False,否则时区不生效 8.修改TEMPLA…

Vue | (四)使用Vue脚手架(上) | 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 &#x1f4da;初始化脚手架&#x1f407;创建初体验&#x1f407;分析脚手架结构&#x1f407;关于render&#x1f407;查看默认配置 &#x1f4da;ref与props&#x1f407;ref属性&#x1f407;props配置项 &#x1f4da;混入&#x1f4da;插件&#x1f4da;scoped样…

关于设备连接有人云的使用及modbus rtu协议,服务器端TCP调试设置

有人云调试 调试过程问题1. 关于modbus rtu协议,实质上有三种modbus基本原理modbus 格式2. 关于modbus crc16通信校验3. 关于在ubuntu阿里云服务器端,监听网络数据之调试mNetAssist4. 使用有人FAE传给的设置软件问题???之前的一个项目,再拿出来回顾下。 调试过程 先 要在有…