📄 text1.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 + -