📄 中国腾达测控科技有限公司-学习下载-单片机试验及实践教程-at89s51单片机试验及实践教程之电子琴.htm
字号:
<TD class=style28 vAlign=top width=114>
<P>DELAY </P></TD>
<TD class=style28 vAlign=top width=114></TD>
<TD class=style28 vAlign=top width=114>
<P>曲调值 </P></TD>
<TD class=style28 vAlign=top width=114>
<P>DELAY </P></TD></TR>
<TR>
<TD class=style28 vAlign=top width=114>
<P>调 4/4 </P></TD>
<TD class=style28 vAlign=top width=114>
<P>125ms </P></TD>
<TD class=style28 vAlign=top width=114></TD>
<TD class=style28 vAlign=top width=114>
<P>调 4/4 </P></TD>
<TD class=style28 vAlign=top width=114>
<P>62ms </P></TD></TR>
<TR>
<TD class=style28 vAlign=top width=114>
<P>调 3/4 </P></TD>
<TD class=style28 vAlign=top width=114>
<P>187ms </P></TD>
<TD class=style28 vAlign=top width=114></TD>
<TD class=style28 vAlign=top width=114>
<P>调 3/4 </P></TD>
<TD class=style28 vAlign=top width=114>
<P>94ms </P></TD></TR>
<TR>
<TD class=style28 vAlign=top width=114>
<P>调 2/4 </P></TD>
<TD class=style28 vAlign=top width=114>
<P>250ms </P></TD>
<TD class=style28 vAlign=top width=114></TD>
<TD class=style28 vAlign=top width=114>
<P>调 2/4 </P></TD>
<TD class=style28 vAlign=top width=114>
<P>125ms </P></TD></TR></TBODY></TABLE>
<P class=style28>对于不同的曲调我们也可以用单片机的另外一个定时 / 计数器来完成。 </P>
<P class=style28>下面就用 AT89S51 单片机产生一首“生日快乐”歌曲来说明单片机如何产生的。 </P>
<P class=style28>在这个程序中用到了两个定时 / 计数器来完成的。其中 T0 用来产生音符频率, T1 用来产生音拍。
</P>
<P class=style28><STRONG>5. 程序框图 </STRONG></P>
<P class=style28><IMG height=422
src="中国腾达测控科技有限公司-学习下载-单片机试验及实践教程-AT89S51单片机试验及实践教程之电子琴.files/222.gif"
width=346>
<P class=style28><IMG height=188
src="中国腾达测控科技有限公司-学习下载-单片机试验及实践教程-AT89S51单片机试验及实践教程之电子琴.files/223.gif"
width=181></P>
<P class=style28><STRONG>6. 汇编源程序 </STRONG></P>
<P class=style28>KEYBUF EQU 30H </P>
<P class=style28>STH0 EQU 31H </P>
<P class=style28>STL0 EQU 32H </P>
<P class=style28>TEMP EQU 33H </P>
<P class=style28>ORG 00H </P>
<P class=style28>LJMP START </P>
<P class=style28>ORG 0BH </P>
<P class=style28>LJMP INT_T0 </P>
<P class=style28>START: MOV TMOD,#01H </P>
<P class=style28>SETB ET0 </P>
<P class=style28>SETB EA </P>
<P class=style28>WAIT: </P>
<P class=style28>MOV P3,#0FFH </P>
<P class=style28>CLR P3.4 </P>
<P class=style28>MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>XRL A,#0FH </P>
<P class=style28>JZ NOKEY1 </P>
<P class=style28>LCALL DELY10MS </P>
<P class=style28>MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>XRL A,#0FH </P>
<P class=style28>JZ NOKEY1 </P>
<P class=style28>MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>CJNE A,#0EH,NK1 </P>
<P class=style28>MOV KEYBUF,#0 </P>
<P class=style28>LJMP DK1 </P>
<P class=style28>NK1: CJNE A,#0DH,NK2 </P>
<P class=style28>MOV KEYBUF,#1 </P>
<P class=style28>LJMP DK1 </P>
<P class=style28>NK2: CJNE A,#0BH,NK3 </P>
<P class=style28>MOV KEYBUF,#2 </P>
<P class=style28>LJMP DK1 </P>
<P class=style28>NK3: CJNE A,#07H,NK4 </P>
<P class=style28>MOV KEYBUF,#3 </P>
<P class=style28>LJMP DK1 </P>
<P class=style28>NK4: NOP </P>
<P class=style28>DK1: </P>
<P class=style28>MOV A,KEYBUF </P>
<P class=style28>MOV DPTR,#TABLE </P>
<P class=style28>MOVC A,@A+DPTR </P>
<P class=style28>MOV P0,A </P>
<P class=style28>MOV A,KEYBUF </P>
<P class=style28>MOV B,#2 </P>
<P class=style28>MUL AB </P>
<P class=style28>MOV TEMP,A </P>
<P class=style28>MOV DPTR,#TABLE1 </P>
<P class=style28>MOVC A,@A+DPTR </P>
<P class=style28>MOV STH0,A </P>
<P class=style28>MOV TH0,A </P>
<P class=style28>INC TEMP </P>
<P class=style28>MOV A,TEMP </P>
<P class=style28>MOVC A,@A+DPTR </P>
<P class=style28>MOV STL0,A </P>
<P class=style28>MOV TL0,A </P>
<P class=style28>SETB TR0 </P>
<P class=style28>DK1A: MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>XRL A,#0FH </P>
<P class=style28>JNZ DK1A </P>
<P class=style28>CLR TR0 </P>
<P class=style28>NOKEY1: </P>
<P class=style28>MOV P3,#0FFH </P>
<P class=style28>CLR P3.5 </P>
<P class=style28>MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>XRL A,#0FH </P>
<P class=style28>JZ NOKEY2 </P>
<P class=style28>LCALL DELY10MS </P>
<P class=style28>MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>XRL A,#0FH </P>
<P class=style28>JZ NOKEY2 </P>
<P class=style28>MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>CJNE A,#0EH,NK5 </P>
<P class=style28>MOV KEYBUF,#4 </P>
<P class=style28>LJMP DK2 </P>
<P class=style28>NK5: CJNE A,#0DH,NK6 </P>
<P class=style28>MOV KEYBUF,#5 </P>
<P class=style28>LJMP DK2 </P>
<P class=style28>NK6: CJNE A,#0BH,NK7 </P>
<P class=style28>MOV KEYBUF,#6 </P>
<P class=style28>LJMP DK2 </P>
<P class=style28>NK7: CJNE A,#07H,NK8 </P>
<P class=style28>MOV KEYBUF,#7 </P>
<P class=style28>LJMP DK2 </P>
<P class=style28>NK8: NOP </P>
<P class=style28>DK2: </P>
<P class=style28>MOV A,KEYBUF </P>
<P class=style28>MOV DPTR,#TABLE </P>
<P class=style28>MOVC A,@A+DPTR </P>
<P class=style28>MOV P0,A </P>
<P class=style28>MOV A,KEYBUF </P>
<P class=style28>MOV B,#2 </P>
<P class=style28>MUL AB </P>
<P class=style28>MOV TEMP,A </P>
<P class=style28>MOV DPTR,#TABLE1 </P>
<P class=style28>MOVC A,@A+DPTR </P>
<P class=style28>MOV STH0,A </P>
<P class=style28>MOV TH0,A </P>
<P class=style28>INC TEMP </P>
<P class=style28>MOV A,TEMP </P>
<P class=style28>MOVC A,@A+DPTR </P>
<P class=style28>MOV STL0,A </P>
<P class=style28>MOV TL0,A </P>
<P class=style28>SETB TR0 </P>
<P class=style28>DK2A: MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>XRL A,#0FH </P>
<P class=style28>JNZ DK2A </P>
<P class=style28>CLR TR0 </P>
<P class=style28>NOKEY2: </P>
<P class=style28>MOV P3,#0FFH </P>
<P class=style28>CLR P3.6 </P>
<P class=style28>MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>XRL A,#0FH </P>
<P class=style28>JZ NOKEY3 </P>
<P class=style28>LCALL DELY10MS </P>
<P class=style28>MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>XRL A,#0FH </P>
<P class=style28>JZ NOKEY3 </P>
<P class=style28>MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>CJNE A,#0EH,NK9 </P>
<P class=style28>MOV KEYBUF,#8 </P>
<P class=style28>LJMP DK3 </P>
<P class=style28>NK9: CJNE A,#0DH,NK10 </P>
<P class=style28>MOV KEYBUF,#9 </P>
<P class=style28>LJMP DK3 </P>
<P class=style28>NK10: CJNE A,#0BH,NK11 </P>
<P class=style28>MOV KEYBUF,#10 </P>
<P class=style28>LJMP DK3 </P>
<P class=style28>NK11: CJNE A,#07H,NK12 </P>
<P class=style28>MOV KEYBUF,#11 </P>
<P class=style28>LJMP DK3 </P>
<P class=style28>NK12: NOP </P>
<P class=style28>DK3: </P>
<P class=style28>MOV A,KEYBUF </P>
<P class=style28>MOV DPTR,#TABLE </P>
<P class=style28>MOVC A,@A+DPTR </P>
<P class=style28>MOV P0,A </P>
<P class=style28>MOV A,KEYBUF </P>
<P class=style28>MOV B,#2 </P>
<P class=style28>MUL AB </P>
<P class=style28>MOV TEMP,A </P>
<P class=style28>MOV DPTR,#TABLE1 </P>
<P class=style28>MOVC A,@A+DPTR </P>
<P class=style28>MOV STH0,A </P>
<P class=style28>MOV TH0,A </P>
<P class=style28>INC TEMP </P>
<P class=style28>MOV A,TEMP </P>
<P class=style28>MOVC A,@A+DPTR </P>
<P class=style28>MOV STL0,A </P>
<P class=style28>MOV TL0,A </P>
<P class=style28>SETB TR0 </P>
<P class=style28>DK3A: MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>XRL A,#0FH </P>
<P class=style28>JNZ DK3A </P>
<P class=style28>CLR TR0 </P>
<P class=style28>NOKEY3: </P>
<P class=style28>MOV P3,#0FFH </P>
<P class=style28>CLR P3.7 </P>
<P class=style28>MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>XRL A,#0FH </P>
<P class=style28>JZ NOKEY4 </P>
<P class=style28>LCALL DELY10MS </P>
<P class=style28>MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>XRL A,#0FH </P>
<P class=style28>JZ NOKEY4 </P>
<P class=style28>MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>CJNE A,#0EH,NK13 </P>
<P class=style28>MOV KEYBUF,#12 </P>
<P class=style28>LJMP DK4 </P>
<P class=style28>NK13: CJNE A,#0DH,NK14 </P>
<P class=style28>MOV KEYBUF,#13 </P>
<P class=style28>LJMP DK4 </P>
<P class=style28>NK14: CJNE A,#0BH,NK15 </P>
<P class=style28>MOV KEYBUF,#14 </P>
<P class=style28>LJMP DK4 </P>
<P class=style28>NK15: CJNE A,#07H,NK16 </P>
<P class=style28>MOV KEYBUF,#15 </P>
<P class=style28>LJMP DK4 </P>
<P class=style28>NK16: NOP </P>
<P class=style28>DK4: </P>
<P class=style28>MOV A,KEYBUF </P>
<P class=style28>MOV DPTR,#TABLE </P>
<P class=style28>MOVC A,@A+DPTR </P>
<P class=style28>MOV P0,A </P>
<P class=style28>MOV A,KEYBUF </P>
<P class=style28>MOV B,#2 </P>
<P class=style28>MUL AB </P>
<P class=style28>MOV TEMP,A </P>
<P class=style28>MOV DPTR,#TABLE1 </P>
<P class=style28>MOVC A,@A+DPTR </P>
<P class=style28>MOV STH0,A </P>
<P class=style28>MOV TH0,A </P>
<P class=style28>INC TEMP </P>
<P class=style28>MOV A,TEMP </P>
<P class=style28>MOVC A,@A+DPTR </P>
<P class=style28>MOV STL0,A </P>
<P class=style28>MOV TL0,A </P>
<P class=style28>SETB TR0 </P>
<P class=style28>DK4A: MOV A,P3 </P>
<P class=style28>ANL A,#0FH </P>
<P class=style28>XRL A,#0FH </P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -