📄 yinyue.c
字号:
/*************************************************/
/******** ********/
/******** 北京交通大学 ********/
/******** 理学院 ********/
/******** 05思源班 ********/
/******** 吴佳欣 ********/
/******** 学号:05291254 ********/
/******** ********/
/*************************************************/
#include<reg52.h>//寄存器定义头文件;
//#include<AT89x52.h>
#define LH1 0xf2
#define LL1 0x42
#define LH2 0xf3
#define LL2 0xc1
#define LH3 0xf5
#define LL3 0x17
#define LH4 0xf6
#define LL4 0x04
//#define LH5 0xf6
#define LL5 0xd9
#define LH6 0xf7
#define LL6 0xd1
#define LH7 0xf8
#define LL7 0xb6
#define DH1 0xf9
#define DL1 0x16
#define DH2 0xfa
#define DL2 0x00
//#define DH3 0xfa
#define DL3 0x8a
//#define DH4 0xfa
#define DL4 0xd8
#define DH5 0xfb
#define DL5 0x68
//#define DH6 0xfb
#define DL6 0xf0
#define DH7 0xfc
#define DL7 0x48
//#define HH1 0xfc
#define HL1 0x83
#define HH2 0xfd
#define HL2 0x00
//#define HH3 0xfd
#define HL3 0x45
//#define HH4 0xfd
#define HL4 0x6e
//#define HH5 0xfd
#define HL5 0xb4
#define HH6 0xfe
#define HL6 0x0a
//#define HH7 0xfe
#define HL7 0x2e
void gequ();
void jianpan();
void luyin();
void bofang();
void jianpanluyin();
void model1();
void model2();
void model3();
void gequ1();
void gequ2();
void gequ3();
void k11();
void k12();
void k13();
void k14();
void k21();
void k22();
void k23();
void k31();
void k32();
void k33();
void k34();
void k41();
void k42();
void k43();
void k51();
void k52();
void k53();
void k54();
void k61();
void k62();
void k63();
void L11();
void L12();
void L13();
void L14();
void L21();
void L22();
void L23();
void L31();
void L32();
void L33();
void L34();
void L41();
void L42();
void L43();
void L51();
void L52();
void L53();
void L54();
void L61();
void L62();
void L63();
////////////////////////////1 2 3 4 5 6 7
code unsigned char table[]={LH1,LL1,LH2,LL2,LH3,LL3,LH4,LL4,LH4,LL5,LH6,LL6,LH7,LL7,
DH1,DL1,DH2,DL2,DH2,DL3,DH2,DL4,DH5,DL5,DH5,DL6,DH7,DL7,
DH7,HL1,HH2,HL2,HH2,HL3,HH2,HL4,HH2,HL5,HH6,HL6,HH6,HL7};
char *plu;
char *pdeng;
unsigned char tablelu[30];
unsigned char tabledeng[30];
int lengthlu;
int lengthdeng;
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
sbit P1_2 = 0x92;
sbit P1_3 = 0x93;
sbit P1_4 = 0x94;
sbit P1_5 = 0x95;
sbit P1_6 = 0x96;
sbit P1_7 = 0x97;
sbit P2_0 = 0xA0;
sbit P2_1 = 0xA1;
sbit P2_2 = 0xA2;
sbit P2_3 = 0xA3;
sbit P2_4 = 0xA4;
sbit P2_5 = 0xA5;
sbit P2_6 = 0xA6;
sbit P2_7 = 0xA7;
sbit P3_0 = 0xB0;
sbit P3_1 = 0xB1;
sbit P3_2 = 0xB2;
sbit P3_3 = 0xB3;
sbit P3_4 = 0xB4;
sbit P3_5 = 0xB5;
sbit P3_6 = 0xB6;
sbit P3_7 = 0xB7;
/*************************************************/
void main()
{
int TMOD=0x11;//T0、T1工作在方式1;
int ET0=1;
int ET1=1;
int EA=1;
int TR0=0;
int TR1=0;
do//模式选择,分为播放歌曲和电子琴两个模式,如果没有选择,继续判断;
{
P0=0xff;//P0口全部置高电平;
P1=0xff;//P1口全部置高电平;
P2=0x00;//亮灯;
P3=0x00;
P0_1=0;
if(P1_3==0)//判断是否放歌曲;
{
int j;
for(j=0;j<=23000;j=j+1)//消抖延时循环;
{
}
if(P1_3==0)
gequ();//选择了播放歌曲模式;
}
P0=0xff;
P1=0xff;
P0_3=0;
if(P1_3==0)//判断是否扫描键盘;
{
int j;
for(j=0;j<=23000;j=j+1)
{
}
if(P1_3==0)
jianpan();//选择了电子琴方式;
}
P0=0xff;
P1=0xff;
P0_5=0;
if(P1_3==0)//判断是否扫描键盘;
{
int j;
for(j=0;j<=23000;j=j+1)
{
}
if(P1_3==0)
luyin();
}
}
while(1);
}
/*************************************************/
/****扫描键盘****/
void jianpan()
{
do//循环扫描键盘;
{
/***扫描第一行***/
P2=0xff;//灭灯;
P3=0xff;
P0=0xff;
P1=0xff;
P0_0=0;//把第一行赋值0,逐列判断;
if(P1_0==0)//判断是否是第一列的被按下,是则跳转,不是则继续判断;
k11();
if(P1_1==0)//判断第二列;
k12();
if(P1_2==0)//判断第三列;
k13();
if(P1_3==0)//判断第四列;
k14();
/***扫描第二行***/
P0=0xff;
P1=0xff;
P0_1=0;//把第2行赋值0;
if(P1_0==0)
k21();
if(P1_1==0)
k22();
if(P1_2==0)
k23();
/***扫描第三行***/
P0=0xff;
P1=0xff;
P0_2=0;//把第3行赋值0;
if(P1_0==0)
k31();
if(P1_1==0)
k32();
if(P1_2==0)
k33();
if(P1_3==0)
k34();
/***扫描第四行***/
P0=0xff;
P1=0xff;
P0_3=0;//把第4行赋值0;
if(P1_0==0)
k41();
if(P1_1==0)
k42();
if(P1_2==0)
k43();
/***扫描第五行***/
P0=0xff;
P1=0xff;
P0_4=0;//把第5行赋值0;
if(P1_0==0)
k51();
if(P1_1==0)
k52();
if(P1_2==0)
k53();
if(P1_3==0)
k54();
/***扫描第六行***/
P0=0xff;
P1=0xff;
P0_5=0;//把第6行赋值0;
if(P1_0==0)
k61();
if(P1_1==0)
k62();
if(P1_2==0)
k63();
}
while(1);
}
/*************************************************/
/*****按键响*****/
void k11()//播放低音do;
{
P3=0xe2;//显示"L1";
P2=0x9e;
do
{
TL0=LL1;//装载低音do频率初值;
TH0=LH1;
TR0=1;//启动T0;
while(!TF0);//当计时时间到时,TF0变为1,则停止计数;
P3_0=!P3_0;//P3_0翻转,实现输出规定频率的方波;
TF0=0;//清除标志位,准备下一次计数;
}
while(P1_0==0);//没有释放按键,继续播放;
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;//P3_0清"0",防止接蜂鸣器时继续发声,保证在接蜂鸣器时也静音;
}
void k12()//播放低音ra;
{
P3=0xe2;
P2=0x24;
do
{
TL0=LL2;//装载初值;
TH0=LH2;
TR0=1;
while(!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_1==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
void k13()//低音mi;
{
P3=0xe2;
P2=0x0c;
do
{
TL0=LL3;
TH0=LH3;
TR0=1;
while(!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_2==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
void k14()//低音fa;
{
P3=0xe2;
P2=0x98;
do
{
TL0=LL4;
TH0=LH4;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_3==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
/*****第二行*****/
void k21()//低音so;
{
P3=0xe2;
P2=0x48;
do
{
TL0=LL5;
TH0=LH4;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_0==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
void k22()//低音la;
{
P3=0xe2;
P2=0x40;
do
{
TL0=LL6;
TH0=LH6;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_1==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
void k23()//低音si;
{
P3=0xe2;
P2=0x1e;
do
{
TL0=LL7;
TH0=LH7;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_2==0);
P3_0=0;
P3=0xff;//灭灯;
P2=0xff;
}
/****第三行****/
void k31()//中音do;
{
P3=0x84;
P2=0x9e;
do
{
TL0=DL1;
TH0=DH1;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_0==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
void k32()//中音ra;
{
P3=0x84;
P2=0x24;
do
{
TL0=DL2;
TH0=DH2;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_1==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
void k33()//中音mi;
{
P3=0x84;
P2=0x0c;
do
{
TL0=DL3;
TH0=DH2;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_2==0);
P3_0=0;
P3=0xff;//灭灯;
P2=0xff;
}
void k34()//中音fa;
{
P3=0x84;
P2=0x98;
do
{
TL0=DL4;
TH0=DH2;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_3==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
/*****第四行*****/
void k41()//中音so;
{
P3=0x84;
P2=0x48;
do
{
TL0=DL5;
TH0=DH5;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_0==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
void k42()//中音la;
{
P3=0x84;
P2=0x40;
do
{
TL0=DL6;
TH0=DH5;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_1==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
void k43()//中音si;
{
P3=0x84;
P2=0x1e;
do
{
TL0=DL7;
TH0=DH7;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_2==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
/*****第五行*****/
void k51()//高音do;
{
P3=0x90;
P2=0x9e;
do
{
TL0=HL1;
TH0=DH7;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_0==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
void k52()//高音ra;
{
P3=0x90;
P2=0x24;
do
{
TL0=HL2;
TH0=HH2;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_1==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
void k53()//高音mi;
{
P3=0x90;
P2=0x0c;
do
{
TL0=HL3;
TH0=HH2;
TR0=1;
while (!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_2==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
void k54()//高音fa;
{
P3=0x90;
P2=0x98;
do
{
TL0=HL4;
TH0=HH2;
TR0=1;
while(!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_3==0);
P3=0xff;//灭灯;
P2=0xff;
P3_0=0;
}
/*****第六行*****/
void k61()//高音so;
{
P3=0x90;
P2=0x48;
do
{
TL0=HL5;
TH0=HH2;
TR0=1;
while(!TF0);
P3_0=!P3_0;
TF0=0;
}
while(P1_0==0);
P3=0xff;//灭灯;
P2=0xff;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -