基于MS16F3211芯片的触摸控制灯的状态变化和亮度控制(11.17,PWM控制与状态切换)

1.今天做了什么

2.过程思路

看了两天文档才慢慢看懂,有点满了

现在接着前一天的思路,可以通过代码来控制pwm的占空比。我这里采用的是TP0定时器

初步控制pwm的占空比

void LED_PWM_OPEN(void) 
{//占空比 PWM1-Y-PB2PWM1DH = 0X0F;PWM1DL = 0X00; //占空比 PWM01-W-PB1PWM0DTH = 0X01;PWM0DTL = 0X00; //占空比 PWM0-BLUE-PB0 //PWM0DH = 0XFF; //PWM0DL = 0X00; //周期 PWM0PH = 0X00; PWM0PL = 0X00; //PB0输出 PWMPSCON = 0x04;//--11 1111 :PB0-OUT	 //pwm0c PWM0C = 0xc2;//PWM0C_Buf;	//11-- 0011 :Fosc/2 //PWM0EN PWM0EN = 0x9d;//PWM0EN_Buf;	//1-01 1101 :TP0-EN;8BIT;PWM0X-EN;独立模式;PWM-EN  FTP0IF = 0;//TP0 溢出中断标志位,TP0 溢出时被置位,软件清除
FTP0IE = 1;//TP0 溢出中断使能位(1=使能,0=失能)
FTP0EN = 1;//启动 TP0 定时器
FGIE = 1;//开全局中断}

然后在中断函数中调用

void interrupt myIsr(void)
{if (FTP0IF){FTP0IF = 0;}//----User Code End----
}

思路简略得写在注释了,以后总结再详细一点。

设定PWM的值可以在3s内由最高降到最低

现在需要设定PWM的值可以在3s内由最高降到最低,那么通过设置这个定时器每1ms中断一次,占空比每1ms减少0.03%。达到每1s占空比减少30%就可以达到效果

这里PWM0PH和PWM0PL的值在定时器初始化均设至为0,所以

        PWM0X的占空比等于=占空比设定的值*PWMX0工作时钟源周期
                                           =占空比设定的值*1/PWMX0工作时钟源频率

这里通过寄存器手册可以得知占空比可以设定的最大值为0XFFF,

这个寄存器可以设定的最大值为4095,定时器的频率设置为Fosc/2,也就是1950HZ/2=975HZ

也就是一秒钟中断957次,此时把重装载值设定为1170,与4095之间的差值为975X3。在定时器内对PWM0DL和PWM0DH的值进行调整,那么在3s后占空比就会达到最亮

通过按键控制PWM输出变化

原本的思路是在按键扫描函数中设置FTP0IF = 1,然后可以执行

这一段代码来对PWM的调节。但是结果并不像想象中那个样子,现象为灯的颜色不变,长按或者短按按键均无反应。

猜想1:是不是按键扫描函数的中断执行的太慢了,导致PWM的值不能及时地累加,导致现象不明显,目前未排除

猜想2:TP0的定时器中断一直打断TIMER定时器的中断,对应中断函数无法执行。不过发现其他按键依旧可以顺利执行,排除这个可能。

暂且不管上面,想到个方法采用了在按键扫描中对FTPOIE这个TP0定时器的中断溢出标志位进行改变,相当于控制定时器的开启和关闭。如果点按的话由于事件过短定时器的开启和关闭就一瞬间,对亮度没什么影响。

3.开发中遇到的卡点

现在的问题是灯会呼吸一次,并不是渐灭或者渐亮的状态,应该是逻辑还有问题。

4.想问的问题

这个芯片的Fcpu和Fosc多大

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

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

相关文章

基于 gin + websocket 即时通讯项目 (一、项目初始化)

基于 gin websocket 即时通讯项目 1、安装环境与初始化 搜索各种包官网 https://pkg.go.dev/ 1.1 安装 grom go get -u gorm.io/grom 1.2 安装 MySQL 驱动 go get -u gorm.io/driver/sqlite go get -u gorm.io/driver/mysql 1.3 安装 gin go get -u github.com/gin-gonic/gi…

​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​

软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】 课本里章节里所有蓝色字体的思维导图

代码随想录算法训练营第三十九天【动态规划part02】 | 62.不同路径、63. 不同路径 II

62.不同路径 题目链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 求解思路: 动规五部曲 确定dp数组及其下标含义:dp[i][j] 表示从(0,0)出发,到(i,j&#x…

课程设计(毕业设计)—基于机器学习(CNN+opencv+python)的车牌识别—(可远程调试)计算机专业课程设计(毕业设计)

基于机器学习(CNNopencvpython)的车牌识别 下载本文机器学习(CNNopencvpython)的车牌识别系统完整的代码和参考报告链接(或者可以联系博主koukou(壹壹23七2五六98),获取源码和报告)https://download.csdn.net/download/shooter7/88548767此处…

腾讯云服务器租用价格,腾讯云服务器价格流量怎么算?

首先,让我们来看看腾讯云服务器租用价格。根据您的需求不同,腾讯云提供了多种不同的配置选项,从轻量级应用服务器到高性能的GPU服务器,都可以满足您的需求。以下是一些常见的腾讯云服务器租用价格: 一、腾讯云服务器租…

代码随想录 Day49 单调栈01 LeetCode LeetCodeT739每日温度 T496 下一个最大元素I

前言 折磨的死去活来的动态规划终于结束啦,今天秋秋给大家带来两题非常经典的单调栈问题,可能你不清楚单调栈是什么,可以用来解决什么问题,今天我们就来一步一步的逐渐了解单调栈,到能够灵活使用单调栈.注意以下讲解中,顺序的描述为 从栈头到栈底的顺序 什么时候用单…

解决:虚拟机远程连接失败

问题 使用FinalShell远程连接虚拟机的时候连接不上 发现 虚拟机用的VMware,Linux发行版是CentOs 7,发现在虚拟机中使用ping www.baidu.com是成功的,但是使用FinalShell远程连接不上虚拟机,本地网络也ping不通虚拟机&#xff0c…

STM32 HAL库函数HAL_SPI_Receive_IT和HAL_SPI_Receive的区别

背景 前段时间开发一个按键板驱动,该板用的STM32F103系列单片机,前任工程师用STM32CubeMX生成的工程,里面全是HAL库调用,我接手后,学习了下HAL库的用法,踩坑不少,特别是带IT后缀的函数&#xf…

Typecho用宝塔面板建站(保姆级教程)

提前准备: 1 已备案域名 注意:在腾讯云备案的域名部署阿里云服务器的话还需要在阿里云备案,反之亦然 2 服务器 服务器操作系统设置为windows 服务器实例设置:依次开放8888/888/443/3000-4000/21/22端口 个人用的阿里云,到安全组配…

带您识别RJ45网口连接器/网口插座口的LED灯的平脚/斜脚,带弹/不带弹细节区分

Hqst华强盛(盈盛电子)导读:网口连接器,网口插座,也叫网口母座,因为产品规格众多,常常因为细小差别,耽误工程设计级或者生产排期延误,今天就带大家一起来认识下平脚RJ45网口连接器/网口插座与斜脚…

51.Sentinel微服务保护

目录 (1)初识Sentinel。 (1.1)雪崩问题及解决方案。 (1.1.1)雪崩问题。 (1.1.2)解决雪崩问题的四种方式。 (1.1.3)总结。 (1.2)…

Git 简介及使用

前言 假设有这样一个场景,老板让员工做一个档案,员工这个档案做好了之后交给老板看,此时老板不满意,又让回去改,改完给老板看,但是老板又不是很满意,就这样改了又改,给老板看过之后&…