试验仿真图
源程序代码:(演奏部分代码暂时去掉,见谅,需求的留言,转载请注明出处,谢谢!)
DUAN EQU 0c000H
WEI EQU 0a000H
LED0 EQU 8000H
ORG 0000H ;复位地址
LJMP MAIN ;跳转到主程序
ORG 0003H ;外部中止0进口地址
LJMP INT00 ;跳转到外部中止0服务程序
ORG 000BH ;T0中止进口
LJMP TIM0 ;跳转到T0中止服务程序
ORG 0030H ;主程序进口地址
MAIN:
MOV DPTR,#LED0
MOV A,#00H
MOVX @DPTR,A
MOV TMOD,#01H ;写入T0操控字, 16位守时方法
SETB IT0 ;外部中止为下降沿触发
MOV IE,#83H ;开中止
MOV 30H,#00H ;取简谱码指针
MOV R6,#0FFH ;挑选音乐节奏灯循环次数
CLR 23H ;功用挑选标志 00:键盘 01:音乐
NEXT: CLR TR0
JNB 23H,KEYPLAY ;若标志位是0则转到键盘程序
SETB P2.2
MOV A,30H ;简谱码指针装入A
JNB P0.1,START1 ;不然查询播映哪一首歌曲
JNB P0.2,START2
JNB P0.3,START3
LJMP NEXT
;确认不同歌曲的基地址
START1:
MOV DPTR,#TABLE ;从TABLE处取简谱码
MOV 60H,DPH
MOV 61H,DPL
MOV A,#00H
LJMP NEXT1
START2:
MOV DPTR,#TABLE2 ;从TABLE2处取简谱码
MOV 60H,DPH
MOV 61H,DPL
MOV A,#01H
LJMP NEXT1
START3:
MOV DPTR,#TABLE3 ;从TABLE处取简谱码
MOV 60H,DPH
MOV 61H,DPL
MOV A,#02H
LJMP NEXT1
;键盘演奏程序进口
KEYPLAY: ;键盘程序进口
SETB P2.1
CLR P2.2
JNB P0.4,LOWTONE ;查询是高音仍是其他的音
JNB P0.5,MIDDLETONE
JNB P0.6,HIGHTONE
LJMP NEXT ;没有挑选高中低声则从头查询
;确认高中低声基地址
LOWTONE:
MOV DPTR,#LOWTABLE ;赋基地址值
MOV 50H,DPH
MOV 51H,DPL
LJMP KEY ;跳转到按键查询程序
MIDDLETONE:
MOV DPTR,#MIDDLETABLE
MOV 50H,DPH
MOV 51H,DPL
LJMP KEY
HIGHTONE:
MOV DPTR,#HIGHTABLE
MOV 50H,DPH
MOV 51H,DPL
LJMP KEY
;歌曲播映程序
NEXT1: MOV DPTR,#SEG7
MOVC A,@A+DPTR
MOV DPTR,#DUAN
MOVX @DPTR,A
MOV DPTR,#WEI
MOV A,#000BH
MOVX @DPTR,A
MOV DPH,60H
MOV DPL,61H
MOV A,30H
MOVC A,@A+DPTR
MOV R2,A ;获得的简谱码暂存于R2
JZ END0 ;是否取到完毕码00H
ANL A,#0FH ;不是,则取节拍码
MOV R5,A ;节拍码存于R5
MOV A,R2 ;将简谱码装入A
SWAP A ;高、低4位交流
ANL A,#0FH ;取音符码
JNZ SING ;获得的音符码是否为0?
CLR TR0 ;是则不发音
lJMP D1 ;跳转到D1
SING: DEC A ;获得的音符码减1(不含0)
MOV 22H,A ;存入22H单元
RL A ;乘2
MOV DPTR,#TABLE1 ;到TABLE1中取相对的高位字节值
MOVC A,@A+DPTR
MOV TH0,A ;获得的高位字节装入TH0和21H单元
MOV 21H,A
MOV A,22H ;再装入获得的音符码
Rl A ;乘2
INC A ;加1
MOVC A,@A+DPTR ;到TABLE1中取相对的低位字节值
MOV TL0,A ;获得的高位字节装入TL0和20H单元
MOV 20H,A
SETB TR0 ;发动T0
D1: LCALL DELAY ;基本单位时刻1/4拍,延时187毫秒
INC 30H ;取简谱码指针加1
LJMP NEXT ;取下一个码
END0: CLR TR0 ;中止T0
CLR 30H ;清零俭朴指针
LJMP NEXT ;重复循环
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/259082.html