STC89C52单片机蜂鸣器唱歌实验

发布者:心语如画最新更新时间:2016-04-15 来源: eefocus关键字:STC89C52  单片机  蜂鸣器 手机看文章 扫描二维码
随时随地手机看文章
////////////////////////////////////////////////////////////////////////

 实现功能:通过对单片机定时器的配置,让其产生不同频率的方波,蜂鸣器根据频
      率的不同而发出不同的声音,来达到唱歌的目的
 实验板型号:KBL-XYD-C52
 实验名称:  蜂鸣器唱歌实验
 编写人:  谢应东
 编写日期:  2012-4-26     
////////////////////////////////////////////////////////////////////////
#include

#define uchar unsigned char
#define uint  unsigned int

uchar cCount;

sbit FMQ =P2^4;      //定义实验板上蜂鸣器器控制脚


unsigned char code SONG[] ={      //祝你平安
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,
                                  //路边的野华不要采
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,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,

};
////////////////////////////////////////////////////////////////////////
函数名称:Time0_Init
函数功能:定时器的初始化配置,使其能中断,中断的时间间隔为10ms
参数介绍:无
返回值: 
注意事项:注意此时实验板上用到的晶振为11.0592M的,要选用其他的,得重新配置
////////////////////////////////////////////////////////////////////////
void Init_Time0()
{
 TMOD = 0x01; //设置定时器0为模式1(16bit)

 TH0  = 0xDC; //给定时器0高八位赋初值
 TL0  = 0x00; //给定时器0第八位赋初值

 ET0  = 1;  //允许定时器0中断
 EA   = 1;  //打开全局中断 
}
////////////////////////////////////////////////////////////////////////
函数名称:Time0_Routine
函数功能:定时器0中断服务函数,重新给定时器0赋值,同时把全局变量cCount加1
参数介绍:无
返回值: 
注意事项:无
////////////////////////////////////////////////////////////////////////
void Time0_Routine() interrupt 1 using 1
{
 TH0 = 0xDC;   //重新给高八位赋新值
 TL0 = 0x00;   //重新给第八位赋新值
 cCount++;   //计数变量加1
}
////////////////////////////////////////////////////////////////////////
函数名称:DelayUs
函数功能:延时函数,通过示波器测试,此函数每执行一次大概能延时55us
参数介绍:iDelay_Us:执行此延时函数的次数
    iNumber1:第一个for语句所用的记录循环的变量
    iNumber2:第二个for语句所用的记录循环的变量 
返回值: 
注意事项:无
////////////////////////////////////////////////////////////////////////
void DelayUs(unsigned int iDelay_Us)
{
    uint iNumber1,iNumber2;
    for(iNumber1=0;iNumber1     {
        for(iNumber2=0;iNumber2<3;iNumber2++);
    }
}
////////////////////////////////////////////////////////////////////////
函数名称:FMQ_PlaySong
函数功能:控制实验板上与蜂鸣器相连的引脚输出不同的频率的方波,依次来控制蜂鸣
    器唱歌
参数介绍:cNumber:歌曲的选择,'0'代表“祝你平安”,‘1’代表“路边的野花不要采”
返回值: 
注意事项:无
////////////////////////////////////////////////////////////////////////
void FMQ_PlaySong(unsigned char cNumber)
{
 uchar cTemp1,cTemp2;
 uint iAddr;
 cCount = 0;      //中断计数器清0
 iAddr = cNumber * 217;   //歌曲的地址,可以参看SONG[],你就会明白
 while(1)
         //把音码变量数组里的值赋给临时变量
  cTemp1 = SONG[iAddr++];
     if (cTemp1 == 0xFF)          //休止符
     {
      TR0 = 0;
      DelayUs(100);    //延时
     }
     else if (cTemp1 == 0x00)   //判断是否歌曲结束
     {
      return;
     }
     else
     {
      cTemp2 = SONG[iAddr++];//判断完,不是休止符与结束符后,让蜂鸣器唱歌
      TR0 = 1;      //让定时器0开始工作
     while(1)
     {
       FMQ = ~FMQ;     //让蜂鸣器不停地在开与关之间切换
       DelayUs(cTemp1);
       if(cTemp2 == cCount)
       {
        cCount = 0;
        break;
       }
      }
     }
 }
}
////////////////////////////////////////////////////////////////////////
函数名称:main
函数功能:完成系统的初始化,让实验板上的蜂鸣器不停循环的唱上面的两首歌
参数介绍:无
返回值: 
注意事项:无
////////////////////////////////////////////////////////////////////////
void main()

 DelayUs(100);   //稳定系统
 Init_Time0(); //定时器0中断初始化
 while(1)
 {
  FMQ_PlaySong(0); //播放“祝你平安”
  DelayUs(100);    //延时一下,以便播放下一首歌
  FMQ_PlaySong(1); //播放“祝你平安”
  DelayUs(100);    //延时一下,以便播放下一首歌
 }
}

