描述
buzzerequp2.4
KEYEQUP3.7
org00h;主程序起始地址
jmpstart;跳动主程序
org0bh;timer0中断起始地址
jmptim0;跳至timer0在mode1
start: MOV tmod,#00000001b;设timer0在mode1

MOV ie,#10000010b;中断使能
jbKEY,$;第一次按to?
calldelay1;消除抖动
jnbKEY,$;to放开?
MOV 31h,#00;按to次数计数指针初值为00h
start0:
MOV 30h,#lowsong;取简谱码指针(第1首)
next: MOV a,30h
MOV dptr,#table
MOV ca,@a+dptr;至相关页码,高4位为音符的高低
MOV r2,a;低4位为音符的节拍
jzend0;检查简谱码是否已结束(有无00?)
anla,#0fh;取节拍(低4位)
MOV r5,a;存入r5,节拍的时间
MOV a,r2
swapa
anla,#0fh;取音频值(高4位)
jnzsing;是否为0,是0则不发音
clrtr0
jmpd1
sing:deca;因0不列入
MOV 22h,a;存入(22h)
rla;乘2
MOV dptr,#table
MOV ca,

本文介绍了使用C语言编写的一款基于C51单片机的音乐门铃设计,通过按键选择播放不同的歌曲。程序中包含了消除按键抖动、设置Timer0在Mode1以及音乐播放的详细流程,每首歌曲的简谱码和对应的音符节拍都被定义在内存表中。用户可以按动按键来切换不同歌曲,最多支持播放5首歌曲。
最低0.47元/天 解锁文章
2038

被折叠的 条评论
为什么被折叠?



