【51单片机汇编实验】实验五 定时器与蜂鸣器实验

一、实验目的

  1. 学习定时器的工作原理及使用方法。
  2. 学习如何使用单片机驱动蜂鸣器发声并利用定时器控制蜂鸣器发出不同频率的声音。

二、实验说明

本实验1:通过开关控制蜂鸣器发出单一频率声音,频率自定,持续时间1秒。
本实验2:通过开关控制蜂鸣器发出“叮咚”声,单片机响应定时器中断产生两种不同频率的声音(例如500Hz和700Hz),从而实现门铃的设计。要求叮、咚声音各持续0.5秒。通过本实验学生可以掌握蜂鸣器和定时器的工作原理及使用方法以及定时器的初始化程序、应用程序的编写和调试。

三、实验内容

1、掌握蜂鸣器的控制方法;
2、开关K1控制蜂鸣器发声,模拟门铃的工作。(注意开关抖动处理)

蜂鸣器发声频率

蜂鸣器发声原理

这里不过多赘述,需要更深入了解可以自行搜索,有更多更好的文章详细说明。
本次实验中运用的是无源蜂鸣器,由压片陶瓷构成,就是打火机中的垫片,可以通过挤压产生电流。反过来,给它通电也可以让它变形,如果只是直流电源没有变化,那它就只会变形一次,因此接上一种变化的矩形波,或者正弦波,它就会根据波形频率不断的变形,振动,然后就发声。

PS

作者使用的是普中A2板子做实验,因此P3口接开关,P2.5口接蜂鸣器,可以通过代码开头的伪代码自己修改哪个I/O口接蜂鸣器
由于板子的局限性,实验不能很好的展现效果,蜂鸣器工作时,led会点亮一颗是正常现象。

实验1代码

SWITCH EQU P3
BEEP EQU 0A5H;P2.5
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIMER0
ORG 001BH
AJMP TIMER1
;本次实验用到了两个计时器,T0用于蜂鸣器的发声,T1用于计时
MAIN:
	MOV TMOD, #11H;0000 0001
	SETB EA
	SETB ET0
	SETB ET1
	MOV	TL0,#00H
	MOV	TH0,#4CH;50ms
	MOV	TL1,#3CH
	MOV	TH1,#0FEH
	;以上为基本定时器配置,需要注意这里并没有开启定时器,需等待第一个按键按下才会开启。
	WATING_SWITCH:
		MOV A, SWITCH
		CJNE A, #0FFH,GET_SWITCH_VALUE
		SJMP WATING_SWITCH
		GET_SWITCH_VALUE:
				MOV A, SWITCH
				CJNE A, #0FFH, GET_SWITCH_VALUE
			SETB TR0
			SETB TR1
			;这里按键按下并松开,开始计时和让蜂鸣器发声
		SJMP WATING_SWITCH
SJMP $
TIMER0:
	MOV	TL0,#00H
	MOV	TH0,#4CH;50ms
	INC R6
	CJNE R6, #15H, TIMER0LAST;21
	MOV R6, #00H
	CLR TR0
	CLR TR1
	;经过了1s后关闭T0和T1
TIMER0LAST:
RETI
TIMER1:
	MOV	TL1,#3CH
	MOV	TH1,#0FEH
	CPL BEEP
RETI
END

实验2代码

SWITCH EQU P3
BEEP EQU 0A5H;P2.5
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIMER0
ORG 001BH
AJMP TIMER1
MAIN:
	MOV TMOD, #11H;0000 0001
	SETB EA
	SETB ET0
	SETB ET1
	MOV	TL0,#00H
	MOV	TH0,#4CH;50ms
	MOV	TL1,#0BH
	MOV	TH1,#0FCH
	WATING_SWITCH:
		MOV A, SWITCH
		CJNE A, #0FFH,GET_SWITCH_VALUE
		SJMP WATING_SWITCH
		GET_SWITCH_VALUE:
				MOV A, SWITCH
				CJNE A, #0FFH, GET_SWITCH_VALUE
			SETB TR0
			SETB TR1
		SJMP WATING_SWITCH
SJMP $
TIMER0:
	MOV	TL0,#00H
	MOV	TH0,#4CH;50ms
	INC R6
	CJNE R6, #0BH, TIMER0LAST;11
	MOV R6, #00H
	INC R7
	CJNE R7, #02H, TIMER0LAST
	;因为要发出不同频率的声音,则计时器T1要每0.5s触发一次
	;用R7记录触发次数并根据R7,T0中会填装不同的初值达到改变发声频率的效果
	CLR TR0
	CLR TR1
	MOV R7, #00H
	;结束的时候要将R7清零
TIMER0LAST:
RETI
TIMER1:
;根据R7填装不同的初值
	CJNE R7, #00H, HZ700
		MOV	TL1,#0BH
		MOV	TH1,#0FCH
		SJMP TIMER1LAST
	HZ700:
		MOV	TL1,#33H
		MOV	TH1,#0FDH
TIMER1LAST:
	CPL BEEP
RETI
END
  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值