51单片机的PWM控制呼吸灯

文章目录

  • 前言
  • 一、PWM引脚以及寄存器的配置
  • 二、呼吸灯逻辑
  • 总结


前言

hello 大家好这里是夏目学长的51单片机课堂,本篇博客是夏目学长观看B站up主学电超人的视频所写的一篇51单片机入门博客之51单片机PWM配置呼吸灯 ,我自己在学习这节课程的时候觉得这节课非常适合学完B站up主江科大视频的同学,适合去进阶自己的知识,掌握的更加牢固。PWM == 脉宽调制

本节的单片机主要是STC8G2K64S4单片机


一、PWM引脚以及寄存器的配置

首先我们要使得LED_R进行呼吸灯闪烁所以看原理图:
在这里插入图片描述

所以首先要配置P_SW2,因为我们要访问特殊的寄存器
最高位EAXFR置1 允许访问XFR寄存器
在这里插入图片描述
在这里插入图片描述
然后我们需要选择PWM0的时钟为系统时钟,并且初始化PWM0模块,使得可以驱动PWM0模块

在这里插入图片描述
当然配置这些我们都需要去看手册去学习配置,本身这些东西就很难,我们又是初学者,所以一定要耐下性子去学习
配置PWM0CKS—>配置为PWM0CKS = 0X00;

在这里插入图片描述
** 配置PWMSET—>配置为PWMSET |= 0X01; **

在这里插入图片描述
**配置PWM05CR—>配置为PWM05CR = 0X80; **
在这里插入图片描述
配置这个需要把ENO设置为1即可

配置PWM0C —>配置为PWM0C = 0x1000;
因为这两个寄存器是一起写的所以还需要一个宏定义:#define PWM0C (*(unsigned int volatile xdata *)0xFF00)
在这里插入图片描述
配置PWM05T1 —>配置为PWM05T1 = 0X0000;
配置PWM05T2 —>配置为PWM05T2 = 0X0001;
在这里插入图片描述
配置打开中断的寄存器
在这里插入图片描述


二、呼吸灯逻辑

/* PWM中断处理函数 */
void PWM_Isr() interrupt 22
{static bit dir = 1;//类似于C语言的bool值static int val = 0;if(PWMCFG01 & 0x08) {PWMCFG01 &= ~0x08;     //清中断标志if(dir){val++;if(val >= CYCLE) dir = 0;//加到周期就要反向}else{val--;if(val <= 1) dir = 1;//减到1就要从头开始也就是反向呼吸}PWM05T2 = val;}
}

所以利用PWM实现LED得呼吸灯的总代码是:

#include "stc8g.h"
#include "intrins.h"/* 寄存器定义 */
#define     PWM0C      (*(unsigned int volatile xdata *)0xFF00)
#define     PWM05T1    (*(unsigned int volatile xdata *)0xFF38)
#define     PWM05T2    (*(unsigned int volatile xdata *)0xFF3A)/* PWM中断处理函数 */
void PWM_Isr() interrupt 22
{static bit dir = 1;//类似于C语言的bool值static int val = 0;if(PWMCFG01 & 0x08) {PWMCFG01 &= ~0x08;     //清中断标志if(dir){val++;if(val >= CYCLE) dir = 0;//加到周期就要反向}else{val--;if(val <= 1) dir = 1;//减到1就要从头开始也就是反向呼吸}PWM05T2 = val;}
}void main()
{P0M0 = 0x00;   //设置P0.0~P0.7为双向口模式P0M1 = 0x00;/* PWM初始化设置 */P_SW2 |= 0x80; // 最高位EAXFR置1 允许访问XFR寄存器PWM0CKS = 0X00; // 选择PWM0的时钟为系统时钟PWMSET |= 0X01; // 使能PWM0模块PWM05CR = 0X80; // ENO=1把P0.5引脚设置为PWM引脚   INI=0初始电平是低电平PWM0C = CYCLE; // 写入周期值PWM05T1 = 0X0000; // 遇到这个值输出低电平PWM05T2 = 0X0001; // 遇到这个值输出高电平PWMCFG01 = 0X05; // PWM0CEN=1开启PWM定时器开始计数 EA = 1; // 打开总中断while(1){}
}

