51单片机蜂鸣器例程大总结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////222222222222222222222222222222222222222////////////////////////////////////////// /////////////////////////////////////////////////// //////////////////以下是 主文件 main.c 的内容
while(--a); 汇编结果就知道了! }
//豪秒延时子程序 //采用 while(--a) 不要采用 while(a--); 各位可编译一下看看
void main()
{ unsigned char p,m; //m 为频率常数变量
unsigned char i=0;
TMOD&=0x0f;
TMOD|=0x01;
继续取下一音符
else
{m=music_tab[i++], n=music_tab[i++];} //取频率常数 和 节拍
常数
TR0=1; while(n!=0) Beep=~Beep,delay(m); 通过 P1 口输出音频(可多声道哦!) TR0=0;
//开定时器 1 //等待节拍完成,
//关定时器 1
sbit Beep = P1^5 ;
unsigned char n=0; //n 为节拍常数变量 unsigned char code music_tab[] ={ 0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数, 0x20, 0x40, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x10, 0x1C, 0x10, 0x18 , 0x40, 0x1C, 0x20, 0x20 , 0x20, 0x1C, 0x20, 0x18 , 0x20, 0x20, 0x80, 0xFF , 0x20, 0x30, 0x1C, 0x10 , 0x18, 0x20, 0x15, 0x20 , 0x1C, 0x20, 0x20, 0x20 , 0x26, 0x40, 0x20, 0x20 , 0x2B, 0x20, 0x26, 0x20 , 0x20, 0x20, 0x30, 0x80 , 0xFF, 0x20, 0x20, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x20, 0x26, 0x20, 0x2B , 0x20, 0x30, 0x20, 0x2B , 0x40, 0x20, 0x20, 0x1C , 0x10,
: main
* 函数功能 * 输入
: 主函数 :无
* 输出
:无
*******************************************************************************
/
void main()
{
Beep= 1;
Delay(5);
Beep= 0;
Delay(5);
/
void Delay(unsigned int i) {
char j; for(i; i > 0; i--)
for(j = 200; j > 0; j--); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/
#include <reg51.h>
sbit Beep = P1^5 ;
void Delay(unsigned int i) ;
/******************************************************************************
* * 函数名
;********************************文件信息************************************* ;文件名:Buzz.asm ;功能:使用 DP-51h 实验仪学习 I/O 作基本输出口并及其仿真调试程序的基本方法 ;说明: ;正确设置跳线 JP4 使 P1.3 与 BUZZ 相连,即把跳线置于上端 ;最后修改时间:2003 年 6 月 12
////////////////////////////////333333333333333333333333333333////////////////////////////////////////////////////////
//////////////////////////////////
//////////////////以下是 主文件 main.c 的内容
;*******************************Copyright (c)********************************
;**
广州周立功单片机发展有限公司研究所
;**
http://www.zlgmcu.com
;*************************************************************************
ORG 8000H AJMP MAIN
;伪指令,指定程序从 8000H 开始存放 ;跳转指令,程序跳转到 MAIN 处
MAIN: LOOP:
ORG 8100H
}
/******************************************************************************
*
* 函数名 * 函数功能 * 输入 * 输出
: Delay() : 延时函数
:无 :无
*******************************************************************************
0x18, 0x10, 0x20 , 0x20, 0x26, 0x20, 0x2B , 0x20, 0x30, 0x20, 0x2B , 0x40, 0x20, 0x30, 0x1C , 0x10, 0x18, 0x20, 0x15 , 0x20, 0x1C, 0x20, 0x20 , 0x20, 0x26, 0x40, 0x20 , 0x20, 0x2B, 0x20, 0x26 , 0x20, 0x20, 0x20, 0x30 , 0x80, 0x20, 0x30, 0x1C , 0x10, 0x20, 0x10, 0x1C , 0x10, 0x20, 0x20, 0x26 , 0x20, 0x2B, 0x20, 0x30 , 0x20, 0x2B, 0x40, 0x20 , 0x15, 0x1F, 0x05, 0x20 , 0x10, 0x1C, 0x10, 0x20 , 0x20, 0x26, 0x20, 0x2B , 0x20, 0x30, 0x20, 0x2B , 0x40, 0x20, 0x30, 0x1C , 0x10, 0x18, 0x20, 0x15 , 0x20, 0x1C, 0x20, 0x20 , 0x20, 0x26, 0x40, 0x20 , 0x20, 0x2B, 0x20, 0x26 , 0x20, 0x20, 0x20, 0x30 , 0x30, 0x20, 0x30, 0x1C , 0x10, 0x18, 0x40, 0x1C , 0x20, 0x20, 0x20, 0x26 , 0x40, 0x13, 0x60, 0x18 , 0x20, 0x15, 0x40, 0x13 , 0x40, 0x18, 0x80, 0x00 };
//以下程序都是在 VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是 STC89C52RC,但是在所有的 51 52 单片机上都是通用的。51 只是一个学习的基础 平台,你懂得。 //程序在关键的位置添加了注释。
//以下的程序依次是 1.八月桂花 2.蜂鸣器发声 3.生日快乐 4.祝你平安 5.无源蜂鸣器响 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////1111111111111111111111111111111111111111111111111111///////////////////////////////////// //////////////////////////////////////////////////////////////////// //////////////////以下是 主文件 main.c 的内容 /************************************************************************ [文件名] C51 音乐程序(八月桂花) [功能] 通过单片机演奏音乐
/******************************************************************************
*
* 实验名 * 使用的 IO
: 蜂鸣器实验 : P1^5
* 实验效果 * 注意
: 蜂鸣器响。 :
*******************************************************************************
/**********************************************************************/ #include <REG52.H> #include <INTRINS.H> //本例采用 89C52, 晶振为 11.0592MHZ //关于如何编制音乐代码, 其实十分简单,各位可以看以下代码. //频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍; //所以拿出谱子, 试探编吧!
void int0() interrupt 1 { TH0=0xd8;
TL0=0xef; n--; }
//采用中断 0 控制节拍
void delay (unsigned char m) {
unsigned i=3*m; while(--i); }
//控制频率延时
void delayms(unsigned char Βιβλιοθήκη Baidu) {
TH0=0xd8;TL0=0xef;
IE=0x82;
play:
while(1)
{
a: p=music_tab[i]; if(p==0x00)
{ i=0, delayms(1000); goto play;}
//如果碰到结束符,延时 1
秒,回到开始再来一遍 else if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a;} //若碰到休止符,延时 100ms,
MOV SP,#60 ACALL MUSIC
AJMP LOOP
;伪指令,指定以下程序从 8100H 开始存放 ;给堆栈指针赋初值
;*********************** ;蜂鸣器输出声响子程序 ;********************** MUSIC:
MOV R5,#60H MIC:
CPL P1.3 ACALL DELAY5MS DJNZ R5,MIC RET
;控制音长 ;控制音调
;*************** ;延时子程序
;***************
DELAY5MS:
MOV R7,#3H
DELAY0:
MOV R6,#40H