蓝桥杯之单片机学习(十)——PWM脉宽调制信号的发生与控制

2023-05-16

文章目录

  • 一、训练任务
    • 1.1 具体要求
  • 二、代码展示
  • 三、一些介绍

一、训练任务

在CT107D单片机综合训练平台上,利用PWM脉宽信号实现独立按键S7对L1指示灯亮度变化的控制。

1.1 具体要求

  1. PWM脉宽信号的频率为100Hz
  2. 系统上电后L1指示灯处在熄灭状态
  3. L1指示灯有4中亮度模式,分别是完全熄灭,10%的亮度、50%的亮度和90%的亮度
  4. 按下S7按键,循环切换L1指示灯的四种亮度模式
    在这里插入图片描述

二、代码展示

#include <reg52.h>

typedef unsigned int uint;
typedef unsigned char uchar;

sbit L1 = P0^0;
sbit S7 = P3^0;

//配置HC138
void SelectHC138(uchar channel)
{
	switch(channel)
	{
		case 4:    //LED
			P2 = (P2 & 0X1F) | 0X80;
		break;
		case 5:    //蜂鸣器和继电器
			P2 = (P2 & 0X1F) | 0Xa0;
		break;
		case 6:    //位码
			P2 = (P2 & 0X1F) | 0Xc0;
		break;
		case 7:    //段码
			P2 = (P2 & 0X1F) | 0Xe0;
		break;
	}
}

//*********定时相关函数*********
uchar count = 0;
uchar pwm_duty = 0;
void InitTimer0()
{
	TMOD = 0x01;
	TH0 = (65535 - 100) / 256;
	TL0 = (65535 - 100) % 256;
	
	ET0 = 1;
	EA = 1;
}

void ServiceTimer0() interrupt 1 
{
	TH0 = (65535 - 100) / 256;
	TL0 = (65535 - 100) % 256;
	
	count++;
	if(count == pwm_duty)
	{
		L1 = 1;
	}
	else if(count == 100)
	{
		L1 = 0;
		count = 0;
	}
}
//*******按键相关函数********
uchar stat = 0;
void Delay(uint t)
{
	while(t--);
}


void ScanKeys()
{
	if(S7 == 0)
	{
		Delay(100);
		if(S7 == 0)
		{
			switch(stat)
			{
				case 0:
					L1 = 0;
					TR0 = 1;  //打开寄存器
					pwm_duty = 10;
					stat = 1;
				break;
				case 1:
					pwm_duty = 50;
					stat = 2;
				break;
				case 2:
					pwm_duty = 90;
					stat = 3;
				break;
				case 3:
					L1 = 1;
					TR0 = 0;
				  stat = 0;
				break;
			}
			while(S7 == 0);
		}
	}
}

//初始化系统
void Initsys()
{
	SelectHC138(5);
	P0 = 0X00;//关闭蜂鸣器和继电器
	SelectHC138(4);
	P0 = 0XFF;//关闭LED
}

void main()
{
	InitTimer0();
	Initsys();
	SelectHC138(4);
	while(1)
	{
		ScanKeys();
	}
}


三、一些介绍

占空比:在一个周期里面,高电平所占的比率

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯之单片机学习(十)——PWM脉宽调制信号的发生与控制 的相关文章

  • stm32中pwm频率和占空比设置

    对于72M频率来说 xff0c 计算pwm频率是 xff1a 频率 xff1a Fpwm 61 72M arr 43 1 psc 43 1 单位 xff1a Hz 占空比 xff1a duty circle 61 TIM3 gt CCR1
  • DSP28335的PWM信号

    DSP的PWM信号 简介 DSP28335共12路16位的ePWM xff0c 能进行频率和占空比控制 ePWM的时钟TBCLK 61 SYSCLKOUT HSPCLKDIV CLKDIV PWM信号频率由时基周期寄存器TBPDR和时基计数
  • STM32实战-高级定时器带死区的互补PWM输出

    前言 xff1a 平时我们设计点击驱动电路时 xff0c 一般会采用npn和pnp三极管 xff0c 来控制电机的导通和关闭 xff0c 但是三级管内部自带电容 xff0c 断电后不会立马断掉 xff0c 会经过很小的一段时间才会放电完毕
  • TM4C123系列(三)————PWM输出

    一 实验介绍 使用PWM控制板载LED绿灯与蓝灯交替呼吸闪烁 二 PWM介绍 TM4C123有两个PWM模块 xff0c 每个模块有四个发生器和一个控制模块 xff0c 每个发生器可以产生两路PWM输出 xff0c 一共可以输出16路PWM
  • Simulink 使用C语言发PWM波 (一)

    1 在matlab中安装C语言模块mingw 2 在simulink中引用S Function模块 和S Function Examples模块 3 使用S Function Examples模块创建C文件 双击S Function Exa
  • STM32CubeIDE---HAL库PWM使用速记

    一 如何计算 理论分析 xff1a HAL库函数之呼吸灯 PWM波 简书 jianshu com 预分频系数 PSC 自动重装载值 ARR 捕获 比较寄存器值 CCR 频率计算 xff1a 定时器频率 PSC 43 1 ARR 43 1 占
  • 【STM32】STM32F103C8T6+L298N通过PWM控制直流电机转速

    系列文章目录 STM32 新建工程模板及配置 STM32 STM32与PC端 HC 06 ROS进行USART串口通信 ROS ROS上位机使用Serial库和boost asio库与STM32进行USART通讯 STM32 STM32F1
  • 浅谈PWM控制电机

    先简单说说这几种模式 1 双极模式 xff0c 即电枢电压极性是正负交替的 xff0c 优点 xff1a 能正反转运行 xff0c 启动快 xff0c 调速精度高 xff0c 动态性能好 xff0c 调速静差小 xff0c 调速范围大 xf
  • PX4飞控之PWM输出控制

    PX4飞控之PWM输出控制 多旋翼电调如好盈XRotor xff0c DJI通用电调等都支持PWM信号来传输控制信号 常用的400Hz电调信号对应周期2500us xff0c 一般使用高电平时间1000us 2000us为有效信号区间 xf
  • STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop

    数字锁相环 Digital phase locked loop数字锁相环是一个通过PID算法使PWM调频改变相位 xff0c 以达到与目标模型同频同相或同频稳定相位差的目的 xff0c 在实际应用中较为常见 xff0c 其中包括齿轮对接 远
  • stm32使用PWM播放音频

    我之前研究过STM32的DAC播放wav音频文件 xff0c 今天突然发现使用PWM也可以实现WAV文件的播放 xff0c 让在大开了眼界 xff0c 转载如下 xff1a stm32使用PWM播放音频 pwm stm32 dac pcm
  • PWM互补输出,以及死区时间计算

    本文基于野火例程进行解说 实验内容 本次实验输出一对互补的pwm波 xff0c 且进行死区时间的计算说明 代码 互补输出对应的定时器初始化代码 xff1a bsp advance tim c span class token comment
  • Arduino接收航模遥控器RC接收机的PWM数据

    本文将介绍如何使用Arduino读取RC接收机的PWM数据 1 硬件部分 我的设备 xff1a 接收机 遥控器发射机 将Arduino Nano的引脚 D8 D11 接到接收机的1 4通道 xff0c 接收机上的电源正极和负极连接到Ardu
  • 魔方机器人之下位机编程-----两种串口通信方式的比较

    由于上位机软件的串口通信部分和魔方复原算法部分已经完成 接下来的一步就是如何将魔方复原的具体步骤 字符串的形式 通过串口发送给单片机MC9S12XS128单片机了 调试的过程中 采用了两种串口通信的方式 一种是查询的方式 另一种是中断的方式
  • STM32 使用TIM2_CH1(PA15) 输出10K PWM信号

    PA15 gt TIM2 Remap CH1 1 apb init RCC APB1PeriphClockCmd RCC APB1Periph TIM2 ENABLE RCC APB2PeriphClockCmd RCC APB2Perip
  • PMIC驱动之—PMIC硬件相关知识

    PMIC 电源管理集成电路 Power Management IC 在之前项目中 驱动最小系统 对于PMIC这块儿很懵懂 故抽时间查看一些优秀博文及资料 加强对电源管理的理解 本文介绍 PMIC 硬件电路相关的一些知识 在此作一些阶段性的学
  • 快速学习Stm32舵机控制板控制多个舵机运动以及调速

    本次分享stm32对多个舵机的控制 之前讲解过单个舵机的控制 以及控制原理 定时器的使用和pwm的输出来控制一个舵机的角度转向 这次就和大家分享一下多个舵机的控制以及调速 利用单片机实现对 8 个舵机的同时控制 掌握多个舵机控制程序实现方法
  • 一起学nRF51xx 9 -  pwm

    前言 上一讲我们学习了nrf51822定的器的使用 那行如何用定时器实现PWM输出呢 NRF51的time模块不支持 PWM 功能 不可我们可以通过定时器 PPI GPIOTE模块一起工作的方式在NRF51XX上产生 PWM 信号 下面以使
  • STM32通用定时器使用详解

    1 通用定时器基本介绍 通用定时器包括TIM2 TIM3 TIM4和TIM5 STM32通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成 每个定时器都是完全独立的 没有互相共享任何资源 它们可以一起同步操作 定时器可以进行定
  • BeagleBone Black (v4.14) 上的 PWM 芯片到引脚映射

    关于如何在较新版本的内核上配置 Beaglebone 进行 PWM 的信息非常少 我按照以下指示进行操作BeagleBone Black v4 14 上的 PWM https stackoverflow com questions 5020

