⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text1.c

📁 基于89s52的最小系統按鍵音樂計時系統
💻 C
字号:
///////////////////音乐按键计时器/////////////////////


#include "reg52.h"

int z=0,x=13;

sbit scanline_1=P2^3;
sbit scanline_2=P2^4;
sbit scanline_3=P2^5;
sbit scanline_4=P2^6;
sbit led_0=P2^7;
sbit P1_4=P1^4; 
sbit led1_select = P1^0;
sbit led2_select = P1^1;
sbit led3_select = P1^2;
sbit led4_select = P1^3;
unsigned count =0;
unsigned count1 =0;
unsigned count2 =0;
unsigned count3 =0;
unsigned count4 =0;
unsigned minuter =0;
unsigned sec =0;
void Init_cpu(void);
void DectoLED(unsigned);
void Disp_sparkle(void);
//////////////////////////////////////////////////////////
                                                       //
                                                        //
                                                        //
int MUSIC_SOUNDLONG1[]={6,6,9,3,6  };                  //
int MUSIC_SOUNDTONE1[]={95,71,80,95,80  };                  //
                                                        //                 ////////////////////////                                                    //                 //   
							                                               //    音乐频率的定义和 ///
																		   //音乐调用函数的声明////
                                                       //                  //////////////////////////
                                                      //
int MUSIC_SOUNDLONG2[]={6,3,3,6,3   };                 //
int MUSIC_SOUNDTONE2[]={239,212,189,159,142   };       //
int MUSIC_SOUNDLONG3[]={6,1,1, 1,2,                   //
};	                                                  //
int MUSIC_SOUNDTONE3[]={0xA2,0xB6,0xDA,0xFA,0x16       //
                                                      //
                                                      //
};		                                              //
							                          //
		void Scankey(void);				             //                  
	   void Music1(void);                              //
	   void DELAY1(int b);                            //
        void Music2(void);                           //
       void Music3(void);                           //
///////////////////////////////////////////////////////
//////////////////////////main fuction/////
void main()
{led_0=0;
 Init_cpu();
 led1_select = 0;
 led2_select = 0;
 led3_select = 0;
 led4_select = 0;
while(1)
  {
   Scankey();/////////////////扫描键盘
}//while


}

////////////////////////////////////
/////////////////////////////////

//sub function
void Music1(void)                  //////////////////音乐子程序定义///////////////////////                
  {
   int i,j,k;
   int soundlong,soundtone;
   int m;
   for(i=0;i<6;i++)
   {
   soundlong=MUSIC_SOUNDLONG1[i];
   soundtone=MUSIC_SOUNDTONE1[i];
   for(j=0;j<soundlong;j++)
     for(k=0;k<12;k++)
	   {for(m=0;m<soundtone*1;m++)
	    P1_4=0;led_0=1;
	    for(m=0;m<soundtone*1;m++)
		P1_4=1;led_0=0;
	   } 
	 
	  }
	  
  }



void Music2(void)
  {
   int i,j,k;
   int soundlong,soundtone;
   int m;
   for(i=0;i<6;i++)
   {
   soundlong=MUSIC_SOUNDLONG2[i];
   soundtone=MUSIC_SOUNDTONE2[i];
   for(j=0;j<soundlong;j++)
     for(k=0;k<12;k++)
	   {for(m=0;m<soundtone*1;m++)
	    P1_4=0;led_0=1;
	    for(m=0;m<soundtone*1;m++)
		P1_4=1;led_0=0;
	   } 
	 
	  }
  }
    
  

