51_PWM_呼吸灯

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/**********************51单片机学习例程************************
*  平台:Keil U4 + STC89C52
*  名称:定时器0,方式2,输出PWM,周期2000us占空比每120ms改变5%,控制呼吸灯
*  编写:Tony
*  日期:2022-1-27
*   QQ : 674749794
*  晶体:12MHZ
*    变更记录:无
******************************************************************/
 
#include <reg52.h>
unsigned char ZHOUQI_COUNT;    //进入中断的次数,满一个周期清零,计20次,周期2ms
unsigned char PWM_VALUE;       //当前高电平对应的定时次数
unsigned int UPDATA_COUNT;     //占空比更新时间,计1200次,120ms更新一次占空比
bit direc_flag;                //占空比更新方向,0增加,1减少
sbit led= P1^0;                  
void Timer0_Init();       
/********************************************
定时器0初始化函数,8位定时器,0.1ms溢出一次,开启中断
********************************************/
void Timer0_Init()
{
    TMOD=0x02;  //模式设置,0b0000 0010,定时器0,工作模式2,8位定时器   (M1=1,M0=0)
    ET0=1;      //开启定时器0中断
    TH0=0x9c;   //0.1ms溢出
    TL0=0x9c;   //
    EA=1;       //开启总中断
    TR0=1;      //使能定时器0
}
 
 
 
 
void main()
{
    UPDATA_COUNT=0;
    ZHOUQI_COUNT=0;
    PWM_VALUE=10;
    direc_flag=0;
    led=0;
    Timer0_Init();
    while(1);
}
 
void Timer0_In() interrupt 1
{
     
    ZHOUQI_COUNT++; //计数加1
    UPDATA_COUNT++;
 
    if(ZHOUQI_COUNT==PWM_VALUE)     //判断是否到点亮led的时候
       led=1;//亮led
    if(ZHOUQI_COUNT==20)//当前周期结束
    {
       ZHOUQI_COUNT=0; //重新计时
       led=0;           //熄灭led
    }
    if(UPDATA_COUNT==1200&&(direc_flag==0))  //120ms
    {
       UPDATA_COUNT=0;
       PWM_VALUE++;         //占空比增加5%
       if(PWM_VALUE==19)
       {
          direc_flag=1;     //占空比方向改变
       }
        
    }
    if(UPDATA_COUNT==1200&&(direc_flag==1))
     {
       UPDATA_COUNT=0;
       PWM_VALUE--;         //占空比减少5%
       if(PWM_VALUE==1)
       {
          direc_flag=0;
       }
     }
}

  

 

posted @   xiaoberber  阅读(154)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示