使用80c51单片机at89s52芯片、汇编语言编写“世上只有妈妈好”的音乐播放代码
发布网友
发布时间:2022-04-25 05:04
我来回答
共1个回答
热心网友
时间:2023-10-28 05:26
//=转自人家。。
SPEAKER EQU P2.0 ;定义喇叭驱动口
ORG 0000H ;伪地址
LJMP MAIN ;长跳转,执行Main函数
ORG 000BH
LJMP DSQT0
MAIN: MOV SP,#50H ;向SP写入50
MOV TMOD,#01H ;定时器设置
MOV TH0,#0F8H ;低音1-261HZ;定时器高位初值装入
MOV TL0,#39H ;定时器低位初值装入
SETB EA ;允许中断
SETB ET0 ;在EA打开的前提下,打开T0定时器中断
CLR TR0 ;不启用T0计数器/定时器LOOP: NOP ;开始循环播放了。程序不完整
; -------------------------------
; 1-|6. 5 3 5 | ;第一段
LCALL DY6 ;长跳转到低音6标号那里,程序不完整,没有写出来。以下同理
SETB TR0 ;开始启用T0计数器/定时器
LCALL DEL11
LCALL DEL12
LCALL ZY5
LCALL DEL12
LCALL ZY3
LCALL DEL11
LCALL ZY5
LCALL DEL11
; -----------------------
; 2-|1 6 5 6- | ;第二段
LCALL GY1
SETB TR0
LCALL DEL11
LCALL ZY6
LCALL DEL12
LCALL ZY5
LCALL DEL12
LCALL ZY6
LCALL DEL11
LCALL DEL11
; -----------------------
; 3-|3 5 6 5 3 |
LCALL ZY3
SETB TR0
LCALL DEL11
LCALL ZY5
LCALL DEL12
LCALL ZY6
LCALL DEL12
LCALL ZY5
LCALL DEL11
LCALL ZY3
LCALL DEL11
; -----------------------
; 4-|1 6 5 3 2- |
LCALL ZY1
SETB TR0
LCALL DEL12
LCALL DY6
LCALL DEL12
LCALL ZY5
LCALL DEL12
LCALL ZY3
LCALL DEL12
LCALL ZY2
LCALL DEL11
LCALL DEL11
; -----------------------
; 5-|2. 3 5 5 6 |
LCALL ZY2
SETB TR0
LCALL DEL11
LCALL DEL12
LCALL ZY3
LCALL DEL12
LCALL ZY5
LCALL DEL11
LCALL ZY5
LCALL DEL12
LCALL ZY6
LCALL DEL12
; -----------------------
; 6-|3 2 1 -|
LCALL ZY3
SETB TR0
LCALL DEL11
LCALL ZY2
LCALL DEL11
LCALL ZY1
LCALL DEL11
LCALL DEL11
; -----------------------
; 7-|5. 3 2 1 6 1 |
LCALL ZY5
SETB TR0
LCALL DEL11
LCALL ZY3
LCALL DEL12
LCALL ZY2
LCALL DEL12
LCALL ZY1
LCALL DEL12
LCALL DY6
LCALL DEL12
LCALL ZY1
LCALL DEL12
; -----------------------
; 8-|5 - - - |
LCALL DY5
SETB TR0
LCALL DEL11
LCALL DEL11
LCALL DEL11
LCALL DEL11
LJMP LOOP 跳转到loop那里重新播放
; ===========================================
; 低音音符频率对应16位定时器初值装置子程序
DY1: MOV 30H,#0F8H ;低音1-262HZ 把F8放在30的地址里面
MOV 40H,#89H
NOP
RET
DY2: MOV 30H,#0F9H ;低音2-294HZ
MOV 40H,#59H
RET
NOP