51单片机PWM的控制(呼吸灯)

发布者:tyloo820最新更新时间:2018-06-19 来源: eefocus关键字:51单片机  PWM  呼吸灯 手机看文章 扫描二维码
随时随地手机看文章

一、PWM

Pulse Width Modulation脉冲宽度调制,简称PWM。

PWM(脉冲宽度调制)对模拟信号电平进行数字编码的方法,计算机只能输出0或5V的数字电压值而不能输出模拟电压,而我们如果想获得一个模拟电压值,则需通过使用高分辨率计数器,改变方波的占空比来对一个模拟信号的电平进行编码。

仍输出数字信号,因为满幅值的直流供电只有5V(1)和0V(0)两种。电压是以一种连接(1)或断开(0)的重复脉冲序列被夹到模拟负载上去的,连接即是直流供电输出,断开即是直流供电断开。通过对连接和断开时间的控制,只要带宽足够,可以输出任意不大于最大电压值的模拟电压。

     输出电压=(接通时间/脉冲时间)*最大电压值12

这里写图片描述

二、51单片机的Timer

作者用的单片机是STC89C52,其内部有3个16位Timer,分别为T/C0,T/C1,T/C2,通过配置相关寄存器即可实现Timer的功能控制。

控制PWM需要用到定时器来生成不同占空比的波形,采用定时器中断的方式。

相关寄存器:

1.IE寄存器

名称功能
0EX0外部中断0的中断允许位
1ET0Timer0的溢出中断允许位
2EX1外部中断1的中断允许位
3ET1Timer1的溢出中断允许位
4ES串行口中断允许位
5ET2Timer
6--
7EA中断允许总控制位

2. TCON寄存器

名称功能
0IT0外部中断0的触发方式选择位。功能和IE1类似
1IE0外部中断0的中断请求标志位。功能和IE1类似
2IT1外部中断1的触发方式选择位。当IT1=1时,为下降沿触发方式,也就是从高到低的跳变会触发外部中断1。当IT1=0时,为低电平触发,也就是单片机检测到该引脚电平为低时,会触发外部中断1
3IE1外部中断1的中断请求标志位。当IE1=1的时候,表示外部中断1被触发,正在请求单片机处理中断事件。当单片机相应中断,处理中断事件时,该位由单片机自动清零
4TR0启动定时器/计数器0启动位,功能和TR1类似
5TF0定时器/计数器T0溢出中断请求标志位。功能和TF1类似.
6TR1启动定时器/计数器1启动位,TR=1启动计时,TR=0停止计时
7TF1定时器/计数器T1溢出中断请求标志位。当T1溢出时,该位自动置1。单片机响应相应中断时,系统自动清零TF1,也可以程序清零

3. TMOD寄存器

控制Timer0/1的工作方式

名称功能
0M0工作方式选择位
1M1工作方式选择位
2C/T计数器模式和定时器模式选择位,C/T=1时,为计数器模式,C/T=0时,为定时器模式。C为counter的缩写,T为timer的缩写,这样方便理解
3GATET1(0)的启动源选择位,GATE=1时,用外部中断引脚INT1(INT0)上的高电平来启动T1(T0);GATE=0时,用TCON里的TR1(TR0)来启动T1(T0)。
4M0相似于0位
5M1相似于1位
6C/T相似于2位
7GATE相似于3位
M1M0工作方式
00方式0,由TH1(TH0)的8位和TL1(TL0)的低5位组成一个13位定时器。
01方式1,由TH1(TH0)的8位和TL1(TL0)的8位组成一个16位定时器。
10方式2,TL1(TL0)溢出后,TH1(TH0)的数值自动填充到TL1(TL0)。
11方式3,仅适用于T0,T0分成两个8位计数器,T1停止计数。

4. Timer0/1计数寄存器

TL0 
TL1 
TH0 
TH1

当定时开启后,TL0(TL1)自动跟随机器周期加一。当TL0(TL1)满了后,自动清零同时向TH0(TH1)进一位,不需要手动操作.

而当TL0(TL1)和TH0(TH1)都满了以后,此时如果定时中断和总中断都已经打开,那么就会发生溢出中断,同时这两个寄存器清零

三、运用PWM完成呼吸灯

1. 硬件电路

这里写图片描述

2. 软件驱动

unsigned char PWM_COUNT; //计数

