#51单片机实现的音乐闹钟程序代码.docx

上传人:b****3 文档编号:4636587 上传时间:2022-12-07 格式:DOCX 页数:15 大小:17.64KB
下载 相关 举报
#51单片机实现的音乐闹钟程序代码.docx_第1页
第1页 / 共15页
#51单片机实现的音乐闹钟程序代码.docx_第2页
第2页 / 共15页
#51单片机实现的音乐闹钟程序代码.docx_第3页
第3页 / 共15页
#51单片机实现的音乐闹钟程序代码.docx_第4页
第4页 / 共15页
#51单片机实现的音乐闹钟程序代码.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

#51单片机实现的音乐闹钟程序代码.docx

《#51单片机实现的音乐闹钟程序代码.docx》由会员分享,可在线阅读,更多相关《#51单片机实现的音乐闹钟程序代码.docx(15页珍藏版)》请在冰豆网上搜索。

#51单片机实现的音乐闹钟程序代码.docx

#51单片机实现的音乐闹钟程序代码

功能描述:

产品可以显示时间和日期,时间格式为hhmmss 日期格式为yy.mm.dd

                时间和日期轮流显示。

时间显示5S日期显示3S。

               可以设置5个闹铃,闹铃音乐可以设置两种:

毛驴和童年。

                三个按键对时间和闹铃进行设置,六个LED进行显示。

               计时采用DS1307。

继电时间不丢失,设置过的闹铃也不丢失。

               闹铃音乐由单片机的两个定时器去产生频率实现。

                                  

部分程序如下:

//*************************************************

//************************************************

//***********************************************

//程序名:

DS1307时钟程序

//功能描述:

用六个八段LED轮流显示时间

//         和日期。

有6个闹钟。

上电时从DS1307中读出

//         当前时间、日期、闹钟。

//

//

//

//

//

#include

#include

#defineucharunsignedchar

#defineuint unsignedint

#defineLEDP2

#defineLEDBitP0

#definenop _nop_(>

#defineLightCount 40

#defineLightMax   80

sbitSCL=P3^1。

sbitSDA=P3^0。

sbitModeKey=P1^0。

sbitUpKey=P1^1。

sbitDownKey=P1^2。

sbitSpeak=P3^6。

codeucharLCD_NUM[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}。

//0x25,

//uchar Clock[]={0x88,0x88,0x88}。

 codeuint   Music_Sound_Long1[]={4,8,4,8,8,4,8,4,4,4,                    /*童年*/

                                  8,4,8,4,4,4,4,4,16,4,

          4,8,4,4,4,4,4,8,4,4,

          4,8,4,4,4,4,4,4,16,4,

          4,8,4,4,4,4,4,8,4,4,

          4,8,4,4,4,4,4,4,16,4,

          8,4,8,4,4,4,8,8,4,4,

          4,4,4,4,4,4,4,4,4,16,

          4,8,4,8,8,4,8,4,4,4,

          8,4,8,4,4,4,4,4,16,4,

          8,4,8,8,4,8,4,4,4,8,

          4,8,4,4,4,4,4,16,0},

             Music_Sound_Long2[]={4,4,4,4,4,4,4,4,4,4,          /*小毛驴*/

                         4,4,16,4,4,4,4,4,4,4,

          4,4,4,4,4,8,4,4,4,4,

          4,4,4,4,4,4,4,4,4,16,

          4,4,4,4,2,2,2,2,4,4,

          4,4,4,4,16,0},

    Music_Sound_Tone1[]={379,379,379,379,425,477,477,477,425,477,

                      568,637,637,637,568,637,425,379,477,719,                       637,637,719,637,568,568,506,568,568,568,

       637,477,477,477,477,568,477,568,637,719,

       637,637,719,637,568,568,506,568,568,568,

       637,477,477,477,477,568,568,477,851,318,

       318,318,318,379,425,477,477,568,477,568,

       477,425,425,425,425,425,477,379,425,425,

       379,379,379,379,425,477,477,477,425,477,

       568,637,637,637,568,637,425,379,477,379,

       379,379,379,425,477,477,477,425,477,568,

       637,637,637,568,637,425,379,477,0},        /*童年*/

 Music_Sound_Tone2[]={956,956,956,719,637,637,637,637,568,568,    /*小毛驴*/

                      568,477,637,716,716,716,568,719,719,719,

       719,851,851,851,851,637,637,956,956,956,

       719,637,637,637,637,568,568,568,477,637,

       716,716,716,568,719,719,719,719,719,719,

       851,851,851,719,956,0}。

