📄 电子琴.c
字号:
#include<reg52.h>
unsigned int code tab[]={64400,
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178,65217,65252,65283};
sbit p17=P1^7;
unsigned char pTH0;
unsigned char pTL0;
unsigned char jTH1;
unsigned char jTL1;
unsigned char k;
void sys_Init() //系统初始化
{
TMOD = 0x11; //定时器0 方式1
TH0=0xFF;
TL0=0xF6;
ET0 = 1; //允许定时器0中断
ET1 = 1; //允许定时器1中断
EX0 = 1; //外中断0开启
EX1 = 1;
IT0 = 1; //下降沿触发
IT1 = 1;
EA = 1;
}
void delay1(unsigned char m)
{
unsigned char i,j;
for(i=0;i<m;i++)
for(j=0;j<20;j++);
}
void getch()
{
unsigned char X,Y,Z;
P2=0xff; //P2口的所有端口置高电平
P2=0x0f; //行置1
if(P2!=0x0f) //可能有键按下
{
delay1(10); //去除按键抖动
if(P2!=0x0f) //确实有键按下
{
X=P2; //保存P2的值
P2=0xf0; //列置1
Y=P2;
Z=X|Y; //取键盘值
switch(Z)
{
case 0x77: k=0; break;
case 0x7b: k=1; break;
case 0x7d: k=2; break;
case 0x7e: k=3; break;
case 0xb7: k=4; break;
case 0xbb: k=5; break;
case 0xbd: k=6; break;
case 0xbe: k=7; break;
case 0xd7: k=8; break;
case 0xdb: k=9; break;
case 0xdd: k=10;break;
case 0xde: k=11;break;
case 0xe7: k=12;break;
case 0xeb: k=13;break;
case 0xed: k=14;break;
case 0xee: k=15;break;
}
pTH0=tab[k]/256;
pTL0=tab[k]%256;
TR0=1;
while(P2!=0xf0);TR0=0;p17=1;//检测按键是否弹起
}
}
}
void main()
{
sys_Init();
while(1)
{
getch();
}
}
void Timer0() interrupt 1
{
TH0=pTH0;
TL0=pTL0;
p17=~p17;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -