📄 dianzhiqin.c
字号:
#include <reg52.h>
sbit P2_0=P2^0;
sbit q3=P3^3;
unsigned char i,j,m;
void delay()
{
for(i=0;i<255;i++)
{
for(j=0;j<255;j++);
}
}
void delay1()
{
for(i=0;i<255;i++);
}
int delayfayin(int t)
{
int i1,j1;
for(i1=0;i1<t;i1++)
for(j1=0;j1<200;j1++);
}
//各个音符的方波的计数初值
void fangbof(int y)
{
switch(y)
{
case 0: //停止
P2_0=1 ;
break;
case 1: //1
TH0=0x4d;
TL0=0xf7;
break;
case 2: //2
TH0=0x24;
TL0=0xf8;
break;
case 3:
TH0=0xfa;
TL0=0x12;
break;
case 4:
TH0=0xfa;
TL0=0x67;
break;
case 5:
TH0=0xfb;
TL0=0x03;
break;
case 6:
TH0=0xfb;
TL0=0x8f;
break;
case 7:
TH0=0xfc;
TL0=0x0b;
break;
}
}
void dyf(int x)
{
int m;
fangbof(x);
switch(x)
{
case 0:
TR0=0; //0停止计数
break;
default:
TR0=1; //否则计数
break;
}
m=1;
while(m)
{
delayfayin(100);
m=0;
}
TR0=0;
P2_0=1;
}
main()
{
TMOD=0x01;
EA=1;ET0=1;
while(1)
{
P1=0xFF;
P2=0xFF;
q3=0;
while(P2==0xFF);
m=P2&0xFC;
if(m==0x7C) //按一键 显示一
{
delay1(); //短时沿去抖动
if(m==0x7C)
{
P2=0x7F;
P0=0xF9;
dyf(1);
delay();
P2=0xFF;
P0=0xFF;
}
}
if(m==0xBC) //按二键 显示二
{
delay1(); //短时沿去抖动
if(m==0xBC)
{
P2=0xBF;
P0=0xA4;
dyf(2);
delay();
P2=0xFF;
P0=0xFF;
}
}
if(m==0xDC) //按三键 显示三
{
delay1(); //短时沿去抖动
if(m==0xDC)
{
P2=0xDF;
P0=0xB0;
dyf(3);
delay();
P2=0xFF;
P0=0xFF;
}
}
if(m==0xEC) //按四键 显示四
{
delay1(); //短时沿去抖动
if(m==0xEC)
{
P2=0xEF;
P0=0x99;
dyf(4);
delay();
P2=0xFF;
P0=0xFF;
}
}
if(m==0xF4) //按五键 显示五
{
delay1(); //短时沿去抖动
if(m==0xF4)
{
P2=0xF7;
P0=0x92;
dyf(5);
delay();
P2=0xFF;
P0=0xFF;
}
}
if(m==0xF8) //按六键 显示六
{
delay1(); //短时沿去抖动
if(m==0xF8)
{
P2=0xFB;
P0=0x82;
dyf(6);
delay();
P2=0xFF;
P0=0xFF;
}
}
}
}
void mop(void) interrupt 1
{
P2_0=~P2_0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -