门铃发生器.txt

来自「用AVR编写的点阵显示屏」· 文本 代码 · 共 81 行

TXT
81
字号
//MCU:AT89S52
//晶振:12M
#include "AT89X52.H"
unsigned char time_500hz;
unsigned char time_700hz;
unsigned int tcount;
 
bit stop;
bit flag;
 
void main(void)
{
  unsigned char i,j;
 
  TMOD=0x02;  //使用定时器0,选择方式2(常数自动重装的8位定时器)
  TH0=0x06;   //保存数值,用于自动重装
  TL0=0x06;  //定时250uS初值
  TR0=1;    //开定时器0
  ET0=1;    //开定时器0溢出中断
  EA=1;     //开总中断
  P2_6=0;
 
  while(1)
    {
      if(P2_0==0)
        {
          for(i=10;i>0;i--)
          for(j=248;j>0;j--);
          if(P2_0==0)
            {
              time_500hz=0;
              time_700hz=0;
              tcount=0;
              flag=0;
			  stop=0;
              TR0=1;
              while(stop==0);
            }
        }
    }
}

/********250uS中断服务程序*************/
void t0(void) interrupt 1 using 0
{
  tcount++;
  if(tcount==2500)
    {
      tcount=0;
      if(flag==0)
        {
          flag=~flag;
        }
        else
          {
            stop=1;
            TR0=0;
          }
    }
  if(flag==0)
    {
      time_700hz++;
      if(time_700hz==3)
        {
          time_700hz=0;
         P2_6=~P2_6;
        }
    }
    else
      {
        time_500hz++;
        if(time_500hz==4)
          {
            time_500hz=0;
            P2_6=~P2_6;
          }
      }
}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?