void Music3(void)
  {
   int i,j,k;
   int soundlong,soundtone;
   int m;
   for(i=0;i<6;i++)
   {
   soundlong=MUSIC_SOUNDLONG3[i];
   soundtone=MUSIC_SOUNDTONE3[i];
   for(j=0;j<soundlong;j++)
     for(k=0;k<12;k++)
	   {for(m=0;m<soundtone*1;m++)
	    P1_4=0;led_0=1;
	    for(m=0;m<soundtone*1;m++)
		P1_4=1;led_0=0;
	   } 
	 
	  }
  }
  
  void DELAY1(int b)//delay b X 10ms
{int  i,j,k;
 for (i=0;k<b;i++)
  for(j=0;j<10;j++)
   for(k=0;k<120;k++) ;
  
}
   

  void Scankey(void)                               //////////扫描键盘输入子程序,输出对应该键的歌曲///////
  {int keytmp, keydata;

int i,j;

      
                              /////扫描第一行矩阵///////////////

       scanline_1=0; //P2.3, line1 "0" active///////
      scanline_2=1;
      scanline_3=1;
      scanline_4=1;
      keytmp=~P2&0x07;
     switch(keytmp)      
      {
      case(1):
        keydata=1;z=1; break;
      case(2):
		keydata=2;z=2; break;
     case(4):		
        keydata=3; z=3;break;		
       }



scanline_1=1;           /////////扫描第二行矩阵/////////
scanline_2=0;//P2.4, line2 "0" active
scanline_3=1;
scanline_4=1;
keytmp=~P2&0x07;
switch(keytmp)
{
 case(1):
        keydata=4;z=4; break;
 case(2):
		keydata=5; z=5;break;
 case(4):		
        keydata=6;z=6; break;		
}












scanline_1=1;          //////扫描第三行矩阵////////
scanline_2=1;
scanline_3=0;//P2.5, line3 "0" active
scanline_4=1;
keytmp=~P2&0x07;
switch(keytmp)
{
 case(1):
        keydata=7; z=7;break;
 case(2):
		keydata=8; z=8;break;
 case(4):		
        keydata=9; z=9;break;		
}












scanline_1=1; ////////////////扫描第四行矩阵///////////////////
scanline_2=1;
scanline_3=1;
scanline_4=0;//P2.6, line4 "0" active
keytmp=~P2&0x07;
switch(keytmp)
{
 case(1):
        keydata=10; break;
 case(2):
		keydata=0; break;
 case(4):		
        keydata=11; break;		
}




/////////////////////////
 
  x=keydata;              ////////调用对应的歌曲函数
  switch(x)
  {case(1):Music1();break;
   case(2):Music2();break;
   case(3):Music3();break;
   case(4):Music1();break;
   case(5):Music2();break;
   case(6):Music3();break;
   case(7):Music1();break;
   case(8):Music2();break;
   case(9):Music3();break;
   case(0):for(j=0;j<17;j++)
            {P1_4=0;DELAY1(1);
            P1_4=1;DELAY1(1);
			} minuter=0,sec=0;break;
   case(10):for(j=0;j<17;j++)
            {P1_4=0;DELAY1(1);
            P1_4=1;DELAY1(1);
		      };led_0=1;break;
   case(11):for(j=0;j<17;j++)
            {P1_4=0;DELAY1(1);
            P1_4=1;DELAY1(1);
			};led_0=0;break;
   case(13):P1_4=0;break;
  }
  
 
keydata=13;//////////////////使停止播放歌曲/////////
}



///////////////////////ms
void Init_cpu(void)
{

 P1         =   0x00;

 TMOD=0x10 ;  /*设置定时器1工作于模式1*/

 minuter=0x00;     /*设置分的初值为0*/
 sec=0x00;     /*设置秒的初值为0*/
  ET1=1 ;     /*  开T1中断*/
  EA=1  ;     /*开CPU中断*/
  TH1=0x3C;   /*设初值*/
  TL1=0xB0;
  TR1=1;    /*开定时器1*/
 }
 void time1(void) interrupt 3
 {
     count++;
   if(count==10)
   {
    count=0;
    sec++;
   }

   count1=sec%10;  /*表示秒的个位数*/
   count2=sec/10;  /*表示秒的十位数*/
   if(sec==60)      /*达到60秒,分+1,同时把秒置0*/
   {switch(z)
     {case(1):Music1();break;           /////////由z的值判断每分钟响一次的提示音//////////
	 case(2):Music2();break;
	 case(3):Music3();break;
	 case(4):Music1();break;
	 case(5):Music2();break;
	 case(6):Music3();break;
	 case(7):Music1();break;
	 case(8):Music2();break;
	 case(9):Music3();break;
	 default:Music1();break;}
    sec=0;
    minuter++;
    }
    count3=minuter%10; /*表示分的个位数*/
    count4=minuter/10;/*表示分的十位数*/
    if(minuter==60)   /*达到60分,把分置0*/
    {minuter=0;
	
	
	Music2();}
	
    TR1=0;
    TH1=0x3C;   /*重设初值*/
    TL1=0xB0;
    Disp_sparkle();/*显示分秒的值*/
    TR1=1;
 }
 void  DectoLED(unsigned count1)
  {
    switch (count1)
   {
    case 0: P0 = 0x3f;break;
    case 1: P0 = 0x06;break;
    case 2: P0 = 0x5b;break;
    case 3: P0 = 0x4f;break;
    case 4: P0 = 0x66;break;
    case 5: P0 = 0x6d;break;
    case 6: P0 = 0x7d;break;
    case 7: P0 = 0x07;break;
    case 8: P0 = 0x7f;break;
    case 9: P0 = 0x6f;break;
    default:break;
    }
   }
   void Delay(unsigned int t)  /*延时*/
{
  unsigned char i,j,k;
  for(i=0;i<t;i++)
    for(j=0;j<5;j++)
	  for(k=0;k<110;k++);

}
void Disp_sparkle(void)//闪烁显示,num为待显示的字符 loca为数码管位置
{
  DectoLED(count1);
   led1_select = 1;
   Delay(2);
   led1_select =0;
  DectoLED(count2);
   led2_select = 1;
   Delay(2);
   led2_select = 0;
  DectoLED(count3);
   led3_select = 1;
   Delay(2);
   led3_select = 0;
  DectoLED(count4);
   led4_select = 1;
   Delay(2);
   led4_select = 0;
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -