资源描述
汇编程序源码
晶振12M,已在Proteus下测试,听起来声音差不多
ORG 0
SJMP START
DLY: MOV R2,#20 ;延时程序
D1: MOV R3,#248
DJNZ R3,$
DJNZ R2,D1
RET
ORG 30H
START:
MOV TMOD,#1 ;定时器0方式1
MOV P3,#0FFH ;P3准备读数
JNB P3.0,DODO
ACALL DLY
JNB P3.1,RERE
ACALL DLY
JNB P3.2,MIMI
ACALL DLY
JNB P3.3,FAFA
ACALL DLY
JNB P3.4,SOSO
ACALL DLY
JNB P3.5,LALA
ACALL DLY
JNB P3.6,XIXI
ACALL DLY
JNB P3.7,DO2DO2
ACALL DLY
SJMP START
DODO:
LJMP DO
RERE:
LJMP RE
MIMI:
LJMP MI
FAFA:
LJMP FA
SOSO:
LJMP SO
LALA:
LJMP LA
XIXI:
LJMP XI
DO2DO2:
LJMP DO2
DO:
MOV TH0,#0FBH
MOV TL0,#44H
SETB TR0 ;开启定时器
JNB TF0,$ ;等待定时到
CLR TF0 ;清除中断
CPL P2.7 ;喇叭
JNB P3.0,DO
CLR TF0
SJMP START
RE:
MOV TH0,#0FBH
MOV TL0,#88H
SETB TR0
JNB TF0,$
CLR TF0
CPL P2.7
JNB P3.1,RE
CLR TF0
SJMP START
MI:
MOV TH0,#0FBH
MOV TL0,#0CCH
SETB TR0
JNB TF0,$
CLR TF0
CPL P2.7
JNB P3.2,MI
CLR TF0
SJMP START
FA:
MOV TH0,#0FCH
MOV TL0,#00H
SETB TR0
JNB TF0,$
CLR TF0
CPL P2.7
JNB P3.3,FA
CLR TF0
LJMP START
SO:
MOV TH0,#0FCH
MOV TL0,#44H
SETB TR0
JNB TF0,$
CLR TF0
CPL P2.7
JNB P3.4,SO
CLR TF0
LJMP START
LA:
MOV TH0,#0FCH
MOV TL0,#88H
SETB TR0
JNB TF0,$
CLR TF0
CPL P2.7
JNB P3.5,LA
CLR TF0
LJMP START
XI:
MOV TH0,#0FCH
MOV TL0,#0CCH
SETB TR0
JNB TF0,$
CLR TF0
CPL P2.7
JNB P3.6,XI
CLR TF0
LJMP START
DO2:
MOV TH0,#0FDH
MOV TL0,#00H
SETB TR0
JNB TF0,$
CLR TF0
CPL P2.7
JNB P3.7,DO2
CLR TF0
LJMP START
END
附上蜂鸣器发声的简单程序
1.汇编
ORG 0
START: CPL P2.7 ;蜂鸣器
LCALL DELAY
LJMP START
DELAY: MOV R7,#0FFH
DJNZ R7, $
RET
END
2.C语言
#include<reg51.h>
void delay(unsigned int z);//声明延时函数
sbit beep=P2^7;
void main()数
{
while(1){
beep=0;//蜂鸣器响
delay(1);//调用1ms延时
beep=1;//蜂鸣器不响
delay(1);//调用1ms延时
}
}
void delay(unsigned int z)//1ms延时,通过z值改变延时
{
unsigned int x;
for(;z>0;z--)
for(x=110;x>0;x--);
}
展开阅读全文