c51单片机蜂鸣器汇编语言,51单片机控制蜂鸣器播放5首歌曲汇编程序

;机器人代码:(外部中断用来接红外传感器的)

ORG 0000H

JMP INIT

ORG 0003H

JMP INT_0

ORG 000BH

JMP INT_T

ORG 0023H

JMP INT_S

;-------------------------------------

FLAG_F EQU 01H ;功能选择,0为播放,1为演奏

FLAG_L EQU 02H ;指示灯选择,0指示灯亮或1亮

FLAG_P EQU 03H ;是否播放标志,0停止,1播放

FLAG_CH EQU 04H ;演奏时是否换音符,1有效

FLAG_LAST EQU 05H ;播放时是否到最后64分音符

FLAG_PRESS EQU 06H ;是否有演奏按键

FLAG_GO EQU 07H ;是否行走标志位(1为行走,0为停止)

STAT_0 EQU 08H ;4位行走状态,对应P1.0--P1.3

STAT_1 EQU 09H

STAT_2 EQU 0AH

STAT_3 EQU 0BH

FLAG_MUTE EQU 0CH

PERIOD_H   EQU 30H ;音长(定时器高位)

PERIOD_L   EQU 31H ;音长(定时器低位)

COUNTER    EQU 32H ;定时器计数(设定定时周期的倍数)

CU_COUNTER EQU 41H ;当前定时器计数

TONE       EQU 33H ;音高

SPEED      EQU 34H ;乐曲速度

D_1        EQU 35H

D_2        EQU 36H

P_1        EQU 37H

P_2        EQU 38H

NUM        EQU 39H ;乐曲的位置(第几首)

POSITION   EQU 40H ;乐曲中音符的位置

TAB_H      EQU 42H ;当前乐曲的音长表首地址高八位

TAB_L      EQU 43H ;当前乐曲的音长表首地址低八位

TAB_TONE_H EQU 44H ;当前乐曲的音高表首地址高八位

TAB_TONE_L EQU 45H ;当前乐曲的音高表首地址低八位

THIS_NUM   EQU 46H ;存储当前按键号

PRE_NUM    EQU 47H ;存储上次按键号

COUNTER_1  EQU 48H ;判断是否为最后64分音符用,其值等于COUNTER-1

D_L1       EQU 49H

D_L2       EQU 4AH

D_L3       EQU 4BH

P_L1       EQU 4CH

P_L2       EQU 4DH

TAB_1      EQU 4EH ;查表时的高低字节序号存储

TAB_2      EQU 4FH

CMD        EQU 50H

;行走命令存储 (1:功能选择、2:加速、3:减速、4:原速、5:停止/前进、

;(6:左转、7:右转、8:朝前) )

COUNTER_LOOP EQU 51H ;定时器循环计数

; STATUS EQU 52H ;行走状态寄存

PERIOD_TEMP EQU 53H

;*****************主程序*************************

ORG 0030H

INIT: ; CALL LONG

CLR P3.7

; SETB P3.7

MOV SP, #54H

CLR FLAG_F ;初始化

CLR FLAG_L

CLR FLAG_P

CLR FLAG_LAST

SETB FLAG_CH

CLR FLAG_PRESS

SETB FLAG_GO

CLR FLAG_MUTE

SETB STAT_0

SETB STAT_1

SETB STAT_2

SETB STAT_3

MOV CMD, #00H

MOV PERIOD_H, #00H

MOV PERIOD_L, #00H

MOV TONE, #00H

MOV SPEED, #00H

MOV COUNTER, #00H

MOV NUM, #00H

MOV POSITION, #00H

;MOV STATUS, #0FFH

MOV D_1, #80

MOV D_2, #79

MOV P_L1, #01H

MOV P_L2, #0FFH

MOV TMOD, #21H ;定时器0为16位计数器定时 ,1为8位自动装载

MOV TH0, #0FFH

MOV TL0, #0FFH

MOV TH1, #0CCH

MOV TL1, #0CCH

MOV SCON, #0D0H

SETB IT0 ;设定外部中断0为负跳变触发

SETB PX0 ;外部中断为高优先级

SETB PS

SETB EA

SETB ET0

SETB EX0 ;开外部中断

SETB ES

SETB TR1

;CALL DELAY

;-------------------------------------------

LOOP: JB FLAG_F, PLAY ;演奏功能跳转

OUT: JNB FLAG_P, LOOP ;播放部分

MOV A, TONE

JZ MUTE

JB FLAG_MUTE, MUTE_1

SETB P3.7

MUTE_1: CJ

  • 0
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值