微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机驱动蜂鸣器原理与设计

单片机驱动蜂鸣器原理与设计

时间:03-21 来源:互联网 点击:

3、“叮咚”电子门铃实验程序:常见的家用电子门铃在有客人来访时候,如果按压门铃按钮时,室内会发出“叮咚”声音,本实验程序模拟电子门铃的发音,当我们按压实验板上的K1按钮时候,蜂鸣器发出“叮咚”音乐声,是一个比较实用的程序。

  “叮咚”电子门铃实验ASM源程序: “叮咚”电子门铃C语言源程序:
  ORG 0000H
  LJMP START ;跳转到初始化程序

  ORG 000BH
  LJMP PGT0 ;跳转到T0中断服务程序
  START:
  OBUF1 EQU 30H ;初始化程序
  OBUF2 EQU 31H
  OBUF3 EQU 32H
  OBUF4 EQU 33H
  FLAGB BIT 00H
  STOPB BIT 01H
  K1 BIT P3.2 ;定义按钮K1,作为门铃按钮

  MOV TMOD,#02H ;定时器初始化
  MOV TH0,#06H
  MOV TL0,#06H
  SETB ET0 ;启动定时器T0
  SETB EA ;启动总中断

  MAIN: ;主程序
  JB K1,MAIN ;检测K1按钮
  LCALL YS10M ;延时去抖动
  JB K1,MAIN
  SETB TR0 ;按钮有效
  MOV P1,#00H ;点亮按钮指示灯
  MOV OBUF1,#00H
  MOV OBUF2,#00H
  MOV OBUF3,#00H
  MOV OBUF4,#00H
  CLR FLAGB
  CLR STOPB
  JNB STOPB,$
  MOV P1,#0FFH
  LJMP MAIN ;发出“叮咚”完毕,返回重新检测按钮

  YS10M: ;10ms延时子程序
  MOV R6,#20
  D1: MOV R7,#248
  DJNZ R7,$
  DJNZ R6,D1
  RET

  PGT0: ;定时器T0中断服务程序
  INC OBUF3 ;中断服务程序中发出一声“叮咚”响声
  MOV A,OBUF3
  CJNE A,#100,NEXT
  MOV OBUF3,#00H
  INC OBUF4
  MOV A,OBUF4
  CJNE A,#20,NEXT
  MOV OBUF4,#00H
  JB FLAGB,PGSTP
  CPL FLAGB
  AJMP NEXT
  PGSTP:
  SETB STOPB
  CLR TR0
  LJMP INT0RET
  NEXT: JB FLAGB,SOU2
  INC OBUF2
  MOV A,OBUF2
  CJNE A,#03H,INT0RET
  MOV OBUF2,#00H
  CPL P3.7
  LJMP INT0RET
  SOU2: INC OBUF1
  MOV A,OBUF1
  CJNE A,#04H,INT0RET
  MOV OBUF1,#00H
  CPL P3.7
  LJMP INT0RET
  INT0RET:
  RETI

  END
  #include
  unsigned char obuf1;
  unsigned char obuf2;
  unsigned int obuf3;

  bit stopb;
  bit flagb;

  void main(void)
  {
  unsigned char i,j;

  TMOD=0x02; //定时器T0初始化
  TH0=0x06;
  TL0=0x06;
  ET0=1;
  EA=1; //允许总中断

  while(1)
  {
  if(P3_2==0) //检测K1按键
  {
  P1=0x00;
  for(i=10;i>0;i--)
  for(j=248;j>0;j--);
  if(P3_2==0)
  {
  obuf1=0;
  obuf2=0;
  obuf3=0;
  flagb=0;
  stopb=0;
  TR0=1; //启动定时器T0,发出“叮咚”声
  while(stopb==0);
  P1=0xff;
  }
  }
  }
  }

  void t0(void) interrupt 1 using 0
  {
  obuf3++;
  if(obuf3==2000)
  {
  obuf3=0;
  if(flagb==0)
  {
  flagb=~flagb;
  }
  else
  {
  stopb=1;
  TR0=0;
  }
  }
  if(flagb==0)
  {
  obuf2++;
  if(obuf2==3)
  {
  obuf2=0;
  P3_7=~P3_7;
  }
  }
  else
  {
  obuf1++;
  if(obuf1==4)
  {
  obuf1=0;
  P3_7=~P3_7;
  }
  }
  }

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

网站地图

Top