uchar DS1307[27]={0}。

//00为秒,01为分,02为时

//10为日,11为月,12为年

//20为闹钟控制,21为分,22为时。

//30为闹钟控制,31为分,32为时。

//40为闹钟控制,41为分,42为时。

//同上 

//同上

//闹钟控制十位为闹钟数

//闹钟控制个位为选择闹钟声音程序

//个位为零关闭闹钟

uchar DisplayArr[8][3]={0}。

//*********************************

voidBeep(void>。

voidDiplayClock(uchar*>。

//voidUsuaDisPlay(uchar*>。

voidDelay(uintCount>。

voidDiplayDelay(void>。

voidStart(void>。

voidStop(void>。

voidack(bit>。

bitcack(void>。

voidSend8bit(unsignedchar>。

 //高字节位先传字节最低位1为读,0为写

unsignedcharRead8bit(void>。

voidSendWord(unsignedchar,unsignedchar>。

unsignedcharReadWord(unsignedchar>。

voidReadDS1307(uchar>。

//**************************

voidModeButten(void>。

voidUpButten(void>。

voidDownButten(void>。

//********************

//函数名:

INC

//功能:

加1函数

voidINC(void>。

unsignedcharInc(uchar>。

unsignedcharDec(uchar>。

voidRing(void>。

//*********************************

ucharMode=0。

   //Mode=0轻按UP、Down为查看时间、日期、闹钟

                //Mode=1

ucharRead=0。

   //Read==1为读DS1307

ucharJuge=0。

     //闪烁位数

ucharDisplyMode。

ucharLight。

ucharBlack。

ucharDisplayLoop。

ucharRingFlag。

uchar Sound_Long_Count。

uintPeriod。

/********************* 音乐频率中断 ******************************************/

voidMusic_Tone(>interrupt3using2

{

    Speak=!

Speak。

 TL1=(65536-Period>&0xff。

 TH1=(65536-Period>>>8。

 TF1=0。

}

/********************** 10ms中断变量 ***************************************/

voidMusic_Long(>interrupt1 using3

{

  if(Sound_Long_Count!

=0>Sound_Long_Count--。

 TL0=(65536-10000>&0xff。

 TH0=(65536-10000>>>8。

 TF0=0。

/* TL2=(65536-10000>&0xff。

 TH2=(65536-10000>>>8。

 TF2=0。

*/

}      

//***********************************

main(>

{

 uchari,j,Loop。

   uchar RingMinBuffer。

 uchar RingHouBuffer。

 uchar RingMinBufferOld=0xff。

 ucharRingTimeLong。

 TMOD=0x11。

        /*开定时器0,工作在方式3模式下*/

// TH0=TL0=0x6。

     /*置定时器初值*/

 TL0=(65536-10000>&0xff。

 TH0=(65536-10000>>>8。

 IE=0xca。

         /*允许定时器中断*/

// ET2=1。

//**************************************************88

//**************************************************

  

/*

    for(i=0。

i<6。

i++>

    {

       Stop(>。

        Start(>。

           Send8bit(0xD0>。

       if(cack(>==1>continue。

       Send8bit(0x08+i*0x03>。

    if(cack(>==1>continue。

    Send8bit(i*0x10+0x10>。

    if(cack(>==1>continue。

        Stop(>。

     }

*/

   ReadDS1307(26>。

 for(DisplyMode=0。

DisplyMode<8。

DisplyMode++>

   {

   INC(>。

   }

 DisplyMode=0。

   ReadDS1307(26>。

       for(i=0,Loop=0。

i<8。

i++>

    for(j=0。

j<3。

j++,Loop++>

        {

         if(Loop==3>Loop++。

      if(Loop==7>Loop++。

         DisplayArr[i][j]=DS1307[Loop]。

     }

  for(i=2。

i<8。

i++>

     for(j=0。

j<3。

j++>

     {

         switch(j>

           {

                   case0:

 DisplayArr[i][j]&=0x73。

break。

  //开关闹钟

       case1:

 DisplayArr[i][j]&=0x7F。

break。

  //分钟

       case2:

 DisplayArr[i][j]&=0x3F。

break。

           }

     }

     DisplayArr[1][0]&=0x3F。

    //日期

   DisplayArr[1][1]&=0x1F。

  //月份

  Speak=0。

 while(1>

  {

      //DisplayClock(6,Clock>。

    //DiplayClock(Clock>。

       // DiplayClock(DisplayArr[DisplyMode]>。

  //Juge=1。

      DiplayClock(DisplayArr[DisplyMode]>。

//*****************************************************************111

//读出的数存入单片机中,

    if(Read==1>

      {

            ReadDS1307(26>。

    Read=0。

    }

   else ReadDS1307(6>。

     DiplayClock(DisplayArr[DisplyMode]>。

       for(i=0,Loop=0。

i<8。

i++>

    for(j=0。

j<3。

j++,Loop++>

        {

         if(Loop==3>Loop++。

      if(Loop==7>Loop++。

         DisplayArr[i][j]=DS1307[Loop]。

      DiplayClock(DisplayArr[DisplyMode]>。

     }

//******************************************************************111

//******************************************************************222

//读出的数格式化

  for(i=2。

i<8。

i++>

     for(j=0。

j<3。

j++>

     {

         switch(j>

           {

                   case0:

 DisplayArr[i][j]&=0x73。

break。

  //开关闹钟

       case1:

 DisplayArr[i][j]&=0x7F。

break。

  //分钟

       case2:

 DisplayArr[i][j]&=0x3F。

break。

       default:

                                  DiplayClock(DisplayArr[DisplyMode]>。

           }

       DiplayClock(DisplayArr[DisplyMode]>。

     }

     DisplayArr[1][0]&=0x3F。

    //日期

   DisplayArr[1][1]&=0x1F。

  //月份

//********************************************************************222

      DiplayClock(DisplayArr[DisplyMode]>。

//  Beep(>。

  ModeButten(>。

  DownButten(>。

  UpButten(>。

        DiplayClock(DisplayArr[DisplyMode]>。

//**********************************************333

//日期时间交替显示程序            if(Juge==0>

   DisplayLoop++。

   if(DisplayLoop>10>DisplyMode=0。

   if(DisplayLoop>60>

    {

      DisplyMode=1。

    DisplayLoop=0。

     }

//***********************************************333              

//************************************************444

//闹钟程序比较

         if(Juge==0>

    {             for(i=2。

i<8。

i++>

       {

           DiplayClock(DisplayArr[DisplyMode]>。

                       if(DisplayArr[i][0]&0x0F==0>continue。

       if(DisplayArr[i][1]!

=DisplayArr[0][1]>continue。

          RingMinBuffer=DisplayArr[i][1]。

       if(RingMinBufferOld==RingMinBuffer>continue。

       if(DisplayArr[i][2]!

=DisplayArr[0][2]>continue。

                     if(RingFlag==0>RingMinBufferOld=0xff。

          RingFlag=DisplayArr[i][0]&0x0F。

               }

   }

//************************************************444

             ModeButten(>。

         DownButten(>。

         UpButten(>。

   

   DiplayClock(DisplayArr[DisplyMode]>。

   RingTimeLong=0。

   switch(RingFlag>

     {

         case1:

              {

            DisplyMode=0。

         i=0。

                              while(DisplayArr[0][1]==RingMinBuffer>       /*是否响闹铃1程序*/

                                   {

          /* if(DisplayArr[0][1]!

=RingMinBuffer>

              {

             RingMinBuffer=DisplayArr[0][1]。

             RingTimeLong++。

            }

          */

          RingMinBufferOld=RingMinBuffer。

           if(Music_Sound_Long1[i]==0>

           {

                DiplayClock(DisplayArr[DisplyMode]>。

                i=0。

                     }

                    Sound_Long_Count=Music_Sound_Long1[i]。

/*****/

                    Period=Music_Sound_Tone1[i]。

                    TL1=(65536-Period>&0xff。

                    TH1=(65536-Period>>>8。

                          DiplayClock(DisplayArr[DisplyMode]>。

                    i++。

                           if(RingFlag==1>

              {

              TR1=1。

              TR0=1。

           }

                    while(Sound_Long_Count!

=0>

           {

                DiplayClock(DisplayArr[DisplyMode]>。

             ModeButten(>。

                                                                    DownButten(>。

                                        UpButten(>。

             DiplayClock(DisplayArr[DisplyMode]>。

             if(RingFlag==0>

                {

                            Sound_Long_Count=0。

             }

                

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1