资源简介
基于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
相关资源
- 基于51单片机的家庭安全防火防盗系统
- ADS1115的51单片机驱动
- 基于单片机的智能计算器
- 函数信号发生器c语言
- 51单片机用C语言取出奇偶校验位
- 51单片机C语言编程输出方波脉冲
- 51单片机-光立方-C语言
- 单片机电子琴设计用C语言编写
- 51单片机数码管显示万年历的程序
- 原创:51单片机操作ds18b20ds1302,lcd1
- 51单片机驱动步进电机(含电路图和
- 51单片机c语言4x4矩阵键盘实验详细操
- 51单片机-舵机控制C语言程序
- 《新概念51单片机C语言教程--入门提高
- 电子琴.zip
- 51单片机DIY制作:旋转LED数字显示电子
- DSM501A基于51单片机code
- 各种语言编写的pcm代码
- 51单片机-数码管时钟秒表
- 国密SM4加密解密51单片机版C源程序.
- 简易电子琴_proteus.rar
- 新概念51单片机C语言教程入门、提高
- 51单片机下oled显示ds18b20采集温度
- 电子密码锁设计
- 51单片机超声波测距小车.rar
- 基于51单片机可调电子时钟
- 51单片机测量转速
- 基于51单片机的12864液晶显示C语言源程
- 51单片机做简易计算器
- ADC0809与80C52单片机
评论
共有 条评论