STC12C5A60S2制作呼吸灯C语言程序怎么写 5

单片机P2口接LED正极,P0口接LED负极,怎么写呼吸灯程序?用PWM,其它方式也行。... 单片机P2口接LED正极,P0口接LED负极,怎么写呼吸灯程序?用PWM,其它方式也行。 展开
 我来答
oakyyds
推荐于2018-02-11 · TA获得超过638个赞
知道小有建树答主
回答量:261
采纳率:50%
帮助的人:97.3万
展开全部
呼吸灯的程序:
/**************************************************************************** 
       功能:LED灯慢慢变暗,再慢慢变亮。
                  用定时器模拟的PWM调制。
单片机:AT89S52                                                   
******************************************************************************/ 
#include <reg52.h> 
#define V_TH0  0XFF              //设定定时器0,高8位的初值              
#define V_TL0  0XF6              //设定定时器0,低8位的初值            
#define V_TMOD 0X01              //设定定时器0的工作方式为:方式1(计数位数是16位                                  //,由TL0作为低8位、TH0作为高8位)
#define uchar unsigned char 
#define uint unsigned int                
void init_sys();                         //系统初始化函数
void delay(uint);                        //延时函数
unsigned char ZKB;                       //占空比

void main (void) 

   init_sys();                            //初始化
   while(1)
   {  
      for(ZKB=5;ZKB<40;ZKB=ZKB+2)         //每调节一次占空比,就延时大概8ms左右,这使得LED现象更明显
           {
                    delay(8); 
            }
      for(ZKB=40;ZKB>5;ZKB=ZKB-2)
           {
                delay(8); 
           }
    
   } 
}
void delay(uint z)
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=100;y>0;y--); 
}
void init_sys()            /*系统初始化函数*/ 

  /*定时器初始化*/ 
  TMOD=V_TMOD;         
  TH0=V_TH0; 
  TL0=V_TL0; 
  TR0=1; 
  ET0=1; 
  EA=1; 
}

void timer0(void) interrupt 1 using 2              

 static uchar click=0;    //中断次数计数器变量
 TH0=V_TH0;               //重新恢复定时器初始值
 TL0=V_TL0; 
 ++click;                       //每计数10次,产生一个中断,并且click增加一个

 if (click>=100)
         click=0;              //计满一百次,这重新计数。
                                         /*因为计一次数的时间是1us,10次产生一个中断,也就是一个中断10us。100个中断为1ms。
                                    则,可以在这100个数中随便取值,用于表示占空比的多少,占空比的范围为(1~100)*/
 
 if (click<=ZKB)          //当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整 
   P1=0x00;                      //P1口接的是LED灯
 else 
   P1=0xff;
}
 
此程序的总中断时间为100ms,即频率为:100KHZ,占空比从5 变为40(即5%~25%)。
宿兴电子
2024-11-28 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡... 点击进入详情页
本回答由宿兴电子提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式