PWM脉宽调制

PWM(Pluse Width Modulation)简称脉宽调制,是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。广泛应用在从测量、通信到功率控制与变换的许多领域中。

PWM频率:指在1s钟内,信号从高电平到低电平再回到高电平的次数,单位Hz

PWM周期:T = 1/f

占空比:指一个脉冲周期内,高电平的时间与整个周期时间的比例,单位%

例如可以通过改变占空比来实现对灯光强度的控制。

代码(通过按键改变LED灯的亮度)

key.c

#include <sys.h>uchar stat = 0;void KeyScans()
{if(s4 == 0){Delay(10);if(s4 == 0){switch(stat){case 0: Work_Led(0x00); TR0 = 1; pwm_duty = 10; stat = 1; break;case 1: pwm_duty = 20; stat = 2; break;case 2: pwm_duty = 30; stat = 3; break;case 3: pwm_duty = 40; stat = 4; break;case 4: pwm_duty = 50; stat = 5; break;case 5: pwm_duty = 60; stat = 6; break;case 6: pwm_duty = 70; stat = 7; break;case 7: pwm_duty = 80; stat = 8; break;case 8: pwm_duty = 90; stat = 9; break;case 9: pwm_duty = 100; stat = 10; break;case 10: Work_Led(0xff); TR0 = 0; stat = 0; break;}}while(s4 == 0);}
}

main.c

//PWM脉宽信号的频率为100HZ
#include <sys.h>void InitTimer0();
uchar count = 0,pwm_duty;//占空比void main()
{Init_System();InitTimer0();Work_Led(0xff);while(1){KeyScans();}
}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){Work_Led(0x00);}if(count < 100 && count > pwm_duty){Work_Led(0xff);}if(count == 100){Work_Led(0x00);count = 0;}
}

sys.c

#include <sys.h>void Select_74HC138(uchar channel)
{switch(channel){case 0: P2 = P2 | 0X1F; break;case 4: 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;}
}void Init_System()
{Select_74HC138(4);P0 = 0XFF;Select_74HC138(5);P0 = 0X00;Select_74HC138(6);P0 = 0XFF;Select_74HC138(0);
}void Delay(uint ms)
{uint i;for(ms; ms > 0; ms--)for(i = 921; i > 0; i--);
}void Work_Led(uchar dat)
{Select_74HC138(4);P0 = dat;Select_74HC138(0);
}

sys.h

#ifndef _SYS_H_
#define _SYS_H_#include <STC15F2K60S2.H>
#include <intrins.h>sbit s4 = P3^3;#define uchar unsigned char
#define uint unsigned intextern unsigned char pwm_duty;//sys.c
void Select_74HC138(unsigned char channel);
void Init_System();
void Delay(unsigned int ms);
void Work_Led(unsigned char dat);//key.c
void KeyScans();#endif

蓝桥杯单片机学习记录(8)(PWM脉宽调制)相关推荐

  1. 蓝桥杯单片机学习13——NE555方波发生器频率测量

    NE555 简介 引脚图 原理图 真值表 工作原理 频率测量原理 定时器测量频率方法 代码实现 总结(一堆废话) 简介 NE555是一种高度稳定的控制器,内部用三个阻值为5KΩ的电阻分压,因此叫做55 ...

  2. 蓝桥杯单片机学习过程记录(二十七)超声波模块

    蓝桥杯单片机学习过程记录(二十七)超声波模块 超声波模块的学习,未验证. /* ------------------- 超声波模块 没模块未验证 2020.3.16 ----------------- ...

  3. 蓝桥杯单片机学习日记3-矩阵键盘的使用,线反转法,三步消抖,按键长按与短按

    此片文章用于记录蓝桥杯单片机的学习 篮球杯单片机上的矩阵按键原理图如下: 使用矩阵键盘时,要将跳线帽J5跳至KBD模式. 值得注意的是,若开发板上的单片机使用的为STC15,那么以上原理图适用.如果单 ...

  4. 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示

    一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...

  5. 蓝桥杯单片机学习过程记录(二十九)第八届国赛超声波测距机

    蓝桥杯单片机学习过程记录(二十九)第八届国赛超声波测距机 题目如下: 已完成 应用的内容: EEPROM. 定时器.数码管 led灯,独立按键 DA电压输出 超声波测距 /* ------------ ...

  6. 蓝桥杯单片机学习11——PCF8591A/DD/A转换芯片

    上期我们学习了DS1302实时时钟的基本使用,现在我们来学习PCF8591A/D&D/A转换芯片的相关内容 蓝桥杯单片机学习11--PCF8591A/D&D/A转换芯片 PCF8591 ...

  7. 蓝桥杯单片机学习12——AT24C02EEPROM存储芯片

    上期我们学习了PCF8591A/D&D/A转换芯片的相关内容,这么我们来介绍以下AT24C02 AT24C02 简介 命名格式 引脚描述 原理图 IIC通信原理 读写地址 存储地址 基本控制方 ...

  8. 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F

    一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...

  9. 蓝桥杯单片机学习过程记录(十四)第六届温度记录

    蓝桥杯单片机学习过程记录(十四)第六届温度记录 应用的内容: 定时器 数码管 时钟ds1302 温度传感器ds18b20 独立按键 结果实现的问题: 时钟和定时器两个时间走的不同,定时器5ms下200 ...

最新文章

  1. System.Web.Caching.Cache类 缓存 各种缓存依赖
  2. matlab jdbc mysql_Matlab连接MySQL(ODBC及JDBC驱动)
  3. Hbase API中常用类介绍和使用
  4. Oracle新建用户赋只读某几张表的权限
  5. linux u盘内容乱码,Linux挂载U盘,中文显示为乱码
  6. eclipse CTRL+F Find/Replace使用正则表达式
  7. java安全编码指南之:字符串和编码
  8. C语言面试题分享(3)
  9. [react] 如何更新组件的状态?
  10. 关于properties.load()出现的空指针异常
  11. php at,PHP的at符号
  12. npm卸载全局安装的第三方插件注意事项
  13. 兜兜转转,回到原点,Hello Mr.my yesterday
  14. VS中依赖库相对路径的配置及项目间依赖项
  15. 多“维”优化——前端高并发策略的更深层思考
  16. 放慢你的额脚步_放慢脚步使我成为更好的领导者
  17. Codeforces 887D - Ratings and Reality Shows
  18. 【Python】使用Zoho/Hotmail给单人/多人发送Email邮件,以及发发送附件
  19. UG NX二次开发(C#)-装配-删除阵列矩阵
  20. 智云通CRM:如何与客户建立信任关系?

热门文章

  1. 想去看演唱却总是抢不到票?教你用Python制作一个自动抢票脚本
  2. 解决word中插入visio对象的图片大小修改问题
  3. ACM之路(14)—— 线段树的日常(上)
  4. ES6-ES12所有特性详解
  5. 技术架构分析:攻克Dota2的OpenAI-Five
  6. 20210510_AI方面常见试题
  7. 米转经纬度_经纬度换算米(经纬度精度换算米数)
  8. 继续分享一些基础的Python编程2
  9. 开源 | 携程机票BDD UI Testing框架 - Flybirds
  10. python写采集程序_Python写的简易采集爬虫(蜘蛛)