微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机呼吸灯

单片机呼吸灯

时间:10-02 整理:3721RD 点击:
求呼吸灯的系统软件设计流程图
#include < reg51.h >
#include < intrins.h >
sbit  K1 =P3^0 ;                    //增加键
sbit  K2 =P3^1 ;
sbit  K3=P3^2;
sbit  K4=P3^3;                   //减少键
sbit  BEEP =P3^5 ;                //蜂鸣器
unsigned char PWM=0x7f ;   //赋初值
void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);

/*********************************************************/
void main()
{  
          
                while(K4==1);
                delayms(500);
                while(K3==1);
                delayms(500);
                while(K2==1);
                delayms(500);
                while(K1==1);
                delayms(200);
                  
       

       
    P1=0xff;
    TMOD=0x21 ;
    TH0=0xfc ;             //1ms延时常数 12M
    TL0=0x18 ;            //频率调节
    TH1=PWM ;            //脉宽调节
    TL1=0 ;
     EA=1;
     ET0=1;
     ET1=1;
     TR0=1 ;
   while(1)
   {
     do{
          if(PWM!=0xff)
           {
                                PWM++ ;
                                delayms(10);
                        }
           else
                        Beep() ;
        }
     while(K1==0);
     do{
           if(PWM!=0x01)
          {
                                PWM-- ;
                                delayms(10);
                  }
           else
                        Beep() ;
        }while(K2==0);
   }
}
/*********************************************************/
// 定时器0中断服务程序.
/*********************************************************/
void timer0() interrupt 1
{  
    TR1=0 ;
    TH0=0xfc ;
    TL0=0x66 ;
    TH1=PWM ;
    TR1=1 ;
    P0=0x00 ;      //启动输出
}
/*********************************************************/
// 定时器1中断服务程序
/*********************************************************/
void timer1() interrupt 3
{
    TR1=0 ;
    P0=0xff ;     //结束输出
}
/*********************************************************/
//蜂鸣器子程序
/*********************************************************/
void Beep()     
  {
      unsigned char i  ;
      for (i=0; i<100; i++)
        {
          delay(100)  ;
          BEEP=!BEEP  ;                //Beep取反
        }
     BEEP=1  ;                            //关闭蜂鸣器
     delayms(100);
  }
/*********************************************************/
// 延时子程序
/*********************************************************/  
void delay(unsigned char t)
{
    while(t--)   ;
}
/*********************************************************/
// 延时子程序
/*********************************************************/
void delayms(unsigned char ms)
{
    unsigned char i ;
    while(ms--)
     {
        for(i = 0; i < 120; i++) ;
     }
}

路过

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top