51单片机通过按键控制蜂鸣器发生详解

  • 格式:doc
  • 大小:245.50 KB
  • 文档页数:11

下载文档原格式

  / 11
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机开发报告

}

院系:电子工程学院

专业:自动化

班级:自动化1401

学号:0118

姓名:赵越

指导老师:刘星光

2018年01 月04 日

|

一.系统任务

按键控制蜂鸣器发声

二.电路原理图

三.程序设计内容

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

使用无源蜂鸣器输出7个基本音阶

声音是由物体振动所产生的。只是由于物体的材料以及振幅、频率不同,而产生不同的声音。声音的响度是由振幅决定的,而音调则是由频率决定的,那么我们只需要控制物体振动的频率,就可以发出固定的声调。

\

五.汇编程序

ORG 0000H

AJMP START

ORG 000BH

INC 20H ;中断服务,中断计数器加1

MOV TH0,#0D8H

MOV TL0,#0F0H 12M晶振,形成10毫秒中断

RETI

'

ORG 001BH

LJMP INTT1 ;跳转到T1中断服务程序START: MOV DPTR,#00H ;初始化程序

MOV A,#00H

OBUF1 EQU 30H

OBUF2 EQU 31H

OBUF3 EQU 32H

OBUF4 EQU 33H

FLAGB BIT 00H

STOPB BIT 01H

[

MOV SP,#50H

MOV TH0,#0D8H

MOV TL0,#0F0H

MOV TMOD,#21H

MOV TH1,#09H

MOV TL1,#09H

MOV IE,#8AH

AJMP LOOP

LOOP: JNB ,MUSIC0

JNB ,MAIN

AJMP LOOP

MAIN:

JB ,MAIN ;检测按钮

LCALL YS10M ;延时去抖动

JB ,MAIN

SETB TR1 ;按钮有效

MOV OBUF1,#00H

MOV OBUF2,#00H

MOV OBUF3,#00H

|

MOV OBUF4,#00H

CLR FLAGB

CLR STOPB

JNB STOPB,$

AJMP START ;发出“叮咚”完毕,返回重新检测按钮YS10M: ;10ms延时子程序

MOV R6,#20

D1:

MOV R7,#100

DJNZ R7,$

~

DJNZ R6,D1

RET

TING: AJMP START

INTT1: ;定时器T1中断服务程序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 TR1

LJMP INT0RET NEXT:

~

JB FLAGB,SOU2

INC OBUF2

MOV A,OBUF2

CJNE A,#04H,INT0RET

MOV OBUF2,#00H

CPL

LJMP INT0RET

SOU2:

INC OBUF1

MOV A,OBUF1

]

CJNE A,#05H,INT0RET

MOV OBUF1,#00H

CPL

INT0RET:

RETI

MUSIC0: JB ,MUSIC0

LCALL YS10M

JB ,MUSIC0

NOP

MOV DPTR,#DAT 表头地址送DPTR !

MOV 20H,#00H ;中断计数器清0

MOV B,#00H ;表序号清0 MAIN2: JNB ,TING

CLR A

MOVC A,@A+DPTR ;查表取代码

JZ END0 ;是00H,则结束

CJNE A,#0FFH,MUSIC5

LJMP MUSIC3

MUSIC5:

NOP

-

MOV R6,A

INC DPTR

MOV A,B

MOVC A,@A+DPTR ;取节拍代码送R7

MOV R7,A

SETB TR0 ;启动计数MUSIC2:

NOP

CPL

MOV A,R6

"

MOV R3,A

LCALL DEL

MOV A,R7

CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否

;不等,则继续循环MOV 20H,#00H ;等于,则取下一代码

INC DPTR

INC B

LJMP MAIN2

MUSIC3: ;休止100毫秒

(

NOP

CLR TR0

MOV R2,#0DH

MUSIC4:

NOP

MOV R3,#0FFH

LCALL DEL

DJNZ R2,MUSIC4

相关主题