表2 七个音符频率与计数值的对照表
音符 频率(HZ) 简谱码(T值)
中 1 DO 523 64580
中 2 RE 587 64684
中 3 M 659 64777
中 4 FA 698 64820
中 5 SO 784 64898
中 6 LA 880 64968
中 7 SI 988 65030
采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:
TABLE DW 64580,64684,64777,64820,64898,64968,65030
3、歌曲:兰花草:
表3 歌曲音符频率与计数值的对照表
音符 简谱码 T值
低音M 1 64021
低音FA 2 64103
低音SO 3 64260
低音LA 4 64400
低音TI 5 64524
中音DO 6 64580
中音RE 7 64684
中音M 8 64777
中音FA 9 64820
中音SO A 64898
中音LA B 64968
中音TI C 65030
#5 831 D 65934
不发音 0
4、软件设计如下:
ORG 00H ;主程序起始地址
JB P2.0 , START ;键盘与歌曲选择为“1”选择歌曲为“0”键盘
JMP MAIN ;跳至键盘主程序
ORG 000BH ;TIMER0中断起始地址
LJMP BREAK ;跳至TIMER0中断子程序
ORG 01BH ;TIMER0中断起始地址
LJMP TIM0 ;跳至TIMER1中断子程
MAIN: MOV TMOD,#01H ;设置TIMER0在MODE1
SETB EA ;中断使能
SETB ET0 ;设置定时器0中断
SETB TR0 ; 启动定时器0
WAIT1: LCALL KEY ;调用KEY子程序,判断有键按下否?
第几个键?
CLR EA ;屏蔽中断
CJNE R3,#00H,WAIT1 ;如果R3=0,表示有键按下
MOV A,22H ;将22H里存放的按键号送给A
RL A ; 因为查表里都是字,所以得乘2查
得数据
MOV DPTR,#TABLE2 ;指向表头
MOVC A,@A+DPTR ; 查表
MOV TH0,A ;将数据高位送TH0
MOV 21H,A ; 将高位备份
MOV A,22H ;将22H里存放的按键号送给A
RL A ;因为查表里都是字,所以得乘2查得数据
INC A ;取低位数据
MOVC A,@A+DPTR
MOV TL0,A
MOV 20H,A
WAIT2: LCALL KEY
SETB EA
CJNE R3,#00H,WAIT1
JMP WAIT2