单片机按键控制蜂鸣器发声程序
- 格式:doc
- 大小:17.50 KB
- 文档页数:3
单片机蜂鸣器工作原理
单片机蜂鸣器的工作原理是通过控制单片机的IO口发送高低
电平信号来驱动蜂鸣器发出声音。
具体步骤如下:
1. 首先需要将蜂鸣器的正极连接到单片机的某个IO口,将负
极连接到单片机的地(GND)。
2. 在单片机的程序中,通过设置IO口的电平来控制蜂鸣器的
工作状态。
3. 当IO口输出高电平时,蜂鸣器处于静音状态,不发出声音。
4. 当IO口输出低电平时,蜂鸣器处于工作状态,会发出连续
的声音。
通过不断地改变IO口输出的高低电平信号的间隔时间和持续
时间,可以控制蜂鸣器发出不同频率和音调的声音。
根据需求,可以编写相应的单片机程序来实现不同的蜂鸣器音效和音乐播放效果。
第1篇一、实验目的1. 了解按键电路的工作原理。
2. 掌握蜂鸣器的工作原理及其控制方法。
3. 学习使用C语言进行嵌入式编程。
4. 培养动手实践能力和团队合作精神。
二、实验原理1. 按键电路:按键电路由按键、上拉电阻和下拉电阻组成。
当按键未被按下时,上拉电阻将输入端拉高;当按键被按下时,下拉电阻将输入端拉低。
2. 蜂鸣器电路:蜂鸣器是一种发声元件,其工作原理是利用电磁铁的磁力使振动膜片振动,从而产生声音。
蜂鸣器的控制主要通过改变输入信号的频率来实现。
3. 计数原理:通过按键输入信号,实现计数器的计数功能。
当按键被按下时,计数器加一;当按键被连续按下时,计数器的计数值随之增加。
三、实验器材1. 单片机开发板(如STC89C52)2. 按键3. 蜂鸣器4. 电阻5. 接线6. 电脑7. 调试软件(如Keil uVision)四、实验步骤1. 设计电路图:根据实验要求,设计按键、蜂鸣器和单片机的连接电路图。
2. 编写程序:使用C语言编写程序,实现按键计数和蜂鸣器控制功能。
3. 编译程序:将编写好的程序编译成机器码。
4. 烧录程序:将编译好的机器码烧录到单片机中。
5. 调试程序:通过调试软件对程序进行调试,确保程序正常运行。
6. 测试实验:将单片机连接到实验电路中,进行按键计数和蜂鸣器控制测试。
五、实验代码```cinclude <reg52.h>define uchar unsigned chardefine uint unsigned intsbit key = P3^2; // 按键连接到P3.2端口sbit buzzer = P1^0; // 蜂鸣器连接到P1.0端口uchar count = 0; // 计数器void delay(uint t) {uint i, j;for (i = 0; i < t; i++)for (j = 0; j < 127; j++);}void buzzer_on() {buzzer = 0; // 使蜂鸣器发声}void buzzer_off() {buzzer = 1; // 使蜂鸣器停止发声}void main() {while (1) {if (key == 0) { // 检测按键是否被按下delay(10); // 消抖if (key == 0) {count++; // 计数器加一buzzer_on(); // 使蜂鸣器发声delay(500); // 发声时间buzzer_off(); // 停止发声}}}}```六、实验结果与分析1. 当按键未被按下时,蜂鸣器不发声。
单片机课程设计报告蜂鸣器河南师范大学新联学院单片机课程设计报告课程单片机原理及接口技术设计题目蜂鸣器演奏歌曲年级专业级计算机科学与技术学号 11学生姓名李指导教师莹6 月 15 日蜂鸣器演奏歌曲实验报告一、要求完成驱动蜂鸣器歌曲演奏的实验二、目的1、学习KEIL软件的使用方法;2、掌握BST-V51单片机学习板设计蜂鸣器音乐的发生;3、掌握设计中各模块的功能,能够填入并演奏曲子;4、学习乐谱的基本知识,掌握其演奏的原理。
三、分析1、基本原理简述声音是经过振动产生的。
单片机对某一引脚以一定的频率循环置1置0,该引脚便产生一定频率的方波,方波经过放大,作用于一定的物理实件(蜂鸣器),就产生了一定频率的声音。
若改变输出方波的频率,产生的声音随之改变。
经过控制输出方波的时间长短,声音的长短也可以得到控制,因此,根据乐谱,以类似的音及同样的节拍,单片机就能够产生电子音乐。
音乐的播放选择能够经过按键的输入得以实现。
为简便起见,以一定的频率方波产生的音在其每个周期内高低幅值得时间各占一半。
因此,输出引脚在每个方波周期内要动作两次:一次升高,一次降低。
即输出引脚的频率是原音频率的两倍。
2、单片机产生不同频率脉冲信号的原理(1)要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期的时间再对I/O反相,就能够在I/O脚上得到此频率的脉冲。
(2)利用8051的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法如下:例如,频率为523Hz,其周期天/523 S=1912uS,因此只要令计数器计时956uS/1us=956,在每计数956次时就将I/O反接,就可得到中音DO(532Hz)。
计数脉冲值与频率的关系公式如下: N=Fi/2/Fr(N:计数值,Fi:内部计时一次为1uS,故其频率为1MHz,Fr:要产生的频率)(3)其计数值的求法如下:T=65536-N=65536-Fi/2/Fr计算举例:设K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。
单片机开发报告院系:电子工程学院专业:自动化班级:自动化1401学号:8姓名:越指导老师:星光2018年01 月04 日一.系统任务按键控制蜂鸣器发声二.电路原理图三.程序设计容“叮咚”电子门铃实验程序:常见的家用电子门铃在有客人来访时候,如果按压门铃按钮时,室会发出“叮咚”声音,本实验程序模拟电子门铃的发音,当我们按压实验板上的K1按钮时候,蜂鸣器发出“叮咚”音乐声,是一个比较实用的程序。
使用无源蜂鸣器输出7个基本音阶声音是由物体振动所产生的。
只是由于物体的材料以及振幅、频率不同,而产生不同的声音。
声音的响度是由振幅决定的,而音调则是由频率决定的,那么我们只需要控制物体振动的频率,就可以发出固定的声调。
五.汇编程序ORG 0000HAJMP STARTORG 000BHINC 20H ;中断服务,中断计数器加1MOV TH0,#0D8HMOV TL0,#0F0H 12M晶振,形成10毫秒中断RETIORG 001BHLJMP INTT1 ;跳转到T1中断服务程序START: MOV DPTR,#00H ;初始化程序MOV A,#00HOBUF1 EQU 30HOBUF2 EQU 31HOBUF3 EQU 32HOBUF4 EQU 33HFLAGB BIT 00HSTOPB BIT 01HMOV SP,#50HMOV TH0,#0D8HMOV TL0,#0F0HMOV TMOD,#21HMOV TH1,#09HMOV TL1,#09HMOV IE,#8AHAJMP LOOPLOOP: JNB P3.2,MUSIC0JNB P3.1,MAINAJMP LOOPMAIN:JB P3.1,MAIN ;检测p3.1按钮LCALL YS10M ;延时去抖动JB P3.1,MAINSETB TR1 ;按钮有效MOV OBUF1,#00HMOV OBUF2,#00HMOV OBUF3,#00HMOV OBUF4,#00HCLR FLAGBCLR STOPBJNB STOPB,$AJMP START ;发出“叮咚”完毕,返回重新检测按钮YS10M: ;10ms延时子程序MOV R6,#20D1:MOV R7,#100DJNZ R7,$DJNZ R6,D1RETTING: AJMP STARTINTT1: ;定时器T1中断服务程序INC OBUF3 ;中断服务程序中发出一声“叮咚”响声MOV A,OBUF3CJNE A,#100,NEXTMOV OBUF3,#00HINC OBUF4MOV A,OBUF4CJNE A,#20,NEXTMOV OBUF4,#00HJB FLAGB,PGSTPCPL FLAGBAJMP NEXT PGSTP:SETB STOPBCLR TR1LJMP INT0RET NEXT:JB FLAGB,SOU2INC OBUF2MOV A,OBUF2CJNE A,#04H,INT0RETMOV OBUF2,#00HCPL P1.5LJMP INT0RETSOU2:INC OBUF1MOV A,OBUF1CJNE A,#05H,INT0RETMOV OBUF1,#00HCPL P1.5INT0RET:RETIMUSIC0: JB p3.2,MUSIC0LCALL YS10MJB p3.2,MUSIC0NOPMOV DPTR,#DAT 表头地址送DPTRMOV 20H,#00H ;中断计数器清0MOV B,#00H ;表序号清0 MAIN2: JNB P3.3,TINGCLR AMOVC A,A+DPTR ;查表取代码JZ END0 ;是00H,则结束CJNE A,#0FFH,MUSIC5LJMP MUSIC3MUSIC5:NOPMOV R6,AINC DPTRMOV A,BMOVC A,A+DPTR ;取节拍代码送R7MOV R7,ASETB TR0 ;启动计数MUSIC2:NOPCPL P1.5MOV A,R6MOV R3,ALCALL DELMOV A,R7CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?;不等,则继续循环MOV 20H,#00H ;等于,则取下一代码INC DPTRINC BLJMP MAIN2MUSIC3: ;休止100毫秒NOPCLR TR0MOV R2,#0DHMUSIC4:NOPMOV R3,#0FFHLCALL DELDJNZ R2,MUSIC4INC DPTRLJMP MAIN2NOPMOV R2,#0FFH ;歌曲结束,延时MUSIC6:MOV R3,#00HLCALL DELDJNZ R2,MUSIC6CLR TR0LJMP LOOPDEL:NOPDEL3:MOV R4,#03HDEL4:NOPDJNZ R4,DEL4NOPDJNZ R3,DEL3RETDENG1: MOV R3,#64HDJNZ R3,$AJMP MAINDB30h,30h,26h,26h,20h,20h,1ch,1ch,1ah,1ah,18h,18h,00h END六、程序下载及调试步骤:1.点击translate 按钮预编译2.点击build 按钮编译3.点击rebuild 按钮编译所有目标4.打开普中烧录软件5.点击程序下载. . .. .. .四.程序流程图。
51单片机蜂鸣器代码理解1.引言1.1 概述概述:蜂鸣器是一种广泛应用于电子设备中的声音输出装置,它通过控制某个频率的电信号使蜂鸣器发出特定的声音。
而51单片机,则是一种常见的单片机芯片,具有广泛的应用领域。
本文将主要探讨51单片机蜂鸣器的代码理解和应用。
通过对其基本原理的概述以及相关代码的解析,希望读者能够深入理解51单片机蜂鸣器的工作原理和实现方式。
在第二部分中,我们将介绍单片机蜂鸣器的基本原理。
包括如何通过单片机控制蜂鸣器的电信号频率和时长,从而实现不同的声音效果。
接着,在第二点中,我们将详细解析51单片机蜂鸣器的代码。
通过对代码的分析,读者可以了解到如何使用51单片机的引脚功能和定时器功能来控制蜂鸣器。
最后,在结论部分,我们将对所述内容进行总结,并展望51单片机蜂鸣器在未来的应用前景。
蜂鸣器作为一种重要的声音输出装置,具有广泛的应用前景,可以应用于报警系统、提醒装置等领域。
通过本文的阅读,读者将能够全面了解51单片机蜂鸣器的工作原理和代码实现方式,为相关领域的应用开发提供参考和指导。
让我们开始探索吧!1.2 文章结构文章结构的部分主要介绍了本文的组织和分类方式,以帮助读者更好地理解文章的内容和思路。
本文按照以下结构进行组织:1. 引言部分:介绍了文章的概述、结构和目的。
通过引言部分,读者可以初步了解到本文的内容和主题,并对文章的结构和目的有一个整体的认识。
2. 正文部分:主要分为两个小节,分别是"单片机蜂鸣器的基本原理"和"51单片机蜂鸣器代码解析"。
2.1 单片机蜂鸣器的基本原理:该部分将详细介绍单片机蜂鸣器的基本工作原理,包括蜂鸣器的构成和工作原理,以及单片机如何控制蜂鸣器发出指定的声音。
2.2 51单片机蜂鸣器代码解析:该部分将对51单片机蜂鸣器的代码进行解析,包括如何初始化引脚、设置定时器和中断等相关代码。
通过对代码的逐行解析和说明,读者可以更加深入地理解代码的功能和实现原理。
单片机蜂鸣器发声原理
单片机蜂鸣器发声原理可以简单描述为以下步骤:
1. 准备工作:首先,需要将蜂鸣器连接到单片机的一个输出口(一般为I/O引脚)。
蜂鸣器有两个引脚,一个为正极(VCC),一个为负极(GND)。
2. 产生方波:在单片机中,通过对蜂鸣器所连接的引脚设置为高电平和低电平之间的快速切换,能够产生一个频率一定、占空比可调节的方波信号。
这个方波信号就是蜂鸣器声音的基准信号。
3. 驱动蜂鸣器:通过不断地将方波信号发送到连接蜂鸣器的引脚,单片机就能够驱动蜂鸣器发出声音。
当方波信号为高电平时,蜂鸣器内部的振膜向前位移,当方波信号为低电平时,蜂鸣器内部的振膜向后位移。
这种间隔的振动就会产生声音。
4. 控制频率和占空比:通过改变方波信号的高电平和低电平之间的时间长度,可以控制蜂鸣器发声的频率和占空比。
频率决定了声音的音调,而占空比则决定了声音的响度和持续时间。
通过上述步骤,单片机可以通过控制蜂鸣器的引脚输出方波信号,从而产生不同频率、不同音调的声音。
这就是单片机蜂鸣器发声的原理。
单片机蜂鸣器发声代码
单片机蜂鸣器是单片机开发中经常使用的一种输出设备,在很多作品中都发挥着很重要的作用。
本文将介绍如何通过单片机控制蜂鸣器发出不同频率的声音。
一、硬件设计
我们需要使用一个蜂鸣器和一块单片机开发板,比如STC89C52。
蜂鸣器有正负两个针脚,需要将正极接到控制单片机的GPIO端口上,负极接地即可。
1. 预处理指令
首先需要在头文件中定义单片机的型号和所要使用的GPIO端口。
```
#include <STC89C5xRC.H> //使用STC89C52
#define buzz P2 //定义蜂鸣器控制口
```
2. 主函数
接下来就是核心部分,主函数中需要实现的就是通过改变GPIO口的电平来控制蜂鸣器发出不同频率的声音。
对于控制蜂鸣器发出持久的“滴滴声”,可以采用下面的程序:
程序中先将GPIO口输出低电平,等待一段时间后再输出高电平,蜂鸣器发出持续的“滴滴声”。
如果想控制蜂鸣器发出不同频率的声音,可以修改上述程序中的DelayMs()函数来设置不同的延时时间。
因为蜂鸣器的振动频率与输入信号的高低电平时间比例有关,所以延时时间变化会使输出的声音频率发生变化。
比如,如果想让蜂鸣器发出音调为“咳咳声”,可以改变延时时间来实现。
如此,蜂鸣器就发出了“咳咳声”。
以上就是单片机蜂鸣器发声的基本方法,不同的延时时间可以产生不同的声音效果,可以根据实际需要进行调整。
单⽚机学习(四)蜂鸣器和独⽴按键的使⽤⽬录蜂鸣器两种蜂鸣器的介绍有源蜂鸣器⼀般是输⼊⼀个电流或电压即可直接驱动⼯作,⽽⽆源蜂鸣器则需要输⼊脉冲信号才可以进⾏⼯作。
在51单⽚机开发板上的即为⽆源蜂鸣器。
蜂鸣器相关电路图可以看出,信号是通过P15传递到ULN2003D芯⽚后进⽽传递到芯⽚的OUT5(即BEEP端⼝)再传递到蜂鸣器中的,其中ULN2003D芯⽚起着电流放⼤的作⽤。
控制代码⾸先我们先获得控制蜂鸣器的引脚,从电路图可以看出是P15,所以:sbit BEEP= P1^5;因为这是⽆源蜂鸣器,所以我们需要给它提供脉冲信号输⼊才能使它⼯作。
⽽当BEEP为0时有电流,BEEP为1时⽆电流,所以我们需要循环改变BEEP的值,主函数代码如下所⽰:int main() {while (1){BEEP = ~BEEP;deley(10);}}如果我们希望改变蜂鸣器的⾳调,只需要改变脉冲信号的频率即可,也就是while循环中deley()的参数。
我们也可以不断改变deley()中填⼊的参数来使蜂鸣器发出奇怪的声⾳ :int main() {u16 time = 10;u8 cnts = 50;u8 i;for(time=10;time<200;time++) {for(i=0;i<cnts;i++) {BEEP = ~BEEP;deley(time);}}}独⽴按键独⽴按键电路图可以看到,这4个独⽴按键都是⼀端和单⽚机的引脚(P3[0..3])相连,⽽另⼀端直接接地的。
这些按键的效果是,当按键没有按下时,它们对应的端⼝的输出是⾼电平,⽽当按键按下之后,这些端⼝的输出则变为低电平了。
因此我们可以使⽤轮询的⽅式查看这些端⼝的电平情况来检测按钮是否被按下,如果按下,则我们可以进⾏计数等控制其他元件的操作。
按键控制⼀个LED的点亮和熄灭我们希望当点击按键时,第⼀个LED点亮,⽽在此单击时则熄灭。
按照之前的思路,我们很容易就能写出对应的控制代码:sbit OneLED = P2^0; // 使⽤OneLED来控制对应的引脚的输出sbit k1 = P3^1;void keypros() {if (k1 == 0) {deley(1000); // 消抖if (k1 == 0) {OneLED = ~OneLED;}while (!k1);}}int main() {while (1) {keypros();}}重要的是keypros()函数中的内容,当我们点击第⼀个按钮时,k1的值会变为0,因此我们进⾏轮询的时候就会进⼊到keypros()函数的第⼀个if中。
本例使用延时函数实精品文档按键发音/* 名称:按键发音说明:按下不同的按键会是SOUNDE 发出不同频率的声音。
现不同频率的声音输出,以后也可使用定时器*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit BEEP=P3A 7;sbit K 仁 P1A4;sbit K2=P1A5;sbit K3=P1A6;sbit K4=P1A7;// 延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}// 按周期 t 发音void Play(uchar t){uchar i;for(i=0;i<100;i++){BEEP=~BEEP;DelayMS(t);}BEEP=0;}void main(){P1=0xff;BEEP=0;while(1){if(K1==0) Play(1);if(K2==0) Play(2);if(K3==0) Play(3);if(K4==0) Play(4);}}精品文档播放音乐/* 名称:播放音乐说明:程序运行时播放生日快乐歌, 未使用定时器中断,所有频率完全用延时 实现*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit BEEP=P3A7;// 生日快乐歌的音符频率表,不同频率由不同的延时来决定uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159, 169,190,119,119,126,159,142,159,0};// 生日快乐歌节拍表,节拍决定每个音符的演奏长短uchar code SONG_LONG[]= {9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0};// 延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}// 播放函数void PlayMusic(){ uint i=0,j,k; while(SONG_LONG[i]!=0||SONG_TONE[i]!=0){ //播放各个音符,SONG_LON为拍子长度for(j=0;j<SONG_LONG[i]*20;j++){BEEP=~BEEP;〃SONG_TON延时表决定了每个音符的频率for(k=0;k<SONG_TONE[i]/3;k++);} DelayMS(10);i++;}}void main(){BEEP=0;while(1){PlayMusic(); // 播放生日快乐DelayMS(500); // 播放完后暂停一段时间}精品文档。
基于stc89c516rd+单片机蜂鸣器编程
摘要:
一、引言
二、STC89C516RD+单片机简介
三、蜂鸣器的工作原理
四、编程实现
1.硬件连接
2.编写程序
3.程序分析
五、总结
正文:
一、引言
1.任务背景
2.目的与意义
二、STC89C516RD+单片机简介
1.单片机概述
2.STC89C516RD+的特性与优势
三、蜂鸣器的工作原理
1.蜂鸣器的基本构造
2.工作原理简述
四、编程实现
1.硬件连接
1.单片机与蜂鸣器的连接
2.电源电路
2.编写程序
1.初始化模块
2.按键控制蜂鸣器鸣叫
3.蜂鸣器鸣叫时间控制
3.程序分析
1.程序结构
2.关键代码解析
五、总结
1.任务完成情况
2.可能的改进与优化
3.对未来基于单片机的蜂鸣器编程的展望。
单片机蜂鸣器实验C程序:#include "reg51.h"#define uchar unsigned char#define uint unsigned intsbit FM=P2^3;void delay ( uchar x){uint y;for (; x > 0 x-- )for( y=500 y>0;y--);}void main(){ FM=0;while(1){delay(20);FM=1;delay(20);FM=0;}} 因为单片机的IO口驱动能力不够让蜂鸣器发出声音,所以我们通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,你要是输出高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音单片机驱动蜂鸣器原理与设计蜂鸣器是一种一体化结构的电子讯响器,本文介绍如何用单片机驱动蜂鸣器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。
多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
下面是电磁式蜂鸣器的外形图片及结构图。
电磁式蜂鸣器实物图:一、电磁式蜂鸣器驱动原理蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。
#include<reg52.h> //包含52单片机寄存器定义的头文件sbit sound=P3^7; //将sound位定义为P3.7unsigned int C; //储存定时器的定时常数//以下是C调中音的音频宏定义#define dao 523 //将"dao"宏定义为中音"1"的频率523Hz#define re 587 //将"re"宏定义为中音"2"的频率587Hz#define mi 659 //将"mi"宏定义为中音"3"的频率659Hz#define fa 698 //将"fa"宏定义为中音"4"的频率698Hz#define sao 784 //将"sao"宏定义为中音"5"的频率784Hz#define la 880 //将"la"宏定义为中音"6"的频率880Hz#define xi 987 //将"xi"宏定义为中音"7"的频率523Hz/*******************************************函数功能:1个延时单位,延时200ms******************************************/void delay(){unsigned char i,j;for(i=0;i<250;i++)for(j=0;j<250;j++);}/*******************************************函数功能:主函数******************************************/void main(void){unsigned char i,j;//以下是《两只老虎》歌曲unsigned int code f[]={dao,re,mi,dao, //每行对应一小节音符dao,re,mi,dao,mi,fa,sao,mi,fa,sao,sao,la,sao,fa,mi,dao,sao,la,sao,fa,mi,dao,dao,sao,dao,dao,sao,dao,0xff}; //以0xff作为音符的结束标志//以下是简谱中每个音符的节拍//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位unsigned char code JP[ ]={2,2,2,2,2,2,2,2,2,2,3,2,2,3,1,2,2,1,2,2,1,2,2,1,2,2,2,2,2,2,2,2,};EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x00; // 使用定时器T0的模式1(13位计数器)while(1) //无限循环{i=0; //从第1个音符f[0]开始播放while(f[i]!=0xff) //只要没有读到结束标志就继续播放{C=460830/f[i];TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法TR0=1; //启动定时器T0for(j=0;j<JP[i];j++) //控制节拍数delay(); //延时1个节拍单位TR0=0; //关闭定时器T0i++; //播放下一个音符}}}/***********************************************************函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频的方波************************************************************/void Time0(void ) interrupt 1 using 1{sound=!sound; //将P3.7引脚输出电平取反,形成方波TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法}。