演示视频:

51单片机PWM实现呼吸灯


总结

这节课我看了三遍也觉得不为过,因为这一节让我感受到了学习单片机的痛苦,但是我虽然觉得痛苦但是我没有放弃去学习,后面估计还会继续去看这个视频去学习,确实会提升很大。

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

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

相关文章

2023.10.26-SQL测试题

employee表&#xff1a; department表&#xff1a; job表&#xff1a; location表&#xff1a; 题目及答案&#xff1a; -- (1).查询工资大于一万的员工的姓名(first_name与last_name用“.”进行连接)和工资-- select CONCAT(first_name,.,last_name) as 姓名 ,salary -…

个人用户免费,亚马逊正式推出 AI 编程服务 CodeWhisperer

IT 之家 4 月 14 日消息&#xff0c;亚马逊于 2022 年 6 月以预览版的形式&#xff0c;推出了 AI 辅助编程服务 CodeWhisperer。亚马逊于今天宣布该服务正式上线&#xff0c;并免费向个人用户开放。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、…

【计算机网络笔记】Web应用之HTTP协议(涉及HTTP连接类型和HTTP消息格式)

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

S5PV210裸机(七):Nand和iNand

本文主要探讨210Nand和iNand相关知识。 NandFlash 型号与命 K9F2G08&#xff1a;K9F为发行商,2G为Nand大小是2Gbit(256MB),08为Nand是8位(8数据线即接口为8位:传输数据,地址,命令) 功能 Nand是矩阵式存储,每块可存1bit位 …

FL Studio21.2最新订阅版本更新升级(详细功能介绍)

好消息&#xff01;FL Studio 21.2 在 10 月 26 日正式发布啦&#xff0c;它新增了 FL Cloud 在线采样库和 AI 音乐制作功能&#xff0c;还提供音乐分发到 Spotify、Apple Music 等主要音乐平台的服务。此外&#xff0c;还有新的音频分离功能、自定义波形颜色和新的合成器 Kepl…

Prompt设计与大语言模型微调

本文主要介绍了Prompt设计、大语言模型SFT和LLM在手机天猫AI导购助理项目应用。 ChatGPT基本原理 “会说话的AI”&#xff0c;“智能体” 简单概括成以下几个步骤&#xff1a; 预处理文本&#xff1a;ChatGPT的输入文本需要进行预处理。输入编码&#xff1a;ChatGPT将经过预处理…

Java实现SQL分页

在日常开发需要对数据进行分页&#xff0c;配置如下 <!-- baomidou --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</version></dependency> 在控…

C++求欧拉角(eigen库中暴露的一些问题)

不同顺序欧拉角转旋转矩阵对照公式 eigen库求欧拉角公式 分别试验eigen库自带的matrix.eulerAngles()函数&#xff0c;与根据上述公式推导的两种方法求欧拉角 eigen库求得欧拉角的范围一定是 x − > r o l l x->roll x−>roll方向在 [ 0 , π ] [0,π] [0,π]之间&am…

【算法题】割后面积最大的蛋糕

题目&#xff1a; 矩形蛋糕的高度为 h 且宽度为 w&#xff0c;给你两个整数数组 horizontalCuts 和 verticalCuts&#xff0c;其中&#xff1a; horizontalCuts[i] 是从矩形蛋糕顶部到第 i 个水平切口的距离 verticalCuts[j] 是从矩形蛋糕的左侧到第 j 个竖直切口的距离 请你…

tinymce输入框怎么限制只输入空格或者回车时不能提交

项目场景&#xff1a; 项目相关背景&#xff1a; tinymce输入框只输入空格或者回车时提交的空数据毫无意义&#xff0c;所以需要限制一下 无意义的输入&#xff1a; 解决方案&#xff1a; 因为tinymce输入框传到后端的数据是代码形式&#xff0c;所以不能直接.trem&#…

