• 大小: 38KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-28
  • 语言: C/C++
  • 标签: 51单片机  电子琴  

资源简介

基于51单片机 ,用C语言编程, 矩阵键盘 ,演奏曲子,即实现电子琴功能。并且可以通过LED阵显示音阶

资源截图

代码片段和文件信息

#include 
#include 
#define uchar unsigned char
#define uint unsigned int

sbit buzzer=P1^5;
sbit DIN=P2^0;
sbit CS=P2^1;
sbit CLK=P2^2;

unsigned char keys;
unsigned char key;
unsigned char mus;
unsigned char ch;
unsigned char ch1ch2;
unsigned char flag;
unsigned int choose=1;
unsigned int flag_start;

/*声明音阶数组 Do Re Mi Fa So La Si Do_H*/
unsigned char code tone[8]={115102918677686157};

uchar code disp1[8][8]={
{0x000x000x000x000x000x000x000x80}//Do
{0x000x000x000x000x000x000x400x40}//Re
{0x000x000x000x000x000x200x200x20}//Mi
{0x000x000x000x000x100x100x100x10}//Fa
{0x000x000x000x080x080x080x080x08}//So
{0x000x000x040x040x040x040x040x04}//La
{0x000x020x020x020x020x020x020x02}//Si
{0x010x010x010x010x010x010x010x01}//Do_H*
};
//------小星星-----
uchar code music1[42]={
0x770x770xbb0xbb0xdb0xdb0xbb
0x7b0x7b0xd70xd70xb70xb70x77
0xbb0xbb0x7b0x7b0xd70xd70xb7
0xbb0xbb0x7b0x7b0xd70xd70xb7
0x770x770xbb0xbb0xdb0xdb0xbb
0x7b0x7b0xd70xd70xb70xb70x77
};
//------我爱我的幼儿园-----
uchar code music2[28]={
0x770xb70xd70x7b0xbb0xbb0xbb
0xbb0xbb0xd70x770xb70xd70xb7
0x770xb70xd70x7b0xbb0xbb0xbb
0xbb0xbb0xd70x770xb70xd70x77
};
//-----粉刷匠-----
uchar code music3[48]={
0xbb0xd70xbb0xd70xbb0xd70x77
0xb70x7b0xd70xb70xbb
0xbb0xd70xbb0xd70xbb0xd70x77
0xb70x7b0xd70xb70x77
0xb70xb70x7b0x7b0xd70x770xbb
0xb70x7b0xd70xb70xbb
0xbb0xd70xbb0xd70xbb0xd70x77
0xb70x7b0xd70xb70x77
};

void display(unsigned char);
void sound(int);
void delay(int);
uchar keyscan(void);
void writebyte(unsigned char);
void write_MAX7219(unsigned charunsigned char);
void init();
void UART_init();
void UART_SER (void);
void sing();
void sing_1();
void sing_2();

//--------主程序--------
void main()
{
//  uchar j;
//  uchar key_1key_2;
  UART_init();
  while(1)
  {
    key=keyscan();
sing();
if(flag)
{
  sing_2();
  flag=0;
}
  }
}

//--------发声函数------
void sound(int x)
{
  int i;
  for(i=0;i<100;i++)
  {
    buzzer=0;
delay(tone[x]);
buzzer=1;
delay(tone[x]);
  }
}

//-------延时函数--------
void delay(int x)
{
  int ij;
  for(i=0;i  for(j=0;j<1;j++);
}

//------矩阵键盘---------
uchar keyscan(void)
{
  uchar cord_hcord_l;
  P0=0x0f;
  cord_h=P0&0x0f;
  if(cord_h!=0x0f)
  {
    delay(200);
if(cord_h!=0x0f)
{
  cord_h=P0&0x0f;
  P0=cord_h|0xf0;
  cord_l=P0&0xf0;
  return(cord_h+cord_l);
}
  }
  return(0xff);
}

//-------点阵LED-------
void writebyte(uchar sj)
{
  uchar i;
  CS=0;
  for(i=0;i<8;i++)
  {
    CLK=0;
DIN=sj&0x80;
sj=sj<<1;
CLK=1;
  }
}

void write_MAX7219(uchar addressuchar date)
{
  CS=0;
  writebyte(address);
  writebyte(date);
  CS=1;
}

void init()
{
  write_MAX7219(0x090x00);
  write_MAX7219(0x0a0x01);
  write_MAX7219(0

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-09-05 12:44  单片机课程设计\
     文件        8232  2016-09-08 01:27  单片机课程设计\code.c
     文件       20034  2016-09-08 01:24  单片机课程设计\code.LST
     文件       22347  2016-09-08 01:24  单片机课程设计\code.OBJ
     文件          34  2016-09-06 23:43  单片机课程设计\code.__i
     文件       18258  2016-09-08 01:24  单片机课程设计\piano
     文件        5532  2016-09-08 01:24  单片机课程设计\piano.hex
     文件          41  2016-09-08 01:24  单片机课程设计\piano.lnp
     文件       24036  2016-09-08 01:24  单片机课程设计\piano.M51
     文件         175  2016-09-08 13:51  单片机课程设计\piano.plg
     文件       70648  2017-09-05 12:44  单片机课程设计\piano.uvgui.yours13
     文件        5965  2017-09-05 12:44  单片机课程设计\piano.uvopt
     文件       13856  2017-09-05 12:44  单片机课程设计\piano.uvproj
     文件        1229  2016-09-07 20:15  单片机课程设计\piano_Opt.Bak

评论

共有 条评论