关键词:
文章目录
- 为了贤淑妻子,咳咳,贤淑才女,小码农必定让PWM控制时间
- 什么是脉宽调制 PWM
- SPWM 简介
- 用定时器和CPU模拟PWM输出
- 使用STC15W系列的硬件PWM功能
- 1.P2.1口配置IO模式 ==(强推挽输出)(写法多种看自己)== ==P2M1 &= ~0x02;P2M0 |= 0x02;==
- 2.PWM 寄存器是后来居上的。每次都需要先使能 P_SW2 寄存器才能写值。写入之后再关闭 P_SW2 ==P_SW2 |= 0x80; P_SW2 &= ~0x80;==
- 3.确定 PWM3 口的初始电平状态。PWMCFG ==PWMCFG = 0;==
- 4 .设置 PWM3 时钟来源为系统时钟,不分频。PWMCKS ==PWMCKS = 0;==
- 5.设置 PWM3 周期 1~32767, 为 1023 。 PWMCH(7bit) 、PWMCL(8bit) ==PWMCH = 0x03; PWMCL = 0xff;==
- 6 .设置 PWM3 输出管脚选择 P2.1 ,关闭 PWM3 的中断申请。(PWM3CR) ==PWM3CR = 0x00;==
- 7 .最后,启动 PWM 计数模块, PWM3 输出脚为 PWM 信号。(PWMCR) ==PWMCR &= ~0x82;PWMCR |= 0x82;==
- 8.主函数可以调用修改 PWM 的两次 IO 口的跳变时间 T1 和 T2 。来修改占空比。修改 PWM 的参数之前,必须关闭 PWM 的输出。否则可能会导致 PWM 电平颠倒
- 我们来实现一个呼吸灯的效果
为了贤淑妻子,咳咳,贤淑才女,小码农必定让PWM控制时间
什么是脉宽调制 PWM
中间动的线是电流线,电流通断,电流小就暗,电流大就亮。实际上准确的说是应该是功率线,因为导通电压不变 电流减少一半 功率自然就是一半
PWM 脉宽调制,实质上就是电路的“导通”和“关断”的时间比改变, 调整电压或者电流的大小。专业术语叫“占空比”。一般来说,导通和关断的速度要求很高。比如我们有些开关电源的工作模式,就是脉宽调制。通过调整变压器的变压时间,来保证输出电流功率足够。实现电压稳定。
PWM影响
开关电路 影响的是电流通断 电压要么是0 要么最大
积分微分 运放电路 输出结果就是影响电压
SPWM 简介
SPWM 是基于 PWM 规则,使输出波形成正弦波。在 PWM 周期固定的情况下,通过调整不同的脉宽,可以输出不同电压,最后看起来就是一个正弦波波形。
用定时器和CPU模拟PWM输出
新建工程
这个自己建
设置一个定时器,定时10us
void Timer0_Init()
// AUXR &= 0x7f;
// TMOD &= 0xf0;
// TMOD |= 0x01;
// TR0 = 1;
// TH0 = 0xf8;
// TL0 = 0x30;//定时1ms
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x02; //设置定时器模式
TL0 = 0xEC; //设置定时初值
TH0 = 0xEC; //设置定时重载值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1;
定时器中断服务函数里面,驱动 P2.1 脚输出 PWM
我们把它占空比设置成百分之40 通过变量来操作
void Timer0_Routine() interrupt 1
// //重装初值
// TH0 = 0xf8;
// TL0 = 0x30;//定时1ms
static u8 count = 0;//count在[0,255]之间
if(count<102)
P21 = 1;
else
P21 = 0;
count++;
使用STC15W系列的硬件PWM功能
1.P2.1口配置IO模式 (强推挽输出)(写法多种看自己) P2M1 &= ~0x02;P2M0 |= 0x02;
2.PWM 寄存器是后来居上的。每次都需要先使能 P_SW2 寄存器才能写值。写入之后再关闭 P_SW2 P_SW2 |= 0x80; P_SW2 &= ~0x80;
3.确定 PWM3 口的初始电平状态。PWMCFG PWMCFG = 0;
4 .设置 PWM3 时钟来源为系统时钟,不分频。PWMCKS PWMCKS = 0;
5.设置 PWM3 周期 1~32767, 为 1023 。 PWMCH(7bit) 、PWMCL(8bit) PWMCH = 0x03; PWMCL = 0xff;
6 .设置 PWM3 输出管脚选择 P2.1 ,关闭 PWM3 的中断申请。(PWM3CR) PWM3CR = 0x00;
7 .最后,启动 PWM 计数模块, PWM3 输出脚为 PWM 信号。(PWMCR) PWMCR &= ~0x82;PWMCR |= 0x82;
void PWM_Init()//PWM初始化
P2M1 = 0;
P2M0 = 0x02; //强推挽
P_SW2 |= 0x80; //允许访问XSFR
PWMCFG = 0; //配置PWM的输出初始电平为低电平
PWMCKS = 0; //选择PWM的时钟为Fosc
PWMCH = 0x03; //设置PWM周期
PWMCL = 0xff; //设置PWM周期
PWM3CR = 0x00; //选择PWM3输出到P2.1,不能使能PWM2中断
PWMCR &= ~0x82; //使能PWM信号输出
PWMCR |= 0x82; //使能PWM信号输出
P_SW2 &= ~0x80; //关闭访问XSFR
8.主函数可以调用修改 PWM 的两次 IO 口的跳变时间 T1 和 T2 。来修改占空比。修改 PWM 的参数之前,必须关闭 PWM 的输出。否则可能会导致 PWM 电平颠倒
//PWM修改驱动
void PWM_Modify_Drive(u16 data1,u16 data2)
P_SW2 |= 0x80; //修改PWM之前需要使能P_SW2
PWMCR &= 0x7f; //修改之前必须先关闭PWM使能
PWMCFG = 0; //配置PWM的输出初始电平为低电平
PWM3T1 = data1; //设置PWM3第一次反转的PWM计数
PWM3T2 = data2; //设置PWM3第二次反转的PWM计数
PWMCR |= 0x80; //修改之后重新允许PWM功能
P_SW2 &= ~0x80; //写入之后关闭P_SW2
完美的计数
糟糕的线条
再来一个测试组
我们来实现一个呼吸灯的效果
PWM呼吸灯波形
PWM呼吸灯波形
))
//PWM数据分配
void PWM_Allot()
//设置一个PWM变量
static xdata u16 PWM = 0;
static xdata u8 count = 0;
//呼吸灯是从零到最大,从最大到零,所以来个标志变量
static bit PWM_flag = 0;
count++;
if(count > 250)
count = 0;
if(!PWM_flag)
PWM++;
if (PWM > 1020)
PWM_flag = 1;
if(PWM_flag)
PWM--;
if(PWM<2)
PWM_flag = 0;
PWM_Modify_Drive(0,PWM);
身价过亿的女总裁对小码农说你按键会了吗(代码片段)
...按键不会吗?==**帝都富豪与富家总裁联动文章[身价过亿的帝都富豪对小码农说预处理学的不错](https://blog.csdn.net/diandengren/article/details/120679417?spm=1001.2014.3001.5502)**==独立按 查看详情
身价过亿的冰山御萝对小码农说你液晶能显示吗(代码片段)
...,为了知识怎么敢说液晶不显示啊==联动文章[身价过亿的冰山御萝的姐姐对小码农说你有大一点的液晶吗](https://blog.csdn.net/diandengren/article/details/120619762?spm=1001.2014.3001.5501)====我们要清楚液 查看详情
身价过亿的帝都富豪对小码农说预处理学的不错(代码片段)
...序环境和预处理==**帝都富豪与富家总裁联动文章[身价过亿的女总裁对小码农说你按键会了吗](https://blog.csdn.net/qq_42832862/article/details/120678330?spm=1001.2014.3001.5502)**==程序的翻译环境和执行环境详解编 查看详情
身价过亿的冰山御萝的姐姐对小码农说你有大一点的液晶吗(代码片段)
...样小的液晶呢,我不应该大一点吗==联动文章[身价过亿的冰山御萝对小码农说你液晶能显示吗](https://blog.csdn.net/qq_42832862/article/details/120619604?spm=1001.2014.3001.5501)= 查看详情
身价过亿的温柔萝莉对小码农说adc会采集吗(代码片段)
文章目录小码农电压使者怎么敢说不会采集模拟量与单片机的数字量之间的关系模拟量转换成数字的方式逐次比较器ADC的概念一个超级好的例子分享给你们STC内部ADC模块的寄存器这里我们需要采集电池电压(我们用P1.0采集)==... 查看详情
身价过亿的妖媚子对小码农说串口能传送我的爱吗?(代码片段)
文章目录小码农不敢接受妖媚子(想多活几年),但是串口还是可以传送数据的并行通信串行通信==同步:====异步:==串口通信:收发一个字节(只能用时间来同步)串口通... 查看详情
算法大神对小码农说环形链表可以单独拿出来讲讲(代码片段)
文章目录环链环形链表题目分析延伸问题:==1.为什么fast和slow会在环中相遇,会不会有这么一种情况呢。就是在环中一直交错永远遇不上?请证明一下。==证明:==这里就又衍生出了一个问题就是... 查看详情
身家过亿的帝都太子妃参加1024盛典,小码农弟弟为他献上定时器一篇(代码片段)
文章目录身家过亿的帝都太子妃参加1024盛典,小码农弟弟为他献上定时器一篇内部定时器/计数器中断1.定时/计数器的概念==核心图==定时1ms1.时钟12分频(我们使用传统51的速度)T0x12=0(也就是AUXR&am... 查看详情
身价过亿的灵仙子说你iic没写完也发?
文章目录小码农很硬气说没写完发咋了,你咬我啊I^2^C协议的简单应用I^2^C协议总体概述I^2^C协议规则==I^2^C协议的数据有效性====I^2^C协议的起始信号、停止信号====I^2^C协议的通讯格式==I^2^C协议的数据读写三种方式I^2^C协议单向发... 查看详情
身家过亿的帝都富豪来参加1024节专属盛典,小码农献上单链表一篇来庆祝盛典(代码片段)
文章目录身家过亿的帝都富豪来参加1024节专属盛典,小码农献上单链表一篇来庆祝盛典顺序表的缺陷链表链表的概念及结构链表的分类**1.单向或者双向****2.带头或者不带头****3.循环或者非循环**链表的实现无头单向单链表节... 查看详情
ce感恩品牌创始人,一个身价过亿的青年企业家
希文,GE感恩品牌的创始人,90年出生于江苏的一个商业世家。由于自小受到家族的熏陶,希文早早地学会了独立。在他成就自己事业的时候,虽然没有得到家族的支持,但母亲一直教导他把感恩当成自己事业的核心。... 查看详情
从高中缀学到身价过亿,这个80后值得喝彩!
这是微笑哥8月第2次人物分享。全文6600字,阅读请谨慎。作者|云游小生来源 | 纯洁的微笑转载授权(ID:keeppuresmile)一向怼天怼地的罗永浩,少有人能入他的眼。李想被怼上热搜,老罗头顶着炸药包就上:... 查看详情
回答好的,追加200分,推荐票房过亿的电影或你认为最好的电影
...好片了刚刚找了一个单刀直入正在下希望大家推荐点票房过亿的或者你看过的最震撼你的,你觉得最经典的还有一部好片叫最后的城堡呵呵看到最后挺感动的大家推荐吧什么类型的都可以爱情的惊悚的恐怖的剧情的喜剧的动作的... 查看详情
郭盛华如今现状如何呢?身价早过亿,网友:期待开直播
...公司关注度是极高的,浏览量达到了数十万。传闻郭盛华身价早已过亿,但他依然十分低调。郭盛华毕业于肇庆市工业贸易学校,计算机科班出身,专业非常对口。他建立亚洲之首联盟,击退国外黑客的侵袭,将不可一世的坏蛋... 查看详情
陈晓旭的一生:童年胆怯内向,演红楼梦一夜成名,做生意身价过亿
一直想做一个晓旭的专辑,讲述更多关于晓旭的生平,以及她与红楼梦的故事,分享给更多旭迷和红迷,但因之前陆陆续续写过许多,在我之前的文章里都能找到,这里就不再重复,今天分享一下晓旭人生各个时期的一些小故事... 查看详情
算法开启小码农队列血脉(代码片段)
队列队列的概念及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstInFirstOut)入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一... 查看详情
算法给小码农topk重瞳双目(代码片段)
文章目录Topk1000个数中找到最大的前十个方式1:方式2:==方式3:==Topk打印函数TopkPrint没有修改的接口见[算法给小码农堆魂器--铁血柔情](https://blog.csdn.net/diandengren/article/details/121218819?spm=1001.2014.300 查看详情
算法开启小码农双链表血脉(代码片段)
文章目录==也欢迎大家能来到我们小伙伴的社区[慧编程开源俱乐部](https://bbs.csdn.net/forums/mzt)==双链表双链表结构图双链表节点双链表初始化函数ListInit双链表尾插函数ListPushBack双链表打印函数ListPrint双链表尾删函数Lis... 查看详情