关键字:STC89C52  单片机  蜂鸣器 引用地址:STC89C52单片机蜂鸣器唱歌实验

上一篇:STC89C52单片机AD测试实验
下一篇:STC89C52单片机定时器1实现计数器

推荐阅读最新更新时间:2024-03-16 14:50

STM32单片机的PSAM卡驱动模块设计
引言 刷卡消费随着人们生活水平的提高已经成为常用的支付方式之一。为了保证刷卡消费的安全性,将PSAM卡内嵌于各种终端刷卡设备中。PSAM(Purchase SecureAccess Module,销售点终端安全存取模块),由IC卡发行主管部门或者应用主管机构发行,是可以用于对IC卡进行脱机消费交易认证的安全认证卡,主要应用于商用POS、网点终端、直连终端等设备上,支持多级发卡机制,适用于多应用的环境,符合识别卡、带触点的集成电路卡标准、ISO/IEC 7816—1/2/3/4以及《中国人民银行PSAM卡规范》。 1 PSAM卡简介 PSAM卡是接触式CPU卡的一种。CPU卡也称智能卡,卡内集成电路带有微处理CPU,存储单元
[单片机]
STM32<font color='red'>单片机</font>的PSAM卡驱动模块设计
瑞萨电子推出升级版R-Car V3H,满足包括驾乘人员监控系统的最新NCAP要求
全球半导体解决方案供应商瑞萨电子集团(TSE:6723)今日宣布,推出最新升级版R-Car V3H片上系统(SoC),为智能摄像头应用带来显著提升的深度学习性能,包括驾驶员/乘客监控系统(DMS/OMS)、车载前置摄像头、环视系统以及最高可达Level 2+级适用于大部分车辆的自动泊车功能。升级后的SoC集成了实时域上的传感器融合、高达ASIL C级指标和针对智能计算机视觉进行优化的体系结构。它以极具竞争力的系统成本为OEM和一级供应商提供高性能、低功耗解决方案,并支持最新的NCAP 2020要求及向NCAP 2025 3星级技术路线图的迁移。 基于2018年2月发布的SoC,融合了用于卷积神经网络(CNN)的集成IP等最新识
[汽车电子]
单片机8x8点阵让数字0从右到左依次显示循环
用的单片机是普中的开发板,8x8点阵用的是74hc595进行段选,P0口位选 74hc595 8x8点阵用的是共阴极(左边的) 这次我要实现的是让数字0从右到左依次显示 #include reg52.h #include intrins.h typedef unsigned int u16; typedef unsigned char u8; sbit SCLK=P3^6; sbit RCK=P3^5; sbit SER=P3^4; u8 code duan0 ={{0x00,0x3C,0x42,0x42,0x42,0x3C,0x00,0x00}, //数字0的段选 {0x3C,0x42,0x
[单片机]
<font color='red'>单片机</font>8x8点阵让数字0从右到左依次显示循环
利用TI全新统一存储器16位微控制器扩展价值链和高性能
2016年11月3日,北京讯 德州仪器(TI)今日宣布推出两款针对广泛感测和测量应用的全新低功耗微控制器(MCU),以扩展其超低功耗MSP430 FRAM MCU产品组合。全新的系列包括:  MSP430FR5994 MCU。该产品拥有256KB FRAM,同时其性能是其它低功耗MCU的40倍,能够通过全新且易于使用的集成型低能耗加速器(LEA)为开发人员提供数字信号处理(DSP)能力。  MSP430FR2111 MCU。该产品可利用扩展的TI MCU Value Line产品组合升级原有的8位设计,同时也是首次在小型3mmx3mm QFN封装中包含统一FRAM存储器。 全新的MCU将产品组合中所采用的集成式铁电
[嵌入式]
基于单片机实现微波频率测量系统的设计
1、概述 在通信系统中,频率测量具有重要地位。近几年来频率测量技术所覆盖的领域越来越广泛,测量精度越来越高,与不同学科的联系也越来越密切。与频率测量技术紧密相连的领域有通信、导航、空间科学、仪器仪表、材料科学、计量技术、电子技术、天文学、物理学和生物化学等。 频率测量一般都是由计数器和定时器完成,将两个定时/计数器一个设置为定时器,另一个设置为计数器,定时时间到后产生中断,在中断服务程序中处理结果,求出频率。这种方法虽然测量范围较宽,但由于存在软件延时,尽管在高频段能达到较高的精度,而低频段的测量精度较低。所以利用单片机测频时,如果选择不好的测量方法,可能会引起很大的误差。测量频率时如果不是真正依靠硬件控制计数或定时,而是由软
[单片机]
基于<font color='red'>单片机</font>实现微波频率测量系统的设计
如何使用通用单片机制作MIDI键盘
MIDI是电子乐器的语言,随着MIDI的诞生,数字化电子乐器已经越来越多,MIDI的应用也越来越普遍,在电子乐队演奏,电子音乐制作等各个领域,发挥着越来越大的作用。随着计算机技术的发展,声卡已经成为普通计算机的标准设备,通过声卡的MIDI接口,可以连接各种各样的MIDI设备。连上专供输入的MIDI键盘,再配上相应的软件,计算机就可以完成电子琴的功能,甚至可以进行电子音乐的制作。由于 MIDI自身的特点,它形成的音乐易于进行后期制作,越来越为广大音乐工作者所喜爱,而MIDI键盘作为输入最有效的工具,也越来越普及。 有些计算机音序软件支持用电脑键盘模拟琴键,可通过计算机键盘将音符输入计算机,有爱好者就用电脑键盘的控制芯片改装玩具电
[单片机]
如何使用通用<font color='red'>单片机</font>制作MIDI键盘
单片机程序数据类型相关
最近在调试单片机程序,总是遇到一些开始认为不可思议的事情,后来解决了问题后发现,都是因为自己书写程序不严谨,其主要原因是没有注意c语言的数据类型的数据范围。 对有符号、无符号数据的使用存在误区,对类型转换理解不到位。下面就举例一一说明: 1:一个简单的for循环,但因为数据溢出导致进入死循环,无法实现相应功能。 unsigned char i; for(i=0;i 256;i++) 语句; 咋看起来这语句没有什么问题。但仔细考虑发现,i在此循环中会溢出,i的值 0---255---0----255----0-----------。 2:在循环里还需要注意的是有符号数和无符号数进行比较时: unsigned char i; i=
[单片机]
汽车动力总成和底盘应用的AUDO MAX系列32位MCU
英飞凌科技股份公司(FSE:IFX /OTCQX:IFNNY)近日推出适用于汽车动力总成和底盘应用的全新AUDO MAX系列32位微控制器。AUDO MAX系列可为发动机管理系统满足欧5和欧6排放标准提供支持,使电动汽车的动力总成功能实现电气化。AUDO MAX系列的主要特性包括:高达300MHz的最大时钟频率、SENT和FlexRay™等高速接口以及利用PRO-SIL™特性为先进安全设计提供全面支持。此外,这种全新的微控制器适用于在高达170°C*的温度条件下使用。AUDO MAX系列以TriCore™处理器架构为基础,采用90纳米工艺制造。 “AUDO MAX 系列32位微控制器具备极高的性能和实时功能,目前还没
[汽车电子]
汽车动力总成和底盘应用的AUDO MAX系列32位<font color='red'>MCU</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved