EDN首页   博客首页

日志档案

发表于 2008-5-12 10:57:21

0

标签: 51单片机  定时器  按键扫描  

51 音乐按键 实验(十一)

点击下载

这个实验实现按下不同按键,蜂鸣器发出不同音调的声音.详情见附件.

平台:FDR51开发板

代码:

#include<AT89X52.h>
#include"key.h"               
sbit beep="P3"^7;//IO口宏定义区   
unsigned char Count="0";//全局变量 
/*********************************************************************
                      定时器0中断初始化函数
**********************************************************************/
  void Time0_Init()
{
 TMOD = 0x01;
 IE   = 0x82;
 TH0  = 0xD8;
 TL0  = 0xEF;  //12MZ晶振,10ms

/*************************************************************************
                      定时器0中断处理函数
**************************************************************************/
void Time0_Int() interrupt 1
{
 TH0 = 0xD8;
 TL0 = 0xEF;
 Count++;   //长度加1
}
/*********************************************************************************
                          延时函数
**********************************************************************************/

void Delay_xMs(unsigned char x)
{
 unsigned char i,j;
 for( i =0;i < x;i++ )for( j =0;j<3;j++ );
}  
/*********************************************************************************
                          放音子函数
    参数:frequence 决定音乐声调的变量
          length  决定某个音调播放的时间
*********************************************************************************/
void beeping(unsigned char frequence,unsigned char length)

 TR0=1;
 while(1)
 { 
  beep = !beep;                                              
  Delay_xMs(frequence);
  if ( length == Count )
  {
   Count = 0;
   break;
  }
 }
 TR0=0;
 beep=1;     //关蜂鸣器

/****************************************************
               程序主函数
*****************************************************/
void main()
{
 unsigned char k="0";
 Time0_Init();             //初始化定时器0
 while(1)
 { 
  k=getch();
  if(k!=255)beeping(k,20);
 } 
}

系统分类: 单片机   |   用户分类: 51单片机专区   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(202)    回复(0)  

投一票您将和博主都有获奖机会!