51单片机的PWM控制呼吸灯

news2024/9/21 11:11:28

文章目录

  • 前言
  • 一、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.coloradmin.cn/o/1135181.html

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

相关文章

【MySQL--->内置函数】

文章目录 [TOC](文章目录) 一、日期函数二、字符串函数三、数学函数四、其他函数 一、日期函数 current_date();当前日期 current_time();当前时间 current_timestamp();当前时间戳 now();当前时间 date(‘date’);日期 date_sub(date,interval number second/minute/hour/d…

18.2 使用NPCAP库抓取数据包

NPCAP 库是一种用于在Windows平台上进行网络数据包捕获和分析的库。它是WinPcap库的一个分支&#xff0c;由Nmap开发团队开发&#xff0c;并在Nmap软件中使用。与WinPcap一样&#xff0c;NPCAP库提供了一些API&#xff0c;使开发人员可以轻松地在其应用程序中捕获和处理网络数据…

基于PyTorch的MNIST手写体分类实战

第2章对MNIST数据做了介绍&#xff0c;描述了其构成方式及其数据的特征和标签的含义等。了解这些有助于编写合适的程序来对MNIST数据集进行分析和识别。本节将使用同样的数据集完成对其进行分类的任务。 3.1.1 数据图像的获取与标签的说明 MNIST数据集的详细介绍在第2章中已…

基于springboot实现就业信息管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现就业信息管理系统演示 摘要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;就业信息管理系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人…

最新Unity DOTS教程之BlobAsset核心机制分析

最近DOTS发布了正式的版本, 我们来分享一下DOTS里面BlobAsset机制&#xff0c;方便大家上手学习掌握Unity DOTS开发。 BlobAsset 概叙 DOTS提供了BlobAsset机制来把数据生成高效的二进制数据。BlobAsset的数据是不可变的。BlobAsset只支持非托管类型数据。支持Burst编译器编译…

计时的vue写法

<el-input type"text" id"timetext" value"00时00分00秒" readonly></el-input> <el-button type"button" click"start()">开始</el-button> <el-button type"button" click"st…

用Visual Studio(VS)开发UNIX/Linux项目

目录 FTP是免不了的 正确设置头文件 组织项目结构 创建何种项目类型 FTP自动上传 大部分具有Windows开发经验的程序员会比较喜欢使用Visual Studio&#xff0c;而大部分Unix/Linux程序员则喜欢使用UltraEdit直接在主机上写代码。 为什么直接在主机上写代码呢&#xff0c;因…

软考系列(系统架构师)- 2015年系统架构师软考案例分析考点

试题一 软件架构&#xff08;质量属性效用树、架构风险、依够点、权衡点&#xff09; 【问题1】&#xff08;12分&#xff09; 在架构评估过程中&#xff0c;质量属性效用树&#xff08;utility tree&#xff09;是对系统质量属性进行识别和优先级排序的重要工具。请给出合适的…

第20章 Netty

20.1 说说IO的交互流程 难度:★ 重点:★ 白话解析 这道题主要是用来帮助理解后面题目的,IO交互主要分为两种:本地IO和网络IO。 1、本地IO:数据在磁盘上,通过系统调用read()方法读取数据到内核空间的缓冲区,然后再读取到 用户空间的缓冲区,这就是IO的交互过程。 2、网…

华为---DHCP中继代理简介及示例配置

DHCP中继代理简介 IP动态获取过程中&#xff0c;客户端&#xff08;DHCP Client&#xff09;总是以广播&#xff08;广播帧及广播IP报文&#xff09;方式来发送DHCPDISCOVER和DHCPREQUEST消息的。如果服务器&#xff08;DHCP Server&#xff09;和 客户端不在同一个二层网络(二…

【100天精通Python】Day71:Python可视化_一文掌握Seaborn库的使用《一》_数据分布可视化,数据关系可视化,示例+代码

目录 1. 数据分布的可视化 1.1 直方图&#xff08;Histograms&#xff09; 1.2 核密度估计图&#xff08;Kernel Density Estimation Plot&#xff09; 1.3 箱线图&#xff08;Box Plot&#xff09; 1.4 小提琴图&#xff08;Violin Plot&#xff09; ​编辑1.5 散点图&am…

蓝桥杯双周赛算法心得——铺地板(质因数)

大家好&#xff0c;我是晴天学长&#xff0c;这是第二周的蓝桥杯的双周赛&#xff0c;题可出的又好又灵活啊&#xff01;真不错&#xff01; 1) .铺地板 2) .算法思路 1.导入java.util包中的Scanner类&#xff0c;以从用户那里读取输入。 2.main方法是程序的入口点。 3.创建一…

单片机仿真设计打包项目

小伙伴们在仿真设计时会遇到各种各样的问题&#xff0c;网上的资料可能不全或者很贵。 这篇也不单纯为了打广告&#xff0c;主要是希望实实在在帮到学单片机的同学&#xff0c;大家不要一有问题就各种找dai zuo&#xff0c;做的好不好是一回事儿&#xff0c;关键是它费&#x…

成都无人机测绘公司 无人机测绘服务 无人机航测作业

无人机测绘是传统航空摄影测量方式的重要补充方式&#xff0c;它具有灵活、高效、适用范围广、生产周期短等优势&#xff0c;在小区域和飞行困难地区获取高分辨率图像具有明显的优势。目前&#xff0c;无人机测绘主要应用于土地监管、灾害应急处理、城市规划管理等方面。那么&a…

el-date-picker如何回显

后端传输过来起止时间&#xff0c;需要回显在 el-date-picker中 未修改前的代码&#xff1a; 问题整改&#xff1a;需要将时间转换为Date类型 修改后的代码 setTime(date){if (date!null){this.value.push(new Date(date.startTime))this.value.push(new Date(date.endTime))c…

一个Entity Framework Core的性能优化案例

概要 本文提供一个EF Core的优化案例&#xff0c;主要介绍一些EF Core常用的优化方法&#xff0c;以及在优化过程中&#xff0c;出现性能反复的时候的解决方法&#xff0c;并澄清一些对优化概念的误解&#xff0c;例如AsNoTracking并不包治百病。 本文使用的是Dotnet 6.0和EF…

前端工作流异常时候 yarn检查异常信息

HDSF中执行异常的原因查询&#xff0c;查看yarn的报错

Kafka - 消息队列的两种模式

文章目录 消息队列的两种模式点对点模式&#xff08;Point-to-Point&#xff0c;P2P&#xff09;发布/订阅模式&#xff08;Publish/Subscribe&#xff0c;Pub/Sub&#xff09; 小结 消息队列的两种模式 消息队列确实可以根据消息传递的模式分为 点对点模式发布/订阅模式 这两…

【Linux】tail命令使用

tail 命令可用于查看文件的内容&#xff0c;有一个常用的参数 -f 常用于查阅正在改变的日志文件。 语法 tail [参数] [文件] tail命令 -Linux手册页 著者 由保罗鲁宾、大卫麦肯齐、伊恩兰斯泰勒和吉姆梅耶林撰写。 命令选项及作用 执行令 tail --help 执行命令结果 参…

数据传输如何做才安全:保障隐私的5大秘诀!

在当今数字时代&#xff0c;数据传输安全和隐私保护变得越来越重要。随着网络攻击和数据泄露事件的增加&#xff0c;保护数据传输安全和隐私已经成为当务之急。以下是保障隐私的五大秘诀&#xff1a; 使用加密技术&#xff1a;加密技术是保护数据传输安全的最常用方法。通过使用…