测试用例的设计方法(全):等价类划分方法

一.方法简介 1.定义 是把所有可能的输入数据,即程序的输入域划分成若干部分&#xff08;子集&#xff09;,然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类&#xff1a; 等价类是指某个输入域的…

当数据库遇上深度学习:AI DataLoader 助力因子管理模型训练全流程

深度学习模型有能力自动发现变量之间的关系&#xff0c;而这些关系通常是不可见的&#xff0c;这使得深度学习可以挖掘新的因子和规律&#xff0c;为量化投资策略提供更多可能性。在传统的量化策略开发流程中&#xff0c;通常会使用 Python 或第三方工具生成因子&#xff0c;并…

SpringBoot整合MyBatis-Plus详解(二)

文章目录 SpringBoot整合MyBatis-Plus详解&#xff08;二&#xff09;MyBatis-Plus简介条件构造器和常用接口⭐Wrapper介绍QueryWrapper&#xff08;Mapper接口提供的&#xff09;和QueryChainWrapper&#xff08;Service接口提供的&#xff09;案例1&#xff1a;组装查询条件案…

Unity报错:Microsoft Visual C# Compiler version

Unity报错:Microsoft Visual C# Compiler version 问题解决方案总结 问题 Microsoft Visual C# Compiler version 2.9.1.65535 (9d34608e) Copyright © Microsoft Corporation 切换版本或者使用老项目的时候可能会出现这个报错&#xff0c;这个报错就是项目设置的问题 …

【HarmonyOS】元服务卡片展示动态数据,并定点更新卡片数据

【关键字】 元服务卡片、卡片展示动态数据、更新卡片数据 【写在前面】 本篇文章主要介绍开发元服务卡片时&#xff0c;如何实现卡片中动态显示数据功能&#xff0c;并实现定时数据刷新。本篇文章通过实现定时刷新卡片中日期数据为例&#xff0c;讲述展示动态数据与更新数据功…

C++前缀和算法的应用:从栈中取出 K 个硬币的最大面值和 原理源码测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币。 每一次操作中&#xff0c;你可以从任意一个栈的 顶部 取出 1 个硬币&#xff0c;从栈中移除…

深入探究ASEMI肖特基二极管MBR60100PT的材质

编辑-Z 在电子零件领域中&#xff0c;肖特基二极管MBR60100PT因其出色的性能和广泛的应用而显得尤为关键。理解其材质不仅有助于我们深入理解其运作原理&#xff0c;也有助于我们做出更合适的电子设计。那么&#xff0c;肖特基二极管MBR60100PT是什么材质呢? 首先&#xff0c…

电厂数据可视化三维大屏展示平台加强企业安全防范

园区可视化大屏是一种新型的信息化手段&#xff0c;能够将园区内各项数据信息以图像的形式直观呈现在大屏幕上&#xff0c;便于管理员和员工进行实时监控、分析和决策。本文将从以下几个方面介绍园区可视化大屏的作用和应用。 VR数字孪生园区系统是通过将实际园区的各种数据和信…

Vue 父子组件传参、插槽

setup 函数中有两个主要的参数&#xff1a;props、context 。 props 用于接收父组件传递过来的数据&#xff0c;父传子。 context 指的是 setup 的上下文&#xff0c;它有三个属性&#xff1a;attrs、slots、emit 。 attrs 用于&#xff1a;当父组件传递过来的数据&#xff…

网络协议--BOOTP:引导程序协议

16.1 引言 在第5章我们介绍了一个无盘系统&#xff0c;它在不知道自身IP地址的情况下&#xff0c;在进行系统引导时能够通过RARP来获取它的IP地址。然而使用RARP有两个问题&#xff1a;&#xff08;1&#xff09;IP地址是返回的唯一结果&#xff1b;&#xff08;2&#xff09;…