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

📄 电子琴.c

📁 基于C51的电子琴设计
💻 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 + -