unsigned int HUXI_COUNT;    //占空比更新时间

unsigned char PWM_VLAUE;    //占空比比对值

bit direc_flag;             //占空比更新方向


void timer0_init()

{

    TMOD=0x02;          //模式设置,00010000,定时器0,工作于模式2(M1=1,M0=0)

    TH0=0x47;               //定时器溢出值设置,每隔200us发起一次中断。

    TL0=0X47;

    TR0=1;                  //定时器0开始计时

    ET0=1;                  //开定时器0中断

    EA=1;                       //开总中断

    PWM_COUNT =0;

}

void time0() interrupt 1

{   

    PWM_COUNT++;

    HUXI_COUNT++;

    if(PWM_COUNT == PWM_VLAUE)      //判断是否到了点亮LED的时候

        LED = 1;                    //点亮LED

    if(PWM_COUNT == 10)             //当前周期结束

    {

        LED = 0;                    //熄灭LED

        PWM_COUNT = 0;              //重新计时

    }

    if((HUXI_COUNT == 600) && (direc_flag == 0))

    {                               //占空比增加10%

        HUXI_COUNT = 0;

        PWM_VLAUE++;

        if(PWM_VLAUE == 9)          //占空比更改方向

            direc_flag = 1; 

    }

    if((HUXI_COUNT == 600) && (direc_flag == 1))

    {                               //占空比减少10%

        HUXI_COUNT = 0;

        PWM_VLAUE--;

        if(PWM_VLAUE == 1)          //占空比更改方向

            direc_flag = 0; 

    }   

}

void main()

{

    HUXI_COUNT = 0;

    PWM_COUNT = 0;

    PWM_VLAUE = 5;

    direc_flag = 0;

    LED = 1;            //默认LED熄灭   

    timer0_init();      //定时器0初始化

    while(1);

}


关键字:51单片机  PWM  呼吸灯 引用地址:51单片机PWM的控制(呼吸灯)

上一篇:51单片机PWM程序详解
下一篇:89C52 PWM输出程序

推荐阅读最新更新时间:2024-03-16 16:06

51单片机最小系统原理及编程电路设计
本课以AT89S51单片机最小系统来教你如何实现单片机编程,该程序驱动单片机P1.7端口上的发光二极管不停闪烁,系统程序用keil 汇编语言编写,电路参考下图1所示。 《51单片机最小系统原理及编程电路设计》 首先来认识一下发光二极管(LED),发光二极管实物如下图2所示,发光二极管具有单项导电,体积小、耗电省、寿命长、响应速度快、显示清晰等特点,广泛用于电子电路中当作LED数码管、LED指示灯、LED电子显示屏,既然是51单片机最小系统我们当然只进行了最简单的电路设计与编程 图2: 《发光二极管介绍》 发光二极管导通时,产生一个正向的工作电流IF,工作电流根据发光二
[单片机]
<font color='red'>51单片机</font>最小系统原理及编程电路设计
构造一个51单片机的实时操作系统的方法
目前,大多数的产品开发是在基于一些小容量的单片机上进行的。51系列单片机,是我目前使用最多的单片机系列之一,有非常广大的应用环境与前景,多年来的资源积累,使51系列单片机仍是许多开发者的首选。针对这种情况,近几年涌现出许多基于51内核的扩展芯片,功能越来越齐全,速度越来越快,也从一个侧面说明了51系列单片机在国内的生命力。 多年来我们一直想找一个合适的实时操作系统,作为自己的开发基础。根据开发需求,整合一些常用的嵌入式构件,以节约开发时间,尽最大可能地减少开发工作量;另外,要求这个实时操作系统能非常容易地嵌入到小容量的芯片中。毕竟,大系统是少数的,而小应用是多数而广泛的。显而易见,μC/OS—II是不太适合于以上要求的,而Keil
[单片机]
51单片机-代码参考
前面的篇章我们都是在普及知识,真正使用好定时器还是需要重新拟定新的书写方案的,我们参考了宋老师的书写方式,在他的代码基础上我们进行小修改成就实用的工程代码。 1.代码解析 void ConfigTimer0(unsigned int ms) { unsigned long tmp; //临时变量 tmp = 11059200 / 12; //定时器计数频率 tmp = (tmp * ms) / 1000; //计算所需的计数值 tmp = 65536 - tmp; //计算定时器重载值 tmp = tmp + 13; //补偿中断响应延时造
[单片机]
51单片机之寄存器-3.2单片机中断
讲单片机中断之前,先来个通俗的例子。假如今天有快递来,你要知道快递什么时候到有两种方式,第一种,每隔一分钟你到楼下看快递到了没,这样总有一次能碰到快递。第二种,快递来了,给打电话,然后你去取快递。第一种称为查询法,很明显这种方式很浪费体力。第二种就是中断了,比较轻松。这样我们来详细的探讨一下这个过程。假如你在家里正在看电影,忽然电话响了通知你取快递,于是你把电影暂停,下楼取快递,然后回来继续看电影,如下图所示 图1 日常生活中的中断 这个就是日常生活中的中断场景。我们再概述一下这个过程,当你正在处理某件事情的时候(看电影),外界发生了比较急的事件请求(电话通知快递到了), 你暂停当前的工作(看电影),转而去处理这个比较急的
[单片机]
<font color='red'>51单片机</font>之寄存器-3.2单片机中断
LCD显示的c51单片机频率计
课程设计题目:LCD显示的单片机频率计 课程设计任务及要求: 任务:用单片机的定时器/计数器测量外部脉冲的频率,并使用LCD1602显示结果。 要求:频率范围为1Hz~500KHz,精度为 1Hz。 LCD显示的单片机频率计 一 课题目标 本课题是用51系列单片机来实现频率计,并利用LCD1602液晶显示器来显示所测频率值。 二 课题分析 LCD频率计是利用十进制数字显示被测信号频率的数字测量仪器。根据定义,频率就是在1s内信号变化的周期数。在一个单片机系统中,对频率的测量就是要对外部信号的计数,每到1s,将计数所得的数值送到显示器上。在这里,我们重要是学习和掌握如何使用LCD1602液晶显示器来显示所测频率。这里要求
[单片机]
LCD显示的c<font color='red'>51单片机</font>频率计
51单片机学习笔记———4.两个按键控制LED小灯
两个按键的控制LED的程序: /* * @Author: 王云龙 * @Date: 2020-02-23 12:48:51 * @Last Modified by: 王云龙 * @Last Modified time: 2020-02-23 15:37:24 */ #include reg52.h #define LED P0;//设置LED引脚 sbit KEY1 = P3^4;//设置按键1引脚 sbit KEY2 = P3^5;//设置按键2引脚 void LightLed1();//点亮方式1 void LightLed2();//点亮方式2 void delay(unsigned int n);//n
[单片机]
采用LMV1090放大器和AT89C51单片机改进型噪声抑制话音采集方案
机载超短波电台在战斗机中承担着与地面塔台及友机之间的通话任务,其通话质量的高低直接影响飞行员的作战与训练质量。目前在飞机上大量使用的还是老式的模拟话音电台,此种电台缺少语音增强装置,对于战斗机座舱内强烈的噪声缺少针对性的抑制措施。随着新阶段飞行任务的增大,低清晰度的通话质量势必会对飞行任务的完成及飞行员的身心健康造成较大的影响。本文拟通过新型的模拟语音处理方法,重新设计话音采集及控制部分,提高采集语音的信噪比,改善机载超短波电台的通信质量。 1、 机载电台话音采集装置 某型飞机超短波电台由控制器、收发机、功率附加器、射频转换器及通信天线构成。该电台的话音采集装置主要包括麦克风和控制器,其中控制器通过座椅连接器与飞行帽上的耳机及
[单片机]
采用LMV1090放大器和AT89C<font color='red'>51单片机</font>改进型噪声抑制话音采集方案
#51单片机#蓝牙模块(ATKSPPHC06从机串口)的使用方法
#include AT89X51.H #include intrins.h // 函数原形定义 #define uchar unsigned char #define uint unsigned int void main (void); // 主函数 void LED_OUT(uchar X); // LED单字节串行移位函数 void LED_print (uchar p, uchar x) ; unsigned char code LED_0F ; // LED字模表 sbit DIO = P1^0; //串行数据输入 sbit RCLK = P1^1; //时钟脉冲信号 上升沿有效 sbit SCLK =
[单片机]
#<font color='red'>51单片机</font>#蓝牙模块(ATKSPPHC06从机串口)的使用方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved