目录

1 设计内容:

1.1 矩阵键盘代表琴键,实现至少8个音的弹奏,分别为1,2,3,4,5,6,7,i.

1.2 键按下时间的长短代表节拍的长短

1.3 用蜂鸣器发出声音

1.4 8*8led点阵动态显示音符高低(自用显示)

2 系统硬件设计

2.1 硬件组成

2.2 显示模块

2.3 按键模块

2.4 发音模块

3 系统主程序流程图

4 protues原理图

5 AD的pcb图

6 程序代码


1 设计内容:

1.1 矩阵键盘代表琴键,实现至少8个音的弹奏,分别为1,2,3,4,5,6,7,i.

1.2 键按下时间的长短代表节拍的长短

1.3 用蜂鸣器发出声音

1.4 8*8led点阵动态显示音符高低(自用显示)

2 系统硬件设计

2.1 硬件组成

本次设计简易电子琴,通过STC89C52芯片最小控制电路,以16位矩阵电盘,蜂鸣器产生16个音阶,8×8点阵led显示音符高低,独立按键控制复位。将不同模块结合起来,实现简易电子琴的设计。

硬件以ST89C52芯片为核心,外部扩展4×4矩阵式键盘来模拟16个按键,用蜂鸣器来发声,外部扩展8*8LED点阵来动态显示音符的简谱。

基本引荐结构图如图2所示。

图2

2.2 显示模块

点阵屏的8个行引脚与单片机的P0口相连并且接上拉电阻;而点阵的8个列引脚则直接与单片机的P2口相连。

显示模块的电路图如图2.1所示。

2.3 按键模块

16位矩阵键盘,通过P1口控制音阶的产生和led点阵显示,按下相应的的键产生设定的声音和点亮对应的led点阵屏,按键模块的电路图如图2.3所示。

图2.3

2.4 发音模块

使用无源蜂鸣器,通过内部程序产生不同频率的方波,使蜂鸣器产生16个基本的音阶,16个按键分别是中音和高音的Do,Re,Mi,Fa,So,La,Si,Do.蜂鸣器与P3^6相接,电路图如图2.4所示。

图2.4

3 系统主程序流程图

4 protues原理图

5 AD的pcb图

6 程序代码

#include  #include#include//#define PA XBYTE[0xff7c]//#define PB XBYTE[0xff7d]//#define PC XBYTE[0xff7e]#define CTRL XBYTE[0xff7f]#define temp P1#define uchar unsigned charuchar code Table_of_Digits[] = { //8*8led点阵段码 ,1~f 0xFF,0xFF,0xF9,0xFB,0xFB,0xFB,0xF1,0xFF,/*"1",0*/0xFF,0xFF,0xF8,0xFA,0xFD,0xFE,0xF8,0xFF,/*"2",1*/0xFF,0xFF,0xF8,0xFB,0xFD,0xFB,0xF8,0xFF,/*"3",2*/0xFF,0xFF,0xFB,0xF9,0xFA,0xF0,0xF1,0xFF,/*"4",3*/0xFF,0xFF,0xF8,0xF8,0xFB,0xFB,0xF8,0xFF,/*"5",4*/0xFF,0xFF,0xF9,0xF8,0xFA,0xFA,0xF8,0xFF,/*"6",5*/0xFF,0xFF,0xF9,0xFB,0xFB,0xFB,0xFB,0xFF,/*"7",6*/0xFF,0xFF,0xF8,0xFA,0xFD,0xFA,0xF8,0xFF,/*"8",7*/0xFF,0xFF,0xF8,0xFA,0xF8,0xFB,0xFC,0xFF,/*"9",8*/0xFF,0xFF,0xFF,0xF8,0xFB,0xF8,0xF0,0xFF,/*"a",0*/0xFF,0xFD,0xFD,0xF9,0xF9,0xF9,0xF9,0xFF,/*"b",1*/0xFF,0xFF,0xFF,0xF9,0xFE,0xFE,0xF8,0xFF,/*"c",2*/0xFF,0xF9,0xFB,0xF8,0xFA,0xFA,0xF8,0xFF,/*"d",3*/0xFF,0xFF,0xFF,0xF9,0xF9,0xF9,0xF9,0xFF,/*"e",4*/0xFF,0xF9,0xFD,0xF8,0xFD,0xFD,0xF8,0xFF,/*"f",5*/};void delay(unsigned int z); //延时函数,参数为非负整型,延时1ms void display( int yin) ;//led显示函数,参数为整型,void function1 (void) ; //该函数用于主函数中的按键发音 和点阵显示 int keyscan();//键盘扫描并返回键值 unsigned int pin[]={64580,64684,64777,64820,64898,64985,65030,65058,65110,65157,65178,65217,65252,65265,65283,65290};//16个音阶简谱码(T值) unsigned int syin[16]={0}; //存储16音阶 sbit P36=P3^6; //beep蜂鸣器引脚 int yin,i;unsigned poe;//用于存储按键扫描函数返回的键值unsigned char key_num; main() //" />