随机推荐

  • JAVA中toString方法的作用

    一句话概括 xff1a 就是可以把实体类 xff0c 或者其他类 xff0c 以字符串或者规定的方式输出 xff0c 如果用了toString那么就会这样输出User 否则就会输出 xff1a 因为它是Object里面已经有了的方法 xff
  • Android.mk 和 CMakeLists.txt 的转换规则

    Android mk 和 CMakeLists txt 都是用来构建 Android 应用程序或库的工具 但是它们有不同的语法和规则 xff0c 所以将一个 Android mk 文件转换成一个 CMakeLists txt 文件需要一些注
  • Dronekit-python连接飞控报错dronekit.APIException: Timeout in initializing connection.

    将命令改为python connect py connect dev ttyUSB0 就可以了 与飞控的连接串口因各自而异 xff0c 我得是ttyUSB0 有的人的是ttyAMA0等等
  • C++代码小白从零开始手敲学习(2)

    1 为什么C 43 43 有多种整型 xff1f 能够根据程序的具体要求来选择最合适的整型 2 声明与下述描述相符的变量 include lt iostream gt int main short a 61 80 unsigned int
  • 大学生自制ROS无人机飞行练习

    目前是喊了舍友来帮我 xff0c 不用像之前那样单飞了 xff0c 真的忙不过来 xff0c 没想到刚上大三就这么累 xff0c 都怪那个线下机器人比赛延期还改成了线上 导致我时间安排得很紧 怎么说呢 xff0c 其实自学无人机挺快的 xf
  • 蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍

    原文链接 xff1a 蓝牙协议分析 3 蓝牙低功耗 BLE 协议栈介绍 系列索引 xff1a 蓝牙协议分析 1 基本概念 蓝牙协议分析 2 协议架构 目录 1 前言 2 Why 3 How和What 4 Physical Layer 5 L
  • 在Ubuntu20.04运行VINS-Fusion

    准备工作 xff1a 虚拟机 ubuntu xff1a 20 04 ROS xff1a Neotic Ubuntu20 04 43 ROS Noetic的安装与配置可以参考这篇文章 xff0c 以下步骤在完成上述安装的基础上进行 一 安装c
  • 英伟达nx开发板USB口只能供电不能传输

    今天使用英伟达的NVIDIA Xaiver 开发板时发现连不上键鼠了 xff0c 屏幕也没反应 xff0c 想了很多办法 电源开关是正常的 xff0c 可正常给便携式屏幕供电但是就是不能连接键鼠 xff0c HDMI接口也无反应 我都要以为
  • 串口的不同发送方式

    一 中断的直接收发 Res 61 USART ReceiveData USART1 读取接收到的数据 USART SendData USART1 Res 发送数据 void USART1 IRQHandler void 串口1中断服务程序
  • input上传图片

    上传图片这一个功能element plus中虽然有这个组件 xff0c 但是自定义功能这块还是有点麻烦 xff0c 所以自己尝试着写了一个上传图片的组件 如下图所示 xff0c 右边是一个加号 xff0c 点击唤起上传功能 xff0c 左边
  • UART、RS232、RS485协议简单总结

    UART xff1a uart帧格式 空闲位 xff1a 即空闲的状态 高电平 起始位 xff1a 低电平 数据位 xff1a 5 8位自定义长度 校验位 xff1a 奇偶校验 停止位 xff1a 高电平 高低电平约定 xff1a uart
  • 系统调用的概念和作用

    一 什么是系统调用 xff0c 有何作用 1 概念 用户接口 命令接口 允许用户直接使用 程序接口 允许用户通过程序间接使用 xff1a 由一组系统调用组成 系统调用 系统调用 是操作系统提供给应用程序 xff08 程序员 编程人员 xff
  • 49.在ROS中实现local planner(2)- 实现Purepersuit(纯跟踪)算法

    48 在ROS中实现local planner xff08 1 xff09 实现一个可以用的模板实现了一个模板 xff0c 接下来我们将实现一个简单的纯跟踪控制 xff0c 也就是沿着固定的路径运动 xff0c 全局规划已经规划出路径点 x
  • 计算机操作系统保研面试题整理(自用)

    目录 1操作系统 1 什么是操作系统 2 操作系统的作用 3 操作系统的特征 4 进程 4 1 进程的定义 4 2 进程与程序的区别 4 3 进程的状态 5 线程 5 1 线程的定义 5 2 线程的实现方式 5 3 进程与线程的区别 5 4
  • 计算机网络保研面试题整理(自用)

    目录 计算机网络 第一章概述 1 1 协议和服务之间的联系和区别 1 2 计算机网络有哪些层 xff1f 1 3 面向连接的服务以及无连接的服务 1 4 对等层 协议栈 实体 协议概念 第二章物理层 2 1 物理层作用 2 2 物理层主要设
  • 数据结构保研面试题整理(自用)

    目录 第一章绪论 1 1 时间复杂度 1 2 空间复杂度 1 3 数的存储结构 1 4 数的逻辑结构 1 5 用循环比递归的效率高吗 xff1f 第二章线性表 2 1 顺序表和链表的比较 2 2 头指针和头结点的区别 xff1f 第三章栈和
  • 【C语言】宏定义和带参宏定义

    宏定义是在编程中经常使用的一个模块 xff0c 其优点在于当写的代码量比较大的时候方便修改检查 xff0c 可以做到改一变 百 一 宏定义 宏定义是用宏名来表示一个字符串 xff0c 在宏展开时又以该字符串取代宏名 xff0c 这只是一种简
  • Bing搜索没法用的解决办法(附Google和edge的详细解决步骤)

    文章目录 前言Edge浏览器的解决办法Google浏览器的解决办法其他 前言 从12月16日下午 xff0c bing搜索没法正常使用 xff0c 可能是DNS的污染 xff0c 或被墙等可能 xff0c 以下是解决方案 xff0c 亲测有
  • 嵌入式(九)——Linux开发工具(vim的使用)

    文章目录 一 嵌入式Linux开发系统二 vi vim gvim xff1a 文本编辑器三 vim的使用四 vim替代品 一 嵌入式Linux开发系统 文本编辑器 vim 43 vscode xff08 使用并配置vim 安装及使用插件 4
  • 蓝桥杯之单片机学习(十)——PWM脉宽调制信号的发生与控制

    文章目录 一 训练任务1 1 具体要求 二 代码展示三 一些介绍 一 训练任务 在CT107D单片机综合训练平台上 xff0c 利用PWM脉宽信号实现独立按键S7对L1指示灯亮度变化的控制 1 1 具体要求 PWM脉宽信号的频率为100Hz