仿真开始后,8*8点阵先依次显示牛、大、哥、生、日、快、乐,然后蜂鸣器播放祝你生日快乐的曲子。
PS:电子琴所要播放的乐曲,可以从网上找到相应的乐谱,然后从我所上传附件里的软件输入乐谱得到电子琴所需要的十六进制数组。
仿真图如下:
主程序代码如下:
#include<reg51.h>
#include "SoundPlay.h"
#define u8 unsigned char //宏定义
#define u16 unsigned int
//void delay_1ms(u16 k)
//{
// u16 i,j;
// for(i=0;i<k;i++)
// for(j=0;j<120;j++);
//}
void delay(u16 i) //延时函数
{
u16 k;
for(k=0;k<i;k++);
}
//***************************************Music********************************************
u8 Music_Code[]={ 0x0F,0x03, 0x0F,0x03, 0x10,0x02, 0x0F,0x02, 0x15,0x02,
0x11,0x01, 0x0F,0x03, 0x0F,0x03, 0x10,0x02, 0x0F,0x02,
0x16,0x02, 0x15,0x01, 0x0F,0x03, 0x0F,0x03, 0x19,0x02,
0x17,0x02, 0x15,0x02, 0x11,0x02, 0x10,0x02, 0x18,0x03,
0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x02, 0x15,0x02,
0x00,0x00 }; //生日快乐歌曲
//****************************************************************************************
//***************************************LED8*8********************************************
u8 code led[7][8]={{0x18,0x3e,0x48,0x7f,0x08,0x08,0x08,0x08}, //牛
{0x08,0x08,0x7f,0x08,0x08,0x14,0x22,0x41}, //大
{0x3e,0x1a,0x1a,0x7f,0x1a,0x1a,0x06,0x02}, //哥
{0x08,0x28,0x7f,0x88,0x1c,0x08,0x08,0x7f}, //生
{0x00,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e}, //日
{0x48,0x5e,0xea,0x7f,0x48,0x4c,0x52,0x61}, //快
{0x18,0x28,0x48,0x7e,0x08,0x08,0x3a,0x49}, //乐
};//定义二维数组,依次显示牛、大、哥、生、日、快、乐
//****************************************************************************************
void main()
{
u8 w;
u16 j,k,m;
InitialSound();
while(1)
{
for(k=0;k<7;k++) //第一维下标取值范围为牛、大、哥、生、日、快、乐,7个字符
{for(m=0;m<200;m++) //每个字符扫描显示200次,控制每个字符显示汉字
{ w=0x01; //行初值
for(j=0;j<8;j++) //第二维下标取值范围为0~7,控制8行
{P3=w; //行控制
P0=~led[k][j]; //列控制,将指定数组元素取反后赋值给P0口,显示码
delay(60);
w<<=1; //行变量左移指向下一行
P0=0xff;
}
}
}
Play(Music_Code,0,3,360); //播放音乐
delay(100000);
}
}
88点阵和电子琴.zip
(279.76 KB, 下载次数: 118)
|